OmniMessage IMS Frontend
طبقة نقل SIP لـ OmniMessage - تتعامل مع إدخال الرسائل وإخراجها من شبكات IMS
ما الذي تفعله
هذه واجهة SIP خفيفة الوزن تعمل كطبقة نقل بين شبكات IMS وواجهة OmniMessage الخلفية. يتم التعامل مع جميع معالجة الرسائل، منطق التوجيه، ومنطق الأعمال بواسطة OmniMessage - هذه الواجهة ببساطة:
- تستقبل رسائل SIP REGISTER وتعيد توجيه بيانات المشترك إلى OmniMessage
- تستقبل رسائل SMS المنشأة من الهاتف المحمول (MO) عبر SIP MESSAGE وتعيد توجيهها إلى OmniMessage
- تسترجع رسائل SMS المنتهية إلى الهاتف المحمول (MT) من OmniMessage وترسلها عبر SIP MESSAGE
- تبلغ عن حالة التسليم مرة أخرى إلى OmniMessage
- تتعامل مع تفاصيل بروتوكول SIP (الرؤوس، التأكيدات، إلخ.)
الهيكلية
تتكون واجهة IMS من مكونين رئيسيين:
معالجة بروتوكول SIP:
- SIP REGISTER - تستخرج بيانات المشترك وتعيد توجيهها إلى OmniMessage
- SIP MESSAGE - تستقبل رسائل MO SMS وتعيد توجيهها إلى OmniMessage
- SIP MESSAGE - ترسل رسائل MT SMS من OmniMessage إلى المشتركين
- SIP NOTIFY - تتعامل مع إشعارات الأحداث
- استجابات UAC - تلتقط تأكيدات التسليم وتعيد توجيهها إلى OmniMessage
طبقة نقل OmniMessage الخلفية:
insert_location()- ترسل بيانات تسجيل المشترك إلى OmniMessageinsert_message()- ترسل الرسائل الواردة MO إلى OmniMessageget_queue()- تسترجع الرسائل MT المعلقة من OmniMessageprocess_message()- ترسل تحديثات حالة التسليم إلى OmniMessagefrontend_register()- تسجل هذه الواجهة مع OmniMessage
تحدث جميع معالجة الرسائل، قرارات التوجيه، التخزين، ومنطق الأعمال في OmniMessage. هذه الواجهة هي ببساطة محول نقل SIP.
التكوين
يتم تخزين جميع التكوينات في ملف config.yaml.
معلمات التكوين
api_base_url - عنوان URL الأساسي لواجهة OmniMessage الخلفية
- التنسيق:
https://hostname:port - المثال:
https://10.5.198.200:8443 - يستخدم لجميع استدعاءات واجهة API الخلفية (insert_location، insert_message، get_queue، إلخ.)
location - معرف لهذه الواجهة IMS
- التنسيق: معرف بأسلوب FQDN
- المثال:
smsc01.mnc001.mcc001.3gppnetwork.org - يستخدم لتحديد هذه الواجهة في النظام الخلفي
- يجب أن يكون فريدًا عبر جميع الواجهات
s_cscf_sip_uri - URI SIP لـ S-CSCF لتوجيه الرسائل (اختياري)
- التنسيق:
sip:hostname:port - المثال:
sip:127.0.0.2:5060 - إذا تم تعيينه، يتم توجيه جميع رسائل SIP MESSAGE الصادرة عبر هذا S-CSCF
- إذا لم يتم تعيينه، يتم توجيه الرسائل مباشرة إلى مجال IMS
ims_domain - مجال IMS لتوجيه المشتركين
- التنسيق: اسم مجال IMS
- المثال:
ims.mnc001.mcc001.3gppnetwork.org - يستخدم لبناء URIs SIP لتوجيه المشتركين
- يستخدم عندما لا يتم تكوين s_cscf_sip_uri
تدفق الرسائل
تدفق SIP REGISTER
تدفق SMS المنشأة من الهاتف المحمول (MO)
تدفق SMS المنتهية إلى الهاتف المحمول (MT)
الاستطلاع ووقت التهدئة للتفريغ
تستخدم الواجهة آليتين للتحقق من الرسائل MT للتسليم:
-
الاستطلاع الدوري (rtimer) - يقوم نموذج
rtimerفي Kamailio بتفعيلDatabase_flush()في فترات ثابتة (مكونة فيkamailio.cfg). الفاصل الزمني الافتراضي هو 2 ثانية. -
التفريغ المدفوع بالأحداث - عند استلام استجابة UAC لا تتطابق مع SMS MT المتعقب (مثل رد MO-SMS ACK)، يتم استدعاء
Database_flush()أيضًا على الفور.
لتجنب تداخل هاتين الآليتين وإجراء استدعاءات API زائدة، يتم تنفيذ وقت تهدئة للتفريغ باستخدام ملف طابع زمني مشترك (/tmp/smsc_ims_last_flush). كل استدعاء لـ Database_flush() ��كتب الطابع الزمني الحالي إلى هذا الملف. قبل أن يتم تشغيل rtimer، يتحقق من وقت تعديل الملف - إذا حدث تفريغ خلال آخر FLUSH_COOLDOWN ثوانٍ (الافتراضي: 1 ثانية)، يتم تخطي استطلاع rtimer.
تعتبر هذه الطريقة باستخدام ملف مشترك ضرورية لأن Kamailio يطلق عمليات عامل متعددة، كل منها مع مفسر Python خاص به. لا يتم مشاركة المتغيرات بين العمليات، لذا يعمل الملف كحالة مشتركة عبر العمليات.
يتم تكوين فترة rtimer في kamailio.cfg:
modparam("rtimer", "timer", "name=ta;interval=2;mode=1;")