Magisterium AI

Սկսելը

Այս ուղեցույցը ձեզ կառաջնորդի Magisterium A2A վերջնակետին առաջին հարցումը կատարելու, ստացված առաջադրանքը ստանալու և կառուցվածքային պատասխանն ընթերցելու ընթացքում։

Նախապայմաններ

  1. Վճարովի Magisterium պլան (Pro, Կազմակերպություն կամ Տնտեսություն)։ Անվճար հաշիվները A2A-ից ստանում են PLAN_REQUIRED սխալ։
  2. Ձեր magisterium.com հաշվին կապված OAuth 2.0 մուտքի թոքեն։ A2A-ն օգտագործում է նույն OAuth հոսքը, ինչ Magisterium MCP սերվերը. որակավորման, թոքենի և դինամիկ գրանցման վերջնակետերը հայտնաբերեք 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։ Ստորև բերված օրինակը կանչում է message/sendcatholic_qa հմտության վրա։

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-ում։ Յուրաքանչյուր artifact ունի 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 ժամ և կարող են կրկին բերվել ID-ով՝ օգտագործելով tasks/get.

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" }
    }'

Եթե ձեզ անհրաժեշտ է ընդհատել առաջադրանքը, կանչեք tasks/cancel-ը նույն ID-ով։ Քանի որ Magisterium-ի բոլոր հմտությունները լուծվում են սինխրոն կերպով, չեղարկումն օգտակար է միայն հազվադեպ վերաձեռնարկման սցենարներում — completed կամ failed արդեն դարձած առաջադրանքը հնարավոր չէ չեղարկել, և կվերադարձնի INVALID_PARAMS։

Ընդհանուր սխալներ

ԿոդԻմաստԼուծում
-32004ՉորակավորվածՍտուգեք Authorization վերնագիրը և որ մուտքի թոքենը վավեր է և ժամկետանց չէ։
-32005Պահանջվում է վճարովի պլանԹարմացրեք ձեր հաշիվը magisterium.com/plan-ում։
-32002Հմտությունը չի գտնվելՍտուգեք, որ metadata.skillId-ը համապատասխանում է Agent Card-ում նշված որևէ ID-ի։
-32003Գերազանցվել է արագության սահմանաչափըԿրկին փորձելուց առաջ սպասեք retryAfter վայրկյան (գտնվում է սխալի data-ում)։

Բոլոր մեթոդների և սխալի կոդերի համար տե՛ս ամբողջական API հղումը։