BroadNet
SMPPالعمليات

SMPP submit_sm: كل حقل إلزامي

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

ترسل submit_sm (رمز العملية 0x00000004) رسالة منتهية إلى المحمول من ESME إلى SMSC. وجسمها تسلسل ثابت من الحقول الإلزامية — العنونة (TON/NPI + العنوان) وesm_class وprotocol_id وpriority_flag والجدولة وregistered_delivery وdata_coding وsm_length وshort_message — متبوعًا اختياريًا بمعاملات TLV. وتعيد submit_sm_resp قيمة message_id الخاصة بـ SMSC.

مخططجلسة 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

ترتيب الحقول الإلزامية الكامل

جسم submit_sm تسلسل ثابت ومرتَّب — لا توجد وسوم للحقول، لذا فإن الترتيب والحجم هما كل شيء. يعرض الجدول جميع المعاملات الإلزامية بترتيب السلك. وقد يكون short_message فارغًا حين يُحمَل النص في معامل message_payload (TLV) بدلًا منه؛ لا تملأ كليهما معًا.

المعاملات الإلزامية لـ submit_sm (بترتيب السلك)
#الحقلالنوعملاحظات
1service_typeC-Octet String (6)فئة الخدمة؛ عادةً ما تكون فارغة
2source_addr_tonInteger (1)نوع رقم المرسل
3source_addr_npiInteger (1)خطة ترقيم المرسل
4source_addrC-Octet String (21)عنوان المرسل / المعرف الأبجدي الرقمي
5dest_addr_tonInteger (1)نوع رقم المستلم
6dest_addr_npiInteger (1)خطة ترقيم المستلم
7destination_addrC-Octet String (21)رقم MSISDN للمستلم
8esm_classInteger (1)وضع الرسالة + النوع + علامة UDHI
9protocol_idInteger (1)GSM TP-PID؛ عادةً 0
10priority_flagInteger (1)0 (عادي) – 3 (الأعلى)
11schedule_delivery_timeC-Octet String (1|17)فارغ = فوري
12validity_periodC-Octet String (1|17)فارغ = SMSC افتراضي
13registered_deliveryInteger (1)طلب إيصال التسليم
14replace_if_present_flagInteger (1)0 = لا، 1 = استبدال
15data_codingInteger (1)الترميز / DCS
16sm_default_msg_idInteger (1)معرّف الرسالة المُخزّنة؛ عادةً 0
17sm_lengthInteger (1)طول short_message (0–254)
18short_messageOctet String (0–254)حمولة الرسالة
§02

العنونة: TON وNPI

يحمل كل من source_addr وdestination_addr نوع الرقم (TON) ومؤشّر خطة الترقيم (NPI). لرقم MSISDN دولي استخدم TON بقيمة 1 (دولي) مع NPI بقيمة 1 (ISDN/E.164). ولمعرّف مُرسِل أبجدي رقمي استخدم TON بقيمة 5 (أبجدي رقمي) — عندها يحمل source_addr حتى 11 محرفًا من GSM-7. وضبط TON/NPI خطأً سبب رئيسي لعدم التسليم أو سوء التوجيه.

قيم TON وNPI الشائعة
TONالمعنىNPIالمعنى
0غير معروف0غير معروف
1دولي1ISDN (E.163/E.164)
2محلي3بيانات (X.121)
3خاص بالشبكة4تلكس (F.69)
4رقم المشترك6هاتف محمول أرضي (E.212)
5أبجدي رقمي8محلي
6مختصر9خاص
§03

esm_class

حقل esm_class حقل بتّي يضبط نمط الرسائل ونوع الرسالة والميزات الخاصة بـ GSM. وأهم بتّ للمرسِلين هو UDHI (0x40): اضبطه حين يبدأ short_message بترويسة بيانات المستخدم، مثل ترويسة الدمج. ويطلب البتّ 0x80 مسار الردّ في GSM.

