BroadNet
SMPPالتكامل

أفضل ممارسات تكامل SMPP

آخر تحديث 3 دقائق للقراءةقائم على المعايير
إجابة مباشرة

التكامل المتين مع SMPP انضباط تشغيلي لا مجرد وحدات PDU صحيحة: اختر نمط الربط الصحيح، وأدِر sequence_number والنافذة بعناية، وأعِد المحاولة مع تباطؤ تدريجي (backoff) وتشويش زمني (jitter)، واجعل الإرسال آمنًا عند التكرار (idempotent) لتجنّب الفوترة المزدوجة، وأقرّ كل deliver_sm، وأعِد الاتصال بنظافة عند الفشل. أتقِن هذه فتتولى تفاصيل البروتوكول نفسها.

مخططجلسة SMPP بين منصتكم وBroadNet
منصتكم (ESME)
BroadNet SMSC
اتصال TCP/TLS مستمر واحد
  1. bind_transceiverفتح الجلسة والمصادقة عليها
  2. bind_transceiver_respتم قبول الجلسة
  3. submit_smإرسال رسالة
  4. submit_sm_respتم القبول، وإعادة معرف الرسالة
  5. deliver_smإيصال استلام أو رسالة واردة
  6. deliver_sm_respتم التأكيد
  7. enquire_linkإشارة Keepalive أثناء الخمول
§01

استراتيجية الربط

فضّل ربط transceiver حيثما يسمح المزوّد، كي يحمل اتصال واحد الإرسال والاستقبال ويبسّط ربط DLR. اتفق على عدد عمليات الربط المتزامنة وإنتاجية كل ربط (TPS) مع المزوّد كتابةً قبل التوسّع. أكّد الإصدار المتفاوَض عليه من bind_resp، وعالِج إخفاقات الربط صراحةً — أعِد المحاولة على الحالات العابرة من نوع ESME_RALYBND، لكن عامِل ESME_RINVPASWD/ESME_RINVSYSID كأخطاء إعداد قاتلة بدل التكرار في حلقة.

§02

sequence_number والنافذة

أسنِد sequence_number متزايدًا اطّرادًا (من 1 إلى 0x7FFFFFFF ثم يلتف) واستخدمه لربط كل استجابة بطلبها. تتبّع الطلبات المعلَّقة في خريطة مفهرسة بـ sequence_number مع مهلة، كي تُكتشَف استجابة لم تصل قط. احترم النافذة: حدّد وحدات PDU الطائرة غير المُقرّة وأوقِف الإرسال حين تمتلئ بدل الإطلاق أعمى، ما يطلق الخنق.

حالة الربط والتحكم بالتدفق الواجب صيانتها
الحالةلماذا
خريطة الطلبات المعلقة (بواسطة sequence_number)ربط الاستجابات، واكتشاف حالات انتهاء المهلة
عداد إشغال النافذةالضغط العكسي قبل ESME_RTHROTTLED
مفتاح عدم التكرار (idempotency key) لكل رسالة منطقيةمنع عمليات الإرسال المكررة عند إعادة المحاولة
حالة الربط (bind) + وقت آخر enquire_link_respاكتشاف الجلسات الميتة
§03

إعادة المحاولة والتباطؤ التدريجي ومنع التكرار (idempotency)

أعِد المحاولة على الإخفاقات العابرة (ESME_RMSGQFUL وESME_RTHROTTLED وأخطاء النظام والمهل) بتباطؤ أسّي (exponential backoff) وتشويش زمني (jitter) كي لا تتزامن عواصف إعادة الاتصال عبر العمّال. لا تعِد المحاولة على الأخطاء الدائمة (عنوان غير صالح، كلمة مرور غير صالحة). والأهم، اجعل الإرسال حياديًا: أرفِق مرجعًا خاصًا بك (مثلًا عبر user_message_reference) وأزِل التكرار، كي لا تؤدي إعادة محاولة بعد مهلة غامضة إلى فوترة أو تسليم مزدوج.

§04

معالجة إيصالات التسليم

