أحداث Webhook
مرجع شامل لجميع أنواع أحداث webhook وبياناتها
يحدد كتالوج أحداث MailLand 21 نوع حدث موزعة على 6 فئات (اثنان من أصل الـ21 هما إشعارا منصة لا يمكنك الاشتراك فيهما). يُسلَّم كل حدث كطلب HTTP POST موقّع إلى نقطة نهاية webhook الخاصة بك.
ليس كل حدث في الكتالوج يُطلق بعد. تسعة أحداث نشطة وقابلة للاشتراك اليوم: message.delivered
وmessage.deferred وmessage.bounced وmessage.failed وmessage.complained وmessage.outcome_unknown وmessage.retried وmessage.unsubscribed وinbound.received. البقية موثّقة
ومحجوزة وغير مقبولة حاليًا في أي اشتراك: تُرجع الواجهة البرمجية 400 إذا أدرجت أحدها. تُبلّغ
نقطة نهاية الكتالوج عن هذا لكل حدث عبر availableNow وcustomerSelectable: اقرأ هذين الحقلين
بدلاً من ترميز قائمة ثابتة.
كتالوج الأحداث
احصل على كتالوج الأحداث الكامل برمجيًا:
GET https://api.mail.land/v1/webhooks/catalogcurl -X GET https://api.mail.land/v1/webhooks/catalog{
"version": 1,
"products": [
{ "id": "transactional", "name": "Transactional Email", "isActive": true, "comingSoon": false },
{ "id": "marketing", "name": "Marketing Email", "isActive": true, "comingSoon": false },
{ "id": "inbound", "name": "Inbound Email", "isActive": true, "comingSoon": false },
{ "id": "system", "name": "System Events", "isActive": true, "comingSoon": false },
{ "id": "validation", "name": "Email Validation", "isActive": false, "comingSoon": true }
],
"categories": [
{
"id": "message",
"name": "Message Events",
"events": [
{ "id": "message.sent", "name": "Message Sent", "products": ["transactional", "marketing"] },
{ "id": "message.delivered", "name": "Message Delivered", "products": ["transactional", "marketing"] }
]
}
]
}نقطة النهاية هذه عامة (لا تتطلب مصادقة) وتُرجع دائمًا أحدث إصدار من الكتالوج.
هيكل البيانات الموحد
يتضمن كل تسليم webhook هيكلًا خارجيًا موحّدًا:
{
"event": "message.delivered",
"event_id": "evt_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5",
"timestamp": "2026-02-17T12:34:56.789Z",
"occurred_at": "2026-02-17T12:34:56.120Z",
"schema_version": 1,
"data": {
// Event-specific fields
}
}| الحقل | النوع | الوصف |
|---|---|---|
event | string | معرّف نوع الحدث |
event_id | string | معرّف فريد للحدث لإزالة التكرار (الصيغة: evt_{32chars}) |
timestamp | datetime | لحظة وضع الـwebhook في الطابور (UTC)، وليست لحظة وقوع الحدث الأصلي. راجع data.timestamp لتلك اللحظة. |
occurred_at | datetime | لحظة وقوع الحدث الأصلي (UTC)؛ في أحداث الرسائل هي اللحظة نفسها في data.timestamp |
schema_version | integer | إصدار مخطط هذا النوع من الأحداث (اليوم 1)؛ ويتكرر في X-MLND-Event-Version. راجع الإصدارات |
data | object | بيانات خاصة بالحدث |
يحمل الحقل data في كل حدث رسالة أيضًا status_version وstatus وprevious_status
وcomplaint_status وreason، راجع إصدارات الحالة.
إصدارات الحالة
يحمل كل حدث رسالة الحقول data.status_version وdata.status وdata.previous_status
وdata.complaint_status وdata.reason. تزداد status_version بمقدار واحد في كل مرة ترسل فيها MailLand
حدثًا لتغيير في حالة الرسالة أو سببها أو حالة الشكوى الخاصة بها.
استثناءان:
- تبدأ الرسالة بقيمة
status_versionتساوي 0 ما دامتqueuedأوsent. الانتقال منqueuedإلىsentلا يرسل أي حدث ولا يغيّر الإصدار. - يمكن لعدة أحداث
message.deferredأن تشترك فيstatus_versionواحدة: التأخير المتكرر لا يغيّر الحالة.
قد تصل الـ webhooks بغير ترتيبها وقد يُعاد إرسالها، لذا طبّقها حسب status_version، وليس أبدًا حسب
ترتيب الوصول.
قد تتغير الحالة بعد أن كانت نهائية. تُبلغ MailLand بما تعرفه حين تعرفه. وإذا عرفت المزيد لاحقًا،
ترسل الحالة الأحدث مع status_version أعلى:
- قد ترتد رسالة مُسلَّمة لاحقًا، عندما يرفضها خادم المستلم بعد قبولها (ارتداد خارج الجلسة)؛
- بعد عطل داخلي، أو بعد تعافي خادم البريد لدى MailLand، قد يُبلَّغ عن تسليم أو رفض متأخرًا. عندها قد
تصبح رسالة
failedإماbouncedأوdelivered، وقد تصبح رسالةbouncedبحالةdelivered، وقد تصبح رسالةunknownبأي حالة نهائية.
لا تنتقل الرسالة أبدًا من delivered إلى failed. تُحصي MailLand هذه التصحيحات.
| الحقل | النوع | الوصف |
|---|---|---|
status_version | integer | إصدار حالة الرسالة الذي يصفه هذا الحدث. |
status | string | حالة الرسالة في هذا الإصدار: queued أو sent أو deferred أو unknown أو delivered أو bounced أو failed. |
previous_status | string أو null | الحالة قبل هذا التغيير؛ null قبل أول تغيير. |
complaint_status | string | none أو complained. |
reason | string أو null | سبب الارتداد أو الفشل للحالات bounced وfailed وunknown؛ وإلا null. |
مُهل إعادة المحاولة
تعيد MailLand محاولة الرسالة المؤجلة حتى مهلة إعادة المحاولة الخاصة بها: نحو 5 ساعات بعد أول تسليم
لها إلى طابور التسليم في البريد المعاملاتي، ونحو 25 ساعة في البريد التسويقي. بعد المهلة لا
تضع MailLand الرسالة في الطابور لأي محاولة تسليم جديدة. أما النسخة التي كانت تنتظر اتصالًا
عند حلول المهلة فقد تُحاوَل بعدها. هذه مُهل لإعادة المحاولة، وليست وعودًا بموعد تلقيك الحدث
النهائي. تتلقى كل حدث حين تصل النتيجة إلى MailLand؛ وهذا التأخير لم يُقَس بعد، وقد يطول أثناء
انقطاع داخلي. الرسالة التي لم تتمكن MailLand من تسليمها إلى طابور التسليم خلال 24 ساعة
تُنهى بحالة expired.
إذا كنت تحتفظ بالحالة الحالية للرسالة من الـ webhooks (إجراء مطلوب)
هذا تغيير في السلوك بالنسبة إلى عمليات التكامل الحالية. فعملية التكامل التي تعدّ message.failed أو
message.delivered نهائيًا وتتجاهل الأحداث اللاحقة قد تبقى على حالة خاطئة بعد تصحيح. أسماء
الأحداث الموجودة أصلًا صار لها الآن تسلسلات ممكنة جديدة.
- اشترك في كل أحداث الرسائل:
message.deliveredوmessage.deferredوmessage.bouncedوmessage.failedوmessage.complainedوmessage.outcome_unknownوmessage.retried. عندئذ فقط تتضمن الأحداث التي تتلقاها كل تغيير في الحالة. - خزّن
status_versionمع الحالة. لا تطبّق حدثًا إلا إذا كانتstatus_versionالخاصة به أعلى من المخزنة؛ وmessage.deferredبإصدار مساوٍ لا يغيّر شيئًا. - واصل معالجة الأحداث بعد
message.failedأوmessage.bouncedأوmessage.delivered: الحدث اللاحق ذوstatus_versionالأعلى يحل محل الحالة السابقة. - بمجرد أن تتلقى كل الأحداث حتى
status_versionالتي تعرضها الواجهة البرمجية، تتساوى حالتك مع حالتها. قد تسبق الواجهة البرمجية الـ webhooks التي تلقيتها حتى الآن، وعندstatus_versionتساوي 0 قد تعرضsentدون أي حدث.
إذا كنت مشتركًا في بعض أحداث الرسائل فقط، فإن أعلى status_version تلقيتها ليست بالضرورة
الحالة الحالية: ربما غيّرها نوع حدث لست مشتركًا فيه. اقرأ الحالة الحالية من الواجهة البرمجية، مثلًا
لكل رسالة يكون آخر حدث تلقيته لها message.failed أو message.bounced أو message.outcome_unknown،
ثم وفّق بينهما.
إذا لم تستطع تغيير عملية التكامل، فاستعلم من الواجهة البرمجية عن حالة الرسائل التي تهمك. أما عمليات التكامل التي تكتفي بعدّ الأحداث أو بعرض السجل فلا تحتاج إلى أي تغيير.
أحداث الرسائل
message.sent
توضيحي: لم يُصدَر بعد. هذا الحدث مُدرج في الكتالوج لكن لا يوجد له مُصدِر اليوم.
{
"event": "message.sent",
"event_id": "evt_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5",
"timestamp": "2026-02-17T12:34:56.789Z",
"data": {
"message_id": "t_a1b2c3d4e5f6",
"recipient": "[email protected]",
"timestamp": "2026-02-17T12:34:56.789Z"
}
}message.delivered
يُطلق عند تسليم البريد الإلكتروني بنجاح إلى خادم بريد المستلم.
قد يصل هذا الحدث أيضًا كتصحيح بعد حالة نهائية سابقة للرسالة نفسها. راجع إصدارات الحالة.
{
"event": "message.delivered",
"event_id": "evt_b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
"timestamp": "2026-02-17T12:34:58.123Z",
"data": {
"message_id": "t_a1b2c3d4e5f6",
"recipient": "[email protected]",
"timestamp": "2026-02-17T12:34:58.123Z",
"smtp_response": "OK",
"status_version": 1,
"status": "delivered",
"previous_status": "sent",
"complaint_status": "none",
"reason": null
}
}message.deferred
يُطلق عندما يتأخر التسليم مؤقتًا. سيعيد MailLand المحاولة تلقائيًا.
قد تؤجَّل الرسالة عدة مرات. يزيد أول تأجيل قيمة status_version؛ وتحمل التأجيلات المتكررة قيمة
status_version نفسها.
{
"event": "message.deferred",
"event_id": "evt_c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7",
"timestamp": "2026-02-17T12:35:00.000Z",
"data": {
"message_id": "t_a1b2c3d4e5f6",
"recipient": "[email protected]",
"timestamp": "2026-02-17T12:35:00.000Z",
"smtp_response": "Try again later",
"bounce_reason": "TransientFailure"
}
}message.bounced
يُطلق عند ارتداد بريد إلكتروني (ارتداد دائم أو مؤقت).
قد يصل هذا الحدث أيضًا كتصحيح بعد حالة نهائية سابقة للرسالة نفسها. راجع إصدارات الحالة.
{
"event": "message.bounced",
"event_id": "evt_d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8",
"timestamp": "2026-02-17T12:35:01.000Z",
"data": {
"message_id": "t_a1b2c3d4e5f6",
"recipient": "[email protected]",
"timestamp": "2026-02-17T12:35:01.000Z",
"bounce_type": "hard",
"bounce_reason": "InvalidRecipient",
"smtp_response": "The email account that you tried to reach does not exist.",
"status_version": 1,
"status": "bounced",
"previous_status": "sent",
"complaint_status": "none",
"reason": "InvalidRecipient"
}
}bounce_reason هو رمز التصنيف الذي تُسنده MailLand للارتداد (مثل InvalidRecipient أو
QuotaIssues أو SpamBlock)، وليس نص SMTP الخام، استخدم smtp_response لذلك. bounce_type يكون
واحدًا من hard أو soft أو blocked أو unknown.
smtp_response هو نص رد خادم المستلم، دون رمز الرد الرقمي ورمز الحالة المُوسَّع. يبيّن bounce_type
ما فعلته MailLand بالعنوان: hard، حُظر لكل البريد؛ soft، حُظر للبريد التسويقي لمدة 30 يومًا؛
blocked، كان الرفض متعلقًا بالإرسال لا بالعنوان (مثل تصفية البريد المزعج أو مصادقة المرسل أو
السمعة أو سياسة المستلم)، لذا لا يُحظر شيء؛ unknown، لا يوجد تصنيف، ويُعامل مثل soft.
message.failed
يُطلق عندما تُنهي MailLand رسالة بناءً على دليل قاطع على أنها لم تُسلَّم، لسبب من جانب MailLand لا من
جانب المستلم. في الحالات الموصوفة في إصدارات الحالة قد يتبعه message.delivered أو
message.bounced مع status_version أعلى. تصبح حالة الرسالة Failed وليس Bounced، ويُحدد reason
الحالة:
| السبب | ما الذي حدث |
|---|---|
dkim_revoked | كانت الرسالة تنتظر في طابور التسليم لدى MailLand، موقّعة بمفتاح DKIM ألغته MailLand لاحقًا إلغاءً طارئًا لنطاق المرسل (مثلًا بعد الاشتباه في تسريب المفتاح). لا تُسلِّم MailLand مثل هذه الرسالة أبدًا ولا تعيد توقيعها: تنتهي صلاحيتها عند المحاولة التالية، خلال نحو 30 دقيقة للبريد المعاملاتي و4 ساعات للبريد التسويقي. |
admin_bounce | أزال أحد مشغّلي MailLand الرسالة من طابور التسليم لدى MailLand. |
dkim_key_revoked | نطاق المرسل خاضع لإيقاف DKIM طارئ، لذا رفضت MailLand الرسالة قبل دخولها طابور التسليم. |
inject_failed | رفض طابور التسليم لدى MailLand الرسالة رفضًا نهائيًا، فلم تُدرج في الطابور للتسليم قط. |
expired | قبلت MailLand الرسالة لكنها لم تسلّمها إلى طابور التسليم خلال 24 ساعة، لذا أنهتها دون إرسالها. |
template_variable_missing | احتوت الرسالة على عنصر نائب {{name}} لا توجد له قيمة لهذا المستلم، لذا لم ترسلها MailLand والعنصر النائب ظاهر في نصها. |
- لا يُحظر المستلم، ولا يُحتسب هذا الفشل ضمن معدل الارتداد لديك.
- تُنتج الرسالة الواحدة حدث
message.failedواحدًا على الأكثر. وهو آخر حدث لتلك الرسالة ما لم تتلقَّ MailLand لاحقًا تسليمًا أو رفضًا؛ عندها يتبعهmessage.deliveredأوmessage.bouncedمعstatus_versionأعلى.
يُبلَّغ عن رفض خادم البريد المستلم كحدث message.bounced، وليس أبدًا كحدث message.failed.
{
"event": "message.failed",
"event_id": "evt_e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0",
"timestamp": "2026-09-28T02:00:19.1047332Z",
"data": {
"message_id": "t_a1b2c3d4e5f6",
"recipient": "[email protected]",
"timestamp": "2026-09-28T02:00:18.2522997Z",
"reason": "dkim_revoked",
"smtp_response": "Next delivery time PT3.028008S > PT1S",
"status_version": 1,
"status": "failed",
"previous_status": "sent",
"complaint_status": "none"
}
}| الحقل | الوصف |
|---|---|
reason | سبب إنهاء MailLand للرسالة: إحدى القيم أعلاه. تعامل مع أي قيمة أخرى على أنها سبب جديد من جانب MailLand. |
smtp_response | نص من طابور التسليم لدى MailLand إن وُجد (dkim_revoked وadmin_bounce وinject_failed)، وإلا null. للعلم فقط: وليس أبدًا ردًا من خادم المستلم. |
message.outcome_unknown
يُطلق عندما لا تستطيع MailLand تحديد ما إذا كانت الرسالة قد وصلت إلى طابور التسليم لديها، مثلًا
لأن تسليمها إلى القائمة انقطع ولم يمكن التحقق منه بعد ذلك. يُرسل بعد مدة من مهلة إعادة المحاولة
الخاصة بالرسالة، حاليًا 7 أيام، إذا لم يصل أي دليل حتى ذلك الحين. هذه ليست حالة نهائية. تصبح
الحالة unknown. إذا عرفت MailLand النتيجة لاحقًا، تتلقى message.delivered أو message.bounced أو
message.failed مع status_version أعلى.
{
"event": "message.outcome_unknown",
"event_id": "evt_0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d",
"timestamp": "2026-10-08T17:05:00.000Z",
"data": {
"message_id": "t_a1b2c3d4e5f6",
"recipient": "[email protected]",
"timestamp": "2026-10-08T17:05:00.000Z",
"status_version": 1,
"status": "unknown",
"previous_status": "queued",
"complaint_status": "none",
"reason": "handoff_undetermined"
}
}message.retried
يُطلق عندما تعيد محاولة رسالة مرتدّة أو فاشلة فتضعها MailLand في الطابور من جديد. تصبح الحالة queued
وتزداد status_version؛ وتتبعها أحداث النسخة المعاد إرسالها بإصدارات أعلى. هذه ليست حالة نهائية.
{
"event": "message.retried",
"event_id": "evt_1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e",
"timestamp": "2026-10-01T18:00:00.000Z",
"data": {
"message_id": "t_a1b2c3d4e5f6",
"recipient": "[email protected]",
"timestamp": "2026-10-01T18:00:00.000Z",
"attempt": 1,
"status_version": 2,
"status": "queued",
"previous_status": "bounced",
"complaint_status": "none",
"reason": null
}
}أحداث التفاعل
message.opened وmessage.clicked مُدرجان في الكتالوج لكنها غير قابلة
للاختيار من قِبل العميل وغير مُصدَرة اليوم. لا يمكنك الاشتراك فيها: محاولة اختيارها عند
الإنشاء/التحديث تُرفض بالخطأ 400 "One or more invalid events selected". الأمثلة أدناه توضيحية
فقط.
message.opened
توضيحي: غير متاح.
{
"event": "message.opened",
"event_id": "evt_f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0",
"timestamp": "2026-02-17T13:15:00.000Z",
"data": {
"message_id": "t_a1b2c3d4e5f6",
"recipient": "[email protected]",
"timestamp": "2026-02-17T13:15:00.000Z"
}
}message.clicked
توضيحي: غير متاح.
{
"event": "message.clicked",
"event_id": "evt_g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1",
"timestamp": "2026-02-17T13:16:00.000Z",
"data": {
"message_id": "t_a1b2c3d4e5f6",
"recipient": "[email protected]",
"timestamp": "2026-02-17T13:16:00.000Z"
}
}message.unsubscribed
يُرسَل عندما يلغي مستلم اشتراكه من رسالة أرسلتها: عبر ترويسة List-Unsubscribe أو عنوان mailto: الخاص بها، أو
طلب POST بنقرة واحدة، أو رابط إلغاء الاشتراك، أو صفحة التفضيلات. لا يُرسَل عند إلغاء الاشتراك الذي تجريه أنت بنفسك عبر
الواجهة البرمجية أو لوحة التحكم، ولا عند شكاوى البريد المزعج (message.complained). يُرسَل مرة واحدة لكل رسالة، في اللحظة
نفسها التي يُسجَّل فيها إلغاء اشتراك المستلم، إلى كل نقطة نهاية مشتركة فيه. وككل أحداث الرسائل، يحمل data أيضًا حقول
حالة الرسالة الحالية (راجع إصدارات الحالة).
{
"event": "message.unsubscribed",
"event_id": "evt_h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2",
"timestamp": "2026-02-17T14:00:00.000Z",
"data": {
"message_id": "m_a1b2c3d4e5f6",
"recipient": "[email protected]",
"timestamp": "2026-02-17T14:00:00.000Z",
"status_version": 3,
"status": "delivered",
"previous_status": "queued",
"complaint_status": "none",
"reason": null
}
}أحداث الإيقاف
message.complained
يُطلق عندما يُبلّغ المستلم عن البريد الإلكتروني كرسالة مزعجة (حلقة تغذية راجعة من مزوّد الخدمة).
{
"event": "message.complained",
"event_id": "evt_i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3",
"timestamp": "2026-02-17T15:00:00.000Z",
"data": {
"message_id": "m_a1b2c3d4e5f6",
"recipient": "[email protected]",
"timestamp": "2026-02-17T15:00:00.000Z",
"feedback_type": "abuse"
}
}معدلات الشكاوى التي تتجاوز 0.1٪ يمكن أن تضر بسمعة المُرسِل الخاصة بك. راقب أحداث
message.complained عن كثب وتأكد من الإرسال فقط إلى المستلمين الذين وافقوا على ذلك.
suppression.added
توضيحي: لم يُصدَر بعد. هذا الحدث مُدرج في الكتالوج لكن لا يوجد له مُصدِر اليوم.
{
"event": "suppression.added",
"event_id": "evt_j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4",
"timestamp": "2026-02-17T15:00:01.000Z",
"data": {
"email": "[email protected]",
"type": "complaint",
"scope": "global",
"reason": "Spam complaint via ISP feedback loop"
}
}suppression.removed
توضيحي: لم يُصدَر بعد. هذا الحدث مُدرج في الكتالوج لكن لا يوجد له مُصدِر اليوم.
{
"event": "suppression.removed",
"event_id": "evt_k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5",
"timestamp": "2026-02-17T16:00:00.000Z",
"data": {
"email": "[email protected]",
"type": "manual",
"scope": "global"
}
}أحداث البريد الوارد
inbound.received
يُطلق عند استلام بريد إلكتروني وارد على أحد نطاقاتك.
يستخدم هذا الحدث الغلاف القياسي مثل كل حدث آخر في هذه الصفحة: event_id يساوي X-MLND-Event-Id
ويبقى ثابتًا عبر إعادة المحاولات، وoccurred_at هو وقت استلام البريد، وحقول البريد الوارد تحت data.
id كل مرفق ثابت عبر إعادة المحاولات، أما download_url فجديد في كل محاولة. مرجع الحقول:
ويب هوك البريد الوارد.
{
"event": "inbound.received",
"event_id": "evt_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"timestamp": "2026-02-17T12:00:00.000Z",
"occurred_at": "2026-02-17T12:00:00.000Z",
"schema_version": 1,
"data": {
"idempotency_key": "r7n2k5x9m1p4w6_s5m3x8k1p7n4w2",
"email": {
"id": "r7n2k5x9m1p4w6",
"received_at": "2026-02-17T12:00:00.000Z",
"size_bytes": 4521,
"envelope": {
"from": "[email protected]",
"to": ["[email protected]"]
},
"headers": {
"from": { "address": "[email protected]", "name": "Jane Doe" },
"to": [{ "address": "[email protected]" }],
"subject": "Help with my order",
"message_id": "<[email protected]>",
"date": "2026-02-17T11:59:50.000Z"
},
"body": {
"text_preview": "Hi, I need help with...",
"has_text": true,
"has_html": true
},
"attachments": [],
"authentication": {
"spf": { "result": "pass" },
"dkim": { "result": "pass" },
"dmarc": { "result": "pass" }
},
"spam": {
"score": 0.1,
"is_spam": false,
"reason": null
},
"source": {
"ip": "203.0.113.10",
"hostname": "mail.external.com"
}
},
"matched_route": {
"id": "s5m3x8k1p7n4w2",
"name": "Support inbox"
}
}
}أحداث الحساب
account.webhook_paused
لا يُصدَر. الإيقاف التلقائي حقيقي ويحدث كما هو موصوف في
منطق إعادة المحاولة، لكنه يُبلَّغ عنه عبر حقلي webhook الخاصين به
pausedAt / pausedReason وإشعار داخل التطبيق، وليس كحدث webhook. إرسال "توقفت نقطة النهاية
الخاصة بك عن العمل" إلى نقطة نهاية webhook غير موثوق به بحكم التصميم، ولا يمكن لأي اشتراك احتواء
هذا الحدث حاليًا على أي حال.
يُطلق عند إيقاف webhook تلقائيًا بسبب إخفاقات متتالية.
{
"event": "account.webhook_paused",
"event_id": "evt_m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7",
"timestamp": "2026-02-17T18:00:00.000Z",
"data": {
"webhook_id": "z8m3p1k6x4w2n7",
"webhook_name": "Production Events",
"consecutive_failures": 10,
"last_error": "Connection refused"
}
}account.domain_verified
توضيحي: لم يُصدَر بعد. هذا الحدث مُدرج في الكتالوج لكن لا يوجد له مُصدِر اليوم.
{
"event": "account.domain_verified",
"event_id": "evt_n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8",
"timestamp": "2026-02-17T10:15:00.000Z",
"data": {
"domain_id": "q3z8v1k6m9p2x5",
"domain": "yourdomain.com"
}
}account.domain_failed
توضيحي: لم يُصدَر بعد. هذا الحدث مُدرج في الكتالوج لكن لا يوجد له مُصدِر اليوم.
{
"event": "account.domain_failed",
"event_id": "evt_o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9",
"timestamp": "2026-02-17T10:15:00.000Z",
"data": {
"domain_id": "q3z8v1k6m9p2x5",
"domain": "yourdomain.com",
"reason": "DKIM record not found for selector mlnd"
}
}account.quota_warning
توضيحي: لم يُصدَر بعد. هذا الحدث مُدرج في الكتالوج لكن لا يوجد له مُصدِر اليوم.
{
"event": "account.quota_warning",
"event_id": "evt_p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0",
"timestamp": "2026-02-17T20:00:00.000Z",
"data": {
"used": 45000,
"limit": 50000,
"percentage": 90
}
}account.quota_exceeded
توضيحي: لم يُصدَر بعد. هذا الحدث مُدرج في الكتالوج لكن لا يوجد له مُصدِر اليوم.
{
"event": "account.quota_exceeded",
"event_id": "evt_q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1",
"timestamp": "2026-02-17T22:00:00.000Z",
"data": {
"used": 50000,
"limit": 50000,
"percentage": 100
}
}ملخص الأحداث
"متاح" هو علامة availableNow في الكتالوج: هل يُصدِر شيء ما هذا الحدث فعليًا اليوم. يمكن فقط
للأحداث المتاحة أن تُدرج في اشتراك.
| الحدث | متاح | المنتجات | مقيّد بالنطاق | الوصف |
|---|---|---|---|---|
message.delivered | نعم | transactional, marketing | نعم | تم التسليم بنجاح |
message.deferred | نعم | transactional, marketing | نعم | مؤجل مؤقتًا |
message.bounced | نعم | transactional, marketing | نعم | ارتداد دائم أو مؤقت |
message.failed | نعم | transactional, marketing | نعم | أنهته MailLand بناءً على دليل قاطع لسبب من جانبها؛ قد يتبعه تصحيح (راجع إصدارات الحالة) |
message.outcome_unknown | نعم | transactional, marketing | نعم | تعذّر على MailLand تحديد ما إذا كانت الرسالة قد وصلت إلى طابور التسليم؛ ليست نهائية |
message.retried | نعم | transactional, marketing | نعم | أُعيدت محاولة رسالة مرتدّة أو فاشلة وهي في الطابور من جديد؛ ليست نهائية |
message.complained | نعم | transactional, marketing | نعم | تم وضع علامة عليه كرسالة مزعجة |
inbound.received | نعم | inbound | نعم | تم استلام بريد إلكتروني وارد |
message.sent | ليس بعد | transactional, marketing | نعم | تم قبول البريد الإلكتروني ووضعه في الطابور |
message.opened | ليس بعد | transactional, marketing | نعم | تم تحميل بكسل التتبع |
message.clicked | ليس بعد | transactional, marketing | نعم | تم النقر على رابط |
message.unsubscribed | نعم | transactional, marketing | نعم | ألغى المستلم الاشتراك |
suppression.added | ليس بعد | transactional, marketing | لا | تمت الإضافة إلى قائمة الإيقاف |
suppression.removed | ليس بعد | transactional, marketing | لا | تمت الإزالة من قائمة الإيقاف |
account.webhook_paused | ليس بعد | system | لا | تم إيقاف الـwebhook تلقائيًا |
account.domain_verified | ليس بعد | system | لا | تم التحقق من النطاق |
account.domain_failed | ليس بعد | system | لا | فشل التحقق من النطاق |
account.quota_warning | ليس بعد | system | لا | الاقتراب من حد الحصة |
account.quota_exceeded | ليس بعد | system | لا | تم استنفاد الحصة |
الأحداث المستقبلية
عندما تكون includeFutureEvents بقيمة true (الافتراضي)، يستلم الـwebhook الخاص بك تلقائيًا
أنواع الأحداث الجديدة أثناء إضافتها إلى منتجاتك المشترك بها. اضبطها على false لتثبيت اشتراكك على
لقطة الأحداث الحالية.
الأحداث المُعلَّمة بـ"ليس بعد" أعلاه تصبح قابلة للاشتراك عند إطلاق مُصدِراتها: أسماء الأحداث وهياكل البيانات الموثقة هنا لن تتغير عند ذلك.
الخطوات التالية
- التحقق من التوقيع: تحقق من أن الأحداث صادرة من MailLand
- منطق إعادة المحاولة: افهم سلوك إعادة المحاولة
- نظرة عامة على الـWebhooks: أنشئ الـwebhooks وأدرها