القائمة الكاملة للأحداث التي تُرسل إلى عنوان webhook الذي تحدده في اللوحة وحقولها — بأسماء الحقول الحقيقية وقيم توضيحية.
عند وقوع حدث ما، ترسل Cxperium طلب HTTP واحدًا إلى العنوان المسجل في اللوحة. الإرسال أحادي الاتجاه؛ ولا يُقرأ جسم ردك. تتوفر webhooks في خطة Enterprise.
| الطريقة | POST |
| Content-Type | application/json |
| الرد المتوقع | رمز حالة 2xx؛ والجسم حر |
| إعادة المحاولة | مرة واحدة عند خطأ في الشبكة فقط. لا تُعاد استجابات HTTP 4xx/5xx. |
| العنوان | نقطة نهاية HTTPS متاحة عبر الإنترنت بشهادة TLS صالحة. تُحفظ معلمات الاستعلام كما هي. |
التعريف من اللوحة: في شاشة Webhook أدخل العنوان، واختر الأحداث التي تُفعِّله والاستطلاعات التي يشملها، ثم فعّله. للاطلاع على الخطوات راجع تكامل Webhook. لكي تُرسل أحداث المحادثات والتذاكر يجب أن يكون وصول webhook إلى الاستطلاعات "الكل".
التعريف عبر API: يمكن إنشاء السجل نفسه وتحديثه عبر POST /api/webhook (يُحدَّث عند تطابق العنوان). حقول الجسم هي نفسها حقول اللوحة:
curl -X POST https://api.cxperium.com/api/webhook \
-H "apikey: $CX_API_KEY" -H "Content-Type: application/json" \
-d '{
"webhook_adress": "https://example.com/cxperium-hook",
"webhook_time": ["COMPLETED", "ANSWER_GRANTED", "TICKET_CREATED"],
"access_survey": ["*"],
"webhook_active": true
}'
webhook_time قائمة رموز الأحداث (العناوين أدناه). access_survey قائمة معرّفات الاستطلاعات؛ و"*" تعني جميع الاستطلاعات. اعرض التعريفات بـ GET /api/webhook واحذف أحدها بـ DELETE /api/webhook (مع webhook_adress في الجسم).
ميّز الأحداث بحقل event_status. بقية الحقول خاصة بكل حدث.
| الحقل | النوع | الوصف |
|---|---|---|
event_status | string | رمز الحدث. كل عنوان أدناه قيمة من قيمه. |
complated_time | ISO 8601 | وقت إرسال الطلب (UTC). يُكتب اسم الحقل بهذا الشكل. |
webhook_adress | array | تعريفات webhook الخاصة بك التي طابقت هذا الحدث. نسخة من إعداداتك؛ لا حاجة لمعالجتها. |
جميع حقول المعرّفات سلاسل ست عشرية من 24 حرفًا، وجميع التواريخ بصيغة ISO 8601 بتوقيت UTC. تُحذف الحقول التي لا قيمة لها من JSON؛ تحقق من وجودها عند المعالجة. "webhook_adress": [ … ] في الأمثلة اختصار.
تتشارك أحداث مسار الاستطلاع بنية واحدة: survey الاستطلاع، وcontact المجيب، وquestions الأسئلة والإجابات حتى تلك اللحظة.
| الحقل | النوع | الوصف |
|---|---|---|
survey.id / survey.name | string | معرّف الاستطلاع واسمه |
survey.preData | object | معلمات الاستعلام التي أضفتها إلى رابط الاستطلاع (مثل رقم الطلب). غير موجود إن فُتح الرابط دون معلمات. |
contact.contactId | string | معرّف جهة الاتصال |
contact.name | string | اسم ملف WhatsApp. يصل مقنّعًا (J*** D**) إن كان "جمع بيانات الشخص" متوقفًا في الاستطلاع. |
contact.phone | string | الرقم مع رمز الدولة، دون علامة + |
questions[].id | string | معرّف السؤال |
questions[].name | object | نص السؤال مفهرسًا برمز اللغة: {"TR": "...", "EN": "..."} |
questions[].answer | object | {"text_reply": "..."} للأسئلة النصية، و{"button_reply": "..."} لأسئلة الأزرار/القوائم/النجوم. غير موجود للأسئلة غير المُجابة. |
start_time | ISO 8601 | وقت إدراج الحدث في الطابور |
START — عند بدء الاستطلاععندما ينقر الشخص على رابط الاستطلاع ويرسل أول رسالة عبر WhatsApp، قبل إرسال السؤال الأول مباشرة. لا توجد أي إجابة في هذه المرحلة.
{
"survey": { "id": "6650aabbccddeeff00112233", "name": "Customer Satisfaction Survey", "preData": { "orderId": "SP-99123" } },
"contact": { "contactId": "6612cc33dd44ee55ff667788", "name": "J*** D**", "phone": "905321112233" },
"questions": [
{ "id": "6650bbccddeeff0011223345", "name": { "EN": "How would you rate our service from 1 to 5?" } },
{ "id": "6650bbccddeeff0011223346", "name": { "EN": "Anything you would like to add?" } }
],
"event_status": "START",
"start_time": "2026-09-07T09:45:12.512Z",
"complated_time": "2026-09-07T09:45:12.740Z",
"webhook_adress": [ … ]
}
ANSWER_GRANTED — عند الإجابة عن كل سؤالعندما تجتاز إجابة الشخص التحقق وتُحفظ. إضافة إلى البنية المشتركة، يحتوي هذا الحدث وحده على كتلة instantReply التي تعطي السؤال المُجاب للتو منفردًا: questionId وquestionText (حسب اللغة) وanswer (النص الخام) وpreData.
{
"survey": { "id": "6650aabbccddeeff00112233", "name": "Customer Satisfaction Survey", "preData": { "orderId": "SP-99123" } },
"contact": { "contactId": "6612cc33dd44ee55ff667788", "name": "J*** D**", "phone": "905321112233" },
"instantReply": {
"questionId": "6650bbccddeeff0011223345",
"questionText": { "EN": "How would you rate our service from 1 to 5?" },
"answer": "5",
"preData": { "orderId": "SP-99123" }
},
"questions": [
{ "id": "6650bbccddeeff0011223345", "name": { "EN": "How would you rate our service from 1 to 5?" }, "answer": { "button_reply": "5" } },
{ "id": "6650bbccddeeff0011223346", "name": { "EN": "Anything you would like to add?" } }
],
"event_status": "ANSWER_GRANTED",
"start_time": "2026-09-07T09:46:02.101Z",
"complated_time": "2026-09-07T09:46:02.330Z",
"webhook_adress": [ … ]
}
COMPLETED — عند انتهاء الاستطلاععند الإجابة عن السؤال الأخير وإرسال رسالة الختام. البنية مثل START؛ والفرق أن حقل answer ممتلئ لجميع الأسئلة في questions.
LEAVE — عند مغادرة الشخص للاستطلاععندما يكتب الشخص أمر الخروج أو ينقر زر "مغادرة" أثناء استطلاع جارٍ. البنية مثل START؛ وتوجد الإجابات المقدمة حتى تلك اللحظة في questions. يُرسل هذا الحدث فقط إلى webhooks التي وصولها إلى الاستطلاعات "الكل".
TIMEOUT — عند انتهاء مدة الاستطلاع تلقائيعندما يرسل شخص رسالة إلى استطلاع انقضى تاريخ انتهائه. لا يُختار في اللوحة بشكل منفصل؛ ويُرسل إلى جميع webhooks النشطة. له شكلان: إن كان الشخص قد بدأ الاستطلاع سابقًا فالبنية مثل START وquestions ممتلئة. وإن نقر على رابط منتهٍ لأول مرة فلا يوجد حقل questions ولا contact.contactId:
{
"survey": { "id": "6650aabbccddeeff00112233", "name": "Customer Satisfaction Survey" },
"contact": { "name": "Jane Doe", "phone": "905321112233" },
"event_status": "TIMEOUT",
"start_time": "2026-09-07T09:52:00.000Z",
"complated_time": "2026-09-07T09:52:00.180Z",
"webhook_adress": [ … ]
}
REPEATED — عند إعادة فتح استطلاع أحادي الاستخدام تلقائيعندما ينقر شخص أكمل سابقًا استطلاعًا موسومًا "أحادي الاستخدام" على الرابط نفسه مجددًا. لا يُختار في اللوحة بشكل منفصل؛ ويُرسل إلى جميع webhooks النشطة. البنية مثل TIMEOUT للرابط المنتهي؛ وتختلف فقط قيمة event_status وهي REPEATED.
SURVEY_FORM_CREATE_OR_UPDATE — عند إنشاء نموذج استطلاع أو تغييرهعند إنشاء استطلاع في اللوحة، أو حفظ إعداداته، أو تعديل سؤال، أو إضافة خيار زر/قائمة أو حذفه. في كل الحالات يُرسل التعريف الكامل الحالي للاستطلاع؛ ولا يُحدَّد الجزء الذي تغيّر.
| الحقل | النوع | الوصف |
|---|---|---|
result._id / result.name | string | معرّف الاستطلاع واسمه |
result.language | string | TR، EN، DE، FR، ES، IT، AR، HI، RU، PT_PT |
result.keys | string | المفتاح القصير في رابط الاستطلاع |
result.startMessage / endMessage | string | رسالتا الافتتاح والختام |
result.disposable | boolean | هل هو أحادي الاستخدام |
result.collectUserInfo | boolean | هل تُجمع بيانات الشخص |
result.endDate / endDateActive | date / boolean | تاريخ الانتهاء وهل هو مفعّل |
result.tags | array | الوسوم المرتبطة بالاستطلاع |
result.transactions أو result.question | array | قائمة الأسئلة المرتبة. تأتي باسم transactions عند حفظ الإعدادات، وباسم question عند تعديل سؤال أو خيار. عالج الاثنين بالطريقة نفسها. |
…[].type | string | TEXT، INTERACTIVE، IMAGE، VIDEO، DOCUMENT، LOCATION |
…[].text / header / footer | string أو object | نص السؤال؛ كائن مفهرس برمز اللغة في الاستطلاعات متعددة اللغات |
…[].response_type | string | TEXT، NUMBER، EMAIL، DATE، TIME، NPS، STAR، LOCATION، MEDIA أو فارغ |
…[].nextProcess_id | string | السؤال التالي؛ غير موجود في السؤال الأخير |
…[].order | number | رقم الترتيب، يبدأ من 0 |
…[].interactives[] | array | خيارات الأزرار/القوائم: title وdescription وprocessGoTo_id (السؤال الهدف أو "end") |
user_id | string | معرّف حسابك |
في أحداث التذاكر، userId هو مستخدم اللوحة الذي نفّذ الإجراء، وuserType يبيّن هل هو الحساب الرئيسي (NORMAL) أم مستخدم فرعي (SUB).
TICKET_CREATED — عند إنشاء تذكرةعند فتح تذكرة جديدة من اللوحة أو من API. يأتي السجل الكامل للتذكرة تحت createOneResult: _id (يطابق ticket_id في أحداث التذاكر الأخرى)، وtaskId (رقم التذكرة الظاهر في اللوحة، يبدأ من 1001)، وstatus (NEW، OPEN، PENDING، CLOSED)، وsubject وmessage، وpriorty (الأولوية، يُكتب الاسم هكذا)، وcontactId، وassigneeId (غير موجود إن لم تُسنَد)، وdueDate، وtags، وmediaName، وcreatedAt.
{
"createOneResult": {
"_id": "665f1a2b3c4d5e6f70819200",
"taskId": "1042",
"status": "NEW",
"subject": "Delivery delay",
"message": "My order has not arrived for 5 days.",
"priorty": "NORMAL",
"contactId": "6612cc33dd44ee55ff667788",
"tags": [ "66201122334455667788990a" ],
"mediaName": [ "invoice.pdf" ],
"comments": [],
"createdAt": "2026-09-07T09:12:44.123Z",
"updatedAt": "2026-09-07T09:12:44.123Z"
},
"userId": "6600aa11bb22cc33dd44ee55",
"userType": "NORMAL",
"event_status": "TICKET_CREATED",
"complated_time": "2026-09-07T09:12:44.400Z",
"webhook_adress": [ … ]
}
TICKET_STATUS_CHANGE — عند تغيّر حالة التذكرةعند ضبط حالة تذكرة على NEW أو OPEN أو PENDING أو CLOSED. الحقول: status (الحالة الجديدة)، ticket_id، tagsId (معرّفات وسوم التذكرة)، userId / userType.
TICKET_ASSIGNEE_CHANGE — عند تغيّر المسؤول عن التذكرةعند إسناد تذكرة إلى مستخدم. الحقول: assigneeId (المستخدم الذي أُسندت إليه)، ticket_id، tagsId، userId / userType (من قام بالإسناد).
TICKET_SEND_COMMENT_PANEL — عند كتابة تعليق على تذكرةعند إضافة تعليق موجّه إلى جهة الاتصال على تذكرة من اللوحة أو من API. التعليقات الموسومة "ملاحظة داخلية" لا تُفعّل هذا الحدث، والملفات المرفقة بالتعليق ليست في الحمولة. الحقول: message (نص التعليق)، ticket_id، taskId (رغم اسمه ليس رقم التذكرة بل معرّفات وسومها)، userId / userType.
{
"message": "Spoke with the courier, it will be delivered tomorrow.",
"ticket_id": "665f1a2b3c4d5e6f70819200",
"taskId": [ "66201122334455667788990a" ],
"userId": "6633445566778899aabbccdd",
"userType": "SUB",
"event_status": "TICKET_SEND_COMMENT_PANEL",
"complated_time": "2026-09-07T10:08:30.000Z",
"webhook_adress": [ … ]
}
أحداث محادثات الدعم المباشر. chat_id معرّف المحادثة؛ وcontactId جهة الاتصال، وuserId وuserType الموظف الذي نفّذ الإجراء.
CHAT_CREATED — عند إنشاء محادثةعند بدء محادثة مع جهة اتصال من اللوحة أو من API. إن كانت لجهة الاتصال محادثة مفتوحة فلا يُنشأ سجل جديد وتُعاد المحادثة الحالية. الحقول تحت createOneResult: _id، status، contactId، teamId، assigneeId (غير موجود إن لم تُسنَد)، messages، tags، sessionTime.startTime.
{
"createOneResult": {
"_id": "667700112233445566778899",
"status": "NEW",
"contactId": "6612cc33dd44ee55ff667788",
"teamId": "6644556677889900aabbccdd",
"messages": [],
"tags": [],
"sessionTime": { "startTime": "2026-09-07T09:30:00.000Z" }
},
"userId": "6600aa11bb22cc33dd44ee55",
"userType": "NORMAL",
"event_status": "CHAT_CREATED",
"complated_time": "2026-09-07T09:30:00.250Z",
"webhook_adress": [ … ]
}
CHAT_NORMAL_MESSAGE — عند إرسال الموظف رسالةيُفعَّل عندما يرسل موظف رسالة نصية إلى جهة الاتصال من اللوحة (وليس عند رسائل العميل). تُحوَّل فواصل الأسطر إلى مسافات، والوسائط المرفقة ليست في الحمولة. الحقول: message، chat_id، contactId، userId / userType.
CHAT_TEMPLATE_MESSAGE — عند إرسال رسالة قالبعندما يرسل موظف رسالة قالب WhatsApp من المحادثة. محتوى القالب ليس في الحمولة؛ ويأتي معرّف المحادثة في هذا الحدث باسم conversationId.
CHAT_STATUS_CHANGE — عند تغيّر حالة المحادثةعند تغيير حالة المحادثة يدويًا، أو عندما يكتب موظف أول رسالة في محادثة NEW (OPEN)، أو عند إغلاق المحادثة بسبب حذف جهة الاتصال (CLOSED)، أو عند إغلاقها بانتهاء مهلة الجلسة (CLOSED). الحقول: status، chat_id، contactId، userId / userType. قد لا يوجد userType في الإغلاق التلقائي.
CHAT_ASSIGNEE_CHANGE — عند تغيّر المسؤول عن المحادثةعند إسناد المحادثة إلى موظف آخر، أو عندما يتولاها أول موظف يكتب في محادثة غير مُسندة. الحقول: assigneeId، chat_id، contactId، userId / userType.
عند اكتمال إرسال جماعي يصل حدث ملخص واحد. success وfailed مصفوفتان من أرقام الهواتف؛ استخدم طول المصفوفة للعدد.
SURVEY_SENDING_COMPLETED — عند اكتمال إرسال استطلاععند انتهاء محاولة التسليم لكل الأرقام في جلسة إرسال استطلاع. الحقول: surveyName، success، failed، startingDate، endDate، preData (بيانات مخصصة مرفقة بالإرسال؛ غير موجود إن لم توجد).
{
"surveyName": "Customer Satisfaction Survey",
"success": [ "905321112233", "905334445566" ],
"failed": [ "905559998877" ],
"startingDate": "2026-09-07T08:00:00.000Z",
"endDate": "2026-09-07T08:04:12.000Z",
"event_status": "SURVEY_SENDING_COMPLETED",
"complated_time": "2026-09-07T08:04:12.300Z",
"webhook_adress": [ … ]
}
NOTIFICATION_SENDING_COMPLETED — عند اكتمال إرسال إشعارعند انتهاء محاولة التسليم لكل الأرقام في جلسة إرسال إشعار (رسالة قالب). البنية نفسها، مع templateName بدلًا من اسم الاستطلاع.
أحداث تخص مساعد الذكاء الاصطناعي ونواياه ونصوص الترجمة وملفات قاعدة المعرفة.
ASSISTANT_SESSION_TIMEOUT — عند انتهاء مهلة جلسة المساعدعند إغلاق جلسة المساعد لجهة اتصال لعدم وصول رسائل خلال المدة المحددة. إن كانت لجهة الاتصال محادثة مفتوحة يُرسل أيضًا CHAT_STATUS_CHANGE بحالة CLOSED. حقل واحد: contactId.
ASSISTANT_INTENT_CHANGE — عند تغيّر نية المساعدعند إنشاء نية (intent) أو تحديثها أو حذفها في اللوحة. يبيّن حقل place ما حدث (CREATE، UPDATED، DELETED). قواعد regex للنية ليست في الحمولة؛ ويُستخدم هذا الحدث عادة لتحديث ذاكرة مؤقتة. الحقول: place، name، languageId، userId.
ASSISTANT_LOCATION_CHANGE — عند تغيّر ترجمة المساعدعند إضافة نصوص المساعد (مفاتيح الترجمة) أو تحديثها أو حذفها. تختلف الحقول بحسب قيمة place:
| place | الحقول | الوصف |
|---|---|---|
CREATE | createdData، userId | createdData قائمة المفاتيح المضافة: [{key, value, languageId}] |
CREATE_STATIC | createdData | عند تعريف لغة جديدة: {name, languageId, cultureCode} |
UPDATED | key، languageId، userId | المفتاح المتغيّر. القيمة الجديدة ليست في الحمولة؛ اقرأها من API. |
DELETED | key، userId | حُذف المفتاح من جميع اللغات |
FILE_UPLOAD_AGENT — عند تغيّر ملفات معرفة المساعد تلقائيعند رفع ملف إلى مساعد الذكاء الاصطناعي كمصدر معرفة، أو حذف ملف، أو حذف قاعدة معرفة (stage). لا يُختار في اللوحة بشكل منفصل؛ ويُرسل إلى webhooks النشطة. يضيّق خيار "قواعد المعرفة التي يتلقاها هذا الروبوت" في تعريف webhook القواعد التي تصلك أحداثها. يبيّن حقل status ما حدث:
| status | الحقول | الوصف |
|---|---|---|
FILE_ADDED | stageId، files[]، userId | files الملفات المضافة حديثًا: originalName وstorageLink وmimeType وsize (بالبايت) |
FILE_DELETED | stageId، file، userId | file الملف المحذوف، بالحقول نفسها |
STAGE_DELETED | stageId، userId | حُذفت قاعدة المعرفة بالكامل |
{
"status": "FILE_ADDED",
"stageId": "66f1c2a9b4e5d6f7a8b9c0d1",
"files": [
{
"originalName": "product-catalogue-2026.pdf",
"storageLink": "https://storage.cxperium.com/…/product-catalogue-2026.pdf",
"mimeType": "application/pdf",
"size": 481920
}
],
"userId": "6512b0f4a1c2d3e4f5a6b7c8",
"event_status": "FILE_UPLOAD_AGENT",
"complated_time": "2026-09-07T11:45:02.117Z",
"webhook_adress": [ … ]
}
دع فريقنا التقني يرافقك في عملية التكامل — أرسل سؤالك وسنعاود التواصل معك في اليوم نفسه.
دعم فني متخصص · استشارات تكامل مجانية