Semantic Kernel पेमेंट एकत्रीकरण.
Semantic Kernel पॅकेजची आवश्यकता नाही. वास्तविक blockchain0x क्लायंटला KernelFunction (Python किंवा Java) मध्ये लपेटा, किंवा C# KernelFunction मधून REST API कॉल करा. दोन्ही परिस्थितीत एजंट Base वर USDC हलवतो.
Semantic Kernel पॅकेज नाही. Python मध्ये तुम्ही वास्तविक blockchain0x क्लायंटला @kernel_function सह सजवलेल्या पद्धतीत लपवता; C# मध्ये, जिथे .NET SDK पाठवले जात नाही, तिथे [KernelFunction] थेट REST API ला कॉल करतो. तुमच्या कर्नेलवर नोंदवा, FunctionChoiceBehavior ला Auto सेट करा, आणि एजंट Base वर USDC हलवू शकतो. पाठवलेले कोर SDKs Node, Python, Ruby, Go, आणि JVM आहेत.
एकमेव उद्यम-गुणवत्तेचे .NET एजंट फ्रेमवर्क.
जर तुमचा स्टॅक Microsoft-आकाराचा असेल (Azure, .NET, SQL Server, Teams, Copilot Studio), तर Semantic Kernel जवळजवळ निश्चितपणे योग्य एजंट फ्रेमवर्क आहे. हे Microsoft द्वारे तयार केले आहे, Azure OpenAI, AKS, आणि Entra सह एकत्रित करते, आणि यामध्ये .NET, Python, आणि Java मध्ये पहिल्या श्रेणीचे समर्थन आहे, ज्यामध्ये इतर कोणताही फ्रेमवर्क जुळत नाही. आणि हे तुम्हाला आवश्यक गोष्ट आधीच देते: एक KernelFunction फक्त एक पद्धत आहे, त्यामुळे पेमेंट्समध्ये वायरींग करणे ही एक पद्धत आहे जी तुम्ही लिहितात, न की एक पॅकेज ज्याची तुम्हाला वाट पाहावी लागते.
याच कारणास्तव Semantic Kernel अडॅप्टर स्थापित करण्यासाठी नाही. Python आणि Java मध्ये तुम्ही वास्तविक blockchain0x SDK ला KernelFunction मध्ये लपवता; C# मध्ये, जिथे कोणताही .NET SDK अद्याप पाठवला जात नाही, KernelFunction REST API ला HttpClient सह थेट कॉल करतो. तुम्ही वाक्यात्मक एर्गोनॉमिक्स ठेवता - सजवलेले पद्धती, async, अॅट्रिब्यूट-आधारित पॅरामीटर सत्यापन - आणि ट्रॅक करण्यासाठी कोणतीही अडॅप्टर आवृत्ती नाही. आज अस्तित्वात असलेले मुख्य SDKs म्हणजे Node, Python, Ruby, Go, आणि JVM.
Semantic Kernel स्थापित करा आणि, Python मध्ये, मुख्य SDK.
जोडण्यासाठी blockchain0x Semantic Kernel पॅकेज नाही. Python Semantic Kernel सह वास्तविक blockchain0x SDK स्थापित करतो; C# Microsoft.SemanticKernel स्थापित करतो आणि अंतर्निहित HttpClient सह REST API ला कॉल करतो. Java Java साठी Semantic Kernel वापरतो आणि com.blockchain0x:sdk-jvm SDK.
pip install semantic-kernel blockchain0xdotnet add package Microsoft.SemanticKernelBLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet BLOCKCHAIN0X_API_KEY=sk_test_... # same key, the name the .NET REST example reads OPENAI_API_KEY=sk-...
BLOCKCHAIN0X_API_KEY (Python client हे वाचतो) ही तुमच्या dashboard मधील sk_test_ testnet किंवा sk_live_ mainnet key आहे; C# REST example त्याच मूल्याला BLOCKCHAIN0X_API_KEY मधून वाचतो. OPENAI_API_KEY (किंवा Azure-hosted models साठी AZURE_OPENAI_*) ही तुमची LLM key आहे. webhook handler ला अतिरिक्तपणे BLOCKCHAIN0X_WEBHOOK_SECRET देखील लागतो.
एक वॉलेट KernelFunction, Python आणि C# मध्ये.
Python वास्तविक blockchain0x क्लायंटला @kernel_function ने सजवलेल्या पद्धतीत लपवते. C#, जिथे कोणताही .NET SDK शिप होत नाही, एक [KernelFunction] उघड करते जे POST /v1/payments थेट HttpClient सह कॉल करते. दोन्ही वॉलेट म्हणून Kernel वर नोंदणी करतात.send_usdc; फक्त आजुबाजूचा समारंभ वेगळा आहे.
from semantic_kernel import Kernel from semantic_kernel.functions import kernel_function from blockchain0x import Client blockchain0x = Client() # reads BLOCKCHAIN0X_API_KEY from the environment class WalletPlugin: @kernel_function(description="Send a USDC payment from an agent wallet.") def send_usdc(self, agent_id: str, to: str, amount_wei: str) -> str: # amount_wei is USDC base units (6 decimals): "10000" = 0.01 USDC return str( blockchain0x.payments.create(body={"agentId": agent_id, "to": to, "amountWei": amount_wei}) ) kernel = Kernel() kernel.add_plugin(WalletPlugin(), plugin_name="Wallet") # Add your chat service, then let the model call Wallet.send_usdc.
using System.ComponentModel;
using System.Net.Http.Json;
using Microsoft.SemanticKernel;
// There is no .NET SDK, so a C# KernelFunction calls the REST API directly.
public class WalletPlugin
{
private static readonly HttpClient Http = new()
{
BaseAddress = new Uri("https://api.blockchain0x.com"),
};
[KernelFunction, Description("Send a USDC payment from an agent wallet. amountWei is USDC base units (6 decimals).")]
public async Task<string> SendUsdc(string agentId, string to, string amountWei)
{
Http.DefaultRequestHeaders.Authorization =
new("Bearer", Environment.GetEnvironmentVariable("BLOCKCHAIN0X_API_KEY"));
var res = await Http.PostAsJsonAsync("/v1/payments", new { agentId, to, amountWei });
return await res.Content.ReadAsStringAsync();
}
}
// builder.Plugins.AddFromType<WalletPlugin>("Wallet");Register the function on the kernel, set FunctionChoiceBehavior to Auto, and when the user's message implies a payment the model calls Wallet.send_usdc with the agent id, recipient, and amount. amountWei is base units, so 0.01 USDC is "10000". The Python path returns the SDK result; the C# path returns the REST response body.
भुगतान घटनांचे स्वागत करण्यासाठी ASP.NET Core किमान API.
Payment settle झाल्यावर Blockchain0x तुमच्या webhook URL वर signed event POST करते. तयार .NET verifier उपलब्ध नाही, त्यामुळे handler दस्तऐवजीकृत HMAC विरुद्ध स्वतः हाताने verify करतो - helper सुद्धा तेवढेच करेल. खाली .NET उदाहरण आहे; Python आणि Java त्यांच्या स्वतःच्या HMAC libraries वापरून त्याच प्रकारे verify करतात.
using System.Security.Cryptography;
using System.Text;
using Microsoft.AspNetCore.Builder;
var app = WebApplication.CreateBuilder(args).Build();
var secret = Environment.GetEnvironmentVariable("BLOCKCHAIN0X_WEBHOOK_SECRET")!;
app.MapPost("/webhooks/payment", async (HttpRequest req) =>
{
using var reader = new StreamReader(req.Body);
var raw = await reader.ReadToEndAsync(); // RAW body - verify before parsing
var sig = req.Headers["X-Blockchain0x-Signature"].ToString();
var ts = req.Headers["X-Blockchain0x-Timestamp"].ToString();
var parts = sig.Split(',').Select(p => p.Split('=', 2))
.Where(p => p.Length == 2).ToDictionary(p => p[0], p => p[1]);
var t = parts.GetValueOrDefault("t", ts);
var v1 = parts.GetValueOrDefault("v1", sig);
var want = Convert.ToHexString(new HMACSHA256(Encoding.UTF8.GetBytes(secret))
.ComputeHash(Encoding.UTF8.GetBytes($"{t}.{raw}"))).ToLowerInvariant();
var fresh = Math.Abs(DateTimeOffset.UtcNow.ToUnixTimeSeconds() - long.Parse(t)) <= 300;
if (!fresh || !CryptographicOperations.FixedTimeEquals(
Encoding.UTF8.GetBytes(want), Encoding.UTF8.GetBytes(v1)))
return Results.Unauthorized();
if (req.Headers["X-Blockchain0x-Event-Type"] == "payment.received")
await RunFollowupAsync(); // USDC landed - do the next step
return Results.Ok();
});
app.Run();अल्गोरिदम t.rawBody वर HMAC-SHA256 आहे, 300-सेकंद पुनरावृत्ती विंडो, आणि एक स्थिर-वेळ तुलना. सिग्नेचर intact राहण्यासाठी StreamReader द्वारे कच्चा शरीर वाचा; नंतर डीसिरियलाइझ करू नका. शिप केलेले इव्हेंट्स आहेत payment.received, payment.sent, wallet.deployed, आणि webhook.test. उत्पादनामध्ये वेबहुक बहुतेक वेळा एजंटसह डेटाबेस सामायिक करणाऱ्या स्वतंत्र ASP.NET Core सेवेसारखे चालते, त्यामुळे दोन्ही समन्वय साधू शकतात.
SDKs आणि REST पृष्ठभाग खुले आहेत. त्यांना वाचा.
Clone करण्यासाठी Semantic Kernel starter package नाही - वरचे recipes हीच integration आहेत. blockchain0x core SDKs (Node, Python, Ruby, Go) GitHub वर open source आहेत, आणि त्यांचे method surface तसेच C# example कॉल करते त्या REST routes चे दस्तऐवजीकरण docs मध्ये आहे.
docs.blockchain0x.com/docs/overviewSDK मधील method surface आणि REST routes यांचे दस्तऐवजीकरण the docs येथे आहे. Base Sepolia वर sk_test_ key ने सुरुवात करा, आणि KernelFunction अपेक्षेप्रमाणे काम करू लागल्यावर sk_live_ वर स्विच करा.
पाच Semantic Kernel-विशिष्ट जाळे टाळा.
Semantic Kernel चा प्लगइन मॉडेल स्वच्छ आहे पण यात क्रॉस-भाषा आणि वर्तन-डिफॉल्ट गोटचेस आहेत. त्यांना आधीच माहित असणे वेळ वाचवते.
कुठल्याही भाषेत Semantic Kernel पॅकेज नाही.
NuGet, PyPI, किंवा Maven अडॅप्टर नाही. पाठवलेले कोर SDKs Node, Python, Ruby, Go, आणि JVM आहेत - .NET नाही. म्हणून एक Python कर्नेल blockchain0x Python क्लायंटला @kernel_function मध्ये लपवतो, एक Java कर्नेल com.blockchain0x:sdk-jvm SDK वापरतो, आणि एक C# कर्नेल थेट KernelFunction (वरील दाखवलेले) मधून REST API ला कॉल करतो. तिन्ही काही ओळी आहेत.
FunctionChoiceBehavior ऑटो असावा
Semantic Kernel फक्त प्लगइन कार्ये कार्यान्वयन सेटिंग्जवर FunctionChoiceBehavior ऑटोवर सेट केल्यावरच कॉल करते. डिफॉल्ट None आहे, त्यामुळे मॉडेल कधीही तुमच्या वॉलेट कार्याला कॉल करत नाही, वापरकर्ता किती स्पष्टपणे विचारतो. जर एजंट कार्याकडे पूर्णपणे दुर्लक्ष करत असेल, तर हे प्रथम तपासा.
रक्कम USDC बेस युनिट्स आहेत, स्ट्रिंग्स म्हणून
The payments call takes amountWei: a string of USDC base units (6 decimals), so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the function argument as a string in any language. payments.create also does not retry by default and can answer 503 until the chain adapter is wired for your network - return a clear message rather than letting the agent loop.
एजंट्समध्ये प्लगइनचा व्याप्ती
फक्त खर्च अधिकार धारण करणार्या एजंटच्या कर्नलवर वॉलेट फंक्शन नोंदणी करा. प्लगइन जागतिक नाही - ज्याच्या कर्नलमध्ये ते नाही त्याला कॉल करता येणार नाही. पुनरावलोकन करणाऱ्या एजंटला वॉलेट फंक्शनशिवाय एक कर्नल द्या, किंवा प्रत्येक एजंटसाठी परवान्याच्या कार्यांना मर्यादा ठेवा, त्यामुळे पैसे एका भूमिकेत राहतात.
कच्च्या शरीराच्या विरोधात वेबहुक सत्यापित करा
कच्चा विनंती शरीर वाचा आणि डीसिरिअलायझिंग करण्यापूर्वी सत्यापित करा - HMAC अचूक बाइट्स कव्हर करते, म्हणून एक पार्स-नंतर-रीसिरिअलायझेशन राउंड ट्रिप ते तोडते. खालील .NET हँडलर दस्तऐवजीकरण केलेल्या अल्गोरिदमची अंमलबजावणी करतो: HMAC-SHA256 t.rawBody वर, 300-सेकंद विंडो, आणि एक स्थिर-वेळ तुलना. Python आणि Java त्यांच्या स्वतःच्या HMAC लायब्ररीसह समान पद्धतीने सत्यापित करतात.