تخطّ إلى المحتوى الرئيسي

AI Agents API

تدير AI Agents API وكلاء AI للتوليد فقط: كائنات قابلة لإعادة الاستخدام تقرأ سياقاً محدوداً وتنتج مخرجات منظمة ومتحققاً منها كي تستخدمها الرحلات ووظائف الكتالوج. لا يملك الوكيل أدوات أو إجراءات؛ فلا يرسل ولا ينشئ تفرعات ولا يكتب من تلقاء نفسه. راجع دليل لوحة AI Agents للمفاهيم.

تعكس هذه API واجهة الإعدادات ← AI Agents. استخدمها لإنشاء الوكلاء برمجياً، وتسجيل مفاتيح موفري BYO، وتشغيل اختبار على سياق نموذجي، وقراءة آثار التشغيل.

كل النقاط نسبية إلى عنوان الأساس https://api-eu1.joryio.com. راجع نظرة عامة على API.

المصادقة

تتم مصادقة كل طلب بمفتاح API يملك النطاق المناسب أو بجلسة لوحة تحكم JWT. الوكلاء محددون بمساحة العمل؛ فلا يرى المفتاح ولا يعدل إلا وكلاء مساحته.

Authorization: Bearer your_api_key_or_jwt
Content-Type: application/json

النطاقات لكل نقطة نهاية

تحتاج نقاط القراءة ai_agents:read، ونقاط الكتابة ai_agents:write. ويمكن لجلسات لوحة التحكم استخدام settings:read أو settings:write بدلاً منها.

نقطة النهايةالنطاق
POST /ai-agentsai_agents:write أو settings:write
GET /ai-agents وGET /ai-agents/{id}ai_agents:read أو settings:read
PUT وPOST /ai-agents/{id}/archive وDELETE /ai-agents/{id}ai_agents:write أو settings:write
POST /ai-agents/{id}/testai_agents:write أو settings:write
GET /ai-agents/{id}/runsai_agents:read أو settings:read
GET /ai-agents/provider-keysai_agents:read أو settings:read
PUT / DELETE /ai-agents/provider-keys/{provider}ai_agents:write أو settings:write
POST /ai-agents/enrichment/runai_agents:write أو settings:write
GET /ai-agents/enrichment/jobs و/{jobId}ai_agents:read أو settings:read

المفاهيم الأساسية

وضع النموذج والموفر

تكون modelMode إما managed أو byo:

  • managed: نموذج Claude المستضاف من Joryio. يكون provider هو joryio، وتُحاسب عملية تشغيل واحدة برصيد واحد.
  • byo: مفتاحك الخاص، والموفر أحد anthropic أو openai أو google أو azure أو bedrock. سجّل المفتاح أولاً، وتُحاسب العملية برسوم منصة ثابتة صغيرة.

مخطط المخرجات

يمكن أن تكون outputSchema.type من string أو number أو boolean أو json. في json قدّم مصفوفة fields من { name, type, description? } بحيث يكون type أولياً. اضبط includeExplanation: true لالتقاط تفسير النموذج في حقل explanation.

محددات السياق

contextSelectors قائمة اشتراك صريحة: لا يقرأ الوكيل شيئاً إلا ما تدرجه. وتشمل attributeKeys وsegmentIds وcatalogFields وrequiredCatalogFields، وهي حقول كتالوج يجب وجودها وإلا تتجاوز عملية الإثراء الصف بلا محاسبة، وincludeBrandVoice وincludeRecentEngagement وmaskPiiKeys. كما تُحجب دائماً البيانات المعلمة عالمياً كـ PII.

نتائج التشغيل

تنتهي كل عملية تشغيل بإحدى النتائج: success أو fallback أو timeout أو rate_limited أو invalid_config أو budget_exceeded. راجع عقد الأخطاء.

إنشاء وكيل

