أحداث webhook في مُجيب: كل حدث وحقوله
أحداث webhook في مُجيب 5، هي contact.created، booking.created، booking.cancelled، conversation.handoff وmessage.received. يصل كل حدث بالغلاف نفسه، وتختلف حقول data بحسب نوعه. هذه الصفحة مرجع لكل حقل؛ أما الإعداد وإعادة المحاولة والرد المطلوب ففي صفحة webhook واتساب.
القيم التي ليس لها معنى في حدث ما تصل null ولا تُحذف من الجسم. واكتب مستقبِلك بحيث يتجاهل أي حقل لا يعرفه.
ما الحقول المشتركة بين كل الأحداث؟
رابط القسم «ما الحقول المشتركة بين كل الأحداث؟»كل حدث كائن JSON فيه خمسة حقول ثابتة، والتفاصيل كلها داخل data.
| الحقل | النوع | المعنى |
|---|---|---|
id | نص (UUID) | معرّف الحدث، وهو نفسه في كل Webhook يستقبل الحدث ذاته |
type | نص | نوع الحدث، ومطابق للترويسة X-Mujib-Event |
createdAt | نص | وقت وقوع الحدث بتوقيت UTC، مثل 2026-01-01T09:30:00.000Z |
workspaceId | نص (UUID) | معرّف نشاطك في مُجيب، وهو ثابت في كل أحداثك |
data | كائن | تفاصيل الحدث، كما في الأقسام التالية |
يقرأ مُجيب البيانات مرة واحدة بعد وقوع الحدث بلحظات، وتحمل كل إعادة محاولة للإرسال الجسم نفسه. وإذا حُذف ما يتعلق به الحدث قبل ذلك فلا يُرسل شيء.
ما الحقول التي يحملها حدث contact.created؟
رابط القسم «ما الحقول التي يحملها حدث contact.created؟»يُرسل حدث «عميل جديد» مرة واحدة لكل عميل جديد: عند أول رسالة من مُرسِل جديد على واتساب أو إنستغرام أو ماسنجر، أو عندما تراسل من هاتف نشاطك رقمًا ليس عميلًا بعد، أو عندما يضيف أحد الفريق عميلًا من اللوحة.
| الحقل | النوع | المعنى |
|---|---|---|
data.contact.id | نص (UUID) | معرّف العميل في مُجيب |
data.contact.name | نص أو null | اسم العميل المحفوظ |
data.contact.phone | نص أو null | رقمه كما هو محفوظ، مثل 962790000000. يكون غالبًا null لعملاء ماسنجر وإنستغرام |
data.contact.channel | نص | القناة التي جاء منها: whatsapp أو instagram أو facebook لماسنجر، أو manual إذا أضافه الفريق |
data.contact.stage | نص | مرحلة العميل: new أو engaged أو qualified أو won أو lost |
data.contact.createdAt | نص | أول ظهور للعميل بتوقيت UTC |
{ "id": "5d7c1e2a-3b4f-4c6d-9e8f-0a1b2c3d4e5f", "type": "contact.created", "createdAt": "2026-01-01T00:00:00.000Z", "workspaceId": "7f3e9a10-2c4b-4d5e-8f60-71829a0b1c2d", "data": { "contact": { "id": "c1a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8", "name": "سارة", "phone": "962790000000", "channel": "whatsapp", "stage": "new", "createdAt": "2026-01-01T00:00:00.000Z" } }}ما الحقول التي يحملها حدثا booking.created وbooking.cancelled؟
رابط القسم «ما الحقول التي يحملها حدثا booking.created وbooking.cancelled؟»يحمل الحدثان الحقول نفسها في data.booking: يُرسل «حجز جديد» عندما يحجز الوكيل موعدًا أو يضيفه الفريق في التقويم، ويُرسل «انلغى حجز» عندما يُلغى موعد. الحجز المتكرر يرسل حدثًا لكل موعد فيه.
| الحقل | النوع | المعنى |
|---|---|---|
id | نص (UUID) | معرّف الحجز |
status | نص | requested أو confirmed أو cancelled أو completed أو no_show |
source | نص | من أنشأه: agent للوكيل أو staff للفريق |
service | نص | رمز نوع الزيارة كما عرّفه نشاطك |
startsAt | نص | لحظة البداية بتوقيت UTC، مثل 2026-11-02T14:30:00Z |
localTime | نص | وقت البداية بتوقيت الفرع ومن دون منطقة زمنية، مثل 2026-11-02T17:30:00 |
timezone | نص | المنطقة الزمنية للفرع، مثل Asia/Amman |
durationMinutes | عدد أو null | مدة الموعد بالدقائق، وnull تعني المدة الافتراضية لنشاطك |
branch | كائن أو null | الفرع: id وname |
specialist | نص أو null | اسم الأخصائي إن عُيّن |
customer | كائن | contactId وname وphone. يكون contactId قيمة null إذا لم يرتبط الحجز بعميل في مُجيب |
createdAt | نص | وقت إنشاء الحجز بتوقيت UTC |
{ "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d", "type": "booking.created", "createdAt": "2026-11-01T08:15:02.441Z", "workspaceId": "7f3e9a10-2c4b-4d5e-8f60-71829a0b1c2d", "data": { "booking": { "id": "b7e6d5c4-b3a2-4910-8f7e-6d5c4b3a2910", "status": "confirmed", "source": "agent", "service": "consultation", "startsAt": "2026-11-02T14:30:00Z", "localTime": "2026-11-02T17:30:00", "timezone": "Asia/Amman", "durationMinutes": 30, "branch": { "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b", "name": "الفرع الرئيسي" }, "specialist": "ليلى", "customer": { "contactId": "c1a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8", "name": "سارة", "phone": "962790000000" }, "createdAt": "2026-11-01T08:15:01.982Z" } }}ما الحقول التي يحملها حدث conversation.handoff؟
رابط القسم «ما الحقول التي يحملها حدث conversation.handoff؟»يُرسل حدث «تحويل لموظف» مرة واحدة لكل تحويل إلى موظف، ومنه التحويل الذي يحدث لأن الوكيل تعذّر عليه الرد.
| الحقل | النوع | المعنى |
|---|---|---|
data.conversation.id | نص (UUID) | معرّف المحادثة |
data.conversation.channel | نص | whatsapp أو instagram أو facebook |
data.conversation.reason | نص أو null | سبب التحويل: رمز قصير أو جملة كتبها الوكيل بلغة المحادثة. اعرضه كما هو ولا تبنِ عليه شروطًا ثابتة |
data.contact | كائن أو null | العميل: id وname وphone |
{ "id": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f", "type": "conversation.handoff", "createdAt": "2026-11-01T10:02:47.120Z", "workspaceId": "7f3e9a10-2c4b-4d5e-8f60-71829a0b1c2d", "data": { "conversation": { "id": "f0e1d2c3-b4a5-4697-8879-6a5b4c3d2e1f", "channel": "whatsapp", "reason": "العميلة تطلب عرض سعر خاص لمجموعة" }, "contact": { "id": "c1a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8", "name": "سارة", "phone": "962790000000" } }}ما الحقول التي يحملها حدث message.received؟
رابط القسم «ما الحقول التي يحملها حدث message.received؟»يُرسل حدث «رسالة جديدة» مع كل رسالة يرسلها عميل على أي قناة، ويحمل نصها فقط من دون أي ملف.
| الحقل | النوع | المعنى |
|---|---|---|
data.message.id | نص (UUID) | معرّف الرسالة |
data.message.conversationId | نص (UUID) | معرّف المحادثة |
data.message.channel | نص | whatsapp أو instagram أو facebook |
data.message.type | نص | نوع الرسالة، مثل text وimage وaudio وvideo وdocument وlocation |
data.message.text | نص أو null | نص الرسالة، أو نص الرسالة الصوتية بعد تحويله إلى كتابة إن توفر، ويُقص بعد 4000 حرف. يكون null لبقية الأنواع |
data.message.createdAt | نص | وقت استلام الرسالة بتوقيت UTC |
data.contact | كائن أو null | العميل: id وname وphone |
{ "id": "8e9f0a1b-2c3d-4e5f-9a6b-7c8d9e0f1a2b", "type": "message.received", "createdAt": "2026-11-01T18:40:11.305Z", "workspaceId": "7f3e9a10-2c4b-4d5e-8f60-71829a0b1c2d", "data": { "message": { "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d", "conversationId": "f0e1d2c3-b4a5-4697-8879-6a5b4c3d2e1f", "channel": "instagram", "type": "text", "text": "هل يوجد موعد غدًا مساءً؟", "createdAt": "2026-11-01T18:40:11.298Z" }, "contact": { "id": "d2e3f4a5-b6c7-4d8e-9f0a-1b2c3d4e5f6a", "name": "سارة", "phone": null } }}كيف يبدو حدث التجربة webhook.test؟
رابط القسم «كيف يبدو حدث التجربة webhook.test؟»حدث التجربة يصل حين تضغط «أرسل تجربة»، وهو موقّع بالسر نفسه مثل الأحداث الحقيقية، فيصلح لاختبار التحقق من التوقيع.
- يصل إلى الـ Webhook الذي ضغطت فيه الزر وحده، بمحاولة واحدة بلا إعادة.
- لا يظهر في قائمة الأحداث التي تشترك فيها، ويظهر في السجل باسم «إرسال تجربة».
{ "id": "0f1e2d3c-4b5a-4968-8776-5a4b3c2d1e0f", "type": "webhook.test", "createdAt": "2026-11-01T12:00:00.000Z", "workspaceId": "7f3e9a10-2c4b-4d5e-8f60-71829a0b1c2d", "data": { "test": true, "message": "This is a test delivery from Mujib. Your endpoint received and can verify it." }}الأسئلة الشائعة
هل يوجد حدث لتغيير موعد الحجز؟
لا. تغيير الوقت أو الأخصائي لا يرسل حدثًا. لمعرفة آخر حالة للحجز اقرأه من واجهة مُجيب البرمجية بمعرّفه.
لماذا يصل رقم الهاتف فارغًا أحيانًا؟
لأن ماسنجر وإنستغرام لا يعطيان رقم هاتف العميل، فيبقى phone قيمة null ما لم يُحفظ له رقم في مُجيب.
هل تصل ردود الوكيل في حدث message.received؟
لا. الحدث للرسائل الواردة من العملاء وحدها، أما ردود الوكيل والفريق فلا تُرسل.
ما الفرق بين id في الجسم والترويسة X-Mujib-Delivery؟
id يعرّف الحدث، وهو نفسه في كل Webhook يستقبله. أما X-Mujib-Delivery فيعرّف إرسالًا واحدًا إلى Webhook واحد، ويبقى ثابتًا في إعادة المحاولة.
مُجيب منتج شركة المجيب الذكي لتكنولوجيا المعلومات (ذات مسؤولية محدودة)، عمّان، الأردن. رقم التسجيل82888.