أربع واجهات HTTP، لكل منها رمز وصول خاص بها. كل نقطة نهاية هنا مأخوذة من الشيفرة التي تخدمها، لذا أسماء الحقول في هذه الصفحة هي نفسها التي تصلك في الاستجابة.
العنوان الأساسيhttps://magiz.ai
البداية
كل الواجهات تتحدث 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
نقاط النهاية الموسومة بـ«بلا حد على المسار» ليس لها حد خاص بها. لكنها تظل مقيدة بحصة الرسائل الشهرية في خطتك، فاستعلم عنها بفاصل زمني معقول لا في حلقة متلاحقة.
الأداة على موقعك
سطر واحد من كود التضمين يضع المساعد في كل صفحة. وكل ما يلي اختياري: الأداة تعمل بالمفتاح وحده.
إلزامي. المفتاح العام لروبوتك، من قسم الروبوتات ثم التثبيت.
data-open="load"
يفتح نافذة المحادثة فور تحميل الصفحة. استخدمه في صفحة غرضها كله هو المساعد، مثل صفحة الدردشة مع الذكاء الاصطناعي، واتركه في بقية الصفحات.
data-launcher
يفرض شكل زر الفتح في هذه الصفحة متجاوزًا إعداد لوحة التحكم. القيم المقبولة: bubble أو teaser. مفيد حين يغطي الشكل الموسّع حقول نموذج.
data-identity
رمز هوية موقَّع للشخص الذي يتصفح الصفحة. انظر أدناه.
data-cookie-domain
نطاق الكوكي الذي يحفظ المحادثة عبر النطاقات الفرعية، مثل .example.com. لا يلزم إلا حين يكون للنطاق لاحقة مركّبة مثل .co.uk ويخطئ التخمين التلقائي.
data-lang
لغة نصوص نافذة الدردشة واتجاهها، لزوار يقرؤون لغة غير لغة الصفحة: en أو fr أو ar. ومن دونه تتبع النافذة لغة الصفحة ثم لغة المتصفح.
data-consent="wait"
اضبطها على wait حين يتولى شريط ملفات تعريف الارتباط القرار. فإلى أن تستدعي صفحتك MagizAI.consent(true) لا يحفظ الودجت شيئًا في متصفح الزائر (لا كوكي لمعرّف الزائر، ولا شيء في localStorage أو sessionStorage) ولا يرسل أي بيانات عن الزيارة أو التصفح. ويظل بوسع الزائر فتح الدردشة قبل ذلك، فتعمل لتلك الصفحة فقط.
التحكم بالأداة من صفحتك
يضيف السكربت كائنًا صغيرًا إلى window بعد تحميله. وكل دالة آمنة للاستدعاء حتى قبل أن يفتح الزائر المحادثة.
// Open the panel, optionally with the question already asked.
MagizAI.open();
MagizAI.open('Which plan suits a site with 20,000 visits a month?');
// Close it again.
MagizAI.close();
// Call this when the visitor signs out: it ends this browser's conversation
// and forgets whose it was, so the next person starts anonymously.
MagizAI.logout();
// Record a sale the chat contributed to, for the revenue report.
MagizAI.trackConversion(149.00, 'USD');
// With your cookie banner (data-consent="wait" on the script tag):
// the visitor agreed, so the widget may store its visitor ID...
MagizAI.consent(true);
// ...or said no: what the widget stored leaves this browser.
MagizAI.consent(false);
استدعاء MagizAI.open() مع سؤال هو ما يجعل زر اسأل عن هذه الباقة يعمل: تُفتح النافذة والسؤال مُرسل بالفعل، فيرى الزائر إجابة بدل حقل فارغ. والمواقع التي رُكّبت قبل تغيير الاسم يمكنها الاستمرار في استدعاء window.ElyAgents، فهو الكائن نفسه.
يحفظ MagizAI.consent(true) معرّف الزائر ويبدأ عرض الزوار المباشرين وتتبّع التصفح، كلًّا حيث يكون مفعّلًا وما لم يرسل المتصفح إعداد عدم التتبع. ويوقفهما MagizAI.consent(false) في تلك الصفحة ويزيل ما حفظه الودجت في هذا المتصفح: معرّف الزائر ورابط المحادثة والبيانات التي قدّمها الزائر وتفضيلات الودجت نفسه، وتستمر الدردشة المفتوحة إلى أن تُغادر الصفحة. ولا يتذكر الودجت الإجابة، لذا استدعِها في كل صفحة ما إن يعرفها الشريط، والاستدعاء الذي يسبق تحميل الودجت يُحفظ له. ومن دون شريط، يؤجّل إعداد روبوت الدردشة «عدم حفظ معرّف الزائر إلا بعد أن يفتح الدردشة» كل ذلك بالطريقة نفسها إلى أن تُفتح الدردشة.
هوية الزائر الموقَّعة
بدونها يعامل المساعد الجميع كزوار مجهولين ولا يناقش أي حساب. ومعها يعرف من يسأل، فيجيب عن طلباته وفواتيره وخدماته وتذاكره هو وحده. يوقّع خادمك رمزًا مضغوطًا بخوارزمية HS256 باستخدام سر الهوية الخاص بالروبوت، والمتصفح ينقله فقط.
<?php
// Server-side, in the page your signed-in customer is served. Never in the browser:
// whoever holds the secret can impersonate any of your customers.
$secret = getenv('MAGIZAI_IDENTITY_SECRET'); // Chatbots → Install → Signed visitor identity
$b64 = fn (array $a) => rtrim(strtr(base64_encode(json_encode($a)), '+/', '-_'), '=');
$header = $b64(['alg' => 'HS256', 'typ' => 'JWT']);
$payload = $b64([
'sub' => (string) $user->id, // your id for this person
'external_id' => (string) $user->id,
'email' => $user->email,
'name' => $user->name,
'plan' => $user->plan, // optional, shown to your agents
'company' => $user->company_name, // optional
'locale' => 'en', // optional
'iat' => time(),
'exp' => time() + 3600, // 24 hours is the hard ceiling
]);
$sig = rtrim(strtr(base64_encode(hash_hmac('sha256', "$header.$payload", $secret, true)), '+/', '-_'), '=');
$token = "$header.$payload.$sig";
?>
<script>window.MagizAIIdentity = "<?= $token ?>";</script>
<script src="https://magiz.ai/widget.js" data-key="cv_9f2a4c7e1b6d3a8f5c0e2b4d" defer></script>
المعامل
الوصف
sub
إلزامي. معرّفك أنت لهذا الشخص. ترتبط به المحادثة وذاكرتها. لا يكون "0" أبدًا: يُرفض كل رمز يسمّي "0".
external_id
اسم بديل اختياري لـ sub، مقبول ليرسل خادمك الحقل الموجود لديه أصلًا. والقاعدة نفسها تنطبق: لا "0" أبدًا.
اختياري. أي وصف تستخدمه للمستوى أو الشريحة. يراه موظفوك في بطاقة العميل.
company
اختياري. اسم الحساب أو المؤسسة.
locale
اختياري. رمز لغة من حرفين، يُستخدم حين يتبع الروبوت لغة المستخدم المسجَّل بدل لغة المتصفح.
iat / exp
وقت الإصدار ووقت الانتهاء بالثواني. لا يُقبل أي رمز بعد 24 ساعة مهما كانت قيمة exp. أصدر رمزًا جديدًا مع كل تحميل للصفحة.
وقّع على الخادم ولا ترسل السر إلى المتصفح أبدًا: من يملكه يستطيع انتحال صفة أي عميل لديك. واستدعِ MagizAI.logout() عند تسجيل الخروج، حتى لا يسلّم جهاز مشترك المحادثة السابقة لمن يأتي بعده.
الويب هوك
هو الجزء الوحيد من المنصة الذي يتصل بك أنت. أضف عنوانًا من الأتمتة، في تبويب خطافات الويب، واختر الأحداث التي تهمك، فنرسل إلى عنوانك طلب POST بصيغة JSON موقَّعًا عند وقوعها.
الحدث
سبب حدوثه
conversation.created
فتح زائر محادثة، قبل أن يُقال أي شيء.
message.received
أرسل زائر رسالة.
ai.replied
أجاب المساعد. مفيد لتسجيل ما قيل للعميل.
keyword.matched
ظهرت كلمة مفتاحية حددتها في رسالة زائر.
handoff.requested
طلبت المحادثة موظفًا بشريًا، سواء طلب الزائر ذلك أو صعّدها المساعد. وهذا هو الحدث الذي تربطه بتنبيهاتك.
handoff.followup
ترك زائر بيانات التواصل ليرد عليه فريقك لاحقًا. يُرسل بدلًا من handoff.requested عندما تكون المحادثة في انتظار موظف بالفعل، أو عندما لم يرد أحد على آخر طلب. اربطه بتنبيهاتك أيضًا.
conversation.resolved
أُغلقت محادثة، بيد موظف أو بيد المساعد. وهو المُشغّل المعتاد لإغلاق تذكرتك أنت.
tag.added
أُضيف وسم إلى محادثة.
lead.captured
جُمعت بيانات تواصل. وهو المُشغّل المعتاد لإنشاء سجل في نظام إدارة العملاء لديك.
lead.request
أكّد زائر في المحادثة طلبًا لفريقك، مثل معاودة الاتصال أو عرض سعر. تصل بيانات التواصل وما طلبه تحت data.lead.
conversion.recorded
نُسب مبلغ مبيعات إلى محادثة.
action.executed
نفّذ المساعد إجراءً من إجراءاتك، مثل مهارة أو أداة موصولة.
booking.created
تم حجز موعد لا يحتاج إلى موافقة. يصل الحجز تحت data.booking، دون أي رابط يتيح تغييره.
booking.requested
وصل طلب حجز وينتظر أن يؤكده فريقك أو يرفضه.
booking.confirmed
تم تأكيد طلب حجز.
booking.declined
تم رفض طلب حجز.
booking.cancelled
أُلغي حجز، من العميل أو من فريقك.
booking.rescheduled
نُقل حجز إلى وقت آخر.
booking.completed
عُلّم حجز بأنه تم.
booking.no_show
لم يحضر عميل إلى موعده.
لكل إرسال الغلاف نفسه: اسم الحدث، ووقت وقوعه، وكائن data. ولا تُسلسَل سجلات قاعدة البيانات كما هي، فـ data تحمل حقولًا بسيطة فقط، والمحادثة تصل دائمًا داخل data.conversation ومعها المعرّف public_id.
يحمل كل طلب ترويسة X-Signature: sha256= يتبعها HMAC للبايتات التي أرسلناها بالضبط، مفتاحها السر الخاص بعنوانك. تحقق منها قبل أن تثق بالمحتوى، وقارن بزمن ثابت.
// Node / Express. Verify against the RAW body, before any JSON parsing:
// re-serialising changes the bytes and the signature will never match.
app.post('/hooks/magizai', express.raw({ type: 'application/json' }), (req, res) => {
const expected = 'sha256=' + crypto
.createHmac('sha256', process.env.MAGIZAI_WEBHOOK_SECRET)
.update(req.body)
.digest('hex');
const a = Buffer.from(expected);
const b = Buffer.from(req.get('X-Signature') || '');
if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) return res.sendStatus(401);
const { event, data } = JSON.parse(req.body.toString('utf8'));
// Answer first, work afterwards: anything slower than 10 seconds counts as a failure.
res.sendStatus(200);
queue.push({ event, data });
});
القاعدة
الوصف
HTTPS عام فقط
يجب أن يشير العنوان إلى عنوان شبكي عام. أما العناوين الداخلية وعناوين الاسترجاع فمرفوضة، ويُثبَّت الاتصال على العنوان المتحقَّق منه، ولا تُتبع عمليات إعادة التوجيه.
مهلة 10 ثوانٍ
أجب برمز 2xx فور استلام المحتوى ثم نفّذ العمل بعد ذلك. وما يتجاوز ذلك يُحتسب إرسالًا فاشلًا.
ثلاث محاولات
يُعاد الإرسال بعد الفشل أو بعد رد خارج 2xx مرتين على الأكثر، بفاصل من بضع ثوانٍ إلى دقيقة، أي ثلاث محاولات في المجموع. وبعد الثالثة يبقى الإرسال معلَّمًا فاشلًا في السجل. والعنوان الذي يرفضه فحص العنوان العام لا يُعاد إليه الإرسال.
لا ضمان للترتيب
الإرسالات تمر عبر طابور، فقد يصل حدثان بترتيب مختلف وقد تصل إعادة المحاولة مرتين. تعامل مع المحتوى كحقيقة تُطبَّق لا كخطوة تُعاد، واعتمد على public_id مفتاحًا.
كل إرسال مسجَّل
تُحفظ الحالة ورمز الرد وأول 2000 حرف من ردك، وزر الاختبار يرسل محتوى نموذجيًا. راجع هذا السجل أولًا حين لا يصلك شيء.
REST API الإصدار v1
واجهة التكامل العامة. اقرأ روبوتاتك ومحادثاتك، وأضف معرفة، وأرسل رسالة زائر لتحصل على رد الذكاء الاصطناعي في استجابة JSON واحدة. تُصادق برمز تنشئه من شاشة الإعدادات.
المسار الأساسي/api/v1·9 نقطة نهاية
GET/api/v1/me
يُرجع المستخدم صاحب الرمز ومساحة عمله.
المصادقة رمز Bearer بصلاحية apiحد المعدل بلا حد على المسار
يسرد المستندات التي يحملها الروبوت، الأحدث أولًا، في نتيجة مقسّمة على صفحات.
المصادقة رمز Bearer بصلاحية apiحد المعدل بلا حد على المسار
تُستثنى الصفحات التي نتجت عن زحف رابط، فيطابق العدد ما يراه المشرف في شاشة المعرفة. واستخدم source_url_prefix لتسأل فقط عن المستندات التي أرسلها تكاملك أنت، وبهذا توازن المزامنة بين ما أرسلته وما هو موجود فعلًا.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
type
string
اختياري
يعيد هذا النوع فقط: text أو qa أو url أو file.
source_url_prefix
string
اختياري
يعيد فقط المستندات التي يبدأ عنوانها بهذا.
per_page
integer
اختياري
في الاستعلام. عدد الصفوف في الصفحة. القيمة الافتراضية 20 والحد الأعلى 100.
يضيف مستندًا نصيًا أو سؤالًا وجوابًا إلى روبوت ويدرّبه فورًا.
المصادقة رمز Bearer بصلاحية apiصلاحية الدورmanage-contentحد المعدل بلا حد على المسار
يجري التدريب داخل الطلب لا في طابور، لذا يتوقف النداء حتى تُفهرس الوثيقة. توقع عدة ثوانٍ لمستند طويل.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
title
string
مطلوب
اسم للمستند. حتى 200 محرف.
content
string
مطلوب
نص المستند.
type
string
اختياري
القيمة text أو qa. الافتراضية text.
source_url
string
اختياري
مطلوب حين يكون type مساويًا لـ url. الصفحة المراد زحفها، حتى 2048 محرفًا.
visibility
string
اختياري
public أو customer. لا يُستخدم مستند customer إلا حين يكون الزائر معرَّفًا برمز موقَّع.
الطلب
curl -X POST https://magiz.ai/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",
"source_url": "https://example.com/help/refund-policy",
"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."
}'
حُفظ المستند لكن تعذّر تدريبه. وتحمل الاستجابة معرّفه وحالته لتعيد التدريب بدل رفعه من جديد.
DELETE/api/v1/chatbots/{key}/knowledge
يحذف المستندات المرسَلة: المستند الموجود عند source_url، أو كل ما تحت url_prefix عدا العناوين المذكورة في keep.
المصادقة رمز Bearer بصلاحية apiصلاحية الدورmanage-contentحد المعدل بلا حد على المسار
بهذه الطريقة تحذف المزامنة المقالات التي حُذفت من المصدر: أرسل في keep العناوين التي ما زالت لديك، ويذهب كل ما عداها مما سبق أن أرسلته تحت ذلك البادئة. ولا يمس ذلك الصفحات المزحوفة ولا الملفات المرفوعة ولا المستندات المضافة يدويًا.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
source_url
string
اختياري
يحذف المستند الوحيد المرسَل بهذا العنوان. إلزامي ما لم يُرسل url_prefix.
url_prefix
string
اختياري
يحذف كل مستند مرسَل يبدأ عنوانه بهذا. ويجب أن يتضمن مسارًا لا نطاقًا فقط.
keep
array
اختياري
العناوين المستثناة عند استخدام url_prefix. حتى 5000 عنوان.
لا يتضمن url_prefix مسارًا. ونطاق مجرد كان سيمحو كل مستندات الروبوت، لذا يُرفض الطلب.
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://magiz.ai/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
لا سجل بهذا المعرّف في مساحة العمل هذه.
واجهة برمجة الذكاء الاصطناعي
ذكاء MagizAI الاصطناعي لبرامجك الخاصة دون روبوت دردشة: الكتابة وإعادة الصياغة والتلخيص والاستخراج والتصنيف والترجمة، والإجابة عن الأسئلة مما درّبت عليه نشاطك التجاري. ويمكنها أيضًا بدء تشغيل أحد وكلاء الذكاء الاصطناعي في مساحة العمل وقراءة ما جرى فيه. يفعّل مدير مساحة العمل تطبيق واجهة برمجة الذكاء الاصطناعي، ثم ينشئ رمزًا مع تحديد «يمكنه استخدام واجهة برمجة الذكاء الاصطناعي» في الإعدادات، رموز API. يُحتسب كل طلب رسالة ذكاء اصطناعي واحدة من الباقة مثل رد الدردشة، وطلبًا واحدًا من طلبات واجهة برمجة الذكاء الاصطناعي الشهرية في الباقة. يحمل كل خطأ رمزًا ثابتًا: app_off أو no_ability أو invalid أو health_off أو cap أو rate_limited أو no_ai أو failed أو not_found أو agents_off أو agents_stopped أو agent_unavailable. لا ترسل سجلات صحية إلا إذا فعّلت مساحة العمل الذكاء الاصطناعي للبيانات الصحية، وعندها ضع contains_health_data على الطلب.
المسار الأساسي/api/v1/ai·5 نقطة نهاية
POST/api/v1/ai/complete
ينفّذ مهمة ذكاء اصطناعي واحدة على النص الذي ترسله. يعيد نصًا، أو حقولًا في extract وclassify.
المصادقة رمز Bearer بصلاحية apiصلاحية الدورaiحد المعدل 60 طلب كل 1 دقيقة، لكل رمز
النتيجة اقتراح: راجعها قبل أن تصل إلى عميل أو تغيّر سجلًا. في extract تكون قيمة الحقل الذي لا يذكره النص null. وفي classify يحمل كل حقل أحد خياراته، أو null.
المعاملات
المعامل
النوع
مطلوب
الوصف
purpose
string
مطلوب
إحدى القيم: write أو rewrite أو summarise أو extract أو classify أو translate أو answer.
input
string
مطلوب
النص المطلوب العمل عليه: الوصف في write، والنص مع سؤاله في answer. حتى 10000 حرف.
language
string
اختياري
الكتابة بهذه اللغة، برمز مثل fr أو باسم مثل French. مطلوب في translate. الافتراضي: لغة النص.
tone
string
اختياري
إحدى القيم: neutral أو friendly أو formal أو warm.
fields
array
اختياري
في extract وclassify: حتى 25 اسم حقل، أو كائنات تحتوي name وdescription وoptions. يتطلب classify خيارات لكل حقل.
contains_health_data
boolean
اختياري
true عندما يحمل النص بيانات صحية. يُرفض ما لم تفعّل مساحة العمل الذكاء الاصطناعي للبيانات الصحية.
الطلب
curl -X POST https://magiz.ai/api/v1/ai/complete \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"purpose": "extract",
"input": "Hi, this is Sara Bell. My order A-1055 has not arrived in Dubai yet.",
"fields": ["name", "order_number", "city"]
}'
app_off: تطبيق واجهة برمجة الذكاء الاصطناعي متوقف في مساحة العمل.
403
no_ability: أُنشئ الرمز دون صلاحية ai، أو لم يعد صاحبه قادرًا على إدارة مساحة العمل.
403
health_off: الطلب يحمل contains_health_data والذكاء الاصطناعي للبيانات الصحية متوقف.
422
invalid: فشل حقل في التحقق. يسمّيه الكائن errors.
429
cap: نفدت طلبات واجهة برمجة الذكاء الاصطناعي لهذا الشهر، أو رسائل الذكاء الاصطناعي في الباقة.
429
rate_limited: طلبات كثيرة جدًا بهذا الرمز خلال دقيقة. يبيّن Retry-After متى تحاول مجددًا.
502
failed: لم يقدّم الذكاء الاصطناعي إجابة صالحة. حاول مرة أخرى.
503
no_ai: لا يوجد في مساحة العمل ذكاء اصطناعي يمكنه الإجابة الآن (لا يوجد مفتاح صالح، أو مساحة العمل غير نشطة).
POST/api/v1/ai/answer
يجيب عن سؤال من المعرفة المدرَّبة في مساحة العمل ويذكر المصادر التي استخدمها.
المصادقة رمز Bearer بصلاحية apiصلاحية الدورaiحد المعدل 30 طلب كل 1 دقيقة، لكل رمز
لا يقرأ إلا المقاطع العامة ما لم تكن audience بالقيمة staff. يبيّن knowledge ما وجده البحث: used أو none_found أو no_knowledge أو unavailable. وعندما لا يطابق شيء، يُطلب من النموذج أن يقول ذلك بدل التخمين.
المعاملات
المعامل
النوع
مطلوب
الوصف
question
string
مطلوب
السؤال. حتى 2000 حرف.
language
string
اختياري
الكتابة بهذه اللغة، برمز مثل fr أو باسم مثل French. مطلوب في translate. الافتراضي: لغة النص.
audience
string
اختياري
public (الافتراضي) يقرأ المقاطع العامة فقط. وstaff يقرأ أيضًا مقاطع العملاء المسجلين والملاحظات الداخلية.
contains_health_data
boolean
اختياري
true عندما يحمل النص بيانات صحية. يُرفض ما لم تفعّل مساحة العمل الذكاء الاصطناعي للبيانات الصحية.
الطلب
curl -X POST https://magiz.ai/api/v1/ai/answer \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"question": "Do you deliver to Dubai, and how long does it take?"
}'
الاستجابة
{
"answer": "Yes. Orders to Dubai arrive in two to four working days with DHL Express.",
"knowledge": "used",
"sources": [
{
"title": "Shipping and delivery",
"url": "https://acme.test/shipping"
}
]
}
الأخطاء
الحالة
سبب حدوثه
401
لم يُرسل رمز صالح.
403
app_off: تطبيق واجهة برمجة الذكاء الاصطناعي متوقف في مساحة العمل.
403
no_ability: أُنشئ الرمز دون صلاحية ai، أو لم يعد صاحبه قادرًا على إدارة مساحة العمل.
403
health_off: الطلب يحمل contains_health_data والذكاء الاصطناعي للبيانات الصحية متوقف.
422
invalid: فشل حقل في التحقق. يسمّيه الكائن errors.
429
cap: نفدت طلبات واجهة برمجة الذكاء الاصطناعي لهذا الشهر، أو رسائل الذكاء الاصطناعي في الباقة.
429
rate_limited: طلبات كثيرة جدًا بهذا الرمز خلال دقيقة. يبيّن Retry-After متى تحاول مجددًا.
502
failed: لم يقدّم الذكاء الاصطناعي إجابة صالحة. حاول مرة أخرى.
503
no_ai: لا يوجد في مساحة العمل ذكاء اصطناعي يمكنه الإجابة الآن (لا يوجد مفتاح صالح، أو مساحة العمل غير نشطة).
GET/api/v1/ai/agents
يعرض وكلاء مساحة العمل النشطين الذين يمكن للرمز تشغيلهم.
المصادقة رمز Bearer بصلاحية apiصلاحية الدورaiحد المعدل 60 طلب كل 1 دقيقة، لكل رمز
لا يظهر الوكيل الذي يعمل ببيانات صحية: لا يعمل أبدًا عبر الواجهة. تكون can_act صحيحة عندما يمكن للوكيل طلب إجراءات، وهي تنتظر مديرًا في لوحة التحكم. يتطلب تفعيل تطبيق الوكلاء.
app_off: تطبيق واجهة برمجة الذكاء الاصطناعي متوقف في مساحة العمل.
403
agents_off: تطبيق الوكلاء متوقف في مساحة العمل.
403
no_ability: أُنشئ الرمز دون صلاحية ai، أو لم يعد صاحبه قادرًا على إدارة مساحة العمل.
429
rate_limited: طلبات كثيرة جدًا بهذا الرمز خلال دقيقة. يبيّن Retry-After متى تحاول مجددًا.
POST/api/v1/ai/agents/{id}/runs
يبدأ تشغيلًا لوكيل واحد بمهمة. يرد فورًا بالتشغيل، أو عند انتهائه خلال ثواني wait.
المصادقة رمز Bearer بصلاحية apiصلاحية الدورaiحد المعدل 10 طلب كل 1 دقيقة، لكل رمز
يلتزم التشغيل بكل قواعد تطبيق الوكلاء: حدود الوكيل وسقوف التكلفة وزر الإيقاف. يُحتسب كل استدعاء للنموذج طلبًا واحدًا من واجهة برمجة الذكاء الاصطناعي ورسالة ذكاء اصطناعي واحدة. تعني الحالة 202 أن التشغيل مستمر: اقرأه عبر GET /api/v1/ai/runs/{id}. تنتظر الإجراءات والمسودات مديرًا في صفحة التشغيل في لوحة التحكم (dashboard_url)، ولا يمكن للواجهة الموافقة عليها. يتطلب تفعيل تطبيق الوكلاء.
المعاملات
المعامل
النوع
مطلوب
الوصف
id
integer
مطلوب
في المسار. معرّف الوكيل من GET /api/v1/ai/agents.
task
string
مطلوب
ما يُطلب من الوكيل. حتى 4000 حرف.
inputs
object
اختياري
حتى 20 قيمة مسمّاة، مثل {"invoice": "INV-0107"}. تستخدم الأسماء الأحرف والأرقام و _. يقرؤها الوكيل بيانات، لا تعليمات أبدًا.
wait
integer
اختياري
عدد الثواني التي ينتظر فيها الطلب انتهاء التشغيل، من 0 إلى 25. الافتراضي 0: رد فوري بالحالة 202.
الطلب
curl -X POST https://magiz.ai/api/v1/ai/agents/12/runs \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"task": "Check what Ananya Rao owes and draft a polite reminder.",
"inputs": {"customer": "Ananya Rao"},
"wait": 20
}'
الاستجابة
{
"run": {
"id": 845,
"agent": {
"id": 12,
"name": "Billing desk",
"version": 3
},
"status": "done",
"ended": "done",
"output": "Ananya Rao owes INR 4,500 on invoice INV-0107, due on 20 October. I saved a reminder email as a draft for you to check.",
"approval": "pending",
"actions": [],
"drafts": 1,
"dashboard_url": "https://magiz.ai/agents/runs/845",
"usage": {
"model_calls": 3,
"tool_calls": 2,
"tokens_in": 4120,
"tokens_out": 310,
"cost_usd": "0.004380"
},
"started_at": "2026-10-16T09:12:03.120Z",
"finished_at": "2026-10-16T09:12:09.874Z"
}
}
الأخطاء
الحالة
سبب حدوثه
401
لم يُرسل رمز صالح.
403
app_off: تطبيق واجهة برمجة الذكاء الاصطناعي متوقف في مساحة العمل.
403
agents_off: تطبيق الوكلاء متوقف في مساحة العمل.
403
no_ability: أُنشئ الرمز دون صلاحية ai، أو لم يعد صاحبه قادرًا على إدارة مساحة العمل.
404
not_found: لا يوجد وكيل بهذا المعرّف في مساحة العمل.
409
agent_unavailable: الوكيل مؤرشف، أو يعمل ببيانات صحية.
409
agents_stopped: أوقف مدير مساحة العمل جميع الوكلاء.
422
invalid: فشل حقل في التحقق. يسمّيه الكائن errors.
429
cap: نفدت طلبات واجهة برمجة الذكاء الاصطناعي لهذا الشهر أو رسائل الذكاء الاصطناعي في الباقة، أو بلغ سقف تكلفة الوكلاء لهذا اليوم.
429
rate_limited: طلبات كثيرة جدًا بهذا الرمز خلال دقيقة. يبيّن Retry-After متى تحاول مجددًا.
GET/api/v1/ai/runs/{id}
يقرأ تشغيلًا بدأ عبر واجهة برمجة الذكاء الاصطناعي: حالته وإجابته وما ينتظر مديرًا وما استهلكه.
المصادقة رمز Bearer بصلاحية apiصلاحية الدورaiحد المعدل 120 طلب كل 1 دقيقة، لكل رمز
قيمة status هي running أو waiting أو done أو stopped أو failed. وتبيّن ended كيف انتهى، مثل done أو waiting أو step_limit أو time_limit أو cap أو rejected. تكون approval بقيمة pending ما دام على مدير أن يقرر. لا يمكن هنا قراءة التشغيلات التي بدأت من لوحة التحكم أو مسار عمل أو محادثة.
app_off: تطبيق واجهة برمجة الذكاء الاصطناعي متوقف في مساحة العمل.
403
agents_off: تطبيق الوكلاء متوقف في مساحة العمل.
403
no_ability: أُنشئ الرمز دون صلاحية ai، أو لم يعد صاحبه قادرًا على إدارة مساحة العمل.
404
not_found: لا يوجد تشغيل بهذا المعرّف بدأ عبر واجهة برمجة الذكاء الاصطناعي في مساحة العمل.
429
rate_limited: طلبات كثيرة جدًا بهذا الرمز خلال دقيقة. يبيّن Retry-After متى تحاول مجددًا.
واجهة البوابة
واجهة المستأجر خلف البوابة بالعلامة البيضاء التي يمكن للعميل استضافتها على نطاقه. تدير الروبوتات والمعرفة ومفاتيح المزودين والاستهلاك وشيفرة التضمين. تبقى البيانات والذكاء الاصطناعي على المنصة، ولا يُعاد أبدًا مفتاح مزود مخزّن إلى المتصفح.
المسار الأساسي/api/portal·20 نقطة نهاية
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
لا سجل بهذا المعرّف في مساحة العمل هذه.
GET/api/portal/chatbots/{key}/options
يعيد كل القيم التي يقبلها التحديث: مزودو ونماذج الذكاء الاصطناعي التي تسمح بها الباقة، ومستويات الجودة، والسمات، والتخطيطات، وأزرار الفتح، وأنماط الرد، وأنماط حقل الكتابة.
المصادقة رمز Bearer بصلاحية portalحد المعدل بلا حد على المسار
اقرأه قبل بناء نموذج تحرير بدل تثبيت القوائم في الكود. فالخيارات تتبع الباقة وما إذا كانت مساحة العمل تستخدم مفتاح مزود خاصًا بها، وهي تتغير بتغير الباقات. أما المفاتيح نفسها فلا تُعاد أبدًا، بل يُعاد فقط وجودها من عدمه.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
المصادقة رمز 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://magiz.ai/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://magiz.ai/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."
}'
قائمة المحادثات مع عدد غير المقروء ومجاميع الأقسام.
المصادقة رمز Bearer بصلاحية portalصلاحية الدورview-inboxحد المعدل بلا حد على المسار
هو التدفق نفسه الذي يقرؤه صندوق الوارد في لوحة التحكم وتطبيقات الموظفين، حتى لا يختلف الاثنان أبدًا. استخدم filter للتضييق: all أو waiting أو mine أو team أو ai أو resolved. وتعود حتى 60 محادثة، الأكثر إلحاحًا أولًا.
المعاملات
المعامل
النوع
مطلوب
الوصف
filter
string
اختياري
في الاستعلام. تضييق القائمة: all أو waiting أو mine أو team أو ai أو human أو resolved. القيمة الافتراضية all.
conversation
uuid
اختياري
في الاستعلام. افتح هذه المحادثة وأعدها في active وعلّمها مقروءة.
يرد على الزائر بصفة موظف بشري، ويأخذ المحادثة من الذكاء الاصطناعي.
المصادقة رمز Bearer بصلاحية portalصلاحية الدورhandle-conversationsحد المعدل 60 طلب كل 1 دقيقة لكل مستخدم مسجّل
إرسال رد يوقف إجابات الذكاء الاصطناعي في تلك المحادثة ويلغي أي مؤقّت تحويل معلّق. أرسل client_id عند إعادة المحاولة: فإن كانت المحاولة الأولى قد وصلتنا فعلًا، يُعاد الرد المحفوظ بدل أن يصل العميل مرتين.
المعاملات
المعامل
النوع
مطلوب
الوصف
conversation
uuid
مطلوب
في المسار. المعرّف العام للمحادثة، وهو UUID.
body
string
مطلوب
الرد المراد إرساله. حتى 4000 محرف، ولا يجوز أن يكون مسافات فقط.
client_id
string
اختياري
معرّفك الخاص لهذا الرد. إعادة إرساله تُرجع الرسالة المُنشأة سلفًا بدل رسالة ثانية. حتى 64 محرفًا.
لا روبوت في مساحة العمل بعد، فلا شيفرة تضمين لإرجاعها.
واجهة تطبيق الموظف
الواجهة خلف تطبيقات الموظفين للهاتف وسطح المكتب. تعمل على صندوق الوارد: قراءة المحادثات والرد والاستلام والإغلاق والوسم واستخدام مساعد الذكاء الاصطناعي ومتابعة الزوار المتصلين وتسجيل جهاز للإشعارات. وحين تكون تطبيقات الطابور أو الحجوزات أو العملاء مفعّلة في مساحة العمل، تدير أيضًا مكتب الاستقبال: طابور اليوم وجدول اليوم وسجل الأشخاص. كل إجراء ينفّذ منطق المستأجر نفسه المستخدم في لوحة التحكم، فيتطابق السلوك تمامًا.
المسار الأساسي/api/agent·44 نقطة نهاية
POST/api/agent/login
يبدّل بريدًا وكلمة مرور برمز Bearer لتطبيق الموظف.
المصادقة بدون مصادقة، عامةحد المعدل 10 طلب كل 1 دقيقة لكل عنوان IP
لا يسجّل الدخول هنا إلا المالك والمسؤول والموظف. ويُرفض مقعد المشاهدة، ويُرفض أي حساب مساحة عمله موقوفة. وتتشارك المحاولات عدّاد القفل نفسه مع نموذج الدخول على الويب وواجهة البوابة. عند تفعيل تسجيل الدخول بخطوتين يُرسل الرمز مع البريد وكلمة المرور، ولا تمنح مساحة عمل تشترطه رمزًا لشخص لم يفعّله.
المعاملات
المعامل
النوع
مطلوب
الوصف
email
string
مطلوب
البريد الإلكتروني لمستخدم في لوحة التحكم. حتى 255 محرفًا.
password
string
مطلوب
كلمة مرور ذلك المستخدم في لوحة التحكم.
device_name
string
اختياري
تسمية لهذا الجهاز تظهر بجانب الرمز. حتى 120 محرفًا.
code
string
اختياري
فقط إذا كان تسجيل الدخول بخطوتين مفعّلًا لهذا الحساب: الرمز المكوّن من 6 أرقام من تطبيق المصادقة، أو رمز استرداد، يُرسل مع البريد وكلمة المرور نفسيهما.
البريد أو كلمة المرور خاطئة. والنص نفسه سواء كان العنوان موجودًا أم لا.
401
تسجيل الدخول بخطوتين مفعّل لهذا الحساب: قيمة two_factor هي code_required إن لم يُرسل رمز، وwrong_code إن لم يطابق. ومحاولات الرمز محدودة بست محاولات كل 5 دقائق لكل حساب وعنوان.
403
هذا الحساب لا يستطيع إدارة المحادثات، أو مساحة عمله غير متاحة.
403
الحقل two_factor قيمته setup_required: تشترط مساحة العمل تسجيل الدخول بخطوتين لهذا الشخص وهو غير مفعّل. يفعّله من ملفه الشخصي على الويب ثم يسجّل الدخول من جديد.
422
فشل التحقق من أحد الحقول. وكائن errors يسميه.
429
محاولات كثيرة، من حد المسار أو من قفل الحساب المشترك. وترويسة Retry-After تحدد مدة الانتظار.
POST/api/agent/refresh
يبدّل رمز موظف ما زال صالحًا برمز جديد.
المصادقة رمز Bearer بصلاحية agentحد المعدل 6 طلب كل 60 دقيقة لكل مستخدم مسجّل
جدّد الرمز بعد تجاوزه نصف عمره. ويُترك الرمز القديم لينتهي وحده بدل إلغائه، فلا تُخرج استجابة ضائعة في الطريق جهازًا من حسابه.
الحقل two_factor قيمته setup_required: أصبحت مساحة العمل تشترط تسجيل الدخول بخطوتين لهذا الشخص وهو غير مفعّل. يُحذف الرمز، فسجّل الدخول من جديد بعد تفعيله.
429
تم بلوغ حد المسار لهذا المستخدم.
GET/api/agent/me
يُرجع الموظف المسجّل ومساحة عمله وموعد انتهاء الرمز الحالي.
المصادقة رمز Bearer بصلاحية agentحد المعدل بلا حد على المسار
يُرجع تغذية صندوق الوارد: قائمة المحادثات وعدّادات غير المقروء وإجماليات الأقسام.
المصادقة رمز Bearer بصلاحية agentصلاحية الدورview-inboxحد المعدل بلا حد على المسار
تحمل الاستجابة الواحدة ستين صفًا كحد أقصى، بينما يعدّ الحقل groups صندوق الوارد كله، فاستخدم filter للوصول إلى بقية القسم. وتمرير conversation يُرجع تلك المحادثة في active ويعلّمها مقروءة.
المعاملات
المعامل
النوع
مطلوب
الوصف
filter
string
اختياري
في الاستعلام. تضييق القائمة: all أو waiting أو mine أو team أو ai أو human أو resolved. القيمة الافتراضية all.
conversation
uuid
اختياري
في الاستعلام. افتح هذه المحادثة وأعدها في active وعلّمها مقروءة.
يُرجع محادثة واحدة كاملة مع نصها وملف الزائر والوسوم والملاحظات والأحداث.
المصادقة رمز Bearer بصلاحية agentصلاحية الدورview-inboxحد المعدل بلا حد على المسار
هذه نقطة صندوق الوارد نفسها مع اختيار المحادثة مسبقًا، فالمحتوى بالشكل ذاته وتصلك المحادثة المطلوبة في 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://magiz.ai/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 يسميه.
GET/api/agent/attachments/options
ما يستطيع هذا الموظف إرفاقه: الأنواع المقبولة، وحد الحجم، وعدد الملفات في الإرسالة الواحدة.
المصادقة رمز Bearer بصلاحية agentصلاحية الدورview-inboxحد المعدل بلا حد على المسار
اقرأه عند تشغيل التطبيق بدل تثبيت الحدود في الكود، ليصل أي تغيير في المنصة إلى تطبيق مثبَّت دون انتظار إصدار جديد في المتجر.
يرسل من ملف إلى خمسة ملفات إلى الزائر، مع تعليق اختياري.
المصادقة رمز Bearer بصلاحية agentصلاحية الدورhandle-conversationsحد المعدل 30 طلب كل 1 دقيقة لكل مستخدم مسجّل
إرسال ملف هو رد: يأخذ المحادثة تمامًا كما يفعل الرد النصي، ويصل الملف عبر القناة التي يستخدمها الزائر. وترجع الدفعة الجزئية برمز 207 مع الرسائل التي أُرسلت والملفات التي رُفضت، لأن إهدار عمل نجح بالفعل أسوأ من نتيجة مختلطة.
المعاملات
المعامل
النوع
مطلوب
الوصف
conversation
uuid
مطلوب
في المسار. المعرّف العام للمحادثة، وهو UUID.
files[]
file
مطلوب
من ملف إلى خمسة ملفات، تُرسل بصيغة multipart. وأي نوع غير مقبول أو يتجاوز حد الحجم يُرفض ملفًا ملفًا.
caption
string
اختياري
نص يُرسل مع الملف الأول. أما البقية فتحمل أسماء ملفاتها.
client_id
string
اختياري
معرّفك الخاص لهذا الرد. إعادة إرساله تُرجع الرسالة المُنشأة سلفًا بدل رسالة ثانية. حتى 64 محرفًا.
الطلب
curl -X POST https://magiz.ai/api/agent/conversations/6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91/attachments \
-H "Authorization: Bearer $AGENT_TOKEN" \
-H "Accept: application/json" \
-F "files[]=@/path/to/replacement-label.pdf" \
-F "caption=Here is the return label." \
-F "client_id=outbox-2026-08-08-0008"
{
"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صلاحية الدورview-inboxحد المعدل بلا حد على المسار
يتراجع التكاملان بلطف بدل الفشل. يكون 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://magiz.ai/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صلاحية الدورview-inboxحد المعدل بلا حد على المسار
يخبرك enabled إن كان أي روبوت نشط قد فُعّلت فيه ميزة الزوار المتصلين. والحقل poll_seconds هو الفاصل الذي يريده الخادم، فاقرأه بدل تثبيت رقم في الشيفرة.
المعاملات
المعامل
النوع
مطلوب
الوصف
limit
integer
اختياري
في الاستعلام. عدد الزوار المطلوب إرجاعه. يُحصر بين 1 و200، والافتراضي 100.
المصادقة رمز Bearer بصلاحية agentصلاحية الدورview-inboxحد المعدل 30 طلب كل 1 دقيقة لكل مستخدم مسجّل
ينشئ محادثة إن لم تكن للزائر واحدة، ويعلّمها بأن يديرها بشر كي لا يتحدث الذكاء الاصطناعي فوقك، ويُرجع 201 في هذه الحالة؛ أما الزائر الذي لديه محادثة مفتوحة فيُرجع 200. وإن لم تكن نافذة الدردشة مفتوحة وصلته الرسالة مع نبضته التالية.
المعاملات
المعامل
النوع
مطلوب
الوصف
visitor
string
مطلوب
في المسار. معرّف الزائر من قائمة الزوار المتصلين. يُقتطع إلى 100 محرف.
message
string
مطلوب
الجملة الافتتاحية المراد إرسالها. حتى 2000 محرف، ولا يجوز أن تكون مسافات فقط.
chatbot_id
integer
اختياري
أرسل من هذا الروبوت. وإن تُرك فارغًا يُفضَّل روبوت الزائر نفسه، ثم أي روبوت نشط.
الطلب
curl -X POST https://magiz.ai/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
تعذّر حفظ الإعدادات.
GET/api/agent/apps
يسرد تبويبات التطبيقات التي يمكن لهذا الشخص فتحها في تطبيقات الموظفين: الطابور والحجوزات والعملاء، كل منها ما دام مفعّلًا لمساحة العمل. لا تُدرج تطبيقات البيانات الصحية أبدًا.
المصادقة رمز Bearer بصلاحية agentحد المعدل 60 طلب كل 1 دقيقة لكل مستخدم مسجّل
يُدرج التطبيق حين يكون مفعّلًا في صفحة التطبيقات ويملك الشخص الصلاحية التي تطلبها شاشاته في لوحة التحكم. اطلب القائمة من جديد كلما عاد التطبيق إلى الواجهة. الخادم الذي لا يعرف هذا المسار يجيب 404: اعرض صندوق الوارد وحده.
رقم واحد: here (في العيادة، أو عاد إلى الدور بعد أن فاته)، وemergency (التالي في الدور)، وcancel، وdone (تمت رؤيته، لا تنادِ أحدًا الآن)، وskip (غير موجود، لا تنادِ أحدًا الآن).
المصادقة رمز Bearer بصلاحية agentصلاحية الدورhandle-conversationsحد المعدل 240 طلب كل 1 دقيقة لكل مستخدم مسجّل
تُسجَّل كل حركة في سجل الطابور مع اسم من ضغط، كما في مكتب الاستقبال في لوحة التحكم. والرد هو حال الطابور بعد الحركة، بالشكل الذي يعيده GET /api/agent/queue، مع ok ورسالة.
app_off: التطبيق معطّل لمساحة العمل. يمكن لمدير مساحة العمل تفعيله من صفحة التطبيقات.
403
الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404
لا طابور ولا رقم ولا جلسة بهذا المعرّف في مساحة العمل وفروع هذا الشخص.
409
لا يمكن للرقم أو الجلسة القيام بهذه الحركة الآن: الرمز ended أو not_live أو not_called أو closed أو full أو stopped.
422
فشل التحقق من أحد الحقول. وكائن errors يسميه.
429
تم بلوغ حد المسار لهذا المستخدم.
POST/api/agent/queue/lines/{line}/walk-in
يعطي رقمًا من مكتب الاستقبال على الجلسة المعروضة، حتى لو امتلأت أو أوقفت إعطاء الأرقام. الاسم والهاتف اختياريان.
المصادقة رمز Bearer بصلاحية agentصلاحية الدورhandle-conversationsحد المعدل 60 طلب كل 1 دقيقة لكل مستخدم مسجّل
تُسجَّل كل حركة في سجل الطابور مع اسم من ضغط، كما في مكتب الاستقبال في لوحة التحكم. والرد هو حال الطابور بعد الحركة، بالشكل الذي يعيده GET /api/agent/queue، مع ok ورسالة.
المصادقة رمز Bearer بصلاحية agentصلاحية الدورhandle-conversationsحد المعدل 60 طلب كل 1 دقيقة لكل مستخدم مسجّل
تُسجَّل كل حركة في سجل الطابور مع اسم من ضغط، كما في مكتب الاستقبال في لوحة التحكم. والرد هو حال الطابور بعد الحركة، بالشكل الذي يعيده GET /api/agent/queue، مع ok ورسالة.
المعاملات
المعامل
النوع
مطلوب
الوصف
line
integer
مطلوب
في المسار. معرّف الطابور.
sitting
integer
مطلوب
في المسار. معرّف الجلسة.
op
string
مطلوب
pause أو resume أو stop أو open أو end. الإنهاء يحتسب المريض الموجود في الغرفة على أنه تمت رؤيته ويُلغي كل رقم ما زال ينتظر.
app_off: التطبيق معطّل لمساحة العمل. يمكن لمدير مساحة العمل تفعيله من صفحة التطبيقات.
403
الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404
لا طابور ولا رقم ولا جلسة بهذا المعرّف في مساحة العمل وفروع هذا الشخص.
409
لا يمكن للرقم أو الجلسة القيام بهذه الحركة الآن: الرمز ended أو not_live أو not_called أو closed أو full أو stopped.
422
فشل التحقق من أحد الحقول. وكائن errors يسميه.
429
تم بلوغ حد المسار لهذا المستخدم.
GET/api/agent/bookings
جدول يوم واحد بتوقيت مساحة العمل: الحجوزات التي تشغل وقتًا في ذلك اليوم، مع بيانات التواصل والتغييرات التي يسمح بها كل حجز الآن.
المصادقة رمز Bearer بصلاحية agentصلاحية الدورhandle-conversationsحد المعدل 120 طلب كل 1 دقيقة لكل مستخدم مسجّل
الحجوزات الملغاة والمرفوضة تحرّر وقتها فلا تظهر. لا تُعاد أبدًا إجابات الحجز ولا الملاحظات الداخلية. ومن حُصر في بعض الفروع لا يرى إلا حجوزات تلك الفروع.
المعاملات
المعامل
النوع
مطلوب
الوصف
date
string
اختياري
في الاستعلام. YYYY-MM-DD بتوقيت مساحة العمل. الافتراضي اليوم.
app_off: التطبيق معطّل لمساحة العمل. يمكن لمدير مساحة العمل تفعيله من صفحة التطبيقات.
403
الرمز صالح، لكن دور المستخدم لا يمنح هذا الإجراء.
404
لا شخص بهذا المعرّف في مساحة العمل هذه.
429
تم بلوغ حد المسار لهذا المستخدم.
نقاط الأداة
النقاط العامة التي تناديها شيفرة التضمين من متصفحات زوارك. وُثِّقت لتتمكن من تصحيح تركيب أو بناء واجهة دردشة خاصة بك. وهي ليست واجهة تكامل، ولا تقبل أي منها رمز وصول.
المسار الأساسي/widget/{key}·7 نقطة نهاية
GET/widget/{key}/config
يُرجع الإعدادات العامة للروبوت: الهوية البصرية والترحيب ونموذج ما قبل الدردشة وبيانات الاتصال اللحظي.
المصادقة بدون مصادقة، عامةحد المعدل 60 طلب كل 1 دقيقة لكل عنوان IP
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
{
"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://magiz.ai",
"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 للاستئناف. وإن لم يطابق معرّف الزائر الذي ترسله، أو كانت تلك المحادثة مغلقة، فتُفتح محادثة جديدة بدل أن يفشل النداء. ويوضح الحقل identity ما أثبته هذا الطلب عن هوية السائل. وقيمة state واحدة من verified أو staff_view أو expired أو refused أو client_area_no_client أو staff_session أو no_account أو account_closed أو module_error أو not_configured أو sign_in_page أو signed_out أو absent. ولا يتضمن first_name إلا عندما يتم التحقق من رمز الهوية المرسل مع هذا الطلب نفسه لعميل، ولا يتضمنه أبدًا في عرض الموظفين.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
visitor_id
string
مطلوب
المعرّف الذي تسنده أداتك للزائر وتحتفظ به طوال الجلسة. حتى 100 محرف.
conversation_id
uuid
اختياري
محادثة قائمة تريد متابعتها. اتركه ليبدأ محادثة جديدة.
meta
object
اختياري
سياق عن الزائر والصفحة. وقد يحمل meta.visitor الاسم والبريد والهاتف من نموذج ما قبل الدردشة لديك.
identity
string
اختياري
رمز هوية موقّع من خادمك أنت. يُتحقق منه قبل الوثوق بأي شيء فيه. حتى 4000 محرف. ويُرفض الرمز إذا كانت قيمة sub أو external_id هي "0". تستمر المحادثة المسجّل دخولها دون رمز لمدة 15 دقيقة بعد آخر رمز تم التحقق منه. بعد ذلك تُوضع جانبًا وتبدأ محادثة جديدة، ويعيدها الرمز الصالح التالي للشخص نفسه خلال 24 ساعة.
signed_out
boolean
اختياري
أرسل true عندما تعرف صفحتك أن أحدًا لم يسجّل الدخول. إذا كانت المحادثة تخص شخصًا سجّل الدخول سابقًا، فإنها تُغلق وتبدأ محادثة جديدة، فلا يراها الشخص التالي على جهاز مشترك.
identity_state
object
اختياري
سبب عدم وجود رمز هوية في الصفحة، برموز فقط: {"v":1,"status":"client|staff|none","reason":"..."}. السبب واحد من signed_out أو staff أو staff_view أو no_account أو account_closed أو module_error أو not_configured. يُستخدم لصياغة الردود ولا يمنح أي وصول أبدًا. وكل ما يخرج عن هذا الشكل يُتجاهل.
{
"conversation_id": "6f0f1d84-2b6a-4a51-9f0e-5c2b3a7d8e91",
"status": "bot",
"handoff_state": "bot_active",
"wait_remaining": null,
"identity": { "state": "absent" },
"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 عادية. ويحمل حدث meta أيضًا الحقل identity، وهو الكائن نفسه الذي يُرجعه boot.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
visitor_id
string
مطلوب
المعرّف الذي تسنده أداتك للزائر وتحتفظ به طوال الجلسة. حتى 100 محرف.
message
string
مطلوب
رسالة الزائر. حتى 4000 محرف، ولا يجوز أن تكون مسافات فقط.
conversation_id
uuid
اختياري
محادثة قائمة تريد متابعتها. اتركه ليبدأ محادثة جديدة.
meta
object
اختياري
سياق عن الزائر والصفحة. وقد يحمل meta.visitor الاسم والبريد والهاتف من نموذج ما قبل الدردشة لديك.
identity
string
اختياري
رمز هوية موقّع من خادمك أنت. يُتحقق منه قبل الوثوق بأي شيء فيه. حتى 4000 محرف. ويُرفض الرمز إذا كانت قيمة sub أو external_id هي "0". تستمر المحادثة المسجّل دخولها دون رمز لمدة 15 دقيقة بعد آخر رمز تم التحقق منه. بعد ذلك تُوضع جانبًا وتبدأ محادثة جديدة، ويعيدها الرمز الصالح التالي للشخص نفسه خلال 24 ساعة.
signed_out
boolean
اختياري
أرسل true عندما تعرف صفحتك أن أحدًا لم يسجّل الدخول. إذا كانت المحادثة تخص شخصًا سجّل الدخول سابقًا، فإنها تُغلق وتبدأ محادثة جديدة، فلا يراها الشخص التالي على جهاز مشترك.
identity_state
object
اختياري
سبب عدم وجود رمز هوية في الصفحة، برموز فقط: {"v":1,"status":"client|staff|none","reason":"..."}. السبب واحد من signed_out أو staff أو staff_view أو no_account أو account_closed أو module_error أو not_configured. يُستخدم لصياغة الردود ولا يمنح أي وصول أبدًا. وكل ما يخرج عن هذا الشكل يُتجاهل.
الطلب
curl -N -X POST https://magiz.ai/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","identity":{"state":"absent"}}
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
مطلوب
المحادثة المراد إغلاقها. ويجب أن تعود لمعرّف الزائر الذي ترسله.
يستعلم عن الرسائل الجديدة في محادثة، بما فيها ردود الموظف البشري.
المصادقة بدون مصادقة، عامةحد المعدل 60 طلب كل 1 دقيقة لكل عنوان IP
مرّر after بأعلى معرّف رسالة لديك لتجلب الجديد فقط. تُرجع المحادثة المسجّل دخولها {"reauth": true, "messages": []} عندما يمضي أكثر من 15 دقيقة على آخر رمز تم التحقق منه. استدعِ boot مجددًا برمز الهوية الموجود في الصفحة للمتابعة.
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
conversationId
uuid
مطلوب
في المسار. المعرّف العام للمحادثة، وهو UUID.
visitor_id
string
مطلوب
المعرّف الذي تسنده أداتك للزائر وتحتفظ به طوال الجلسة. حتى 100 محرف.
after
integer
اختياري
في الاستعلام. أعد الرسائل التي معرّفها أكبر من هذه القيمة فقط.
{
"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
لا محادثة بهذا المعرّف لهذا الروبوت ومعرّف الزائر هذا.
المصادقة بدون مصادقة، عامةحد المعدل 10 طلب كل 1 دقيقة لكل عنوان IP
المعاملات
المعامل
النوع
مطلوب
الوصف
key
string
مطلوب
في المسار. المفتاح العام للروبوت، وهو القيمة نفسها المستخدمة في شيفرة التضمين.
conversationId
uuid
مطلوب
في المسار. المعرّف العام للمحادثة، وهو UUID.
visitor_id
string
مطلوب
المعرّف الذي تسنده أداتك للزائر وتحتفظ به طوال الجلسة. حتى 100 محرف.
score
integer
مطلوب
درجة الرضا من 1 إلى 5.
comment
string
اختياري
تعليق نصي حر. حتى 2000 محرف.
الطلب
curl -X POST https://magiz.ai/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
إرشاد المساعد على الصفحة. المحتوى المرسل لقطة من صفحة الزائر تنتجها الأداة.
GET
/widget/{key}/attachments/{attachment}
يمرر مرفقًا إلى الزائر صاحب المحادثة. والعنوان تصدره الأداة ويُتحقق منه مقابل ذلك الزائر.
POST
/widget/{key}/chat/reveal/{token}
يستبدل رمزًا لمرة واحدة بمعلومة طلبها الزائر ولا يجوز الاحتفاظ بها، مثل كلمة مرور الاستضافة الخاصة به. لا يستدعيه إلا زر الأداة نفسها. يعمل الرمز مرة واحدة فقط، لمدة 3 دقائق، داخل المحادثة المسجّل دخولها التي أُنشئ لها، وللزائر صاحب تلك المحادثة وحده. ولا تُعرض بيانات الدخول إلا لتثبيت WHMCS يعمل بوحدة إصدارها 1.6.0 أو أحدث. ويُرفض أي طلب آخر (404 أو 410 أو 422) ولا يحصل على شيء.
POST
/widget/{key}/chat/verification
يبيّن ما إذا كان رمز تأكيد أُرسل بالبريد الإلكتروني ينتظر في محادثة الزائر، والعنوان المخفي الذي أُرسل إليه، وعدد المحاولات المتبقية. لا يستدعيه إلا مربع الرمز في الأداة، وللزائر صاحب المحادثة وحده. ولا يعيد الرمز أبدًا.
POST
/widget/{key}/chat/verification/{ref}/code
يتحقق من رمز واحد أُدخل في مربع الرمز في الأداة مقابل الرمز المرسل بالبريد لتغيير ما. خمس محاولات لكل طلب، ثم يُغلق الطلب. لا يُحفظ الرمز الصحيح ولا يُمرَّر: ترسل الأداة بعده رسالة عادية تطلق التغيير عبر دورة المحادثة المعتادة.
POST
/widget/{key}/chat/verification/{ref}/resend
يرسل رمزًا جديدًا عبر قناة البريد نفسها ليحل محل السابق. ثلاث مرات على الأكثر لكل طلب، بفاصل ثلاثين ثانية، وضمن الحد الساعي للتاجر. ولا يعيد إلا العنوان المخفي.
POST
/widget/{key}/chat/pay/{token}
زر الدفع أسفل أول طلب لعميل جديد (وحدة WHMCS 1.8.0). يستبدل رمزًا بتسجيل الدخول الفردي الخاص بـ WHMCS إلى الحساب الذي فتحته تلك المحادثة، على فاتورته، ويُنشأ في تلك اللحظة. لا يستدعيه إلا زر الأداة نفسها، من المحادثة التي أُنشئ لها الرمز وللزائر صاحبها، لمدة ساعتين. ويُرفض أي طلب آخر (404 أو 410 أو 422) ولا يحصل على شيء.
تحتاج شيئًا غير موجود هنا؟
أخبرنا بما تبنيه وسنرشدك إلى نقطة النهاية المناسبة، أو نضيف واحدة.