MagizAI
للمطورين

ابنِ على MagizAI

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

العنوان الأساسي https://magizai.com

البداية

كل الواجهات تتحدث JSON عبر HTTPS وتتوقع ترويسة Accept: application/json. أرسل رمزك في ترويسة Authorization، واقرأ رمز الحالة قبل المحتوى: الطلب المرفوض يحمل دائمًا حقل message يشرح السبب.

JSON فقط

الطلبات والاستجابات بصيغة JSON. الاستثناء الوحيد هو نقطة البث في الأداة، التي تُرجع أحداث Server-Sent Events.

محصورة بمساحة العمل

لا يصل الرمز إلا إلى مساحة العمل التي أُنشئ فيها. وطلب روبوت أو محادثة تخص حسابًا آخر يُرجع 404، ولا يُرجع بيانات مساحة عمل أخرى أبدًا.

بلا حالة

لا كوكيز ولا رمز CSRF ولا جلسة. كل طلب يحمل بيانات اعتماده، لذا يعمل النداء نفسه من خادم أو تطبيق هاتف أو مهمة مجدولة.

curl https://magizai.com/api/v1/me \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"

المصادقة

الرموز هي رموز Bearer من Laravel Sanctum. كل رمز يحمل صلاحية تحدد الواجهة التي يفتحها، ويجري التحقق من هذه الصلاحية مع كل طلب.

Authorization: Bearer <token>
Accept: application/json
رمز REST API

يُنشأ من لوحة التحكم في الإعدادات، ضمن لوحة 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 حد المعدل بلا حد على المسار
المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl https://magizai.com/api/v1/me \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "user": {
    "id": 12,
    "name": "Amelia Fox",
    "email": "[email protected]",
    "role": "owner"
  },
  "company": {
    "id": 3,
    "name": "Acme Ltd",
    "slug": "acme-ltd",
    "plan": "pro"
  }
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
GET /api/v1/chatbots

يسرد كل روبوت في مساحة العمل.

المصادقة رمز Bearer بصلاحية api حد المعدل بلا حد على المسار
المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl https://magizai.com/api/v1/chatbots \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "data": [
    {
      "id": 7,
      "public_key": "cv_9f2a4c7e1b6d3a8f5c0e2b4d",
      "name": "Support bot",
      "provider": "claude",
      "model": "claude-haiku-4-5",
      "is_active": true
    }
  ]
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
GET /api/v1/chatbots/{key}

يُرجع روبوتًا واحدًا مع هوية الأداة البصرية وعدد مصادر المعرفة لديه.

المصادقة رمز Bearer بصلاحية api حد المعدل بلا حد على المسار
المعاملات
المعامل النوع مطلوب الوصف
key string مطلوب في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
الطلب
curl https://magizai.com/api/v1/chatbots/cv_9f2a4c7e1b6d3a8f5c0e2b4d \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "data": {
    "public_key": "cv_9f2a4c7e1b6d3a8f5c0e2b4d",
    "name": "Support bot",
    "provider": "claude",
    "model": "claude-haiku-4-5",
    "is_active": true,
    "knowledge_sources": 14,
    "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 لا سجل بهذا المعرّف في مساحة العمل هذه.
GET /api/v1/chatbots/{key}/conversations

يسرد محادثات روبوت، الأحدث نشاطًا أولًا، بنتيجة مقسمة إلى صفحات.

المصادقة رمز Bearer بصلاحية api حد المعدل بلا حد على المسار
المعاملات
المعامل النوع مطلوب الوصف
key string مطلوب في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
per_page integer اختياري في الاستعلام. عدد الصفوف في الصفحة. القيمة الافتراضية 20 والحد الأعلى 100.
الطلب
curl "https://magizai.com/api/v1/chatbots/cv_9f2a4c7e1b6d3a8f5c0e2b4d/conversations?per_page=2" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "current_page": 1,
  "data": [
    {
      "id": 4821,
      "public_id": "6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91",
      "status": "bot",
      "visitor_id": "v_2c9a71b4e5",
      "last_message_at": "2026-08-08T09:41:12.000000Z"
    },
    {
      "id": 4820,
      "public_id": "1d3f92ac-77b1-4a0d-8c6e-2f5a9b4c1d70",
      "status": "closed",
      "visitor_id": "v_71ad03f9c2",
      "last_message_at": "2026-08-08T08:02:55.000000Z"
    }
  ],
  "first_page_url": "https://magizai.com/api/v1/chatbots/cv_9f2a4c7e1b6d3a8f5c0e2b4d/conversations?page=1",
  "from": 1,
  "last_page": 34,
  "last_page_url": "https://magizai.com/api/v1/chatbots/cv_9f2a4c7e1b6d3a8f5c0e2b4d/conversations?page=34",
  "next_page_url": "https://magizai.com/api/v1/chatbots/cv_9f2a4c7e1b6d3a8f5c0e2b4d/conversations?page=2",
  "path": "https://magizai.com/api/v1/chatbots/cv_9f2a4c7e1b6d3a8f5c0e2b4d/conversations",
  "per_page": 2,
  "prev_page_url": null,
  "to": 2,
  "total": 67
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
POST /api/v1/chatbots/{key}/knowledge

يضيف مستندًا نصيًا أو سؤالًا وجوابًا إلى روبوت ويدرّبه فورًا.

المصادقة رمز 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."
      }'
الاستجابة
{
  "data": {
    "id": 918,
    "title": "Refund policy",
    "type": "text",
    "status": "ready",
    "chunk_count": 3
  }
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
422 حُفظ المستند لكن تعذّر تدريبه. وتحمل الاستجابة معرّفه وحالته لتعيد التدريب بدل رفعه من جديد.
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 حد المعدل بلا حد على المسار
المعاملات
المعامل النوع مطلوب الوصف
conversation uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
الطلب
curl https://magizai.com/api/v1/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91 \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "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 محرفًا.
password string مطلوب كلمة مرور ذلك المستخدم في لوحة التحكم.
الطلب
curl -X POST https://magizai.com/api/portal/login \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "email": "[email protected]",
        "password": "correct-horse-battery-staple"
      }'
الاستجابة
{
  "token": "17|Ck2Ft9pQvYb3xLmR8sJd0aWnZeH6uT4gPqK1oI5c",
  "user": {
    "name": "Amelia Fox",
    "email": "[email protected]",
    "role": "owner"
  },
  "company": {
    "name": "Acme Ltd",
    "plan": "pro"
  },
  "brand": {
    "name": "Acme Support",
    "powered_by": "MagizAI",
    "logo_url": "https://cdn.acme.test/logo.svg"
  }
}
الأخطاء
الحالة سبب حدوثه
401 البريد أو كلمة المرور خاطئة. والنص نفسه سواء كان العنوان موجودًا أم لا.
403 البوابة مطفأة لهذه المساحة، أو المساحة موقوفة، أو المستخدم ليس مالكًا ولا مسؤولًا. وصياغته كصياغة كلمة المرور الخاطئة عن قصد.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
429 محاولات كثيرة، من حد المسار أو من قفل الحساب المشترك. وترويسة Retry-After تحدد مدة الانتظار.
POST /api/portal/logout

