كيفية إدخال البيانات في حقل SM لبروتوكول SMPP

في بروتوكول SMPP (Short Message Peer-to-Peer)، فإن حمولة الرسالة القصيرة (SM) هي النص الفعلي (أو البيانات الثنائية) للرسالة النصية القصيرة (SMS) التي يتم نقلها. لضمان التفسير الصحيح لهذا المحتوى، يلعب حقل data_coding في وحدة بيانات البروتوكول (PDU) دورًا حاسمًا من خلال الإشارة إلى تنسيق ترميز الرسالة.

ترميزات SMPP الشائعة

حقل data_coding هو بايت واحد ويخبر مركز خدمة الرسائل القصيرة (SMSC) بكيفية تفسير حمولة الرسالة.

سداسي عشرعشريالترميزالوصف
0x000GSM 7-bit الافتراضيمجموعة أحرف SMS القياسية
0x011ASCIIASCII 8-bit (مجموعة فرعية من Latin-1)
0x033Latin-1 (ISO 8859-1)مجموعة أحرف أوروبا الغربية
0x088UCS2يونيكود (16-bit، big-endian)
0x044ثنائيبيانات ثنائية خام 8-bit

أمثلة على الرسائل المرمزة

1. GSM 7-bit (data_coding = 0x00)

ترميز SMS القياسي. فعال (حتى 160 حرفًا في رسالة واحدة).

النص: "Hello"
GSM 7-bit Packed: C8 32 9B FD 06

2. UCS2 (data_coding = 0x08)

يستخدم للنصوص غير اللاتينية (مثل العربية، الصينية، الرموز التعبيرية). يدعم 70 حرفًا لكل رسالة.

النص: "مرحبا"
UCS2 Hex: 0645 0631 062D 0628 0627
بايت (سداسي عشر): 06 45 06 31 06 2D 06 28 06 27

3. ASCII (data_coding = 0x01)

أحرف لاتينية أساسية فقط، أقل كفاءة في المساحة من GSM 7-bit.

النص: "Hello"
ASCII Hex: 48 65 6C 6C 6F

مثال على PDU لـ SMPP بترميز UCS2

إليك وحدة بيانات بروتوكول (PDU) submit_sm لـ SMPP تحمل رسالة يونيكود:

0000004B  // طول الأمر (75 بايت)
00000004  // معرف الأمر (submit_sm)
00000000  // حالة الأمر
00000001  // رقم التسلسل
74657374  // service_type: "test"
01        // source_addr_ton: دولي
01        // source_addr_npi: ISDN
31323334  // source_addr: "1234" (ASCII)
00
01        // dest_addr_ton
01        // dest_addr_npi
35363738  // destination_addr: "5678"
00
00        // esm_class
00        // protocol_id
00        // priority_flag
00        // schedule_delivery_time
00        // validity_period
00        // registered_delivery
00        // replace_if_present_flag
08        // data_coding: UCS2
00        // sm_default_msg_id
0A        // sm_length: 10 بايت
06450631  // الرسالة بـ UCS2 (مثال: "مر")
062D0628

الترميز والتقسيم

يتم تقسيم الرسائل الطويلة إلى أجزاء باستخدام رأس بيانات المستخدم (UDH). وهذا يقلل من الحجم الأقصى للحمل:

  • GSM 7-bit: 160 → 153 حرفًا لكل جزء
  • UCS2: 70 → 67 حرفًا لكل جزء

مثال على UDH لجزء من الرسالة:

05 00 03 CC 02 01
// 05: طول الرأس
// 00 03: معرف عنصر التقسيم
// CC: مرجع الرسالة
// 02: إجمالي الأجزاء
// 01: الجزء الحالي

ملخص

يوفر بروتوكول SMPP خيارات ترميز مرنة من خلال حقل data_coding. يضمن الترميز الصحيح التوافق عبر الشبكات العالمية، خاصة عند التعامل مع نصوص متعددة اللغات أو بيانات ثنائية. يجب على المطورين مطابقة أنواع الترميز مع المحتوى والمستلمين المتوقعين لتجنب تلف الرسائل.

مراجع

  • مواصفات SMPP 3.4
  • مجموعة أحرف GSM 03.38
  • معيار يونيكود

More information