كل تغيير على أرقامك، موقّعًا ومُرسَلًا إليك.
عشرة أحداث تغطي الرسائل والحالات والتفاعلات والمحادثات والمجموعات والأرقام نفسها. يصل كل حدث كطلب POST بصيغة JSON موقّع، وتُعاد محاولته لمدة 24 ساعة حتى تُجيب نقطة النهاية لديك.
- التوقيع
- HMAC-SHA256
- الرد خلال
- 10 ثوانٍ
- إعادة المحاولة
- 24 ساعة، حتى 10 محاولات
- التسليم
- مرة واحدة على الأقل
عشرة أحداث
صفِّ كل نقطة نهاية حسب الحدث والرقم. المرشّح الفارغ يستقبل كل شيء، بما في ذلك الأحداث والأرقام المضافة لاحقًا.
الرسائل
المحادثات والمجموعات
الأرقام
message.received
وصلت رسالة إلى أحد أرقامك، في محادثة فردية أو في مجموعة.
data هو كائن الرسالة كاملًا، وهو نفسه الذي يُرجعه GET /v1/messages/{id}.
- لا يُرسَل
webhook.testإلا عبرPOST /v1/webhooks/endpoints/{id}/testأو زر «إرسال حدث تجريبي» في لوحة التحكم، ولا يُرسَل أبدًا بسبب تغيير حقيقي. - تصف الأحداث النشاط المباشر. الرسائل المستوردة من سجل الرقم عند ربطه، أو المستعادة بعد انقطاع، يمكن قراءتها عبر API لكنها لا تُرسَل كأحداث.
تحقّق من كل طلب
تحقّق من التوقيع على المحتوى الخام قبل تحليله، وارفض كل ما مضى عليه أكثر من خمس دقائق.
الترويسات
Content-TypeJSON دائمًا.application/jsonUser-Agentتعرّف بالجهة المُرسِلة لدينا.relay-webhooks/1X-Relay-Eventاسم الحدث، مطابق لـ event في المحتوى.message.receivedX-Relay-Deliveryمعرّف التسليم كما يظهر في سجل التسليم.dlv_01a1cf082f8a…X-Relay-Timestampثواني Unix لحظة توقيع هذه المحاولة.1794474782X-Relay-Signaturev1= متبوعًا بقيمة HMAC-SHA256 بالنظام الست عشري.v1=5f2b…مخطط v1
- اقرأ المحتوى الخام كبايتات، قبل أي تحليل لـ JSON.
- اجمع
X-Relay-Timestampونقطة والمحتوى الخام. - احسب HMAC-SHA256 بسرّ نقطة النهاية (سلسلة
whsec_…كاملة)، وحوّله إلى النظام الست عشري، وأضف البادئةv1=. - قارن النتيجة بـ
X-Relay-Signatureبزمن ثابت. - ارفض أي طابع زمني يبتعد عن ساعتك أكثر من 300 ثانية (5 دقائق).
يُعرض السرّ (whsec_…) عند إضافة نقطة النهاية وعند كل تدوير. يوقف التدوير السرّ القديم فورًا، فحدّث المستقبِل لديك مباشرة بعده.
التسليم
مرة واحدة على الأقل، بتوقيع جديد في كل محاولة، مع إعادة المحاولة بفواصل متزايدة لمدة 24 ساعة.
أجب بأي رمز 2xx خلال 10 ثوانٍ، ثم أنجز العمل. تُعاد المحاولة عند انتهاء المهلة وأخطاء الشبكة والرموز 408 و429 و5xx، وأي رمز آخر نهائي، ولا تُتبَع عمليات إعادة التوجيه.
كل محاولة ترسل المحتوى نفسه، ولا يتغيّر إلا X-Relay-Timestamp وX-Relay-Signature.
- المحاولة 109:12:44X-Relay-Timestamp: 1794474764المحاولة التالية بعد 30 ث
http_503أجابت نقطة النهاية لديك بالرمز 503. - المحاولة 209:13:14X-Relay-Timestamp: 1794474794المحاولة التالية بعد 2 د
timeoutلا إجابة خلال 10 ثوانٍ. - المحاولة 309:15:24X-Relay-Timestamp: 1794474924سُلِّم
200أجابت نقطة النهاية لديك بالرمز 200.
evt_ نفسه في كل محاولة.جدول إعادة المحاولة
تتفاوت كل فترة انتظار بنسبة تصل إلى 10% زيادةً أو نقصانًا. عندما تقع المحاولة التالية بعد أكثر من 24 ساعة على الحدث، ينتهي التسليم بالفشل.
التكرار
التسليم مضمون مرة واحدة على الأقل. يبقى id في المحتوى (evt_…) والترويسة X-Relay-Delivery (dlv_…) كما هما عبر إعادات المحاولة وإعادات الإرسال: احتفظ بالمعرّفات التي عالجتها وتجاهل التكرار. نقطتا نهاية تستقبلان التغيير نفسه تحصل كل منهما على تسليمها الخاص بمعرّفه الخاص.
التعطيل التلقائي
بعد 10 عمليات تسليم متتالية انتهت بالفشل، كل منها بعد 24 ساعة كاملة من المحاولات، تُعطَّل نقطة النهاية ويصلك إشعار في التطبيق. الانقطاع الأقصر لا يؤدي إلى ذلك أبدًا، وأي نجاح يعيد العدّاد إلى الصفر.
أصلح نقطة النهاية، ثم أعد تفعيلها من لوحة التحكم أو عبر enabled: true. لا يُرسَل شيء ما دامت معطّلة: أعد إرسال الأحداث الفائتة من سجل التسليم.
إعادة الإرسال والاختبار
يعرض سجل التسليم، في لوحة التحكم أو عبر GET /v1/webhooks/deliveries، كل محاولة مع إجابة نقطة النهاية لديك. إعادة إرسال تسليم منتهٍ ترسل المحتوى نفسه والمعرّف نفسه مع نافذة جديدة مدتها 24 ساعة، وتُرجع 409 webhook_delivery_pending ما دام التسليم قيد المحاولة.
يرسل الاختبار حدث webhook.test موقّعًا إلى نقطة نهاية واحدة، حتى لو كانت معطّلة.
قواعد نقطة النهاية
عنوان https:// على الإنترنت العام. تُرفض العناوين الخاصة وعناوين الاسترجاع والعناوين المحلية للرابط والعناوين الداخلية للعنقود عند الحفظ (422 invalid_webhook_url)، ويُعاد التحقق منها قبل كل إرسال (destination_not_public، دون إعادة محاولة). لا نتصل إلا بالعنوان الذي تحققنا منه، ولا نتبع عمليات إعادة التوجيه.
الترتيب
يخبرك خطاف الويب بأن شيئًا ما تغيّر، لكن ترتيب الوصول غير مضمون.
- قد تصل الأحداث بغير ترتيبها، خصوصًا بعد إعادة المحاولة. قارن
created_atأو أعد قراءة المورد قبل الكتابة فوق حالة أحدث. - حالة الرسالة تتقدّم فقط:
pending → sent → delivered → read، أوfailed. تجاهل أي حالة تعيدها إلى الوراء. - يحمل
message.reactionوgroup.participantsالقائمة الحالية كاملة، ويحملchat.updatedوgroup.updatedوnumber.statusالحالة بعد التغيير. احتفظ بالأحدث حسبcreated_at.
أرسل إلى نفسك حدثًا تجريبيًا.
أضف نقطة النهاية من الإعدادات › المطوّرون › الويب هوكس، وأرسل حدثًا تجريبيًا، وتابع وصوله في سجل التسليم.