الإجابة المختصرة
تُخبر حالات تقرير تسليم الرسائل النصية المرسِلَ بما حدث للرسالة بعد أن قبلها المشغل. ففي إيصالات SMPP 3.4 تعني DELIVRD أن الرسالة وصلت إلى الهاتف، وUNDELIV أنها غير قابلة للتسليم، وEXPIRED أن فترة صلاحيتها انتهت، وREJECTD أن الشبكة رفضتها. وعادةً ما تحوّل واجهات HTTP API هذه القيم إلى حالات مثل DELIVERED أو FAILED.
ماذا تعني قيم stat في SMPP؟
تقدّم مواصفة SMPP 3.4 نموذجاً لصيغة الإيصال يتضمن الحقل stat الذي يحمل الحالة النهائية للرسالة. ويختلف نص الإيصال الدقيق من مركز رسائل (SMSC) إلى آخر، لكن هذه القيم هي الأكثر استخداماً.
| stat | المعنى | السبب المعتاد |
|---|---|---|
| DELIVRD | سُلّمت إلى الهاتف | نجاح طبيعي |
| UNDELIV | غير قابلة للتسليم | رقم غير صحيح أو غير نشط أو محظور |
| EXPIRED | انتهت فترة الصلاحية قبل التسليم | الهاتف مغلق أو خارج التغطية لفترة طويلة |
| REJECTD | رفضتها الشبكة | اسم مرسل غير مسجل، أو محتوى أو مسار محظور |
| DELETED | حُذفت قبل التسليم | أُلغيت في مركز الرسائل (SMSC) |
| ACCEPTD أو UNKNOWN | حالة مقبولة أو حالة غير صالحة/غير معروفة | تختلف حسب مركز الرسائل؛ راجع مزودك |
ما علاقة حالات الـ webhook في المنصة بهذه القيم؟
تحوّل واجهات API إيصالات المشغلين إلى حالات أبسط. ففي منصة OmniChannels.ai تُبلّغ كل قناة بالحالات SUBMITTED وSENT وDELIVERED وREAD وFAILED وREJECTED. والحالتان SUBMITTED وSENT مؤقتتان، أما DELIVERED وFAILED وREJECTED فهي نهائية بالنسبة للرسائل النصية. وقد تصل الحالات بترتيب غير متسلسل، لذا لا تسمح أبداً لحالة SENT متأخرة بأن تحل محل DELIVERED.
كيف أقرأ تقرير التسليم (DLR) بصيغته الخام؟
- طابِق قيمة id في الإيصال مع message_id الذي أعاده submit_sm_resp.
- اقرأ الحقل stat لمعرفة الحالة النهائية، والحقل err لمعرفة رمز خطأ المشغل.
- قارن بين submit date وdone date لمعرفة المدة التي استغرقها التسليم.
- في الرسائل الطويلة، اجمع إيصالات جميع الأجزاء قبل اعتبار الرسالة مُسلَّمة.
ما حدود تقارير التسليم؟
بعض المشغلين لا يعيدون إيصالات أو يعيدونها متأخرة، وبعضهم يبلّغ بالتسليم عند وصول الرسالة إلى الشبكة لا إلى الهاتف. كما أن إيصالات DELIVRD المزيفة علامة معروفة على المسارات الرمادية. تعامل مع الإيصال كدليل قوي، لا كإثبات على أن الرسالة قُرئت.