يلغي رمز البوابة المستخدم في النداء.

المصادقة رمز Bearer بصلاحية portal حد المعدل بلا حد على المسار
المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl -X POST https://magizai.com/api/portal/logout \
  -H "Authorization: Bearer $PORTAL_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "message": "Signed out."
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
GET /api/portal/me

يُرجع المستخدم المسجّل ومساحة العمل وعلامتها البيضاء وحدود الخطة واستهلاك الشهر الحالي.

المصادقة رمز Bearer بصلاحية portal حد المعدل بلا حد على المسار

يكون monthly_message_limit مساويًا لـ null في الخطة غير المحدودة، ومعه usage_percent كذلك.

المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl https://magizai.com/api/portal/me \
  -H "Authorization: Bearer $PORTAL_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "user": {
    "name": "Amelia Fox",
    "email": "[email protected]",
    "role": "owner"
  },
  "company": {
    "name": "Acme Ltd",
    "plan": "pro"
  },
  "brand": {
    "name": "Acme Support",
    "powered_by": "MagizAI",
    "logo_url": "https://cdn.acme.test/logo.svg"
  },
  "limits": {
    "plan": "Pro",
    "monthly_message_limit": 10000,
    "chatbot_limit": 5,
    "agent_seats": 10
  },
  "usage": {
    "messages_used": 3142,
    "message_limit": 10000,
    "usage_percent": 31,
    "chatbots": 2
  }
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
GET /api/portal/chatbots

يسرد كل روبوت في مساحة العمل مع عدد مصادر المعرفة والمحادثات.

المصادقة رمز Bearer بصلاحية portal حد المعدل بلا حد على المسار
المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl https://magizai.com/api/portal/chatbots \
  -H "Authorization: Bearer $PORTAL_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "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
    }
  ]
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
GET /api/portal/chatbots/{key}

يُرجع روبوتًا واحدًا مع شخصيته وتعليماته ورسالة الترحيب وهويته البصرية.

المصادقة رمز Bearer بصلاحية portal حد المعدل بلا حد على المسار
المعاملات
المعامل النوع مطلوب الوصف
key string مطلوب في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
الطلب
curl https://magizai.com/api/portal/chatbots/cv_9f2a4c7e1b6d3a8f5c0e2b4d \
  -H "Authorization: Bearer $PORTAL_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "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 مطلوب في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
الطلب
curl https://magizai.com/api/portal/chatbots/cv_9f2a4c7e1b6d3a8f5c0e2b4d/knowledge \
  -H "Authorization: Bearer $PORTAL_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "data": [
    {
      "id": 918,
      "type": "text",
      "title": "Refund policy",
      "source_url": null,
      "status": "ready",
      "chunk_count": 3,
      "created_at": "2026-08-08T09:12:44+00:00"
    },
    {
      "id": 902,
      "type": "url",
      "title": "acme.test",
      "source_url": "https://acme.test/shipping",
      "status": "processing",
      "chunk_count": 0,
      "created_at": "2026-08-07T16:30:02+00:00"
    }
  ]
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
POST /api/portal/chatbots/{key}/knowledge

يضيف ملاحظة نصية أو زوج سؤال وجواب أو رابطًا لزحفه.

المصادقة رمز 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."
      }'
الاستجابة
{
  "data": {
    "id": 919,
    "type": "qa",
    "title": "Weekend delivery",
    "source_url": null,
    "status": "pending",
    "chunk_count": 0,
    "created_at": "2026-08-08T10:04:18+00:00"
  }
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
DELETE /api/portal/chatbots/{key}/knowledge/{source}

يحذف مصدر معرفة وملفه المخزّن وكل ما فُهرس منه.

المصادقة رمز Bearer بصلاحية portal صلاحية الدور manage-content حد المعدل بلا حد على المسار
المعاملات
المعامل النوع مطلوب الوصف
key string مطلوب في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
source integer مطلوب في المسار. معرّف مصدر المعرفة.
الطلب
curl -X DELETE https://magizai.com/api/portal/chatbots/cv_9f2a4c7e1b6d3a8f5c0e2b4d/knowledge/919 \
  -H "Authorization: Bearer $PORTAL_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "message": "Knowledge source removed."
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
GET /api/portal/keys

يسرد كل مزودي الذكاء الاصطناعي وما إذا كان لمساحة العمل مفتاح خاص لدى كل منهم.

المصادقة رمز Bearer بصلاحية portal حد المعدل بلا حد على المسار

لا يُعاد المفتاح المخزّن أبدًا، بل آخر أربعة محارف منه وما إذا كان موجودًا.

المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl https://magizai.com/api/portal/keys \
  -H "Authorization: Bearer $PORTAL_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "data": [
    { "provider": "claude",     "label": "Anthropic Claude", "last_four": "9f2c", "configured": true },
    { "provider": "openai",     "label": "OpenAI",           "last_four": null,   "configured": false },
    { "provider": "gemini",     "label": "Google Gemini",    "last_four": null,   "configured": false },
    { "provider": "deepseek",   "label": "DeepSeek",         "last_four": null,   "configured": false },
    { "provider": "kimi",       "label": "Moonshot Kimi",    "last_four": null,   "configured": false },
    { "provider": "groq",       "label": "Groq (Llama)",     "last_four": null,   "configured": false },
    { "provider": "mistral",    "label": "Mistral",          "last_four": null,   "configured": false },
    { "provider": "openrouter", "label": "OpenRouter",       "last_four": null,   "configured": false }
  ]
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
PUT /api/portal/keys/{provider}

يحفظ أو يستبدل مفتاح مساحة العمل لمزود واحد.

المصادقة رمز Bearer بصلاحية portal صلاحية الدور manage-workspace حد المعدل بلا حد على المسار
المعاملات
المعامل النوع مطلوب الوصف
provider string مطلوب في المسار. رمز المزود: claude أو openai أو gemini أو deepseek أو kimi أو groq أو mistral أو openrouter.
api_key string مطلوب مفتاح المزود. يُخزَّن مشفرًا ولا يُعاد أبدًا. حتى 300 محرف.
الطلب
curl -X PUT https://magizai.com/api/portal/keys/openai \
  -H "Authorization: Bearer $PORTAL_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{ "api_key": "sk-proj-0f4c8b2e6a1d7f3c9b5e0a2d" }'