اطلب registered_delivery فقط حيث تستهلك الإيصالات. أجب دائمًا بـ deliver_sm_resp فورًا وعالِج بشكل غير متزامن. اربط الإيصالات بمعامل receipted_message_id، موحِّدًا صيغتي المعرّف السداس عشرية والعشرية، وأغلِق الرسالة فقط على stat نهائية. طابِق رموز err الشبكية على تصنيف موحَّد كي تكون الجودة قابلة للمقارنة عبر المسارات. عامِل الإشعارات الوسيطة بمعزل عن الحالات النهائية.

§05

إبقاء الاتصال نشطًا وإعادة الاتصال

أرسِل enquire_link على مؤقّت خمول وعامِل الاستجابة المفقودة كجلسة ميتة. وعند أي قطع، أعِد الاتصال مع تباطؤ تدريجي وتشويش زمني بدل التكرار في حلقة سريعة. وعند إعادة الاتصال، استأنف من حالة نظيفة: أعِد الربط، وأعِد تعيين خريطة الطلبات المعلَّقة، واعتمد على الحيادية لإعادة إرسال أي شيء كان طائرًا بأمان. راقِب حالة الربط وإشغال النافذة وزمن الإرسال/الـ DLR ومعدّلات رموز الأخطاء، ونبّه على جميعها.

التعليمات

الأسئلة المتكررة

كيف ينبغي أن أسنِد sequence_number؟

استخدم عدّادًا متزايدًا اطّرادًا من 1 حتى 0x7FFFFFFF ثم يلتف. احتفظ بخريطة لأرقام sequence_number المعلَّقة مع مهل كي تربط كل استجابة وتكتشف الطلبات التي لم تحصل على استجابة قط.

كيف أتجنّب الفوترة المزدوجة عند إعادة المحاولة؟

اجعل الإرسال حياديًا. أرفِق مرجعًا خاصًا بك (مثل user_message_reference)، وأزِل التكرار اعتمادًا عليه، وصمّم إعادة المحاولة بحيث يُتعرَّف على إعادة الإرسال بعد مهلة غامضة ويُكبَح بدل تسليمه وفوترته مرتين.

أي أخطاء SMPP ينبغي أن أعيد المحاولة عليها؟

أعِد المحاولة على العابرة — ESME_RMSGQFUL وESME_RTHROTTLED وأخطاء النظام والمهل — بتباطؤ أسّي (exponential backoff) وتشويش زمني (jitter). لا تعِد المحاولة على الأخطاء الدائمة مثل ESME_RINVDSTADR أو ESME_RINVPASWD؛ بل أصلِح المدخل أو الإعداد.

ماذا ينبغي أن أراقب على ربط SMPP؟

حالة الربط، والزمن منذ آخر enquire_link_resp، وإشغال النافذة، وزمن الإرسال والـ DLR، ومعدّلات الأخطاء لكل رمز (خصوصًا ESME_RTHROTTLED). نبّه على ارتفاع الخنق أو تعطّل النافذة كإشارات مبكّرة للمشكلات.

كيف ينبغي أن أعالج إعادة الاتصال بعد جلسة مقطوعة؟

أعِد الاتصال بتباطؤ أسّي مع تشويش زمني، وأعِد الربط، وأعِد تعيين خريطة الطلبات المعلَّقة، وأعِد إرسال الرسائل الطائرة اعتمادًا على idempotency لمنع الإرسال المزدوج. لا تكرّر إعادة الاتصال في حلقة سريعة أبدًا، فقد يحجب ذلك عنوان IP لديك.

مراجع

مواصفات المصدر

تستند هذه الصفحة إلى المعايير المنشورة. يفتح في علامة تبويب جديدة.

BNتتم صيانته بواسطة فريق الهندسة BroadNet·خدمة الرسائل عالية الجودة منذ عام 2003
ضعه على السلك

قم بالبناء باستخدام ربط SMPP حقيقي وواجهة برمجة تطبيقات REST.

اطلب الوصول التجريبي باستخدام مفاتيح اختبار حقيقية: أرسل أولاً إلى رقمك الذي تم التحقق منه، ثم انتقل إلى الإنتاج عبر أكثر من 200 دولة بمجرد الموافقة على معرّف المُرسِل ومساراته.