POST /ai-agents
الحقلالنوعمطلوبالوصف
namestringنعماسم مقروء، حتى 200 حرف.
descriptionstringلاوصف اختياري، حتى 1000.
tagsstring[]لاوسوم مساحة العمل؛ كل منها حتى 60 وبحد 50.
instructionsstringنعمتعليمات الهدف أو النظام مع Liquid، حتى 20000.
modelModestringلاmanaged الافتراضي أو byo.
providerstringلاjoryio أو anthropic أو openai أو google أو azure أو bedrock.
modelstringلامعرّف نموذج محدد، مثل claude-opus-4-8.
thinkingLevelstringلاminimal أو low أو medium أو high.
contextSelectorsobjectلاما يستطيع الوكيل قراءته.
outputSchemaobjectلاشكل المخرج المقيد به النموذج؛ الافتراضي { "type": "string" }.
fallbackValueanyلاقيمة تعاد عند فشل التشغيل.
dailyCapintegerلاحد الاستدعاء اليومي؛ الافتراضي 250000 والحد الأدنى 0.
guardrailsobjectلاmaxOutputTokens وtimeoutMs وretryOnTransient.
curl -X POST https://api-eu1.joryio.com/ai-agents \
-H "Authorization: Bearer your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Cart subject-line writer",
"instructions": "Write a short, upbeat email subject line for the abandoned cart. Max 60 characters.",
"modelMode": "managed",
"contextSelectors": { "attributeKeys": ["first_name", "cart_total"], "includeBrandVoice": true },
"outputSchema": { "type": "json", "fields": [{ "name": "subject", "type": "string" }], "includeExplanation": true },
"fallbackValue": { "subject": "You left something behind" },
"dailyCap": 50000,
"guardrails": { "timeoutMs": 20000, "retryOnTransient": true }
}'

تعيد الاستجابة كائن الوكيل، شاملاً id وorganizationId وworkspaceId وstatus وinstructions وتهيئة النموذج والسياق والمخرجات وقيمة الاحتياط والحدود وبيانات الإنشاء والتحديث.

عرض الوكلاء والحصول على وكيل

GET /ai-agents
GET /ai-agents/{id}

يقبل العرض status=active أو status=archived ويعيد الوكلاء مع الأحدث تحديثاً أولاً. معامل {id} هو UUID الوكيل. يعيد الحصول على وكيل كائن الوكيل كاملاً أو 404 إن لم يوجد في مساحة العمل.

تحديث وكيل أو أرشفته أو حذفه

PUT /ai-agents/{id}
POST /ai-agents/{id}/archive
DELETE /ai-agents/{id}

أرسل في PUT الحقول التي تريد تغييرها فقط؛ تُقبل كل حقول الإنشاء إضافة إلى status، active أو archived. تؤدي الأرشفة الناعمة إلى status: archived، فتوقف الاستخدام مع الاحتفاظ بسجل التشغيل. ويعيد الحذف:

{ "success": true }

اختبار وكيل

شغّل الوكيل تجريبياً مقابل سياق نموذجي. تستخدم العملية سطح test ومفتاح تشغيل جديداً، فلا تُحسب ضمن رحلة حقيقية ولا تعيد حقول القياس.

POST /ai-agents/{id}/test
الحقلالنوعالوصف
attributesobjectسمات جهة اتصال نموذجية مفاتيحها أسماء.
segmentMembershipsstring[]عضويات شريحة نموذجية.
catalogRecordobjectسجل كتالوج أو كيان نموذجي لإثرائه.
engagementobjectملخص تفاعل حديث نموذجي.
{
"outcome": "success",
"output": { "subject": "Dana, your cart misses you" },
"explanation": "Used the first name and an upbeat tone from the brand voice."
}

تكون outcome إحدى success أو fallback أو timeout أو rate_limited أو invalid_config أو budget_exceeded. وتكون explanation هي null إن لم يضمها المخطط.

عرض عمليات الوكيل

GET /ai-agents/{id}/runs?limit=25

