শুরু করা
এই গাইডটি আপনাকে Magisterium A2A এন্ডপয়েন্টে আপনার প্রথম অনুরোধ করা, ফলস্বরূপ কাজ পুনরুদ্ধার করা এবং কাঠামোবদ্ধ প্রতিক্রিয়া পড়ার মাধ্যমে নিয়ে যাবে।
পূর্বশর্ত
- একটি পেইড Magisterium প্ল্যান (Pro, Organization, বা Enterprise)। ফ্রি অ্যাকাউন্টগুলি A2A থেকে একটি
PLAN_REQUIREDত্রুটি পাবে। - আপনার
magisterium.comঅ্যাকাউন্টের সাথে সংযুক্ত একটি OAuth 2.0 অ্যাক্সেস টোকেন। A2A Magisterium MCP সার্ভার-এর মতো একই OAuth ফ্লো ব্যবহার করে;https://www.magisterium.com/.well-known/oauth-authorization-server-এ OAuth মেটাডেটা থেকে অনুমোদন, টোকেন এবং ডায়নামিক-নিবন্ধন এন্ডপয়েন্টগুলি আবিষ্কার করুন। - যে দক্ষতাগুলি আপনি কল করতে চান — সম্পূর্ণ তালিকার জন্য দক্ষতা দেখুন।
লক্ষ্য করুন: API Console-এ তৈরি দীর্ঘমেয়াদী API কী Chat Completions, Search, এবং News-এর জন্য কাজ করে, কিন্তু সেগুলি A2A-এর জন্য বৈধ নয় — A2A শুধুমাত্র OAuth দ্বারা জারি করা ব্যবহারকারী টোকেন গ্রহণ করে।
আপনার অ্যাক্সেস টোকেনকে একটি এনভায়রনমেন্ট ভেরিয়েবল হিসাবে এক্সপোর্ট করুন যাতে নিচের উদাহরণগুলি স্বয়ংক্রিয়ভাবে এটি গ্রহণ করে:
export MAGISTERIUM_TOKEN=<your-access-token-here>ধাপ 1: এজেন্ট আবিষ্কার করুন
এন্ডপয়েন্টটি কল করার আগে, কোন দক্ষতাগুলি উপলব্ধ তা দেখতে এবং প্রোটোকল সংস্করণটি নিশ্চিত করতে আপনি সর্বজনীন Agent Card আনতে পারেন:
curl https://www.magisterium.com/.well-known/agent.jsonকার্ডের জন্য কোনো প্রমাণীকরণ প্রয়োজন হয় না। অর্কেস্ট্রেটররা এটি এক ঘণ্টার জন্য ক্যাশ করতে পারে — এন্ডপয়েন্টটি Cache-Control: public, max-age=3600 সেট করে।
ধাপ 2: আপনার প্রথম বার্তা পাঠান
সমস্ত A2A অপারেশন একটি একক JSON-RPC এন্ডপয়েন্টের মাধ্যমে যায়: POST https://www.magisterium.com/api/v1/a2a। নিচের উদাহরণটি catholic_qa দক্ষতায় message/send কল করে।
curl -X POST https://www.magisterium.com/api/v1/a2a \
-H "Authorization: Bearer $MAGISTERIUM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "message/send",
"params": {
"message": {
"role": "user",
"messageId": "msg-001",
"kind": "message",
"parts": [{ "kind": "text", "text": "What does the Church teach about the Real Presence?" }],
"metadata": { "skillId": "catholic_qa" }
}
}
}'const accessToken = process.env.MAGISTERIUM_TOKEN!;
const response = await fetch("https://www.magisterium.com/api/v1/a2a", {
method: "POST",
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "message/send",
params: {
message: {
role: "user",
messageId: crypto.randomUUID(),
kind: "message",
parts: [
{ kind: "text", text: "What does the Church teach about the Real Presence?" },
],
metadata: { skillId: "catholic_qa" },
},
},
}),
});
const { result: task } = await response.json();
console.log(task.id, task.status.state);
for (const artifact of task.artifacts ?? []) {
for (const part of artifact.parts) {
if (part.kind === "text") console.log(part.text);
}
}import os
import uuid
import httpx
access_token = os.environ["MAGISTERIUM_TOKEN"]
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "message/send",
"params": {
"message": {
"role": "user",
"messageId": str(uuid.uuid4()),
"kind": "message",
"parts": [
{"kind": "text", "text": "What does the Church teach about the Real Presence?"}
],
"metadata": {"skillId": "catholic_qa"},
}
},
}
response = httpx.post(
"https://www.magisterium.com/api/v1/a2a",
headers={
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json",
},
json=payload,
timeout=60,
)
task = response.json()["result"]
print(task["id"], task["status"]["state"])
for artifact in task.get("artifacts", []):
for part in artifact["parts"]:
if part["kind"] == "text":
print(part["text"])ধাপ 3: প্রতিক্রিয়াটি পড়ুন
message/send kind: "task" সহ একটি Task অবজেক্ট ফেরত দেয়। একটি সিঙ্ক্রোনাস দক্ষতা কল সর্বদা দুটি টার্মিনাল অবস্থার মধ্যে একটিতে শেষ হয়:
status.state == "completed"— ফলাফলগুলিresult.artifacts-এ থাকে। প্রতিটি আর্টিফ্যাক্টের একটিartifactId, একটি ঐচ্ছিকname, এবং এক বা একাধিকparts(text,data, বাfile) থাকে।status.state == "failed"— ব্যর্থতার কারণstatus.message.parts[0].text-এ থাকে।
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"id": "task_abc123",
"contextId": "ctx_def456",
"kind": "task",
"status": { "state": "completed", "timestamp": "2026-04-20T12:00:00.000Z" },
"artifacts": [
{
"artifactId": "art_ghi789",
"name": "catholic_qa_response",
"parts": [
{ "kind": "text", "text": "The Catholic Church teaches..." },
{ "kind": "data", "data": { "citations": [] } }
]
}
]
}
}ধাপ 4: একটি কাজ পুনরুদ্ধার বা বাতিল করুন
কাজগুলি 24 ঘণ্টার জন্য সংরক্ষিত থাকে এবং tasks/get ব্যবহার করে ID দ্বারা পুনরায় আনা যেতে পারে:
curl -X POST https://www.magisterium.com/api/v1/a2a \
-H "Authorization: Bearer $MAGISTERIUM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tasks/get",
"params": { "id": "task_abc123" }
}'আপনার যদি একটি কাজ বাতিল করতে হয়, তাহলে একই ID দিয়ে tasks/cancel কল করুন। যেহেতু সমস্ত Magisterium দক্ষতা সিঙ্ক্রোনাস ভাবে সমাধান হয়, বাতিলকরণ শুধুমাত্র বিরল পুনঃপ্রচেষ্টার পরিস্থিতিতে উপযোগী — একটি কাজ যা ইতিমধ্যে completed বা failed হয়েছে সেটি বাতিল করা যাবে না এবং INVALID_PARAMS ফেরত দেবে।
সাধারণ ত্রুটি
| কোড | অর্থ | সমাধান |
|---|---|---|
-32004 | Unauthorized | Authorization হেডার এবং অ্যাক্সেস টোকেন বৈধ ও মেয়াদোত্তীর্ণ নয় কিনা তা পরীক্ষা করুন। |
-32005 | Paid plan required | magisterium.com/plan এ আপনার অ্যাকাউন্ট আপগ্রেড করুন। |
-32002 | Skill not found | যাচাই করুন যে metadata.skillId Agent Card-এ তালিকাভুক্ত একটি ID-এর সাথে মেলে। |
-32003 | Rate limit exceeded | পুনরায় চেষ্টা করার আগে retryAfter সেকেন্ড অপেক্ষা করুন (ত্রুটির data-এ উপস্থিত)। |
প্রতিটি পদ্ধতি এবং ত্রুটি কোডের জন্য সম্পূর্ণ API রেফারেন্স দেখুন।