আপনার AI এজেন্টে পেমেন্ট কীভাবে যোগ করবেন।
createClient থেকে @blockchain0x/node (অথবা Python ক্লায়েন্ট) দিয়ে একটি এজেন্ট তৈরি করুন, payments.create দিয়ে একটি USDC পেমেন্ট পাঠান এবং webhooks.verify দিয়ে স্বাক্ষরিত ওয়েবহুক যাচাই করুন। ব্যয় নিয়ন্ত্রণগুলি ড্যাশবোর্ডে সেট করা হয় এবং API এর মাধ্যমে শুধুমাত্র পড়ার জন্য। এজেন্ট কখনই সরাসরি প্রাইভেট কী স্পর্শ করে না। সাইন-আপ থেকে আপনার প্রথম USDC পেমেন্টে দশ মিনিটেরও কম সময়, TypeScript বা Python এ।
আপনি শুরু করার আগে।
- একটি Blockchain0x অ্যাকাউন্ট (ফ্রি সাইনআপ).
- ড্যাশবোর্ড থেকে একটি API কী (এই গাইডের জন্য একটি
sk_test_কী ব্যবহার করুন; আপনি পরেsk_live_এ পরিবর্তন করবেন)। - Node.js 20+ অথবা Python 3.11+ আপনার এজেন্ট রানটাইমে।
- যেকোনো ফ্রেমওয়ার্কে নির্মিত একটি এজেন্ট - LangChain, CrewAI, AutoGen, LlamaIndex, OpenAI Agents SDK, MCP, অথবা সাধারণ SDK কোড। নির্দেশনাগুলি ফ্রেমওয়ার্ক-নিরপেক্ষ।
- একটি HTTPS এন্ডপয়েন্ট যা পাবলিক ইন্টারনেট থেকে ওয়েবহুক গ্রহণ করতে পৌঁছানো যায় (উন্নয়নের জন্য ngrok বা একটি ডিপ্লয় প্রিভিউ ঠিক আছে)।
এজেন্ট প্রোফাইল তৈরি করুন।
এজেন্ট প্রোফাইল হল প্রতিটি পেমেন্টের ঠিকানা পরিচয় যা আপনার এজেন্ট পাঠায় বা গ্রহণ করে। এটি ওয়ালেটের ঠিকানা, পাবলিক পৃষ্ঠা, যাচাইকরণ ব্যাজ এবং (পরে) ব্যয় নীতি বহন করে। একটি যুক্তিযুক্ত এজেন্টের জন্য একটি তৈরি করুন।
import { createClient } from "@blockchain0x/node";
const client = createClient({ apiKey: process.env.BLOCKCHAIN0X_API_KEY! }); // sk_test_ / sk_live_
const agent = await client.agents.create({ name: "research-bot" });
console.log(agent.id); // "agt_..."
// Public page: https://wallet.blockchain0x.com/a/{slug}from blockchain0x import Client
client = Client() # reads BLOCKCHAIN0X_API_KEY from the environment
agent = client.agents.create(body={"name": "research-bot"})
print(agent["id"]) # "agt_..."
# Public page: https://wallet.blockchain0x.com/a/{slug}After this call, the agent has a public page at https://wallet.blockchain0x.com/a/<slug> that any counterparty (human or agent) can hover for verification info. See the agent payment identity glossary entry for what that page exposes.
একটি পেমেন্ট পাঠান।
payments.create sends USDC from the agent wallet. amountWei is base units (USDC has 6 decimals), so 0.01 USDC is the string "10000". The SDK auto-stamps an Idempotency-Key, and the call can return 503 until the chain adapter is wired for your network. To RECEIVE instead, settle an invoice you created in the dashboard with paymentRequests.settle - see the payment API page.
// Send a USDC payment from the agent wallet. amountWei is base units
// (USDC has 6 decimals): "10000" is 0.01 USDC. payments.create auto-stamps an
// Idempotency-Key and can return 503 until the chain adapter is wired.
const tx = await client.payments.create({
agentId: agent.id,
to: "0xRecipient",
amountWei: "10000",
});
console.log(tx); // the submitted transfer# amountWei is USDC base units (6 decimals): "10000" is 0.01 USDC.
tx = client.payments.create(body={
"agentId": agent["id"],
"to": "0xRecipient",
"amountWei": "10000",
})
print(tx) # the submitted transferওয়েবহুক পরিচালনা করুন।
ওয়েবহুকগুলি হল যে আপনি কীভাবে একটি পেমেন্ট নিষ্পত্তি হয়েছে তা জানতে পারেন। Node এ, @blockchain0x/node থেকে webhooks.verify HMAC চেক করে এবং একটি বৈষম্যযুক্ত ইউনিয়ন ফেরত দেয়; অন্যান্য ভাষায়, কাঁচা শরীরের উপর একই HMAC গণনা করুন। ইভেন্টের প্রকারে (inbound এর জন্য payment.received) শাখা করুন, দ্রুত 2xx প্রতিক্রিয়া দিন, এবং 2xx এর পিছনে কিছু ভারী কিউ করুন যাতে ডেলিভারি টাইম আউট না হয়।
import express from "express";
import { webhooks } from "@blockchain0x/node";
const app = express();
// Capture the RAW body. The HMAC is over the exact bytes on the wire.
app.use(express.raw({ type: "application/json" }));
app.post("/webhooks/payment", (req, res) => {
const result = webhooks.verify({
headers: req.headers,
rawBody: req.body, // Buffer, raw bytes
secret: process.env.BLOCKCHAIN0X_WEBHOOK_SECRET!,
});
if (!result.ok) return res.status(400).json({ code: result.code });
if (result.eventType === "payment.received") {
// USDC landed - deliver the work, fulfil the order, etc.
void deliver(result.eventId);
}
res.status(200).send("ok");
});import hmac, hashlib, os, time
from flask import Flask, request, abort
app = Flask(__name__)
SECRET = os.environ["BLOCKCHAIN0X_WEBHOOK_SECRET"].encode()
@app.post("/webhooks/payment")
def webhook():
raw = request.get_data() # RAW bytes - do not parse first
sig = request.headers.get("X-Blockchain0x-Signature", "")
ts = request.headers.get("X-Blockchain0x-Timestamp", "")
parts = dict(p.split("=", 1) for p in sig.split(",") if "=" in p)
t, v1 = parts.get("t", ts), parts.get("v1", sig)
want = hmac.new(SECRET, t.encode() + b"." + raw, hashlib.sha256).hexdigest()
if not hmac.compare_digest(want, v1) or abs(time.time() - int(t)) > 300:
abort(401)
if request.headers.get("X-Blockchain0x-Event-Type") == "payment.received":
deliver(request.get_json()) # USDC landed
return ("ok", 200)ড্যাশবোর্ডে খরচ নিয়ন্ত্রণ সেট করুন।
যদি আপনার এজেন্ট শুধুমাত্র গ্রহণ করে, তবে আপনি এটি বাদ দিতে পারেন। যদি এটি পেমেন্টও করে, তবে ড্যাশবোর্ডে একটি ব্যয় অনুমতি সেট করুন - একটি সময়ের জন্য একটি বরাদ্দ এবং একটি প্রতি-লেনদেন সীমা। এটি প্রতিটি পেমেন্টে ব্যাকএন্ড দ্বারা প্রয়োগ করা হয়, তাই এটি এজেন্ট-সাইড নিয়মগুলির তুলনায় প্রম্পট ইনজেকশন সহ্য করে। কোন API বা SDK কল নেই যা একটি অনুমতি পরিবর্তন করে (এজেন্টের নিজস্ব কী তার সীমা প্রসারিত করতে পারে না); API পড়ার জন্য-শুধু, তাই আপনার কোড বর্তমান মানগুলি প্রদর্শন বা পরিকল্পনা করতে আনতে পারে।
curl https://api.blockchain0x.com/v1/agents/agt_123/spend-permissions \
-H "Authorization: Bearer $BLOCKCHAIN0X_API_KEY"{
"allowance_wei": "5000000",
"per_tx_wei": "1000000",
"period_seconds": 86400,
"revoked_at": null
}বেস সেপোলিয়ায় পুরো প্রবাহ পরীক্ষা করুন।
sk_live_ কীতে পরিবর্তন করার আগে, sk_test_ দিয়ে সম্পূর্ণ পথটি শেষ থেকে শেষ পর্যন্ত চালান। একটি টেস্ট কী সবকিছু Base Sepolia-তে রাখে, যেখানে আপনি পাবলিক ফসেট থেকে ওয়ালেট তহবিল দেন এবং প্রতিক্রিয়া আকারগুলি লাইভের সাথে মেলে। কী প্রিফিক্সটি নেটওয়ার্কটি নির্বাচন করে, তাই একটি টেস্ট কী প্রধান নেটের তহবিল স্থানান্তর করতে পারে না।
তিনটি পরিস্থিতি অনুশীলন করুন: একটি সুখী-পথের পেমেন্ট যা payment.received চালু করে, একটি মিসড ডেলিভারি (ওয়েবহুকটি একটি মৃত URL এ নির্দেশ করুন, তারপর transactions.get দিয়ে লেনদেনটি আনুন), এবং একটি ওয়েবহুক পুনরায় চেষ্টা (প্রথমবার 500 ফেরত দিন, দ্বিতীয়বার 200, এবং নিশ্চিত করুন যে আপনার হ্যান্ডলার আইডেম্পোটেন্ট)। যখন তিনটি পরীক্ষায় পাস করে, কীটি পরিবর্তন করুন এবং পাঠান।
পাঁচটি ভুল যা দলের এক সপ্তাহের খরচ করে।
ওয়েবহুক স্বাক্ষর যাচাইকরণ এড়ানো
যদি আপনি /webhooks/payment এ কোন POST কে কর্তৃত্বপূর্ণ হিসেবে গ্রহণ করেন, তবে একজন আক্রমণকারী ভুয়া পেমেন্ট ইভেন্ট তৈরি করতে পারে এবং আপনার এজেন্টকে বিনামূল্যে কাজ সরবরাহ করতে প্রতারণা করতে পারে। সর্বদা ওয়েবহুক গোপনীয়তার সাথে HMAC-যাচাই করুন, একটি ধ্রুবক-সময় তুলনা ব্যবহার করে। প্রথম আপস প্রায়শই অনুপস্থিত যাচাইকরণ।
একটি পৃথক নিশ্চিতকরণ ইভেন্ট ধরে নেওয়া
চালানো ইভেন্টগুলি হল payment.received, payment.sent, wallet.deployed, এবং webhook.test - এখানে কোনো আলাদা নিশ্চিতকরণ ইভেন্ট নেই। payment.received তখন ঘটে যখন স্থানান্তর একটি ব্লকে থাকে। বেশিরভাগ কাজের জন্য, এটি আপনার বিতরণের সংকেত। কিছু ব্যয়বহুল বা অপরিবর্তনীয়ের জন্য, transactions.get দিয়ে লেনদেনটি পোল করুন এবং কাজ করার আগে আপনার নিজস্ব নিশ্চিতকরণ থ্রেশহোল্ড প্রয়োগ করুন; এমন একটি ইভেন্টের জন্য অপেক্ষা করবেন না যা নেই।
ওয়েবহুক হ্যান্ডলারগুলিতে কোন আইডেম্পোটেন্সি নেই
ওয়েবহুকগুলি non-2xx প্রতিক্রিয়াগুলির উপর পুনরায় চেষ্টা করে এবং একই ইভেন্ট লোডের অধীনে একাধিকবার আসবে। আপনার হ্যান্ডলারটি আইডেম্পোটেন্ট হতে হবে: আপনি ইতিমধ্যে প্রক্রিয়া করা ইভেন্ট আইডির একটি ছোট টেবিল রাখুন এবং ডুপ্লিকেটগুলি বাদ দিন। অন্যথায় একটি অস্থায়ী ব্লিপ একই কাজ দুটি বার সরবরাহ করবে এবং আপনি দ্বিগুণ সম্পাদনাগুলি ডিবাগ করতে ঘণ্টা ব্যয় করবেন।
টেস্ট এবং লাইভ API কী মিশ্রিত করা
টেস্ট কী (sk_test_) স্যান্ডবক্সে আঘাত করে এবং বেস সেপোলিয়া ব্যবহার করে; লাইভ কী (sk_live_) উৎপাদনে আঘাত করে এবং বেস মেইননেট ব্যবহার করে। পরিবেশ কনফিগারেশনে সেগুলি মিশিয়ে দেওয়া 'ডেভে কাজ করে, উৎপাদনে ব্যর্থ' টিকিটগুলির বেশিরভাগের কারণ। যদি আপনার রানটাইম পরিবেশ এবং কী প্রিফিক্স মেলে না তবে স্টার্টআপে হার্ড-ফেইল করুন।
একটি অনুপস্থিত ওয়েবহুককে একটি ব্যর্থ পেমেন্ট হিসাবে বিবেচনা করা
কোনও ব্যর্থতার ঘটনা নেই, এবং একটি ওয়েবহুক মিস হতে পারে (আপনার এন্ডপয়েন্ট ডাউন ছিল, একটি ডেলিভারি ফেলে দেওয়া হয়েছিল)। এজেন্টকে 'অর্থের জন্য অপেক্ষা' লুপে আটকে রাখবেন না। পুনর্মিলন করুন: transactions.get দিয়ে লেনদেনটি নিয়ে আসুন যাতে প্রকৃত অবস্থা জানেন, এবং যে কোনও অপেক্ষমাণ প্রবাহে টাইম আউট দিন যাতে একটি পরিত্যক্ত পেমেন্ট ধরে রাখা সম্পদগুলি মুক্ত করে, চিরকাল আটকে না থাকে।
যখন আপনার প্রথম পেমেন্ট হয়।
মৌলিক পেমেন্ট কাজ করার সাথে সাথে, সবচেয়ে লাভজনক ফলো-আপগুলি হল ব্যয় নিয়ন্ত্রণ (যাতে এজেন্ট বাজেট নিয়ে পালাতে না পারে), ওয়েবহুক শক্তিশালীতা (যাতে পেমেন্টগুলি লোডের অধীনে নীরবে পড়ে না), এবং পরিচয় যাচাইকরণ (যাতে বিপরীত পক্ষগুলি এজেন্টের পাবলিক পৃষ্ঠায় বিশ্বাস করে)।
এজেন্ট খরচ নিয়ন্ত্রণ সেট আপ করুন যা প্রম্পট ইনজেকশন সহ্য করে
ওয়েবহুক প্যাটার্নগুলি যা ডেভেলপাররা সবচেয়ে বেশি জিজ্ঞাসা করে
GitHub এবং ডোমেন যাচাইকরণ ব্যাজ অর্জন করুন
পূর্ণ API রেফারেন্স docs.blockchain0x.com এ বিদ্যমান। একই API-এর জন্য পণ্য পৃষ্ঠ: Payment API.