ترسل 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.
bind_transceiverفتح الجلسة والمصادقة عليهاbind_transceiver_respتم قبول الجلسةsubmit_smإرسال رسالةsubmit_sm_respتم القبول، وإعادة معرف الرسالةdeliver_smإيصال استلام أو رسالة واردةdeliver_sm_respتم التأكيدenquire_linkإشارة Keepalive أثناء الخمول
ترتيب الحقول الإلزامية الكامل
جسم submit_sm تسلسل ثابت ومرتَّب — لا توجد وسوم للحقول، لذا فإن الترتيب والحجم هما كل شيء. يعرض الجدول جميع المعاملات الإلزامية بترتيب السلك. وقد يكون short_message فارغًا حين يُحمَل النص في معامل message_payload (TLV) بدلًا منه؛ لا تملأ كليهما معًا.
| # | الحقل | النوع | ملاحظات |
|---|---|---|---|
| 1 | service_type | C-Octet String (6) | فئة الخدمة؛ عادةً ما تكون فارغة |
| 2 | source_addr_ton | Integer (1) | نوع رقم المرسل |
| 3 | source_addr_npi | Integer (1) | خطة ترقيم المرسل |
| 4 | source_addr | C-Octet String (21) | عنوان المرسل / المعرف الأبجدي الرقمي |
| 5 | dest_addr_ton | Integer (1) | نوع رقم المستلم |
| 6 | dest_addr_npi | Integer (1) | خطة ترقيم المستلم |
| 7 | destination_addr | C-Octet String (21) | رقم MSISDN للمستلم |
| 8 | esm_class | Integer (1) | وضع الرسالة + النوع + علامة UDHI |
| 9 | protocol_id | Integer (1) | GSM TP-PID؛ عادةً 0 |
| 10 | priority_flag | Integer (1) | 0 (عادي) – 3 (الأعلى) |
| 11 | schedule_delivery_time | C-Octet String (1|17) | فارغ = فوري |
| 12 | validity_period | C-Octet String (1|17) | فارغ = SMSC افتراضي |
| 13 | registered_delivery | Integer (1) | طلب إيصال التسليم |
| 14 | replace_if_present_flag | Integer (1) | 0 = لا، 1 = استبدال |
| 15 | data_coding | Integer (1) | الترميز / DCS |
| 16 | sm_default_msg_id | Integer (1) | معرّف الرسالة المُخزّنة؛ عادةً 0 |
| 17 | sm_length | Integer (1) | طول short_message (0–254) |
| 18 | short_message | Octet String (0–254) | حمولة الرسالة |
العنونة: 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 | المعنى |
|---|---|---|---|
| 0 | غير معروف | 0 | غير معروف |
| 1 | دولي | 1 | ISDN (E.163/E.164) |
| 2 | محلي | 3 | بيانات (X.121) |
| 3 | خاص بالشبكة | 4 | تلكس (F.69) |
| 4 | رقم المشترك | 6 | هاتف محمول أرضي (E.212) |
| 5 | أبجدي رقمي | 8 | محلي |
| 6 | مختصر | 9 | خاص |
esm_class
حقل esm_class حقل بتّي يضبط نمط الرسائل ونوع الرسالة والميزات الخاصة بـ GSM. وأهم بتّ للمرسِلين هو UDHI (0x40): اضبطه حين يبدأ short_message بترويسة بيانات المستخدم، مثل ترويسة الدمج. ويطلب البتّ 0x80 مسار الردّ في GSM.
| بت (Bits) | الحقل | القيمة ← المعنى |
|---|---|---|
| 1–0 | وضع المراسلة | 0 افتراضي · 1 حزمة بيانات · 2 إعادة توجيه · 3 تخزين وإعادة توجيه |
| 5–2 | نوع الرسالة | 0 افتراضي · 0x04 إيصال التسليم · 0x08 تأكيد التسليم · 0x10 تأكيد المستخدم |
| 6 | UDHI | 0x40 = short_message begins with a UDH |
| 7 | مسار الرد | 0x80 = set GSM reply path |
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 كي ينتهي الرمز المتأخّر بدلًا من الوصول متأخرًا.
| القيمة | الترميز |
|---|---|
| 0x00 | الأبجدية الافتراضية لـSMSC (عادةً ما تكون GSM 7-bit) |
| 0x03 | Latin-1 (ISO-8859-1) |
| 0x04 | ثنائي 8 بت (ثُمانيات غير محددة) |
| 0x08 | UCS-2 (UTF-16BE) — Unicode |
الاستجابة
تعيد 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 محرفًا لكل جزء.
مواصفات المصدر
تستند هذه الصفحة إلى المعايير المنشورة. يفتح في علامة تبويب جديدة.