يعيد آثار التشغيل الحديثة، الأحدث أولاً. يكون limit من 1 إلى 200 والافتراضي 50. يتضمن كل صف السطح والموفر والنموذج وعدد الرموز وزمن الاستجابة والنتيجة والمخرج والتفسير والخطأ والوقت. يخزن الأثر مراجع الإدخال فقط، مثل التنفيذ أو العقدة أو السجل أو المستخدم، ولا يخزن نص prompt الخام أبداً.

مفاتيح موفري BYO

عرض المفاتيح

GET /ai-agents/provider-keys

يعيد المفاتيح المسجلة لمساحة العمل. لا تعاد بيانات الاعتماد أبداً؛ يكون credentials دائماً {}.

إنشاء مفتاح أو استبداله

PUT /ai-agents/provider-keys/{provider}

يوجد مفتاح واحد لكل (workspace, provider). يكون {provider} أحد anthropic أو openai أو google أو azure أو bedrock. لا يأخذ موفر joryio المستضاف مفتاحاً ويُرفض.

الحقلالنوعمطلوبالوصف
credentialsobjectنعمبيانات اعتماد الموفر، مثل { "apiKey": "..." }؛ تُشفّر أثناء التخزين ولا تعاد.
labelstringلاتسمية اختيارية حتى 120 حرفاً.

حذف مفتاح

DELETE /ai-agents/provider-keys/{provider}

يعيد { "success": true }.

تشغيل إثراء الكتالوج

شغّل وكيلاً للتوليد فقط على سجلات كيان مخصص واكتب كل مخرج في حقل مستهدف، مثل أوصاف المنتجات والوسوم والفئات الموحدة. المهمة غير متزامنة وفي قائمة انتظار: تنشئ هذه النقطة مهمة queued وتعيد فوراً، فيعالج الكتالوج الكبير، حتى 100 ألف صف، خارج مسار الطلب. المهمة مقاومة للتكرار لكل سجل؛ مفتاح التشغيل هو jobId:recordId، فلا تحاسب محاولة متكررة سجلاً أثري بالفعل.

POST /ai-agents/enrichment/run
الحقلالنوعمطلوبالوصف
agentIdstringنعموكيل نشط في مساحة العمل.
entityDefinitionIdstringنعمتعريف الكيان المخصص الذي تثري سجلاته.
targetFieldstringنعمحقل السجل الذي يكتب فيه المخرج؛ يجب أن يكون معلناً في الكيان.
filterobjectلافلتر اختياري بأسلوب MongoDB.
limitintegerلاأقصى سجلات للمهمة، حتى 100000 وبحد صارم في الخادم.

الاستجابة تحمل jobId وstatus، queued عند التقديم، ومعرّفات الوكيل والكيان والحقل المستهدف وأعداد total وprocessed وsucceeded وfailed وskipped وerror والطوابع الزمنية.

مهام الإثراء

GET /ai-agents/enrichment/jobs/{jobId}
GET /ai-agents/enrichment/jobs?limit=20

استعلم عن مهمة واحدة لتتابع الحالة والأعداد، أو اعرض أحدث المهام لمساحة العمل. تكون الحالة queued أو running أو completed أو failed، ولا يُملأ error إلا إذا فشلت المهمة كاملة. يعيد الطلب 404 عند غياب المهمة ويحتاج إلى ai_agents:read أو settings:read.

استجابات الأخطاء

تشترك كل الأخطاء في الشكل القياسي؛ لا توجد مفردات منفصلة لرمز خطأ آلي. استخدم حالة HTTP وحقل message. راجع استجابة الخطأ.

الحالةمتى تحدث
400إعداد غير صالح، كغياب instructions أو عدم وجود مفتاح BYO للموفر أو status غير مسموح.
401مفتاح API مفقود أو غير صالح.
403لا يملك المفتاح نطاق ai_agents:read أو ai_agents:write المطلوب.
404الوكيل أو مهمة الإثراء أو مفتاح موفر BYO غير موجود.

الخطوات التالية