البدء
يرشدك هذا الدليل خلال تقديم أول طلب لك إلى نقطة نهاية A2A للماجستير، واسترداد المهمة الناتجة، وقراءة الاستجابة المنظمة.
المتطلبات الأساسية
- خطة مدفوعة من الماجستير (Pro أو Organization أو Enterprise). ستتلقى الحسابات المجانية خطأ
PLAN_REQUIREDمن A2A. - رمز وصول OAuth 2.0 مرتبط بحسابك على
magisterium.com. يستخدم A2A نفس تدفق OAuth الخاص بـ خادم MCP للماجستير؛ اكتشف نقاط نهاية التفويض والرمز المميز والتسجيل الديناميكي من بيانات OAuth الوصفية علىhttps://www.magisterium.com/.well-known/oauth-authorization-server. - المهارات التي ترغب في استدعائها — راجع المهارات للحصول على القائمة الكاملة.
تنبيه: مفاتيح API طويلة العمر التي يتم إنشاؤها في وحدة تحكم API تعمل مع Chat Completions وSearch وNews، لكنها ليست صالحة لـ A2A — يقبل A2A فقط رموز المستخدم الصادرة عن OAuth.
قم بتصدير رمز الوصول الخاص بك كمتغير بيئة حتى تلتقطه الأمثلة أدناه تلقائياً:
export MAGISTERIUM_TOKEN=<your-access-token-here>الخطوة 1: اكتشف الوكيل
قبل استدعاء نقطة النهاية، يمكنك جلب بطاقة الوكيل العامة لمعرفة المهارات المتاحة وتأكيد إصدار البروتوكول:
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/send على مهارة catholic_qa.
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 كائن Task مع kind: "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:
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 بنفس المعرف. لأن جميع مهارات الماجستير تُحل بشكل متزامن، فإن الإلغاء مفيد فقط في سيناريوهات إعادة المحاولة النادرة — لا يمكن إلغاء مهمة completed أو failed بالفعل وستُرجع INVALID_PARAMS.
الأخطاء الشائعة
| الرمز | المعنى | الحل |
|---|---|---|
-32004 | غير مصرح | تحقق من رأس Authorization ومن أن رمز الوصول صالح وغير منتهي الصلاحية. |
-32005 | مطلوبة خطة مدفوعة | قم بترقية حسابك على magisterium.com/plan. |
-32002 | المهارة غير موجودة | تأكد من أن metadata.skillId يطابق معرفاً مدرجاً في بطاقة الوكيل. |
-32003 | تم تجاوز حد المعدل | انتظر retryAfter ثانية (موجود في data الخطأ) قبل إعادة المحاولة. |
راجع مرجع API الكامل لكل طريقة ورمز خطأ.