الاستجابة
{
  "data": {
    "provider": "openai",
    "last_four": "a2d0",
    "configured": true
  }
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
422 رمز المزود غير معروف.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
DELETE /api/portal/keys/{provider}

يحذف مفتاح مساحة العمل لمزود واحد.

المصادقة رمز Bearer بصلاحية portal صلاحية الدور manage-workspace حد المعدل بلا حد على المسار

النداء متكرر الأثر. حذف مزود بلا مفتاح يُرجع 200 أيضًا مع رسالة تفيد بأن لا مفتاح كان محفوظًا.

المعاملات
المعامل النوع مطلوب الوصف
provider string مطلوب في المسار. رمز المزود: claude أو openai أو gemini أو deepseek أو kimi أو groq أو mistral أو openrouter.
الطلب
curl -X DELETE https://magizai.com/api/portal/keys/openai \
  -H "Authorization: Bearer $PORTAL_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "message": "API key removed."
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
422 رمز المزود غير معروف.
GET /api/portal/analytics

يُرجع إجماليات المحادثات والرسائل والوحدات والتكلفة لهذا الشهر في مساحة العمل.

المصادقة رمز Bearer بصلاحية portal حد المعدل بلا حد على المسار

الحقل cost بوحدات العملة الكاملة، محوّلًا عن إجماليات الميكروسنت المحفوظة داخليًا. وتبدأ الفترة دائمًا من أول يوم في الشهر الحالي.

المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl https://magizai.com/api/portal/analytics \
  -H "Authorization: Bearer $PORTAL_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "data": {
    "period": "month",
    "since": "2026-08-01T00:00:00+00:00",
    "conversations": 412,
    "messages": {
      "ai_replies": 1904,
      "human_replies": 233,
      "visitor_messages": 2088,
      "total": 4225
    },
    "tokens": 1874320,
    "cost": 4.216874,
    "messages_used": 3142
  }
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
GET /api/portal/widget-snippet

يُرجع وسم شيفرة التضمين الجاهز للصق لروبوت مساحة العمل.

المصادقة رمز Bearer بصلاحية portal حد المعدل بلا حد على المسار

يختار أول روبوت نشط، وإن لم يوجد فأحدث روبوت أُنشئ.

المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl https://magizai.com/api/portal/widget-snippet \
  -H "Authorization: Bearer $PORTAL_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "data": {
    "public_key": "cv_9f2a4c7e1b6d3a8f5c0e2b4d",
    "snippet": "<script src=\"https://magizai.com/widget.js\" data-key=\"cv_9f2a4c7e1b6d3a8f5c0e2b4d\" defer></script>"
  }
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
404 لا روبوت في مساحة العمل بعد، فلا شيفرة تضمين لإرجاعها.

واجهة تطبيق الموظف

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

المسار الأساسي /api/agent · 32 نقطة نهاية
POST /api/agent/login

يبدّل بريدًا وكلمة مرور برمز Bearer لتطبيق الموظف.

المصادقة بدون مصادقة، عامة حد المعدل 10 طلب كل 1 دقيقة لكل عنوان IP

لا يسجّل الدخول هنا إلا المالك والمسؤول والموظف. ويُرفض مقعد المشاهدة، ويُرفض أي حساب مساحة عمله موقوفة. وتتشارك المحاولات عدّاد القفل نفسه مع نموذج الدخول على الويب وواجهة البوابة.

المعاملات
المعامل النوع مطلوب الوصف
email string مطلوب البريد الإلكتروني لمستخدم في لوحة التحكم. حتى 255 محرفًا.
password string مطلوب كلمة مرور ذلك المستخدم في لوحة التحكم.
device_name string اختياري تسمية لهذا الجهاز تظهر بجانب الرمز. حتى 120 محرفًا.
الطلب
curl -X POST https://magizai.com/api/agent/login \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "email": "[email protected]",
        "password": "correct-horse-battery-staple",
        "device_name": "Sara iPhone 15"
      }'
الاستجابة
{
  "token": "42|Yb7Kd1sQvNc3xLmR8sJd0aWnZeH6uT4gPqK1oI5c",
  "expires_at": "2026-09-07T10:14:02+00:00",
  "device_name": "Sara iPhone 15",
  "user": {
    "id": 58,
    "name": "Sara Bell",
    "email": "[email protected]",
    "role": "Agent",
    "avatar": "https://cdn.acme.test/avatars/58.png"
  },
  "company": {
    "id": 3,
    "name": "Acme Ltd",
    "plan": "pro"
  }
}
الأخطاء
الحالة سبب حدوثه
401 البريد أو كلمة المرور خاطئة. والنص نفسه سواء كان العنوان موجودًا أم لا.
403 هذا الحساب لا يستطيع إدارة المحادثات، أو مساحة عمله غير متاحة.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
429 محاولات كثيرة، من حد المسار أو من قفل الحساب المشترك. وترويسة Retry-After تحدد مدة الانتظار.
POST /api/agent/refresh

يبدّل رمز موظف ما زال صالحًا برمز جديد.

المصادقة رمز Bearer بصلاحية agent حد المعدل 6 طلب كل 60 دقيقة لكل مستخدم مسجّل

جدّد الرمز بعد تجاوزه نصف عمره. ويُترك الرمز القديم لينتهي وحده بدل إلغائه، فلا تُخرج استجابة ضائعة في الطريق جهازًا من حسابه.

المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl -X POST https://magizai.com/api/agent/refresh \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "token": "43|Qw9Lm2tRvNc3xLmR8sJd0aWnZeH6uT4gPqK1oI5c",
  "expires_at": "2026-09-07T11:02:31+00:00",
  "device_name": "Sara iPhone 15",
  "user": {
    "id": 58,
    "name": "Sara Bell",
    "email": "[email protected]",
    "role": "Agent",
    "avatar": "https://cdn.acme.test/avatars/58.png"
  },
  "company": {
    "id": 3,
    "name": "Acme Ltd",
    "plan": "pro"
  }
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
429 تم بلوغ حد المسار لهذا المستخدم.
GET /api/agent/me

يُرجع الموظف المسجّل ومساحة عمله وموعد انتهاء الرمز الحالي.

المصادقة رمز Bearer بصلاحية agent حد المعدل بلا حد على المسار
المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl https://magizai.com/api/agent/me \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "user": {
    "id": 58,
    "name": "Sara Bell",
    "email": "[email protected]",
    "role": "Agent",
    "avatar": "https://cdn.acme.test/avatars/58.png"
  },
  "company": {
    "id": 3,
    "name": "Acme Ltd",
    "plan": "pro"
  },
  "expires_at": "2026-09-07T10:14:02+00:00",
  "device_name": "Sara iPhone 15"
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
POST /api/agent/logout

يلغي رمز الموظف المستخدم في النداء.

المصادقة رمز Bearer بصلاحية agent حد المعدل بلا حد على المسار
المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl -X POST https://magizai.com/api/agent/logout \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "message": "Signed out."
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
POST /api/agent/broadcasting/auth

يصرّح باشتراك قناة لحظية لتطبيق يحمل رمزًا بدل كوكي الجلسة.

المصادقة رمز Bearer بصلاحية agent حد المعدل بلا حد على المسار

نقطة البث في Laravel تتوقع كوكي جلسة لا تملكه التطبيقات. وهذه هي منطق التصريح نفسه لكن عبر رمز Bearer.

