# معاملات SMPP TLV الاختيارية

> توسّع معاملات TLV (المعاملات الاختيارية، أُدخلت في v3.4) وحدة PDU خارج حقولها الإلزامية. ويُرمَّز كل منها كوسم بطول 2 بايت وطول بطول 2 بايت وقيمة بطول الطول المذكور، جميعها بترتيب big-endian. وتظهر معاملات TLV بعد الجسم الإلزامي، بأي ترتيب، وتتيح لـ SMPP حمل الحمولات وبيانات الدمج وربط الإيصالات دون تغيير تخطيط الحقول الثابت.

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

تستخدم المعاملات الاختيارية في SMPP صيغة وسم-طول-قيمة (TLV). التخطيط البايتي لـ TLV إضافة إلى الوسوم الشائعة: message_payload وreceipted_message_id وmessage_state وuser_message_reference ومجموعة الدمج sar_*.

## صيغة TLV

معامل TLV (يُسمّى أيضًا معاملًا اختياريًا) حقل واصف لذاته: وسم بطول 2 بايت يحدّد المعامل، وطول بطول 2 بايت يعطي حجم القيمة بالبايت، ثم تتبع القيمة. والوسم والطول كلاهما big-endian. ولأنها موسومة، يمكن أن تظهر معاملات TLV بأي ترتيب بعد المعاملات الإلزامية، ويتخطّى المستقبِل ببساطة الوسوم التي لا يتعرّفها.

*معامل message_payload يحمل قيمة بطول 5 بايت*

```hex
04 24        Tag    = 0x0424 (message_payload)
00 05        Length = 5 octets
48 65 6C 6C 6F   Value = "Hello"
```

## وسوم TLV الشائعة

حفنة من معاملات TLV تؤدي معظم العمل في الإنتاج. يحمل message_payload رسالة أطول من أن يتّسع لها short_message. ويجعل receipted_message_id وmessage_state إيصالات التسليم قابلة للتحليل آليًا. ويتيح لك user_message_reference إرفاق معرّف ربط خاص بك. وتوفّر مجموعة sar_* دمجًا معياريًا دون بايتات UDH في الجسم.

*المعاملات الاختيارية الأكثر استخدامًا*

| الوسم | الاسم | القيمة | استخدام |
|---|---|---|---|
| 0x0424 | message_payload | Octet String | نص الرسالة عند تجاوز short_message |
| 0x001E | receipted_message_id | C-Octet String (65) | message_id الأصلي في إيصال التسليم |
| 0x0427 | message_state | Integer (1) | الحالة النهائية/المؤقتة في الإيصال (انظر أدناه) |
| 0x0204 | user_message_reference | Integer (2) | مرجع ربط يعيّنه ESME |
| 0x020C | sar_msg_ref_num | Integer (2) | الربط: مرجع مشترك عبر الأجزاء |
| 0x020E | sar_total_segments | Integer (1) | الدمج: إجمالي عدد الأجزاء |
| 0x020F | sar_segment_seqnum | Integer (1) | الدمج: تسلسل هذا الجزء |
| 0x0423 | network_error_code | Octet String (3) | تفاصيل العطل الخاصة بالشبكة في الإيصال |
| 0x0426 | more_messages_to_send | Integer (1) | يشير إلى أن مقاطع أخرى ستتبع |
| 0x020A | source_port | Integer (2) | عنونة منفذ التطبيق (المصدر) |
| 0x020B | dest_port | Integer (2) | عنونة منفذ التطبيق (الوجهة) |

## قيم message_state

يبلّغ معامل message_state (0x0427) عن حالة دورة حياة الرسالة عدديًا — الرفيق القابل للقراءة الآلية للكلمة المفتاحية stat في نص DLR. وتظهر هذه القيم أيضًا في query_sm_resp.

*قيم message_state*

| القيمة | الحالة | الكلمة المفتاحية stat في DLR |
|---|---|---|
| 1 | ENROUTE | (قيد النقل) |
| 2 | DELIVERED | DELIVRD |
| 3 | EXPIRED | EXPIRED |
| 4 | DELETED | DELETED |
| 5 | UNDELIVERABLE | UNDELIV |
| 6 | ACCEPTED | ACCEPTD |
| 7 | UNKNOWN | UNKNOWN |
| 8 | REJECTED | REJECTD |
| 9 | SKIPPED (v5.0) | — |

## دمج SAR مقابل UDH

يقدّم SMPP طريقتين لدمج رسالة طويلة. تضع طريقة UDH ترويسة بيانات مستخدم بطول 6 بايت داخل short_message وتضبط بتّ UDHI في esm_class. أما طريقة SAR فتبقي الجسم نظيفًا وتحمل معاملات sar_* الثلاثة بدلًا من ذلك. اختر واحدة والتزم بها لكل مسار — فبعض الشبكات تقبل UDH فقط وأخرى SAR فقط. لا تمزج الاثنتين في الرسالة نفسها أبدًا.

## القواعد والمزالق

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

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

### ماذا يعني TLV في SMPP؟

وسم-طول-قيمة (Tag-Length-Value). يُرمَّز كل معامل اختياري كوسم بطول 2 بايت وطول بطول 2 بايت وذلك العدد من بايتات القيمة. أُدخلت معاملات TLV في SMPP v3.4 وتظهر بعد الجسم الإلزامي لوحدة PDU.

### متى أستخدم message_payload بدل short_message؟

استخدم معامل message_payload (0x0424) حين تتجاوز الرسالة حقل short_message البالغ 254 بايت، أو حين يفضّله مزوّدك للمحتوى الطويل. لا تضبط الحقلين معًا في وحدة PDU نفسها.

### كيف أربط إيصال التسليم برسالتي المُرسَلة؟

طابِق معامل receipted_message_id (0x001E) في الإيصال مع message_id الذي خزّنته من submit_sm_resp. وحّد الصيغ أولًا، لأن بعض مراكز SMSC تعيد المعرّف بالنظام السداس عشري عند الإرسال وبالعشري في الإيصال.

### هل معاملات sar_* أفضل من UDH للدمج؟

لا أحدهما أفضل عالميًا — بل هما ترميزان للفكرة نفسها. يبقي SAR جسم الرسالة خاليًا من بايتات الترويسة؛ وUDH أوسع قبولًا. استخدم ما يدعمه مسارك والتزم بالثبات.

### هل يمكنني إضافة معاملات TLV مخصّصة خاصة بي؟

فقط ضمن مدى الوسوم الخاص بالمورّد الذي يعتمده مزوّدك. فمعاملات TLV المخصّصة غير المعتمدة تُجرَّد أو تُرفَض كثيرًا أثناء العبور، لذا اتفق على الوسوم ومعناها مع المزوّد أولًا.

## المصادر

- [SMPP v3.4 specification — §5.3 optional parameters](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)
- [SMPP v5.0 specification](https://smpp.org/SMPP_v5.pdf)

## ذو صلة

- [إيصالات تسليم SMPP (صيغة DLR)](https://www.broadnet.me/ar/reference/smpp-delivery-receipts-dlr)
- [تجزئة SMS وUDH](https://www.broadnet.me/ar/reference/sms-segmentation-concatenation-udh)
- [مرجع SMPP submit_sm](https://www.broadnet.me/ar/reference/smpp-submit-sm)
- [مفكّك SMPP PDU (أداة مجانية)](https://www.broadnet.me/ar/tools/smpp-pdu-decoder)
- [تشريح وحدة SMPP PDU](https://www.broadnet.me/ar/reference/smpp-pdu-anatomy)
