Magisterium AI

শুরু করা

এই গাইডটি আপনাকে Magisterium A2A এন্ডপয়েন্টে আপনার প্রথম অনুরোধ করা, ফলস্বরূপ কাজ পুনরুদ্ধার করা এবং কাঠামোবদ্ধ প্রতিক্রিয়া পড়ার মাধ্যমে নিয়ে যাবে।

পূর্বশর্ত

  1. একটি পেইড Magisterium প্ল্যান (Pro, Organization, বা Enterprise)। ফ্রি অ্যাকাউন্টগুলি A2A থেকে একটি PLAN_REQUIRED ত্রুটি পাবে।
  2. আপনার magisterium.com অ্যাকাউন্টের সাথে সংযুক্ত একটি OAuth 2.0 অ্যাক্সেস টোকেন। A2A Magisterium MCP সার্ভার-এর মতো একই OAuth ফ্লো ব্যবহার করে; https://www.magisterium.com/.well-known/oauth-authorization-server-এ OAuth মেটাডেটা থেকে অনুমোদন, টোকেন এবং ডায়নামিক-নিবন্ধন এন্ডপয়েন্টগুলি আবিষ্কার করুন।
  3. যে দক্ষতাগুলি আপনি কল করতে চান — সম্পূর্ণ তালিকার জন্য দক্ষতা দেখুন।

লক্ষ্য করুন: API Console-এ তৈরি দীর্ঘমেয়াদী API কী Chat Completions, Search, এবং News-এর জন্য কাজ করে, কিন্তু সেগুলি A2A-এর জন্য বৈধ নয় — A2A শুধুমাত্র OAuth দ্বারা জারি করা ব্যবহারকারী টোকেন গ্রহণ করে।

আপনার অ্যাক্সেস টোকেনকে একটি এনভায়রনমেন্ট ভেরিয়েবল হিসাবে এক্সপোর্ট করুন যাতে নিচের উদাহরণগুলি স্বয়ংক্রিয়ভাবে এটি গ্রহণ করে:

bash
export MAGISTERIUM_TOKEN=<your-access-token-here>

ধাপ 1: এজেন্ট আবিষ্কার করুন

এন্ডপয়েন্টটি কল করার আগে, কোন দক্ষতাগুলি উপলব্ধ তা দেখতে এবং প্রোটোকল সংস্করণটি নিশ্চিত করতে আপনি সর্বজনীন Agent Card আনতে পারেন:

bash
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 কল করে।

bash
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" }
        }
      }
    }'
typescript
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);
  }
}
python
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-এ থাকে।
json
{
  "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 দ্বারা পুনরায় আনা যেতে পারে:

bash
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 ফেরত দেবে।

সাধারণ ত্রুটি

কোডঅর্থসমাধান
-32004UnauthorizedAuthorization হেডার এবং অ্যাক্সেস টোকেন বৈধ ও মেয়াদোত্তীর্ণ নয় কিনা তা পরীক্ষা করুন।
-32005Paid plan requiredmagisterium.com/plan এ আপনার অ্যাকাউন্ট আপগ্রেড করুন।
-32002Skill not foundযাচাই করুন যে metadata.skillId Agent Card-এ তালিকাভুক্ত একটি ID-এর সাথে মেলে।
-32003Rate limit exceededপুনরায় চেষ্টা করার আগে retryAfter সেকেন্ড অপেক্ষা করুন (ত্রুটির data-এ উপস্থিত)।

প্রতিটি পদ্ধতি এবং ত্রুটি কোডের জন্য সম্পূর্ণ API রেফারেন্স দেখুন।