المعاملات
المعامل النوع مطلوب الوصف
socket_id string مطلوب معرّف الاتصال الذي يمنحه الاتصال اللحظي.
channel_name string مطلوب اسم القناة المراد الاشتراك فيها.
الطلب
curl -X POST https://magizai.com/api/agent/broadcasting/auth \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "socket_id": "812734.1904221",
        "channel_name": "private-company.3"
      }'
الاستجابة
{
  "auth": "reverbappkey:6f1c0a9b8e7d5c4b3a2f1e0d9c8b7a6f5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c0b"
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
403 حامل الرمز غير مسموح له بتلك القناة.
GET /api/agent/inbox

يُرجع تغذية صندوق الوارد: قائمة المحادثات وعدّادات غير المقروء وإجماليات الأقسام.

المصادقة رمز Bearer بصلاحية agent حد المعدل بلا حد على المسار

تحمل الاستجابة الواحدة ستين صفًا كحد أقصى، بينما يعدّ الحقل groups صندوق الوارد كله، فاستخدم filter للوصول إلى بقية القسم. وتمرير conversation يُرجع تلك المحادثة في active ويعلّمها مقروءة.

المعاملات
المعامل النوع مطلوب الوصف
filter string اختياري في الاستعلام. تضييق القائمة: all أو waiting أو mine أو team أو ai أو human أو resolved. القيمة الافتراضية all.
conversation uuid اختياري في الاستعلام. افتح هذه المحادثة وأعدها في active وعلّمها مقروءة.
الطلب
curl "https://magizai.com/api/agent/inbox?filter=waiting" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "conversations": [
    {
      "id": "6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91",
      "chatbot": "Support bot",
      "visitor": "Nadia Karim",
      "email": "[email protected]",
      "status": "agent",
      "channel": "website",
      "last_at": "2 minutes ago",
      "preview": "I still have not received the replacement…",
      "escalated": true,
      "unread": 2,
      "resolution": null,
      "tags": [
        { "id": 4, "name": "Delivery", "color": "#0a7d5f" }
      ],
      "group": "waiting",
      "handoff_state": "handoff_pending",
      "assigned_to": null,
      "mine": false,
      "online": true,
      "waiting_seconds": 143
    }
  ],
  "counts": {
    "all": 412,
    "ai": 301,
    "human": 74,
    "resolved": 37,
    "unread": 6
  },
  "groups": {
    "waiting": 3,
    "mine": 5,
    "team": 12,
    "ai": 355,
    "resolved": 37
  },
  "listed": 1,
  "list_limit": 60,
  "active": null
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
GET /api/agent/conversations/{conversation}

يُرجع محادثة واحدة كاملة مع نصها وملف الزائر والوسوم والملاحظات والأحداث.

المصادقة رمز Bearer بصلاحية agent حد المعدل بلا حد على المسار

هذه نقطة صندوق الوارد نفسها مع اختيار المحادثة مسبقًا، فالمحتوى بالشكل ذاته وتصلك المحادثة المطلوبة في active. ومعرّف غير موجود في مساحة العمل ليس خطأ: تحصل على 200 مع active مساويًا لـ null. وفتح المحادثة يعلّمها مقروءة.

المعاملات
المعامل النوع مطلوب الوصف
conversation uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
الطلب
curl https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91 \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "conversations": [],
  "counts": { "all": 412, "ai": 301, "human": 74, "resolved": 37, "unread": 6 },
  "groups": { "waiting": 3, "mine": 5, "team": 12, "ai": 355, "resolved": 37 },
  "listed": 0,
  "list_limit": 60,
  "active": {
    "id": "6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91",
    "status": "agent",
    "resolution": null,
    "resolved_at": null,
    "handoff_requested_at": "Aug 8, 2026 · 10:41 AM",
    "escalated": true,
    "resolved_by_ai": false,
    "events": [
      { "type": "human_connected", "source": "agent", "at": "Aug 8 · 10:42 AM" }
    ],
    "tags": [
      { "id": 4, "name": "Delivery", "color": "#0a7d5f", "source": "manual" }
    ],
    "tag_suggestions": [
      { "id": 71, "name": "Refund", "confidence": 0.82, "reason": "Visitor asked for money back." }
    ],
    "visitor": "Nadia Karim",
    "chatbot": "Support bot",
    "channel": "website",
    "email": "[email protected]",
    "phone": null,
    "page": "https://acme.test/orders/8812",
    "locale": "en",
    "joined": "Aug 8, 2026",
    "msg_count": 9,
    "group": "mine",
    "handoff_state": "human_connected",
    "assigned_to": "Sara Bell",
    "mine": true,
    "online": true,
    "last_seen": "12 seconds ago",
    "waiting_seconds": null,
    "referrer": "https://www.google.com/",
    "entry_page": "https://acme.test/",
    "device": "mobile",
    "browser": "Safari",
    "os": "iOS",
    "country": "AE",
    "timezone": "Asia/Dubai",
    "page_views": 6,
    "prechat": [
      { "field": "name", "value": "Nadia Karim" },
      { "field": "email", "value": "[email protected]" }
    ],
    "prechat_greeting": "Before we start, please introduce yourself.",
    "journey": [
      { "url": "https://acme.test/orders/8812", "at": "Aug 8 · 10:38 AM" },
      { "url": "https://acme.test/", "at": null }
    ],
    "revenue_cents": 24900,
    "revenue_amount": 249.0,
    "revenue_currency": "AED",
    "revenue_label": "AED 249.00",
    "summary": "Replacement for order 8812 never arrived; courier shows delivered.",
    "summary_at": "3 minutes ago",
    "intent": "support",
    "lead_id": 233,
    "lead_status": "new",
    "messages": [
      { "id": 33126, "role": "visitor", "content": "I still have not received the replacement.", "at": "10:41 AM" },
      { "id": 33127, "role": "agent", "content": "Let me pull up the courier record now.", "at": "10:42 AM" }
    ],
    "notes": [
      { "id": 12, "body": "Courier claims delivered — opening a claim.", "author": "Sara Bell", "at": "Aug 8 · 10:44 AM" }
    ],
    "watchers": [],
    "watching": false,
    "detected_language": "en",
    "routed_by": "VIP customers",
    "blocked": false,
    "abuse_strikes": 0
  }
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
POST /api/agent/conversations/{conversation}/reply

يرسل رد الموظف ويوصله عبر القناة التي تجري عليها المحادثة.

المصادقة رمز 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"
  }
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
422 كان الرد مسافات فقط.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
POST /api/agent/conversations/{conversation}/takeover

ينتزع المحادثة من الذكاء الاصطناعي ويسندها إلى الموظف المنادي.

المصادقة رمز Bearer بصلاحية agent صلاحية الدور handle-conversations حد المعدل بلا حد على المسار
المعاملات
المعامل النوع مطلوب الوصف
conversation uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
الطلب
curl -X POST https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/takeover \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "status": "agent"
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
POST /api/agent/conversations/{conversation}/release

يعيد المحادثة إلى الذكاء الاصطناعي.

