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 foundmetadata.skillId Agent Card-ൽ ലിസ്റ്റ് ചെയ്ത ID-യുമായി പൊരുത്തപ്പെടുന്നുവെന്ന് സ്ഥിരീകരിക്കുക.
-32003Rate limit exceededവീണ്ടും ശ്രമിക്കുന്നതിനുമുമ്പ് retryAfter സെക്കൻഡ് (പിശകിന്റെ data-ൽ നിലവിലുണ്ട്) കാത്തിരിക്കുക.

എല്ലാ രീതികൾക്കും പിശക് കോഡിനും വേണ്ടി പൂർണ്ണമായ API റഫറൻസ് കാണുക.