أربع واجهات HTTP، لكل منها رمز وصول خاص بها. كل نقطة نهاية هنا مأخوذة من الشيفرة التي تخدمها، لذا أسماء الحقول في هذه الصفحة هي نفسها التي تصلك في الاستجابة.
العنوان الأساسيhttps://magizai.com
البداية
كل الواجهات تتحدث JSON عبر HTTPS وتتوقع ترويسة Accept: application/json. أرسل رمزك في ترويسة Authorization، واقرأ رمز الحالة قبل المحتوى: الطلب المرفوض يحمل دائمًا حقل message يشرح السبب.
JSON فقط
الطلبات والاستجابات بصيغة JSON. الاستثناء الوحيد هو نقطة البث في الأداة، التي تُرجع أحداث Server-Sent Events.
محصورة بمساحة العمل
لا يصل الرمز إلا إلى مساحة العمل التي أُنشئ فيها. وطلب روبوت أو محادثة تخص حسابًا آخر يُرجع 404، ولا يُرجع بيانات مساحة عمل أخرى أبدًا.
بلا حالة
لا كوكيز ولا رمز CSRF ولا جلسة. كل طلب يحمل بيانات اعتماده، لذا يعمل النداء نفسه من خادم أو تطبيق هاتف أو مهمة مجدولة.
يُنشأ من لوحة التحكم في الإعدادات، ضمن لوحة Rest API tokens. سمِّه وانسخ قيمته مرة واحدة (تُعرض حينها فقط)، واستخدمه مع نقاط v1. يمكن للحساب الاحتفاظ بعشرين رمزًا كحد أقصى، وإلغاء أي رمز يسري فورًا.
ability: api
رمز البوابة
يُنشأ بإرسال بريد وكلمة مرور لوحة التحكم إلى نقطة دخول البوابة. لا يحصل عليه إلا مالك أو مسؤول مساحة عمل مفعّلة فيها البوابة بالعلامة البيضاء.
ability: portal
رمز تطبيق الموظف
يُنشأ بإرسال بريد وكلمة مرور إلى نقطة دخول تطبيق الموظف. يستطيع المالك والمسؤول والموظف تسجيل الدخول، أما مقعد المشاهدة للقراءة فقط فيُرفض. وتقوم التطبيقات بتجديد الرمز قبل انتهائه.
ability: agent
نقاط الأداة
بلا رمز إطلاقًا. المفتاح العام للروبوت موجود في الرابط، ويثبت الزائر ملكيته للمحادثة بإرسال معرّف الزائر نفسه الذي فتحها.
أنواع الرموز غير متبادلة. الرمز المُنشأ من شاشة الإعدادات يفتح نقاط v1 فقط: إن أرسلته إلى مسار portal أو agent فستحصل على 403، لأن تلك المسارات تتطلب صلاحيتي portal وagent وهما غير موجودتين في رمز الإعدادات. رموز البوابة وتطبيق الموظف تأتي من نقاط الدخول الخاصة بها.
كل رمز ينتهي بعد ثلاثين يومًا من إصداره. تطبيقات الموظفين تجدد رمزها عبر نقطة refresh، أما التكامل من الخادم فأنشئ له رمزًا بديلًا قبل انتهاء القديم.
الأخطاء
الطلب الفاشل يُرجع رمز الحالة المناسب مع محتوى JSON. وأخطاء التحقق تتبع شكل Laravel: رسالة مقروءة message مع كائن errors مفهرس بأسماء الحقول.
{
"message": "The message field is required.",
"errors": {
"message": ["The message field is required."]
}
}
الحالة
سبب حدوثه
401
الرمز مفقود أو تالف أو منتهٍ أو ملغى.
403
الرمز صالح لكنه غير مسموح هنا: صلاحية خاطئة لهذه الواجهة، أو دور لا يملك الإذن، أو حساب أو مساحة عمل موقوفة.
404
السجل غير موجود، أو يخص مساحة عمل أخرى. الحالتان غير متمايزتين عن قصد.
409
الطلب يتعارض مع الحالة الراهنة، كدعوة زائر غادر الموقع بالفعل.
422
فشل التحقق، أو رفضت قاعدة عمل الطلب. اقرأ كائن errors لتعرف الحقل والسبب.
429
تم بلوغ حد المعدل أو قفل الحساب. انتظر عدد الثواني المذكور في ترويسة Retry-After.
500
حدث خلل لدينا. لم يكتمل الإجراء.
502
تعذر الوصول إلى مزود الذكاء الاصطناعي. تحقق من المفتاح المهيأ لمساحة العمل.
503
إمكانية غير مهيأة على هذا الخادم، مثل الإشعارات الفورية بلا مفاتيح VAPID.
حدود المعدل
الحدود مضبوطة لكل مسار، وكل نقطة نهاية أدناه تذكر حدها. في المسارات المصادَقة يُحتسب لكل مستخدم مسجّل، وفي المسارات العامة لكل عنوان IP.
الاستجابة المحدودة تحمل الترويسات المعتادة، فيخبرك الرفض بالضبط كم عليك الانتظار.
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
Retry-After: 41
نقاط النهاية الموسومة بـ«بلا حد على المسار» ليس لها حد خاص بها. لكنها تظل مقيدة بحصة الرسائل الشهرية في خطتك، فاستعلم عنها بفاصل زمني معقول لا في حلقة متلاحقة.
REST API الإصدار v1
واجهة التكامل العامة. اقرأ روبوتاتك ومحادثاتك، وأضف معرفة، وأرسل رسالة زائر لتحصل على رد الذكاء الاصطناعي في استجابة JSON واحدة. تُصادق برمز تنشئه من شاشة الإعدادات.
المسار الأساسي/api/v1·7 نقطة نهاية
GET/api/v1/me
يُرجع المستخدم صاحب الرمز ومساحة عمله.
المصادقة رمز Bearer بصلاحية apiحد المعدل بلا حد على المسار
يضيف مستندًا نصيًا أو سؤالًا وجوابًا إلى روبوت ويدرّبه فورًا.
المصادقة رمز Bearer بصلاحية apiصلاحية الدورmanage-contentحد المعدل بلا حد على المسار
يجري التدريب داخل الطلب لا في طابور، لذا يتوقف النداء حتى تُفهرس الوثيقة. توقع عدة ثوانٍ لمستند طويل.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
title
string
مطلوب
اسم للمستند. حتى 200 محرف.
content
string
مطلوب
نص المستند.
type
string
اختياري
القيمة text أو qa. الافتراضية text.
الطلب
curl -X POST https://magizai.com/api/v1/chatbots/cv_9f2a4c7e1b6d3a8f5c0e2b4d/knowledge \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"title": "Refund policy",
"type": "text",
"content": "We refund any order within 30 days of delivery. Ship it back with the original packing slip and we credit the original payment method within five working days."
}'
حُفظ المستند لكن تعذّر تدريبه. وتحمل الاستجابة معرّفه وحالته لتعيد التدريب بدل رفعه من جديد.
POST/api/v1/chatbots/{key}/messages
يرسل رسالة زائر ويُرجع رد الذكاء الاصطناعي في استجابة واحدة بلا بث.
المصادقة رمز Bearer بصلاحية apiصلاحية الدورhandle-conversationsحد المعدل بلا حد على المسار
يُولَّد الرد كاملًا قبل إرسال الاستجابة. وإن أردت الكلمات فور وصولها فاستخدم نقطة البث في الأداة. وحين يستلم موظف بشري المحادثة يكون reply مساويًا لـ null ويشرح الحقل note السبب.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
message
string
مطلوب
رسالة الزائر. حتى 4000 محرف، ولا يجوز أن تكون مسافات فقط.
visitor_id
string
مطلوب
المعرّف الذي تسنده أداتك للزائر وتحتفظ به طوال الجلسة. حتى 100 محرف.
conversation_id
uuid
اختياري
محادثة قائمة تريد متابعتها. اتركه ليبدأ محادثة جديدة.
meta
object
اختياري
سياق حر يُحفظ على المحادثة.
الطلب
curl -X POST https://magizai.com/api/v1/chatbots/cv_9f2a4c7e1b6d3a8f5c0e2b4d/messages \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"visitor_id": "v_2c9a71b4e5",
"message": "How long does delivery to Dubai take?"
}'
الاستجابة
{
"conversation_id": "6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91",
"status": "bot",
"reply": {
"id": 33127,
"content": "Orders to Dubai arrive in two to four working days with DHL Express. You get a tracking link by email as soon as the parcel leaves our warehouse.",
"model": "claude-haiku-4-5",
"tokens_in": 812,
"tokens_out": 41
}
}
الأخطاء
الحالة
سبب حدوثه
401
لم يُرسل رمز صالح.
403
الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404
لا سجل بهذا المعرّف في مساحة العمل هذه.
422
فشل التحقق من أحد الحقول. وكائن errors يسميه.
429
بلغت مساحة العمل حد الرسائل الشهري.
502
تعذر الوصول إلى مزود الذكاء الاصطناعي. تحقق من المفتاح المهيأ لمساحة العمل.
GET/api/v1/conversations/{conversation}
يُرجع محادثة واحدة مع نصها الكامل.
المصادقة رمز Bearer بصلاحية apiحد المعدل بلا حد على المسار
{
"data": {
"id": "6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91",
"status": "bot",
"visitor_id": "v_2c9a71b4e5",
"messages": [
{
"id": 33126,
"role": "visitor",
"content": "How long does delivery to Dubai take?",
"created_at": "2026-08-08T09:41:04.000000Z"
},
{
"id": 33127,
"role": "assistant",
"content": "Orders to Dubai arrive in two to four working days with DHL Express.",
"created_at": "2026-08-08T09:41:07.000000Z"
}
]
}
}
الأخطاء
الحالة
سبب حدوثه
401
لم يُرسل رمز صالح.
403
الحساب أو مساحة العمل موقوفة.
404
لا سجل بهذا المعرّف في مساحة العمل هذه.
واجهة البوابة
واجهة المستأجر خلف البوابة بالعلامة البيضاء التي يمكن للعميل استضافتها على نطاقه. تدير الروبوتات والمعرفة ومفاتيح المزودين والاستهلاك وشيفرة التضمين. تبقى البيانات والذكاء الاصطناعي على المنصة، ولا يُعاد أبدًا مفتاح مزود مخزّن إلى المتصفح.
المسار الأساسي/api/portal·14 نقطة نهاية
POST/api/portal/login
يبدّل بريد وكلمة مرور لوحة التحكم برمز Bearer للبوابة.
المصادقة بدون مصادقة، عامةحد المعدل 10 طلب كل 1 دقيقة لكل عنوان IP
الرسائل عند الفشل مبهمة عن قصد: كلمة مرور خاطئة، أو عنوان غير معروف، أو بوابة مطفأة، أو دور غير كافٍ، كلها تُرجع النص نفسه، فلا تصلح النقطة لاكتشاف الحسابات الموجودة. وتتشارك المحاولات عدّاد القفل نفسه مع نموذج الدخول على الويب.
المعاملات
المعامل
النوع
مطلوب
الوصف
email
string
مطلوب
البريد الإلكتروني لمستخدم في لوحة التحكم. حتى 255 محرفًا.
{
"data": {
"public_key": "cv_9f2a4c7e1b6d3a8f5c0e2b4d",
"name": "Support bot",
"role": "support",
"provider": "claude",
"model": "claude-haiku-4-5",
"is_active": true,
"knowledge_sources": 14,
"conversations": 67,
"persona": "Warm, direct, never oversells.",
"instructions": "Always quote delivery times from the shipping table.",
"welcome_message": "Hi! How can I help you today?",
"branding": {
"primary_color": "#4f46e5",
"launcher_text": "Chat with us",
"position": "right",
"theme": "minimal",
"logo_url": null,
"avatar_url": null,
"title": "Support bot",
"subtitle": "We typically reply in a few seconds",
"layout": "classic",
"launcher": "bubble",
"quick_replies": [],
"agent_avatars": [],
"composer_style": "full",
"sound": true,
"screen_share": false,
"copilot": false,
"auto_actions": true,
"copilot_use_profile": false,
"copilot_autostart": true,
"live_visitors": true,
"behavior_tracking": false,
"recommend_mode": "reactive",
"proactive": {
"enabled": false,
"message": "Hi! Anything I can help you find?",
"delay": 20,
"scroll": 0,
"exit_intent": false,
"url_contains": "",
"frequency": "session"
}
}
}
}
الأخطاء
الحالة
سبب حدوثه
401
لم يُرسل رمز صالح.
403
الحساب أو مساحة العمل موقوفة.
404
لا سجل بهذا المعرّف في مساحة العمل هذه.
PUT/api/portal/chatbots/{key}
يحدّث محتوى الروبوت ومظهر الأداة.
المصادقة رمز Bearer بصلاحية portalصلاحية الدورmanage-chatbotsحد المعدل بلا حد على المسار
الحقل name مطلوب في كل نداء. وتُدمج حقول الهوية البصرية فوق المحفوظ، فإرسال primary_color وحده يترك البقية كما هي، وإرسال welcome_message فارغًا يعيده إلى رسالة الترحيب الافتراضية. ولا يمكن تغيير المزود أو النموذج من هنا.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
name
string
مطلوب
اسم الروبوت. حتى 120 محرفًا.
persona
string
اختياري
الأسلوب الذي ينبغي أن يتحدث به المساعد. حتى 2000 محرف.
instructions
string
اختياري
تعليمات دائمة للمساعد. حتى 4000 محرف.
welcome_message
string
اختياري
رسالة الترحيب عند فتح الدردشة. حتى 300 محرف، وإرسالها فارغة يعيدها إلى الافتراضية.
is_active
boolean
اختياري
هل يجيب الروبوت. اتركه ليبقى الإعداد الحالي.
primary_color
string
اختياري
لون تمييز الأداة بصيغة hex. حتى 9 محارف.
launcher_text
string
اختياري
نص زر فتح الدردشة. حتى 40 محرفًا.
position
string
اختياري
جهة ظهور الأداة: left أو right.
theme
string
اختياري
سمة الأداة: minimal أو ocean أو emerald أو midnight أو sunset أو crisp أو violet أو rose أو slate أو forest.
الطلب
curl -X PUT https://magizai.com/api/portal/chatbots/cv_9f2a4c7e1b6d3a8f5c0e2b4d \
-H "Authorization: Bearer $PORTAL_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"name": "Support bot",
"welcome_message": "Hi! Ask me anything about your order.",
"primary_color": "#0a7d5f",
"position": "right",
"theme": "emerald",
"is_active": true
}'
الاستجابة
{
"data": {
"public_key": "cv_9f2a4c7e1b6d3a8f5c0e2b4d",
"name": "Support bot",
"role": "support",
"provider": "claude",
"model": "claude-haiku-4-5",
"is_active": true,
"knowledge_sources": 14,
"conversations": 67,
"persona": "Warm, direct, never oversells.",
"instructions": "Always quote delivery times from the shipping table.",
"welcome_message": "Hi! Ask me anything about your order.",
"branding": {
"primary_color": "#0a7d5f",
"launcher_text": "Chat with us",
"position": "right",
"theme": "emerald"
}
}
}
الأخطاء
الحالة
سبب حدوثه
401
لم يُرسل رمز صالح.
403
الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404
لا سجل بهذا المعرّف في مساحة العمل هذه.
422
فشل التحقق من أحد الحقول. وكائن errors يسميه.
GET/api/portal/chatbots/{key}/knowledge
يسرد مصادر معرفة الروبوت وحالة تدريب كل منها.
المصادقة رمز Bearer بصلاحية portalحد المعدل بلا حد على المسار
تُسرد المصادر الرئيسية فقط. أما الصفحات المكتشفة أثناء زحف رابط فهي أبناء لذلك المصدر ولا تظهر منفصلة.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
يضيف ملاحظة نصية أو زوج سؤال وجواب أو رابطًا لزحفه.
المصادقة رمز Bearer بصلاحية portalصلاحية الدورmanage-contentحد المعدل بلا حد على المسار
الحقول المطلوبة تعتمد على type: الحقل content مع text، والحقلان question وanswer مع qa، والحقل source_url مع url. يُنشأ المصدر فورًا بحالة pending ويُفهرس في الخلفية، فاستعلم من نقطة السرد لترى حالته تتحول إلى ready.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
type
string
مطلوب
القيمة text أو qa أو url. وهي التي تحدد أي الحقول أدناه مطلوب.
title
string
اختياري
اسم للمصدر. وإن تُرك فارغًا يعود إلى اسم افتراضي مناسب لنوعه.
content
string
اختياري
مطلوب حين يكون type مساويًا لـ text. متن الملاحظة، حتى 1,000,000 محرف.
question
string
اختياري
مطلوب حين يكون type مساويًا لـ qa. حتى 2000 محرف.
answer
string
اختياري
مطلوب حين يكون type مساويًا لـ qa. حتى 50,000 محرف.
source_url
url
اختياري
مطلوب حين يكون type مساويًا لـ url. الصفحة المراد زحفها، حتى 2048 محرفًا.
الطلب
curl -X POST https://magizai.com/api/portal/chatbots/cv_9f2a4c7e1b6d3a8f5c0e2b4d/knowledge \
-H "Authorization: Bearer $PORTAL_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"type": "qa",
"title": "Weekend delivery",
"question": "Do you deliver on Saturdays?",
"answer": "Yes. Saturday delivery is available in Dubai and Abu Dhabi at no extra cost."
}'
لا روبوت في مساحة العمل بعد، فلا شيفرة تضمين لإرجاعها.
واجهة تطبيق الموظف
الواجهة خلف تطبيقات الموظفين للهاتف وسطح المكتب. تعمل على صندوق الوارد: قراءة المحادثات والرد والاستلام والإغلاق والوسم واستخدام مساعد الذكاء الاصطناعي ومتابعة الزوار المتصلين وتسجيل جهاز للإشعارات. كل إجراء ينفّذ منطق المستأجر نفسه المستخدم في صندوق الوارد على الويب، فيتطابق السلوك تمامًا.
المسار الأساسي/api/agent·32 نقطة نهاية
POST/api/agent/login
يبدّل بريدًا وكلمة مرور برمز Bearer لتطبيق الموظف.
المصادقة بدون مصادقة، عامةحد المعدل 10 طلب كل 1 دقيقة لكل عنوان IP
لا يسجّل الدخول هنا إلا المالك والمسؤول والموظف. ويُرفض مقعد المشاهدة، ويُرفض أي حساب مساحة عمله موقوفة. وتتشارك المحاولات عدّاد القفل نفسه مع نموذج الدخول على الويب وواجهة البوابة.
المعاملات
المعامل
النوع
مطلوب
الوصف
email
string
مطلوب
البريد الإلكتروني لمستخدم في لوحة التحكم. حتى 255 محرفًا.
password
string
مطلوب
كلمة مرور ذلك المستخدم في لوحة التحكم.
device_name
string
اختياري
تسمية لهذا الجهاز تظهر بجانب الرمز. حتى 120 محرفًا.
يُرجع تغذية صندوق الوارد: قائمة المحادثات وعدّادات غير المقروء وإجماليات الأقسام.
المصادقة رمز Bearer بصلاحية agentحد المعدل بلا حد على المسار
تحمل الاستجابة الواحدة ستين صفًا كحد أقصى، بينما يعدّ الحقل groups صندوق الوارد كله، فاستخدم filter للوصول إلى بقية القسم. وتمرير conversation يُرجع تلك المحادثة في active ويعلّمها مقروءة.
المعاملات
المعامل
النوع
مطلوب
الوصف
filter
string
اختياري
في الاستعلام. تضييق القائمة: all أو waiting أو mine أو team أو ai أو human أو resolved. القيمة الافتراضية all.
conversation
uuid
اختياري
في الاستعلام. افتح هذه المحادثة وأعدها في active وعلّمها مقروءة.
يُرجع محادثة واحدة كاملة مع نصها وملف الزائر والوسوم والملاحظات والأحداث.
المصادقة رمز Bearer بصلاحية agentحد المعدل بلا حد على المسار
هذه نقطة صندوق الوارد نفسها مع اختيار المحادثة مسبقًا، فالمحتوى بالشكل ذاته وتصلك المحادثة المطلوبة في active. ومعرّف غير موجود في مساحة العمل ليس خطأ: تحصل على 200 مع active مساويًا لـ null. وفتح المحادثة يعلّمها مقروءة.
يرسل رد الموظف ويوصله عبر القناة التي تجري عليها المحادثة.
المصادقة رمز Bearer بصلاحية agentصلاحية الدورhandle-conversationsحد المعدل بلا حد على المسار
إرسال رد يستلم المحادثة تلقائيًا. ومرّر client_id من صندوق صادر يعمل دون اتصال لتصبح إعادة المحاولة آمنة: تكرار المعرّف نفسه يُرجع الرسالة المُنشأة سلفًا ويضبط duplicate على true بدل إرسال رسالة ثانية.
المعاملات
المعامل
النوع
مطلوب
الوصف
conversation
uuid
مطلوب
في المسار. المعرّف العام للمحادثة، وهو UUID.
body
string
مطلوب
الرد المراد إرساله. حتى 4000 محرف، ولا يجوز أن يكون مسافات فقط.
client_id
string
اختياري
معرّفك الخاص لهذا الرد. إعادة إرساله تُرجع الرسالة المُنشأة سلفًا بدل رسالة ثانية. حتى 64 محرفًا.
الطلب
curl -X POST https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/reply \
-H "Authorization: Bearer $AGENT_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"body": "I have opened a claim with the courier and posted a replacement today.",
"client_id": "outbox-2026-08-08-0007"
}'
الاستجابة
{
"message": {
"id": 33131,
"role": "agent",
"content": "I have opened a claim with the courier and posted a replacement today.",
"at": "10:47 AM"
}
}
{
"canned": [
{
"id": 19,
"title": "Courier claim opened",
"shortcut": "/claim",
"body": "I have opened a claim with the courier. You will hear from us within one working day."
}
]
}
الأخطاء
الحالة
سبب حدوثه
401
لم يُرسل رمز صالح.
403
الحساب أو مساحة العمل موقوفة.
POST/api/agent/canned/{canned}/used
يسجّل أن ردًا جاهزًا أُدرج، ليستمر الترتيب في التعلم.
المصادقة رمز Bearer بصلاحية agentصلاحية الدورhandle-conversationsحد المعدل بلا حد على المسار
لا يعلّم الموظف ردًا مستخدمًا إلا إن كان مشتركًا أو خاصًا به.
يُرجع طلبات Shopify واشتراك Stripe للزائر من أجل لوحة العميل.
المصادقة رمز Bearer بصلاحية agentحد المعدل بلا حد على المسار
يتراجع التكاملان بلطف بدل الفشل. يكون connected مساويًا لـ false حين لا تكون مساحة العمل قد ربطت تلك الخدمة؛ فيأتي shopify.orders مصفوفة فارغة وstripe.data مساويًا لـ null. ويأتي stripe.data أيضًا بالشكل {"found": false} حين يكون Stripe مربوطًا لكن لا عميل يطابق بريد الزائر.
يصوغ ردًا مقترحًا للموظف مستندًا إلى معرفة الروبوت.
المصادقة رمز Bearer بصلاحية agentصلاحية الدورhandle-conversationsحد المعدل 30 طلب كل 1 دقيقة لكل مستخدم مسجّل
يكلف نداء ذكاء اصطناعي واحدًا. وحين لا يوجد ما يُجاب عنه بعد، أو لا مفتاح مزود مهيأ، يُرجع النداء 200 مع suggestion مساوٍ لـ null. واحتفظ بالحقل id المُعاد لتبلغ عن النتيجة لاحقًا.
المعاملات
المعامل
النوع
مطلوب
الوصف
conversation
uuid
مطلوب
في المسار. المعرّف العام للمحادثة، وهو UUID.
draft
string
اختياري
ما كتبه الموظف حتى الآن ليبني عليه الاقتراح. حتى 4000 محرف.
الطلب
curl -X POST https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/suggest \
-H "Authorization: Bearer $AGENT_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{ "draft": "tell her the claim is open" }'
الاستجابة
{
"id": 1204,
"suggestion": "I have opened a claim with the courier for order #8812 and posted a replacement today. You will get a new tracking link by email within the hour."
}
{
"summary": "Replacement for order 8812 never arrived; courier shows delivered. Claim opened, replacement posted.",
"summary_at": "a few seconds ago"
}
الأخطاء
الحالة
سبب حدوثه
401
لم يُرسل رمز صالح.
403
الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404
لا سجل بهذا المعرّف في مساحة العمل هذه.
422
تعذّر توليد ملخص الآن.
429
تم بلوغ حد المسار لهذا المستخدم.
POST/api/agent/suggestion/{suggestion}/outcome
يسجّل ما فعله الموظف باقتراح الذكاء الاصطناعي.
المصادقة رمز Bearer بصلاحية agentصلاحية الدورhandle-conversationsحد المعدل 60 طلب كل 1 دقيقة لكل مستخدم مسجّل
أبلغ بـ generated أو inserted أو edited أو dismissed لتبقى جودة المساعد قابلة للقياس.
المعاملات
المعامل
النوع
مطلوب
الوصف
suggestion
integer
مطلوب
في المسار. المعرّف الذي أعادته نقطة suggest.
outcome
string
مطلوب
القيمة generated أو inserted أو edited أو dismissed.
يسرد كل من يتصفح مواقع مساحة العمل الآن، بمن فيهم من لم يفتح الدردشة.
المصادقة رمز Bearer بصلاحية agentحد المعدل بلا حد على المسار
يخبرك enabled إن كان أي روبوت نشط قد فُعّلت فيه ميزة الزوار المتصلين. والحقل poll_seconds هو الفاصل الذي يريده الخادم، فاقرأه بدل تثبيت رقم في الشيفرة.
المعاملات
المعامل
النوع
مطلوب
الوصف
limit
integer
اختياري
في الاستعلام. عدد الزوار المطلوب إرجاعه. يُحصر بين 1 و200، والافتراضي 100.
المصادقة رمز Bearer بصلاحية agentحد المعدل 30 طلب كل 1 دقيقة لكل مستخدم مسجّل
ينشئ محادثة إن لم تكن للزائر واحدة، ويعلّمها بأن يديرها بشر كي لا يتحدث الذكاء الاصطناعي فوقك، ويُرجع 201 في هذه الحالة؛ أما الزائر الذي لديه محادثة مفتوحة فيُرجع 200. وإن لم تكن نافذة الدردشة مفتوحة وصلته الرسالة مع نبضته التالية.
المعاملات
المعامل
النوع
مطلوب
الوصف
visitor
string
مطلوب
في المسار. معرّف الزائر من قائمة الزوار المتصلين. يُقتطع إلى 100 محرف.
message
string
مطلوب
الجملة الافتتاحية المراد إرسالها. حتى 2000 محرف، ولا يجوز أن تكون مسافات فقط.
chatbot_id
integer
اختياري
أرسل من هذا الروبوت. وإن تُرك فارغًا يُفضَّل روبوت الزائر نفسه، ثم أي روبوت نشط.
الطلب
curl -X POST https://magizai.com/api/agent/visitors/v_2c9a71b4e5/invite \
-H "Authorization: Bearer $AGENT_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{ "message": "Hi Nadia — I can see order 8812 on your screen. Want me to check it?" }'
الاستجابة
{
"conversation_id": "6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91",
"created": true,
"delivery_within_seconds": 25,
"message": {
"id": 33140,
"role": "agent",
"content": "Hi Nadia — I can see order 8812 on your screen. Want me to check it?",
"at": "10:52 AM"
}
}
الأخطاء
الحالة
سبب حدوثه
401
لم يُرسل رمز صالح.
403
الحساب أو مساحة العمل موقوفة.
404
معرّف الزائر أصبح فارغًا بعد الاقتطاع.
409
لم يعد ذلك الزائر على الموقع.
422
لا روبوت نشط في مساحة العمل للإرسال منه.
429
تم بلوغ حد المسار لهذا المستخدم.
500
تعذّر بدء الدردشة. ولم يُحفظ شيء، فالمحاولة من جديد آمنة.
GET/api/agent/push/vapid
يُرجع المفتاح العام الذي يحتاجه الجهاز قبل الاشتراك في الإشعارات.
المصادقة رمز Bearer بصلاحية agentحد المعدل بلا حد على المسار
يكون configured مساويًا لـ false على خادم لم تُهيَّأ فيه الإشعارات قط، ما يتيح للتطبيق شرح الوضع بدل الفشل عند خطوة الاشتراك.
المصادقة رمز Bearer بصلاحية agentحد المعدل 20 طلب كل 1 دقيقة لكل مستخدم مسجّل
يحدّث السجل أو ينشئه اعتمادًا على endpoint، لأن المتصفحات تعيد إصدار الاشتراك كلما دوّرته خدمة الإشعارات. وإعادة إرسال endpoint موجود تحدّث السجل بدل إنشاء ثانٍ.
المعاملات
المعامل
النوع
مطلوب
الوصف
endpoint
url
مطلوب
عنوان الإشعارات الذي يصدره المتصفح. يجب أن يكون رابط https، حتى 2048 محرفًا.
keys
object
مطلوب
زوج مفاتيح الاشتراك من المتصفح.
keys.p256dh
string
مطلوب
مفتاح p256dh من اشتراك المتصفح. حتى 255 محرفًا.
keys.auth
string
مطلوب
سر auth من اشتراك المتصفح. حتى 255 محرفًا.
device_name
string
اختياري
تسمية لهذا الجهاز تظهر بجانب الرمز. حتى 120 محرفًا.
المصادقة رمز Bearer بصلاحية agentحد المعدل بلا حد على المسار
تحديث جزئي: تتغير الحقول المرسلة فقط، وتُدمج خريطة events بدل استبدالها، فلا تستطيع نسخة تطبيق قديمة محو إعداد لا تعرفه. وتُتجاهل مفاتيح الأحداث غير المعروفة.
المعاملات
المعامل
النوع
مطلوب
الوصف
push_enabled
boolean
اختياري
المفتاح الرئيسي للإشعارات الفورية في هذا الحساب.
sound_enabled
boolean
اختياري
هل تصدر التنبيهات صوتًا.
vibrate_enabled
boolean
اختياري
هل تهتز التنبيهات على الجهاز.
email_enabled
boolean
اختياري
هل تُرسل التنبيهات بالبريد أيضًا.
events
object
اختياري
إعدادات لكل حدث، مفهرسة بالحدث: visitor_arrived وchat_started وvisitor_message وhandoff_requested وsla_breach. تُدمج مع المحفوظ.
events.*.push
boolean
اختياري
هل يرسل هذا الحدث إشعارًا. مطلوب لكل حدث تضمّنه.
events.*.sound
string
اختياري
اسم الصوت لهذا الحدث، أو null للافتراضي. حتى 24 محرفًا.
sound_pack
string
اختياري
اسم حزمة الأصوات. حتى 24 محرفًا.
volume
integer
اختياري
مستوى صوت التنبيه من 0 إلى 100.
quiet_hours_start
string
اختياري
بداية ساعات الهدوء بصيغة HH:MM بتوقيت الموظف نفسه.
quiet_hours_end
string
اختياري
نهاية ساعات الهدوء بصيغة HH:MM. ويجب إرسالها مع البداية.
quiet_hours_tz
string
اختياري
المنطقة الزمنية التي تُقرأ بها ساعات الهدوء، مثل Asia/Dubai. حتى 64 محرفًا.
dnd_minutes
integer
اختياري
إسكات التنبيهات هذا العدد من الدقائق، من 0 إلى 1440. أرسل 0 للإلغاء.
chatbot_filter
array
اختياري
نبّه على هذه الروبوتات فقط. وتُسقط المعرّفات خارج مساحة العمل، والنتيجة الفارغة تلغي المرشّح.
تحتاج ساعات الهدوء إلى بداية ونهاية معًا؛ نصف النافذة لا يفعل شيئًا.
422
فشل التحقق من أحد الحقول. وكائن errors يسميه.
500
تعذّر حفظ الإعدادات.
نقاط الأداة
النقاط العامة التي تناديها شيفرة التضمين من متصفحات زوارك. وُثِّقت لتتمكن من تصحيح تركيب أو بناء واجهة دردشة خاصة بك. وهي ليست واجهة تكامل، ولا تقبل أي منها رمز وصول.
المسار الأساسي/widget/{key}·7 نقطة نهاية
GET/widget/{key}/config
يُرجع الإعدادات العامة للروبوت: الهوية البصرية والترحيب ونموذج ما قبل الدردشة وبيانات الاتصال اللحظي.
المصادقة بدون مصادقة، عامةحد المعدل 60 طلب كل 1 دقيقة لكل عنوان IP
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
{
"conversation_id": "6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91",
"status": "bot",
"handoff_state": "bot_active",
"wait_remaining": null,
"messages": [
{
"id": 33126,
"role": "visitor",
"content": "I still have not received the replacement.",
"at": "2026-08-08T10:41:04+00:00"
},
{
"id": 33127,
"role": "assistant",
"content": "Let me check that order for you.",
"at": "2026-08-08T10:41:07+00:00"
}
]
}
الأخطاء
الحالة
سبب حدوثه
404
لا روبوت نشط بهذا المفتاح العام. والروبوت المعطّل يعطي الرد نفسه.
422
فشل التحقق من أحد الحقول. وكائن errors يسميه.
429
تم بلوغ حد المسار لعنوان IP هذا.
POST/widget/{key}/stream
يرسل رسالة زائر ويبث رد الذكاء الاصطناعي عبر Server-Sent Events.
المصادقة بدون مصادقة، عامةحد المعدل 20 طلب كل 1 دقيقة لكل عنوان IP
الاستجابة بصيغة text/event-stream لا JSON. وتصل الأحداث بالترتيب: meta أولًا، ثم أي عدد من أحداث delta، وربما recommendations، وأخيرًا done أو error. أما الرفض قبل بدء البث فهو استجابة خطأ JSON عادية.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
visitor_id
string
مطلوب
المعرّف الذي تسنده أداتك للزائر وتحتفظ به طوال الجلسة. حتى 100 محرف.
message
string
مطلوب
رسالة الزائر. حتى 4000 محرف، ولا يجوز أن تكون مسافات فقط.
conversation_id
uuid
اختياري
محادثة قائمة تريد متابعتها. اتركه ليبدأ محادثة جديدة.
meta
object
اختياري
سياق عن الزائر والصفحة. وقد يحمل meta.visitor الاسم والبريد والهاتف من نموذج ما قبل الدردشة لديك.
identity
string
اختياري
رمز هوية موقّع من خادمك أنت. يُتحقق منه قبل الوثوق بأي شيء فيه. حتى 4000 محرف.
الطلب
curl -N -X POST https://magizai.com/widget/cv_9f2a4c7e1b6d3a8f5c0e2b4d/stream \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-d '{
"visitor_id": "v_2c9a71b4e5",
"conversation_id": "6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91",
"message": "Where is my replacement?"
}'
الاستجابة
event: meta
data: {"conversation_id":"6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91","visitor_message_id":33128,"status":"bot"}
event: delta
data: {"delta":"Your replacement "}
event: delta
data: {"delta":"was posted this morning."}
event: recommendations
data: {"products":[{"id":41,"name":"Express delivery","price":"AED 25.00","currency":"AED","url":"https://acme.test/express","buy_url":"https://acme.test/express","image_url":null,"description":"Next-working-day delivery across the UAE.","in_stock":true}]}
event: done
data: {"message_id":33129,"source":"ai","sources":[{"title":"Shipping policy","url":"https://acme.test/shipping"}]}
الأخطاء
الحالة
سبب حدوثه
404
لا روبوت نشط بهذا المفتاح العام. والروبوت المعطّل يعطي الرد نفسه.
422
كانت الرسالة مسافات فقط.
422
فشل التحقق من أحد الحقول. وكائن errors يسميه.
429
تم بلوغ حد المسار لعنوان IP هذا.
POST/widget/{key}/chat/reset
يغلق محادثة الزائر الحالية ليبدأ الأداة محادثة نظيفة.
المصادقة بدون مصادقة، عامةحد المعدل 30 طلب كل 1 دقيقة لكل عنوان IP
متكرر الأثر ومحقَّق الملكية. يغلق المحادثة على الخادم، ثم تفتح الأداة محادثة جديدة، وهذا ما يمسح السياق.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
visitor_id
string
مطلوب
المعرّف الذي تسنده أداتك للزائر وتحتفظ به طوال الجلسة. حتى 100 محرف.
conversation_id
uuid
مطلوب
المحادثة المراد إغلاقها. ويجب أن تعود لمعرّف الزائر الذي ترسله.
{
"status": "agent",
"handoff_state": "human_connected",
"wait_remaining": null,
"messages": [
{
"id": 33131,
"role": "agent",
"content": "I have opened a claim with the courier and posted a replacement today.",
"at": "2026-08-08T10:47:20+00:00"
}
]
}
الأخطاء
الحالة
سبب حدوثه
404
لا محادثة بهذا المعرّف لهذا الروبوت ومعرّف الزائر هذا.