# SMPP deliver_sm: رسائل MO والإيصالات

> تُرسَل deliver_sm (رمز العملية 0x00000005) من SMSC إلى ESME لتسليم إما رسالة منشأة من المحمول (MO) أو إيصال تسليم (DLR). ويعكس جسمها جسم submit_sm. ويميّز حقل esm_class بينهما: يشير البتّ 0x04 إلى إيصال تسليم. ويجب أن يجيب ESME دائمًا بـ deliver_sm_resp.

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

تحمل deliver_sm أمرين من SMSC إلى ESME: الرسائل المنشأة من المحمول (MO) وإيصالات التسليم. كيف تميّز بينهما بـ esm_class، ولماذا يجب أن تردّ دائمًا بـ deliver_sm_resp.

## وحدة واحدة، مهمتان

deliver_sm هي نظير submit_sm في الاتجاه من SMSC إلى ESME وتتشارك تخطيط الجسم نفسه. وتحمل إما رسالة MO واردة (مشترك يراسل رقمك الطويل أو الرمز القصير) أو إيصال تسليم يبلّغ عن مصير رسالة أرسلتها سابقًا. ويتولى ربط receiver أو transceiver لديك كليهما؛ وتتفرّع حسب esm_class لتوجيههما صحيحًا.

## تمييز MO عن DLR بواسطة esm_class

تحدّد بتّات نوع الرسالة في esm_class الحمولة. رسالة MO العادية بتّات نوع الرسالة فيها صفرية. ويضبط إيصال التسليم البتّ 0x04. وحين يُضبَط 0x04، يحتوي short_message على نص الإيصال المحدَّد في الملحق B (id وstat وerr…) ويحمل معامل receipted_message_id عادةً قيمة message_id الأصلية. لا تحلّل نص الإيصال كمحتوى مستخدم.

*قيم نوع الرسالة في esm_class على deliver_sm*

| esm_class (بتات نوع الرسالة) | الحمولة (Payload) |
|---|---|
| 0x00 | رسالة عادية صادرة من الهاتف المحمول (MO) |
| 0x04 | إيصال تسليم SMSC (DLR) |
| 0x08 | إشعار تسليم SME |
| 0x10 | إقرار يدوي/من المستخدم على SME |
| 0x20 | إنهاء المحادثة (CDMA الكوري) |
| 0x40 | إشعار التسليم الوسيط |

## أجب دائمًا بـ deliver_sm_resp

لكل deliver_sm يجب أن يعيد ESME استجابة deliver_sm_resp (0x80000005) بـ sequence_number مطابق وESME_ROK. وإذا لم تُقرّ الاستلام، يعامل SMSC التسليم على أنه فاشل، ويعيد إرساله، و — لأن وحدات PDU المعلَّقة غير المُقرّة تُحسَب ضمن النافذة — قد يعطّل الجلسة بأكملها. أقرّ الاستلام فورًا وأجرِ المعالجة الثقيلة بشكل غير متزامن.

*إقرار كل من MO وDLR*

```text
SMSC → ESME  deliver_sm  seq=88  esm_class=0x00  (MO: user text)
ESME → SMSC  deliver_sm_resp seq=88  status=ESME_ROK
SMSC → ESME  deliver_sm  seq=89  esm_class=0x04  (DLR: id:... stat:DELIVRD)
ESME → SMSC  deliver_sm_resp seq=89  status=ESME_ROK
```

## data_sm كبديل

data_sm (0x00000103) عملية أخفّ وأكثر انسيابية يمكنها حمل رسائل MO والإيصالات باستخدام معاملات TLV (خصوصًا message_payload) بدل حقل short_message الثابت. وتفضّلها بعض الشبكات للحركة التفاعلية أو من نمط WAP. ودعمها اختياري وخاص بكل مزوّد — تأكّد قبل الاعتماد عليها.

## الأسئلة الشائعة

### كيف أميّز إيصال التسليم عن رسالة MO واردة؟

افحص esm_class في deliver_sm. إذا كان بتّ نوع الرسالة 0x04 مضبوطًا فهو إيصال تسليم ويحمل short_message نص الإيصال وفق الملحق B. وإذا كانت تلك البتّات صفرية فهي رسالة عادية منشأة من المحمول من مشترك.

### ماذا يحدث إن لم أرسل deliver_sm_resp؟

يفترض SMSC أن التسليم فشل ويعيد إرسال deliver_sm. كما تستهلك وحدات PDU غير المُقرّة نافذتك، لذا قد يؤدي عدم الردّ إلى تعطيل الجلسة وإنتاج معالجة مكرّرة لرسائل MO/DLR.

### هل لـ deliver_sm الحقول نفسها التي في submit_sm؟

نعم — تعيد deliver_sm استخدام تخطيط جسم submit_sm (service_type وعنونة TON/NPI وesm_class وdata_coding وshort_message وما إلى ذلك). يختلف فقط الاتجاه وتفسير الحمولة.

### هل يمكن أن تُدمَج رسالة MO واحدة؟

نعم. تصل الرسائل الواردة الطويلة كوحدات deliver_sm متعددة بترويسة دمج UDH (بتّ UDHI 0x40 مضبوط في esm_class) أو بمعاملات SAR. أعِد تجميعها حسب الرقم المرجعي والتسلسل تمامًا كما تفعل مع الأجزاء الصادرة.

## المصادر

- [SMPP v3.4 specification — §4.6 deliver_sm](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)
- [SMPP v3.4 specification — Appendix B (receipt format)](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)

## ذو صلة

- [إيصالات تسليم SMPP (صيغة DLR)](https://www.broadnet.me/ar/reference/smpp-delivery-receipts-dlr)
- [مرجع SMPP submit_sm](https://www.broadnet.me/ar/reference/smpp-submit-sm)
- [مفكّك DLR (أداة مجانية)](https://www.broadnet.me/ar/tools/dlr-decoder)
- [معاملات SMPP TLV الاختيارية](https://www.broadnet.me/ar/reference/smpp-tlv-parameters)
- [الرسائل ثنائية الاتجاه](https://www.broadnet.me/ar/products/sms-api)
