توسّع معاملات TLV (المعاملات الاختيارية، أُدخلت في v3.4) وحدة PDU خارج حقولها الإلزامية. ويُرمَّز كل منها كوسم بطول 2 بايت وطول بطول 2 بايت وقيمة بطول الطول المذكور، جميعها بترتيب big-endian. وتظهر معاملات TLV بعد الجسم الإلزامي، بأي ترتيب، وتتيح لـ SMPP حمل الحمولات وبيانات الدمج وربط الإيصالات دون تغيير تخطيط الحقول الثابت.
صيغة TLV
معامل TLV (يُسمّى أيضًا معاملًا اختياريًا) حقل واصف لذاته: وسم بطول 2 بايت يحدّد المعامل، وطول بطول 2 بايت يعطي حجم القيمة بالبايت، ثم تتبع القيمة. والوسم والطول كلاهما big-endian. ولأنها موسومة، يمكن أن تظهر معاملات TLV بأي ترتيب بعد المعاملات الإلزامية، ويتخطّى المستقبِل ببساطة الوسوم التي لا يتعرّفها.
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.
| القيمة | الحالة | الكلمة المفتاحية 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 المخصّصة غير المعتمدة تُجرَّد أو تُرفَض كثيرًا أثناء العبور، لذا اتفق على الوسوم ومعناها مع المزوّد أولًا.
مواصفات المصدر
تستند هذه الصفحة إلى المعايير المنشورة. يفتح في علامة تبويب جديدة.