Semantic Kernel भुगतान एकीकरण।
कोई Semantic Kernel पैकेज की आवश्यकता नहीं है। वास्तविक blockchain0x क्लाइंट को एक KernelFunction (Python या Java) में लपेटें, या C# KernelFunction से REST API को कॉल करें। किसी भी तरह से एजेंट USDC को Base पर स्थानांतरित करता है।
कोई Semantic Kernel पैकेज नहीं है। Python में आप असली blockchain0x क्लाइंट को @kernel_function से सजाए गए एक विधि में लपेटते हैं; C# में, जहां कोई .NET SDK नहीं भेजा जाता है, एक [KernelFunction] सीधे REST API को कॉल करता है। इसे अपने कर्नेल पर पंजीकृत करें, FunctionChoiceBehavior को Auto पर सेट करें, और एजेंट Base पर USDC को स्थानांतरित कर सकता है। भेजे गए कोर SDK हैं 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 बस एक विधि है, इसलिए भुगतान को जोड़ना एक विधि है जिसे आप लिखते हैं, न कि एक पैकेज जिसका आप इंतजार करते हैं।
यही कारण है कि स्थापित करने के लिए कोई सेमांटिक कर्नेल एडेप्टर नहीं है। पायथन और जावा में आप वास्तविक blockchain0x SDK को एक KernelFunction में लपेटते हैं; C# में, जहां कोई .NET SDK अभी तक नहीं है, KernelFunction सीधे HttpClient के साथ REST API को कॉल करता है। आप आदर्श इरगोनॉमिक्स बनाए रखते हैं - सजाए गए तरीके, असिंक्रोनस, विशेषता-आधारित पैरामीटर सत्यापन - और ट्रैक करने के लिए कोई एडेप्टर संस्करण नहीं है। आज मौजूद मुख्य 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 Semantic Kernel for Java और 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 वही value 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] को उजागर करता है जो HttpClient के साथ सीधे POST /v1/payments को कॉल करता है। दोनों वॉलेट.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।
जब एक भुगतान निपटता है, तो Blockchain0x आपके वेबहुक URL पर एक साइन किया हुआ इवेंट POST करता है। कोई भेजा गया .NET सत्यापनकर्ता नहीं है, इसलिए हैंडलर दस्तावेजित HMAC के खिलाफ हाथ से सत्यापित करता है - जो सहायक करेगा। नीचे .NET उदाहरण; Python और Java अपने HMAC पुस्तकालयों के साथ उसी तरह सत्यापित करते हैं।
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-सेकंड पुनःप्रसारण विंडो, और एक स्थायी-समय तुलना। सिग्नेचर को बरकरार रखने के लिए StreamReader के माध्यम से कच्चे शरीर को पढ़ें; फिर deserialized न करें। शिप किए गए इवेंट्स हैं payment.received, payment.sent, wallet.deployed, और webhook.test। उत्पादन में, वेबहुक अक्सर एक अलग ASP.NET कोर सेवा के रूप में चलता है जो एजेंट के साथ एक डेटाबेस साझा करता है ताकि दोनों समन्वयित हो सकें।
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 को call करता है, वे docs में documented हैं।
docs.blockchain0x.com/docs/overviewSDK method surface और REST routes the docs पर documented हैं. Base Sepolia के against एक sk_test_ key से शुरुआत करें, फिर जब KernelFunction अपेक्षा के अनुसार काम करे तो sk_live_ पर switch करें.
पांच Semantic Kernel-विशिष्ट जाल से बचें।
Semantic Kernel का प्लगइन मॉडल साफ है लेकिन इसमें क्रॉस-भाषा और व्यवहार-डिफ़ॉल्ट समस्याएँ हैं। इन्हें पहले से जानना समय बचाता है।
कोई Semantic Kernel पैकेज नहीं है, किसी भी भाषा में
कोई NuGet, PyPI, या Maven अडैप्टर नहीं है। भेजे गए कोर SDK हैं 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 पुस्तकालयों के साथ उसी तरह सत्यापित करते हैं।