تصادِق عملية bind جلسة SMPP وتفتحها. يتيح bind_transmitter الإرسال فقط، وbind_receiver الاستقبال فقط، وbind_transceiver الاتجاهين معًا على اتصال واحد. يقدّم ESME حقول system_id وpassword وsystem_type؛ ويردّ SMSC بـ bind_resp. وينقل الربط الناجح الجلسة إلى حالة مربوطة حتى unbind أو قطع الاتصال.
bind_transceiverفتح الجلسة والمصادقة عليهاbind_transceiver_respتم قبول الجلسةsubmit_smإرسال رسالةsubmit_sm_respتم القبول، وإعادة معرف الرسالةdeliver_smإيصال استلام أو رسالة واردةdeliver_sm_respتم التأكيدenquire_linkإشارة Keepalive أثناء الخمول
أنواع الربط الثلاثة
يحدّد نوع الربط اتجاه حركة الجلسة. اختر transmitter للإرسال فقط (إرسال الرسائل المنتهية إلى المحمول MT)، أو receiver للاستقبال فقط (رسائل MO وإيصالات التسليم)، أو transceiver لحمل الاتجاهين عبر اتصال واحد — وهو الخيار المعتاد في v3.4 لأنه يخفّض عدد الاتصالات التي تصونها إلى النصف.
| العملية | command_id | يمكن للجلسة |
|---|---|---|
| bind_transmitter | 0x00000002 | إرسال الرسائل (MT) فقط |
| bind_receiver | 0x00000001 | استقبال الرسائل / الإيصالات (MO + DLR) فقط |
| bind_transceiver | 0x00000009 | الإرسال والاستقبال معًا على اتصال واحد |
حقول طلب الربط
يحمل جسم الـ bind بيانات الاعتماد وقدرات ESME المُعلَنة. يصادِق system_id وpassword على الحساب؛ ويصنّف system_type اختياريًا نوع ESME؛ ويعلن interface_version إصدار SMPP؛ وتتيح addr_ton وaddr_npi وaddress_range لـ SMSC توجيه الحركة المنشأة من المحمول إلى هذا الربط. ويؤدي address_range غير المطابق إلى حجب توجيه رسائل MO/DLR بصمت على ربط receiver أو transceiver — وهو خطأ تكامل شائع.
| الحقل | النوع | الحد الأقصى | ملاحظات |
|---|---|---|---|
| system_id | C-Octet String | 16 | معرّف الحساب/تسجيل الدخول |
| password | C-Octet String | 9 | كلمة مرور الحساب |
| system_type | C-Octet String | 13 | فئة ESME اختيارية (غالباً ما تكون فارغة) |
| interface_version | Integer | 1 | 0x34 = v3.4, 0x50 = v5.0 |
| addr_ton | Integer | 1 | نوع الرقم لتوجيه رسائل MO إلى هذا ESME |
| addr_npi | Integer | 1 | مؤشر خطة الترقيم |
| address_range | C-Octet String | 41 | العنوان/التعبير النمطي الذي يوجّهه SMSC إلى هذا الربط (bind) |
استجابة الربط
يردّ SMSC بـ bind_resp المطابق (مثل bind_transceiver_resp بقيمة 0x80000009). ويكون command_status مساويًا ESME_ROK عند النجاح أو خطأً مثل ESME_RINVPASWD (كلمة مرور غير صالحة) أو ESME_RINVSYSID (معرّف نظام غير صالح) أو ESME_RBINDFAIL. ويعيد الجسم قيمة system_id الخاصة بـ SMSC، وفي v3.4 فما فوق معامل sc_interface_version الاختياري (TLV) الذي يخبر ESME بالإصدار الذي يدعمه SMSC فعليًا.
ESME → SMSC bind_transceiver seq=1 system_id=acme password=****
SMSC → ESME bind_transceiver_resp seq=1 status=ESME_ROK system_id=smsc01
(session now BOUND_TRX — submit_sm and deliver_sm may flow)حالات الجلسة
جلسة SMPP آلة حالات صغيرة. تبدأ بحالة OPEN بعد اتصال TCP، وتنتقل إلى حالة BOUND عند نجاح الربط، وتعود إلى UNBOUND ثم CLOSED عند unbind أو قطع الاتصال. ويؤدي إرسال عملية غير مشروعة للحالة الراهنة إلى إعادة ESME_RINVBNDSTS (حالة ربط غير صحيحة). ويؤدي الربط مرتين على اتصال واحد إلى إعادة ESME_RALYBND (مربوط سلفًا).
| الحالة | المعنى |
|---|---|
| OPEN | اتصال TCP قائم، ولم يتم الـ bind بعد |
| BOUND_TX | مرتبط كمرسِل (transmitter) — يمكنه الإرسال |
| BOUND_RX | مرتبط كمستقبِل (receiver) — يمكنه الاستقبال |
| BOUND_TRX | مرتبط كـ transceiver — يمكنه الإرسال والاستقبال |
| UNBOUND | تم إرسال unbind، في انتظار الإغلاق |
| CLOSED | تم قطع الاتصال |
unbind وoutbind
تطلب unbind (0x00000006) إغلاقًا سلسًا للجلسة؛ يردّ الطرف الآخر بـ unbind_resp ويغلق الجانبان اتصال TCP. أما outbind (0x0000000B) فهي حالة الاتجاه المعاكس: يطلب SMSC من ESME مستمِع بدء ربط receiver، وتُستخدم حين يحتاج SMSC إلى تسليم حركة MO إلى ESME ينتظر عادة الاتصالات الواردة.
الأسئلة المتكررة
هل أستخدم أزواج transmitter/receiver أم transceiver؟
فضّل transceiver حيثما يسمح المزوّد — فاتصال واحد يحمل الإرسال والاستقبال معًا، ما يخفّض عدد الاتصالات إلى النصف ويبسّط ربط إيصالات التسليم. استخدم ربطي transmitter وreceiver المنفصلين فقط حين يشترط المزوّد الفصل الاتجاهي.
ما الغرض من system_type؟
يعرّف system_type اختياريًا فئة ESME (مثل فئة تطبيق محددة). ويتركه كثير من المزوّدين فارغًا. اضبطه فقط على القيمة الدقيقة التي يوفّرها المزوّد، لأن بعضهم يوجّه اعتمادًا عليه.
لماذا لا يتلقّى ربط receiver لديّ إيصالات التسليم؟
السبب الأشيع عدم تطابق address_range / addr_ton / addr_npi: يوجّه SMSC حركة MO وDLR إلى الربط الذي يطابق address_range الخاص به، لذا تحجب القيمة الخاطئة تلك الحركة بصمت. تأكّد من القيم الدقيقة المزوَّدة مع المزوّد.
ماذا يعني ESME_RALYBND؟
يعني ESME_RALYBND (0x00000005) أن ESME في حالة مربوطة سلفًا وحاول الربط مجددًا على الجلسة نفسها. اربط مرة واحدة فقط لكل اتصال؛ وإذا رأيت ربطًا فاشلًا، افتح اتصالًا جديدًا بدل إعادة ربط القديم.
كم عدد عمليات الربط المتزامنة التي يمكنني فتحها؟
هذا حدّ تجاري يضعه مزوّدك وليس البروتوكول. وفتح عمليات ربط أكثر مما هو مزوَّد سبب متكرر للخنق أو تعليق الحساب — اتفق على عدد عمليات الربط والإنتاجية لكل ربط (TPS) كتابةً قبل التوسّع.
مواصفات المصدر
تستند هذه الصفحة إلى المعايير المنشورة. يفتح في علامة تبويب جديدة.