command_status هو حقل الترويسة بطول 4 بايت الذي يبلّغ عن نتيجة العملية. يساوي 0 (ESME_ROK) في الطلب؛ ويحمل رمز خطأ ESME_R* في الاستجابة. والقيمة 0x00000000 تعني النجاح؛ أما القيم غير الصفرية فتشير إلى أعطال محددة مثل كلمة مرور غير صالحة أو خنق أو طابور رسائل ممتلئ.
كيف يعمل command_status
تعكس كل وحدة استجابة قيمة sequence_number للطلب وتضبط command_status على النتيجة. وتعني ESME_ROK (0) النجاح. وأي قيمة أخرى خطأ يقابل رمزها العددي ثابتًا مسمًّى ESME_R* في المواصفة. والرموز 0x00000100–0x000003FF محجوزة لامتدادات SMPP والرموز 0x00000400–0x000004FF لأخطاء موردي SMSC، لذا عالِج الرموز غير المعروفة بلطف دائمًا.
الرموز التي ستراها فعلًا
تغطي مجموعة صغيرة من الرموز معظم المعالجة الواقعية. صنّفها حسب الاستجابة: أعِد المحاولة بعد تباطؤ تدريجي (backoff) (الخنق، الطابور الممتلئ، خطأ النظام)، وأصلِح الطلب (عنوان أو TON/NPI أو data_coding أو طول رسالة غير صالح)، والقاتل للجلسة (كلمة مرور أو معرّف نظام غير صالح، فشل الربط).
| القيمة | الاسم | المعنى | رد الفعل النموذجي |
|---|---|---|---|
| 0x00000000 | ESME_ROK | لا يوجد خطأ | تم بنجاح |
| 0x00000001 | ESME_RINVMSGLEN | طول الرسالة غير صالح | إصلاح الحمولة / المقطع |
| 0x00000005 | ESME_RALYBND | الربط (bind) قائم بالفعل | لا تقم بإعادة الربط؛ أعد استخدام الجلسة |
| 0x0000000A | ESME_RINVSRCADR | عنوان مصدر غير صالح | تصحيح المرسل / TON / NPI |
| 0x0000000B | ESME_RINVDSTADR | عنوان وجهة غير صالح | تصحيح MSISDN المستلم |
| 0x0000000D | ESME_RBINDFAIL | فشل الربط (bind) | تراجع، تحقق من بيانات الاعتماد |
| 0x0000000E | ESME_RINVPASWD | كلمة مرور غير صحيحة | خطأ فادح - إصلاح بيانات الاعتماد |
| 0x0000000F | ESME_RINVSYSID | معرف النظام غير صالح | خطأ فادح - إصلاح بيانات الاعتماد |
| 0x00000014 | ESME_RMSGQFUL | قائمة انتظار الرسائل ممتلئة | تراجع وحاول مرة أخرى |
| 0x00000043 | ESME_RINVESMCLASS | esm_class غير صالح | إصلاح بتات esm_class |
| 0x00000058 | ESME_RTHROTTLED | تقييد المعدل (throttling) — تم تجاوز المعدل | أبطئ، وتراجع (backoff) مع تذبذب عشوائي (jitter) |
| 0x00000062 | ESME_RINVEXPIRY | validity_period غير صالح | إصلاح تنسيق الصلاحية |
| 0x000000FE | ESME_RDELIVERYFAILURE | فشل التسليم (data_sm) | الفحص / إعادة المحاولة وفقًا للسياسة |
| 0x000000FF | ESME_RUNKNOWNERR | خطأ غير معروف | سجّل، نبّه، أعد المحاولة بحذر |
المديات المحجوزة ومديات الموردين
ليس كل رمز تتلقاه ضمن المواصفة الأساسية. تحجز المواصفة 0x00000100–0x000003FF لاستخدام SMPP المستقبلي و0x00000400–0x000004FF لرموز خاصة بـ SMSC، لذا قد يعيد مزوّدك قيمة يشرحها توثيقه وحده. طابِق الرموز الخاصة بالمزوّد على تصنيف داخلي موحَّد (رقم غير صالح، محجوب، مخنوق، فشل مؤقت) كي تبقى جودة المسارات قابلة للمقارنة.
| النطاق | محجوز لـ |
|---|---|
| 0x00000100 – 0x000003FF | امتدادات بروتوكول SMPP |
| 0x00000400 – 0x000004FF | أخطاء خاصة بمورد SMSC |
| 0x00000500 – 0xFFFFFFFF | محجوز |
الأسئلة المتكررة
ماذا يعني ESME_RTHROTTLED وكيف أعالجه؟
يعني ESME_RTHROTTLED (0x00000058) أنك تجاوزت معدّل الرسائل المسموح. أوقف زيادة الحمل، وأوقف الإرسال مؤقتًا، وأبطئ تدريجيًا (backoff) مع تشويش زمني قبل إعادة المحاولة. والإصرار على المعدّل نفسه يخاطر بإسقاط المزوّد للربط.
هل يمكن التعافي من ESME_RINVPASWD؟
لا، ليس أثناء التشغيل. يشير ESME_RINVPASWD (0x0000000E) إلى بيانات اعتماد خاطئة. لا تكرّر الربط في حلقة سريعة؛ أصلِح إعداد system_id/password وأعد الاتصال. وقد تؤدي عمليات الربط الفاشلة المتكررة إلى حجب عنوان IP.
ما الفرق بين ESME_RMSGQFUL وESME_RTHROTTLED؟
يعني ESME_RMSGQFUL (0x00000014) أن طابور SMSC ممتلئ مؤقتًا؛ ويعني ESME_RTHROTTLED (0x00000058) أنك تجاوزت حدّ معدّلك. كلاهما يستدعي الإبطاء التدريجي (backoff)، لكن الخنق يتعلق بإنتاجيتك (TPS) بينما امتلاء الطابور يتعلق بسعة SMSC.
تلقّيت رمز خطأ غير موجود في المواصفة — لماذا؟
يحجز SMPP المدى 0x400–0x4FF لرموز خاصة بموردي SMSC، لذا قد يعيد مزوّدك قيمة موثّقة لديه وحده. راجِع جدول أخطاء المزوّد وطابقها على تصنيفك الداخلي.
مواصفات المصدر
تستند هذه الصفحة إلى المعايير المنشورة. يفتح في علامة تبويب جديدة.