المصادقة رمز Bearer بصلاحية agent صلاحية الدور handle-conversations حد المعدل بلا حد على المسار
المعاملات
المعامل النوع مطلوب الوصف
conversation uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
الطلب
curl -X POST https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/release \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "status": "bot"
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
POST /api/agent/conversations/{conversation}/resolve

يغلق المحادثة بوصفها محلولة.

المصادقة رمز Bearer بصلاحية agent صلاحية الدور handle-conversations حد المعدل بلا حد على المسار

المحادثة المحلولة تُفتح من تلقاء نفسها إن عاد الزائر برسالة جديدة.

المعاملات
المعامل النوع مطلوب الوصف
conversation uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
الطلب
curl -X POST https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/resolve \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "status": "closed",
  "resolution": "resolved"
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
POST /api/agent/conversations/{conversation}/reopen

يعيد فتح محادثة مغلقة ويسلّمها إلى الذكاء الاصطناعي.

المصادقة رمز Bearer بصلاحية agent صلاحية الدور handle-conversations حد المعدل بلا حد على المسار
المعاملات
المعامل النوع مطلوب الوصف
conversation uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
الطلب
curl -X POST https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/reopen \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "status": "bot"
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
GET /api/agent/tags

يسرد فهرس وسوم مساحة العمل.

المصادقة رمز Bearer بصلاحية agent حد المعدل بلا حد على المسار
المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl https://magizai.com/api/agent/tags \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "tags": [
    { "id": 4, "name": "Delivery", "color": "#0a7d5f" },
    { "id": 5, "name": "Refund", "color": "#b4531f" }
  ]
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
POST /api/agent/conversations/{conversation}/tags

يربط وسمًا من الفهرس بمحادثة.

المصادقة رمز Bearer بصلاحية agent حد المعدل بلا حد على المسار

يجب أن يكون الوسم موجودًا في فهرس مساحة العمل؛ أنشئ الوسوم من لوحة التحكم.

