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

> ترسل 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.

- الرابط الأساسي: https://www.broadnet.me/ar/reference/smpp-submit-sm
- اللغة: ar
- آخر تحديث: 2026-07-18
- الناشر: BroadNet (https://www.broadnet.me)

مرجع كامل حقلًا بحقل لـ submit_sm — service_type وTON/NPI وesm_class وdata_coding وregistered_delivery وvalidity_period وshort_message وبقية الحقول — مع القيم التي تهمّ فعلًا.

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

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

*المعاملات الإلزامية لـ submit_sm (بترتيب السلك)*

| # | الحقل | النوع | ملاحظات |
|---|---|---|---|
| 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 الشائعة*

| 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.

*معاني بتّات esm_class (مختارة)*

| بت (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 كي ينتهي الرمز المتأخّر بدلًا من الوصول متأخرًا.

*data_coding — القيم التي تستخدمها فعلًا*

| القيمة | الترميز |
|---|---|
| 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 محرفًا لكل جزء.

## المصادر

- [SMPP v3.4 specification — §4.4 submit_sm](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)
- [3GPP TS 23.040 — SMS technical realization](https://www.3gpp.org/dynareport/23040.htm)

## ذو صلة

- [مرجع SMPP deliver_sm ورسائل MO](https://www.broadnet.me/ar/reference/smpp-deliver-sm)
- [مخطط ترميز البيانات (DCS)](https://www.broadnet.me/ar/reference/data-coding-scheme-dcs)
- [تجزئة SMS وUDH](https://www.broadnet.me/ar/reference/sms-segmentation-concatenation-udh)
- [مفكّك SMPP PDU (أداة مجانية)](https://www.broadnet.me/ar/tools/smpp-pdu-decoder)
- [منتج SMS API](https://www.broadnet.me/ar/products/sms-api)