معاني بتّات esm_class (مختارة)
بت (Bits)الحقلالقيمة ← المعنى
1–0وضع المراسلة0 افتراضي · 1 حزمة بيانات · 2 إعادة توجيه · 3 تخزين وإعادة توجيه
5–2نوع الرسالة0 افتراضي · 0x04 إيصال التسليم · 0x08 تأكيد التسليم · 0x10 تأكيد المستخدم
6UDHI0x40 = short_message begins with a UDH
7مسار الرد0x80 = set GSM reply path
§04

data_coding وregistered_delivery والصلاحية

يختار data_coding ترميز النص: 0x00 = الترميز الافتراضي لـ SMSC (عادة GSM 7-بت)، و0x04 = ثنائي 8-بت، و0x08 = UCS-2 لليونيكود. ويتحكّم البتّان الأدنيان في registered_delivery بالإيصالات: 0 = لا شيء، 1 = إيصال عند النجاح أو الفشل النهائي، 2 = عند الفشل فقط. ويستخدم كل من validity_period وschedule_delivery_time الصيغة المطلقة YYMMDDhhmmsstnnp أو صيغة نسبية؛ وتعني السلسلة الفارغة تسليمًا فوريًا وصلاحية SMSC الافتراضية. أبقِ validity_period ضيقًا لرموز OTP كي ينتهي الرمز المتأخّر بدلًا من الوصول متأخرًا.

data_coding — القيم التي تستخدمها فعلًا
القيمةالترميز
0x00الأبجدية الافتراضية لـSMSC (عادةً ما تكون GSM 7-bit)
0x03Latin-1 (ISO-8859-1)
0x04ثنائي 8 بت (ثُمانيات غير محددة)
0x08UCS-2 (UTF-16BE) — Unicode
§05

الاستجابة

تعيد submit_sm_resp (0x80000004) قيمة command_status، وعند النجاح تعيد message_id (سلسلة C-Octet String حتى 65 محرفًا) يسنده SMSC للرسالة. احفظه: فهو المفتاح الذي تطابقه مع receipted_message_id في إيصال التسليم. وانتبه لانحراف الصيغة — تعيد بعض مراكز SMSC المعرّف بالنظام السداس عشري عند الإرسال وبالعشري في DLR، لذا وحّد كليهما عند الربط.

التعليمات

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

أي قيمة TON/NPI أستخدم لمعرّف مُرسِل أبجدي رقمي؟

استخدم source_addr_ton = 5 (أبجدي رقمي) وsource_addr_npi = 0 (غير معروف). عندها يحمل source_addr حتى 11 محرفًا من GSM-7. ومعرّفات المُرسِلين الأبجدية الرقمية للعرض فقط ولا يمكنها استقبال الردود.

كيف أطلب إيصال تسليم في submit_sm؟

اضبط registered_delivery = 1 للحصول على إيصال عند التسليم أو الفشل النهائي، أو 2 عند الفشل فقط. اطلب الإيصالات فقط حيث تستهلكها فعلًا، لأن إيصالات DLR غير المقروءة تهدر الإنتاجية.

ما الطول الأقصى لـ short_message؟

يحمل حقل short_message حتى 254 بايت، مع sm_length الذي يعطي العدد الدقيق. وللنصوص الأطول، إما جزّئ بترويسة UDH عبر عدة وحدات submit_sm، أو احمل كامل الحمولة في معامل message_payload (TLV) بدل short_message.

هل أضبط short_message وmessage_payload معًا؟

لا. املأ أحدهما لا كليهما. يرفض المزوّدون وحدة submit_sm تحمل الرسالة في كل من حقل short_message الإلزامي ومعامل message_payload.

كيف أرسل رسالة يونيكود؟

اضبط data_coding = 0x08 (UCS-2) ورمّز النص بـ UTF-16 big-endian في short_message. تحمل رسالة UCS-2 واحدة 70 محرفًا؛ ويُجزَّأ النص اليونيكودي الأطول إلى 67 محرفًا لكل جزء.

مراجع

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

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

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

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

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