المعاملات
المعامل النوع مطلوب الوصف
conversation uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
tag_id integer مطلوب معرّف وسم موجود سلفًا في فهرس مساحة العمل.
الطلب
curl -X POST https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/tags \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{ "tag_id": 4 }'
الاستجابة
{
  "attached": 4
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
DELETE /api/agent/conversations/{conversation}/tags/{tag}

يزيل وسمًا من محادثة.

المصادقة رمز Bearer بصلاحية agent حد المعدل بلا حد على المسار
المعاملات
المعامل النوع مطلوب الوصف
conversation uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
tag integer مطلوب في المسار. معرّف الوسم.
الطلب
curl -X DELETE https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/tags/4 \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "detached": 4
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
GET /api/agent/canned

يسرد الردود الجاهزة المتاحة لهذا الموظف، الأكثر استخدامًا أولًا.

المصادقة رمز Bearer بصلاحية agent حد المعدل بلا حد على المسار

الردود المشتركة مع ردود هذا الموظف، مرتبة حسب تكرار الاستخدام.

المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl https://magizai.com/api/agent/canned \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "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 حد المعدل بلا حد على المسار

لا يعلّم الموظف ردًا مستخدمًا إلا إن كان مشتركًا أو خاصًا به.

المعاملات
المعامل النوع مطلوب الوصف
canned integer مطلوب في المسار. معرّف الرد الجاهز.
الطلب
curl -X POST https://magizai.com/api/agent/canned/19/used \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "ok": true
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
403 الرد الجاهز يخص موظفًا آخر وليس مشتركًا.
404 لا رد جاهز بهذا المعرّف في مساحة العمل هذه.
GET /api/agent/conversations/{conversation}/customer-context

يُرجع طلبات Shopify واشتراك Stripe للزائر من أجل لوحة العميل.

المصادقة رمز Bearer بصلاحية agent حد المعدل بلا حد على المسار

يتراجع التكاملان بلطف بدل الفشل. يكون connected مساويًا لـ false حين لا تكون مساحة العمل قد ربطت تلك الخدمة؛ فيأتي shopify.orders مصفوفة فارغة وstripe.data مساويًا لـ null. ويأتي stripe.data أيضًا بالشكل {"found": false} حين يكون Stripe مربوطًا لكن لا عميل يطابق بريد الزائر.

المعاملات
المعامل النوع مطلوب الوصف
conversation uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
الطلب
curl https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/customer-context \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "email": "[email protected]",
  "shopify": {
    "connected": true,
    "orders": [
      {
        "name": "#8812",
        "total": "249.00 AED",
        "financial_status": "paid",
        "fulfillment_status": "fulfilled",
        "created_at": "Aug 1, 2026",
        "url": "https://acme.test/account/orders/5541882"
      }
    ]
  },
  "stripe": {
    "connected": true,
    "data": {
      "found": true,
      "customer": {
        "name": "Nadia Karim",
        "email": "[email protected]"
      },
      "subscriptions": [
        {
          "status": "active",
          "plan": "Care Plus",
          "amount": "29.00 AED",
          "renews": "Sep 1, 2026"
        }
      ]
    }
  }
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
POST /api/agent/conversations/{conversation}/revenue

يضبط أو يمسح قيمة الصفقة المنسوبة إلى محادثة.

المصادقة رمز Bearer بصلاحية agent صلاحية الدور handle-conversations حد المعدل بلا حد على المسار

أرسل amount مساويًا لـ null لمسح القيمة. وتعود العملة إلى المحفوظ في المحادثة، ثم إلى USD.

المعاملات
المعامل النوع مطلوب الوصف
conversation uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
amount number اختياري قيمة الصفقة بوحدات العملة الكاملة، حتى 100,000,000. أرسل null لمسحها.
currency string اختياري رمز العملة من ثلاثة أحرف. ويعود إلى القيمة المحفوظة في المحادثة، ثم إلى USD.
الطلب
curl -X POST https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/revenue \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{ "amount": 249, "currency": "AED" }'
الاستجابة
{
  "revenue_cents": 24900,
  "revenue_amount": 249.0,
  "revenue_currency": "AED",
  "revenue_label": "AED 249.00"
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
POST /api/agent/conversations/{conversation}/lead

يحفظ بيانات التواصل الملتقطة في المحادثة بوصفها عميلًا محتملًا.

المصادقة رمز Bearer بصلاحية agent صلاحية الدور handle-conversations حد المعدل بلا حد على المسار

يحتاج إلى اسم أو بريد أو هاتف ملتقط سلفًا في المحادثة، وإلا فلا شيء ليُحفظ.

المعاملات
المعامل النوع مطلوب الوصف
conversation uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
الطلب
curl -X POST https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/lead \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "lead": {
    "id": 233,
    "status": "new",
    "source": "manual"
  }
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
422 لم يُلتقط اسم ولا بريد ولا هاتف في هذه المحادثة بعد.
POST /api/agent/conversations/{conversation}/suggest

يصوغ ردًا مقترحًا للموظف مستندًا إلى معرفة الروبوت.

المصادقة رمز 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."
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
429 تم بلوغ حد المسار لهذا المستخدم.
POST /api/agent/conversations/{conversation}/enhance

يعيد صياغة مسودة الموظف نحويًا أو أسلوبيًا.

المصادقة رمز Bearer بصلاحية agent صلاحية الدور handle-conversations حد المعدل 30 طلب كل 1 دقيقة لكل مستخدم مسجّل

يكلف نداء ذكاء اصطناعي واحدًا. وإن تعذر على النموذج تحسين النص عاد الأصل مع enhanced مساوٍ لـ false.

المعاملات
المعامل النوع مطلوب الوصف
conversation uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
body string مطلوب المسودة المراد إعادة صياغتها. حتى 4000 محرف، ولا يجوز أن تكون مسافات فقط.
mode string اختياري القيمة fix أو professional أو friendly أو concise أو expand. الافتراضية fix.
الطلب
curl -X POST https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/enhance \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "body": "claim is open, replacement sent today",
        "mode": "professional"
      }'
الاستجابة
{
  "text": "The claim is open and a replacement was posted today.",
  "enhanced": true
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404 لا سجل بهذا المعرّف في مساحة العمل هذه.
422 كانت المسودة مسافات فقط.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
429 تم بلوغ حد المسار لهذا المستخدم.
POST /api/agent/conversations/{conversation}/summary

يولّد ملخصًا داخليًا قصيرًا للمحادثة.

المصادقة رمز Bearer بصلاحية agent صلاحية الدور handle-conversations حد المعدل 30 طلب كل 1 دقيقة لكل مستخدم مسجّل
المعاملات
المعامل النوع مطلوب الوصف
conversation uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
الطلب
curl -X POST https://magizai.com/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/summary \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "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.
الطلب
curl -X POST https://magizai.com/api/agent/suggestion/1204/outcome \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{ "outcome": "edited" }'
الاستجابة
{
  "ok": true
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404 لا اقتراح بهذا المعرّف في مساحة العمل هذه.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
429 تم بلوغ حد المسار لهذا المستخدم.
GET /api/agent/visitors

يسرد كل من يتصفح مواقع مساحة العمل الآن، بمن فيهم من لم يفتح الدردشة.

المصادقة رمز Bearer بصلاحية agent حد المعدل بلا حد على المسار

يخبرك enabled إن كان أي روبوت نشط قد فُعّلت فيه ميزة الزوار المتصلين. والحقل poll_seconds هو الفاصل الذي يريده الخادم، فاقرأه بدل تثبيت رقم في الشيفرة.

المعاملات
المعامل النوع مطلوب الوصف
limit integer اختياري في الاستعلام. عدد الزوار المطلوب إرجاعه. يُحصر بين 1 و200، والافتراضي 100.
الطلب
curl "https://magizai.com/api/agent/visitors?limit=50" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "visitors": [
    {
      "id": "90211",
      "visitor_id": "v_2c9a71b4e5",
      "session_token": "ps_5f1c0a9b8e7d5c4b3a2f1e0d",
      "label": "Nadia Karim",
      "short": "2C9A",
      "name": "Nadia Karim",
      "email": "[email protected]",
      "current_url": "https://acme.test/orders/8812",
      "current_title": "Order 8812",
      "entry_url": "https://acme.test/",
      "referrer": "https://www.google.com/",
      "country": "AE",
      "device": "mobile",
      "browser": "Safari",
      "os": "iOS",
      "page_views": 6,
      "seconds_on_site": 412,
      "last_seen_at": "2026-08-08T10:46:51+00:00",
      "started_at": "2026-08-08T10:39:59+00:00",
      "state": "chatting",
      "conversation_id": "6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91",
      "unread": 2,
      "chatbot": "Support bot"
    }
  ],
  "counts": {
    "total": 1,
    "browsing": 0,
    "chatting": 1,
    "waiting": 0
  },
  "poll_seconds": 25,
  "enabled": true
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
POST /api/agent/visitors/{visitor}/invite

يبدأ محادثة مع زائر يتصفح بإرسال أول رسالة إليه.

المصادقة رمز 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 على خادم لم تُهيَّأ فيه الإشعارات قط، ما يتيح للتطبيق شرح الوضع بدل الفشل عند خطوة الاشتراك.

المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl https://magizai.com/api/agent/push/vapid \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "configured": true,
  "public_key": "BEl62iUYgUivxIkv69yViEuiBIa-Ib9-SkvMeAtA3LFgDzkrxZJjSgSnfckjBJuBkr3qBUYIHBQFLXYp5Nksh8U"
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
POST /api/agent/push/subscribe

يسجّل جهازًا لاستقبال الإشعارات الفورية.

المصادقة رمز 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 محرفًا.
platform string اختياري القيمة ios أو android أو desktop.
الطلب
curl -X POST https://magizai.com/api/agent/push/subscribe \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "endpoint": "https://web.push.apple.com/QK9x2m4Lp0",
        "keys": {
          "p256dh": "BJx7Qm2f0aLd9k3sVn1cRt8yUu5oWq4eZa6hGi2jKl0",
          "auth": "9fK2sQ7vN1cX3mLp"
        },
        "device_name": "Sara iPhone 15",
        "platform": "ios"
      }'
الاستجابة
{
  "ok": true,
  "id": 77,
  "devices": 2
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
422 العنوان ليس رابط https، فلا يمكن أن يكون خدمة إشعارات حقيقية.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
429 تم بلوغ حد المسار لهذا المستخدم.
500 تعذّر تسجيل الجهاز للتنبيهات.
DELETE /api/agent/push/subscribe

يزيل اشتراك الإشعارات لهذا الجهاز.

المصادقة رمز Bearer بصلاحية agent حد المعدل بلا حد على المسار

محصور بالمنادي، فلا يُستعمل endpoint مسرَّب لقطع تنبيهات موظف آخر.

المعاملات
المعامل النوع مطلوب الوصف
endpoint string مطلوب عنوان الإشعارات المراد حذفه. حتى 2048 محرفًا.
الطلب
curl -X DELETE https://magizai.com/api/agent/push/subscribe \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{ "endpoint": "https://web.push.apple.com/QK9x2m4Lp0" }'
الاستجابة
{
  "ok": true,
  "removed": 1
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
POST /api/agent/push/test

يرسل تنبيهًا تجريبيًا حقيقيًا إلى أجهزة الموظف المنادي.

المصادقة رمز Bearer بصلاحية agent حد المعدل 6 طلب كل 1 دقيقة لكل مستخدم مسجّل

يتجاهل ساعات الهدوء ووضع عدم الإزعاج عن قصد: من يطلب اختبار التسليم يريد أن يعرف هل يعمل.

المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl -X POST https://magizai.com/api/agent/push/test \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "ok": true,
  "result": {
    "sent": 2,
    "failed": 0,
    "pruned": 0
  }
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
422 لم يستلم أي جهاز الاختبار. اسمح بالإشعارات على الجهاز ثم أعد المحاولة.
429 تم بلوغ حد المسار لهذا المستخدم.
503 الإشعارات الفورية غير مهيأة على هذا الخادم.
GET /api/agent/settings/notifications

يُرجع تفضيلات تنبيهات هذا الموظف وحالة توفره وأجهزته المسجلة.

المصادقة رمز Bearer بصلاحية agent حد المعدل بلا حد على المسار

تُطبَّق هذه التفضيلات على الخادم قبل إرسال أي تنبيه، فهذه هي النقطة الوحيدة التي يقرر فيها الموظف هل يرن هاتفه.

المعاملات

لا تأخذ نقطة النهاية هذه أي معاملات.

الطلب
curl https://magizai.com/api/agent/settings/notifications \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Accept: application/json"
الاستجابة
{
  "settings": {
    "push_enabled": true,
    "sound_enabled": true,
    "vibrate_enabled": true,
    "email_enabled": false,
    "events": {
      "visitor_arrived":   { "push": false, "sound": null,     "label": "Visitor arrived",   "critical": false },
      "chat_started":      { "push": true,  "sound": "chime",  "label": "Chat started",      "critical": false },
      "visitor_message":   { "push": true,  "sound": "chime",  "label": "Visitor message",   "critical": false },
      "handoff_requested": { "push": true,  "sound": "urgent", "label": "Handoff requested", "critical": true  },
      "sla_breach":        { "push": true,  "sound": "urgent", "label": "SLA breach",        "critical": true  }
    },
    "sound_pack": "default",
    "volume": 70,
    "quiet_hours_start": "22:00",
    "quiet_hours_end": "07:00",
    "quiet_hours_tz": "Asia/Dubai",
    "dnd_until": null,
    "quiet_now": false,
    "dnd_now": false,
    "chatbot_filter": null,
    "only_my_conversations": false
  },
  "availability": "online",
  "push": {
    "configured": true,
    "public_key": "BEl62iUYgUivxIkv69yViEuiBIa-Ib9-SkvMeAtA3LFgDzkrxZJjSgSnfckjBJuBkr3qBUYIHBQFLXYp5Nksh8U",
    "devices": 2
  },
  "chatbots": [
    { "id": 7, "name": "Support bot" }
  ]
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
PUT /api/agent/settings/notifications

يحدّث تفضيلات تنبيهات هذا الموظف وحالة توفره.

المصادقة رمز 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 اختياري نبّه على هذه الروبوتات فقط. وتُسقط المعرّفات خارج مساحة العمل، والنتيجة الفارغة تلغي المرشّح.
only_my_conversations boolean اختياري نبّه على المحادثات المسندة إلى هذا الموظف فقط.
availability string اختياري القيمة online أو away أو offline.
الطلب
curl -X PUT https://magizai.com/api/agent/settings/notifications \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "push_enabled": true,
        "volume": 70,
        "quiet_hours_start": "22:00",
        "quiet_hours_end": "07:00",
        "quiet_hours_tz": "Asia/Dubai",
        "events": {
          "visitor_arrived": { "push": false, "sound": null }
        },
        "availability": "online"
      }'
الاستجابة
{
  "settings": {
    "push_enabled": true,
    "sound_enabled": true,
    "vibrate_enabled": true,
    "email_enabled": false,
    "events": {
      "visitor_arrived":   { "push": false, "sound": null,     "label": "Visitor arrived",   "critical": false },
      "chat_started":      { "push": true,  "sound": "chime",  "label": "Chat started",      "critical": false },
      "visitor_message":   { "push": true,  "sound": "chime",  "label": "Visitor message",   "critical": false },
      "handoff_requested": { "push": true,  "sound": "urgent", "label": "Handoff requested", "critical": true  },
      "sla_breach":        { "push": true,  "sound": "urgent", "label": "SLA breach",        "critical": true  }
    },
    "sound_pack": "default",
    "volume": 70,
    "quiet_hours_start": "22:00",
    "quiet_hours_end": "07:00",
    "quiet_hours_tz": "Asia/Dubai",
    "dnd_until": null,
    "quiet_now": false,
    "dnd_now": false,
    "chatbot_filter": null,
    "only_my_conversations": false
  },
  "availability": "online"
}
الأخطاء
الحالة سبب حدوثه
401 لم يُرسل رمز صالح.
403 الحساب أو مساحة العمل موقوفة.
422 تحتاج ساعات الهدوء إلى بداية ونهاية معًا؛ نصف النافذة لا يفعل شيئًا.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
500 تعذّر حفظ الإعدادات.

نقاط الأداة

النقاط العامة التي تناديها شيفرة التضمين من متصفحات زوارك. وُثِّقت لتتمكن من تصحيح تركيب أو بناء واجهة دردشة خاصة بك. وهي ليست واجهة تكامل، ولا تقبل أي منها رمز وصول.

المسار الأساسي /widget/{key} · 7 نقطة نهاية
GET /widget/{key}/config

يُرجع الإعدادات العامة للروبوت: الهوية البصرية والترحيب ونموذج ما قبل الدردشة وبيانات الاتصال اللحظي.

المصادقة بدون مصادقة، عامة حد المعدل 60 طلب كل 1 دقيقة لكل عنوان IP
المعاملات
المعامل النوع مطلوب الوصف
key string مطلوب في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
الطلب
curl https://magizai.com/widget/cv_9f2a4c7e1b6d3a8f5c0e2b4d/config \
  -H "Accept: application/json"
الاستجابة
{
  "public_key": "cv_9f2a4c7e1b6d3a8f5c0e2b4d",
  "name": "Support bot",
  "welcome_message": "Hi! How can I help you today?",
  "human_handoff_enabled": true,
  "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"
    }
  },
  "powered_by": "MagizAI",
  "powered_by_url": "https://magizai.com",
  "pre_chat_form": {
    "enabled": true,
    "greeting": "Before we start, please introduce yourself.",
    "fields": {
      "name":  { "enabled": true,  "required": false },
      "email": { "enabled": true,  "required": true  },
      "phone": { "enabled": false, "required": false }
    }
  },
  "realtime": {
    "key": "reverbappkey",
    "host": "realtime.acme.test",
    "port": 443,
    "scheme": "https"
  }
}
الأخطاء
الحالة سبب حدوثه
404 لا روبوت نشط بهذا المفتاح العام. والروبوت المعطّل يعطي الرد نفسه.
429 تم بلوغ حد المسار لعنوان IP هذا.
POST /widget/{key}/boot

يفتح محادثة زائر أو يستأنفها ويُرجع النص حتى اللحظة.

المصادقة بدون مصادقة، عامة حد المعدل 30 طلب كل 1 دقيقة لكل عنوان IP

مرّر conversation_id للاستئناف. وإن لم يطابق معرّف الزائر الذي ترسله، أو كانت تلك المحادثة مغلقة، فتُفتح محادثة جديدة بدل أن يفشل النداء.

المعاملات
المعامل النوع مطلوب الوصف
key string مطلوب في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
visitor_id string مطلوب المعرّف الذي تسنده أداتك للزائر وتحتفظ به طوال الجلسة. حتى 100 محرف.
conversation_id uuid اختياري محادثة قائمة تريد متابعتها. اتركه ليبدأ محادثة جديدة.
meta object اختياري سياق عن الزائر والصفحة. وقد يحمل meta.visitor الاسم والبريد والهاتف من نموذج ما قبل الدردشة لديك.
identity string اختياري رمز هوية موقّع من خادمك أنت. يُتحقق منه قبل الوثوق بأي شيء فيه. حتى 4000 محرف.
الطلب
curl -X POST https://magizai.com/widget/cv_9f2a4c7e1b6d3a8f5c0e2b4d/boot \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "visitor_id": "v_2c9a71b4e5",
        "meta": {
          "page": "https://acme.test/orders/8812",
          "visitor": { "name": "Nadia Karim", "email": "[email protected]" }
        }
      }'
الاستجابة
{
  "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 مطلوب المحادثة المراد إغلاقها. ويجب أن تعود لمعرّف الزائر الذي ترسله.
الطلب
curl -X POST https://magizai.com/widget/cv_9f2a4c7e1b6d3a8f5c0e2b4d/chat/reset \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "visitor_id": "v_2c9a71b4e5",
        "conversation_id": "6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91"
      }'
الاستجابة
{
  "ok": true
}
الأخطاء
الحالة سبب حدوثه
404 لا روبوت نشط بهذا المفتاح العام. والروبوت المعطّل يعطي الرد نفسه.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
429 تم بلوغ حد المسار لعنوان IP هذا.
GET /widget/{key}/conversations/{conversationId}/history

يستعلم عن الرسائل الجديدة في محادثة، بما فيها ردود الموظف البشري.

المصادقة بدون مصادقة، عامة حد المعدل 60 طلب كل 1 دقيقة لكل عنوان IP

مرّر after بأعلى معرّف رسالة لديك لتجلب الجديد فقط.

المعاملات
المعامل النوع مطلوب الوصف
key string مطلوب في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
conversationId uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
visitor_id string مطلوب المعرّف الذي تسنده أداتك للزائر وتحتفظ به طوال الجلسة. حتى 100 محرف.
after integer اختياري في الاستعلام. أعد الرسائل التي معرّفها أكبر من هذه القيمة فقط.
الطلب
curl "https://magizai.com/widget/cv_9f2a4c7e1b6d3a8f5c0e2b4d/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/history?visitor_id=v_2c9a71b4e5&after=33127" \
  -H "Accept: application/json"
الاستجابة
{
  "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 لا محادثة بهذا المعرّف لهذا الروبوت ومعرّف الزائر هذا.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
429 تم بلوغ حد المسار لعنوان IP هذا.
POST /widget/{key}/conversations/{conversationId}/rate

يسجّل إعجابًا أو عدم إعجاب برد واحد من الذكاء الاصطناعي.

المصادقة بدون مصادقة، عامة حد المعدل 60 طلب كل 1 دقيقة لكل عنوان IP

أرسل rating مساويًا لـ 0 للتراجع عن تقييم سابق. وعدم الإعجاب يُسجَّل أيضًا فجوة معرفة لتصلحها مساحة العمل.

المعاملات
المعامل النوع مطلوب الوصف
key string مطلوب في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
conversationId uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
visitor_id string مطلوب المعرّف الذي تسنده أداتك للزائر وتحتفظ به طوال الجلسة. حتى 100 محرف.
message_id integer مطلوب رسالة المساعد التي يجري تقييمها.
rating integer مطلوب القيمة 1 للإعجاب، و-1 لعدم الإعجاب، و0 للتراجع عن تقييم سابق.
الطلب
curl -X POST https://magizai.com/widget/cv_9f2a4c7e1b6d3a8f5c0e2b4d/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/rate \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "visitor_id": "v_2c9a71b4e5",
        "message_id": 33129,
        "rating": -1
      }'
الاستجابة
{
  "ok": true,
  "rating": -1
}
الأخطاء
الحالة سبب حدوثه
404 لم تُوجد المحادثة، أو أن معرّف الرسالة ليس رسالة مساعد فيها.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
429 تم بلوغ حد المسار لعنوان IP هذا.
POST /widget/{key}/conversations/{conversationId}/csat

يسجّل درجة رضا عن المحادثة كاملة.

المصادقة بدون مصادقة، عامة حد المعدل 10 طلب كل 1 دقيقة لكل عنوان IP
المعاملات
المعامل النوع مطلوب الوصف
key string مطلوب في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
conversationId uuid مطلوب في المسار. المعرّف العام للمحادثة، وهو UUID.
visitor_id string مطلوب المعرّف الذي تسنده أداتك للزائر وتحتفظ به طوال الجلسة. حتى 100 محرف.
score integer مطلوب درجة الرضا من 1 إلى 5.
comment string اختياري تعليق نصي حر. حتى 2000 محرف.
الطلب
curl -X POST https://magizai.com/widget/cv_9f2a4c7e1b6d3a8f5c0e2b4d/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/csat \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "visitor_id": "v_2c9a71b4e5",
        "score": 5,
        "comment": "Sorted in two minutes."
      }'
الاستجابة
{
  "ok": true
}
الأخطاء
الحالة سبب حدوثه
404 لا محادثة بهذا المعرّف لهذا الروبوت ومعرّف الزائر هذا.
422 فشل التحقق من أحد الحقول. وكائن errors يسميه.
429 تم بلوغ حد المسار لعنوان IP هذا.
نقاط الأداة غير الموثقة هنا

هذه النقاط موجودة وتستخدمها شيفرة التضمين، لكنها داخلية للأداة وليست شيئًا تناديه بنفسك. أدرجناها لتعرف أن استبعادها كان مقصودًا.

الطريقة نقطة النهاية السبب
POST /widget/{key}/upload رفع ملف بصيغة multipart، مرتبط بتدفق المرفقات في الأداة وقواعد تخزينها.
POST /widget/{key}/request-human استقبال طلب التحويل خارج أوقات العمل. يرسل تنبيهات بالبريد وواتساب إلى مساحة العمل، لذا يبقى ضمن تدفق الأداة نفسها.
POST /widget/{key}/conversions إشارة تحويل لخط التقارير، ولا معنى لها إلا مع شيفرة التتبع في الأداة.
POST /widget/{key}/track إشارة سلوك لأحداث الصفحة والمنتج والسلة. تُفعَّل اختياريًا لكل روبوت وتتشكل بالكامل من الأداة.
POST /widget/{key}/presence نبضة الزوار المتصلين. توقيتها مرتبط بفاصل الإشارة في الأداة.
POST /widget/{key}/assist إرشاد المساعد على الصفحة. المحتوى المرسل لقطة من صفحة الزائر تنتجها الأداة.

تحتاج شيئًا غير موجود هنا؟

أخبرنا بما تبنيه وسنرشدك إلى نقطة النهاية المناسبة، أو نضيف واحدة.