انتقل إلى المحتوى الرئيسي

مُنشئ طلب CAMEL - ملخص التنفيذ

نظرة عامة

تم إنشاء مكون LiveView جديد لبناء وإرسال طلبات CAMEL/CAP لأغراض الاختبار. يوفر هذا واجهة مستخدم تفاعلية لإنشاء InitialDP وعمليات CAMEL الأخرى.

نظرة عامة على مُنشئ طلب CAMEL

المكونات الجديدة

1. مُنشئ طلب CAMEL LiveView

الميزات:

  • واجهة مستخدم تفاعلية تعتمد على النماذج لبناء طلبات CAMEL
  • دعم لعدة أنواع من الطلبات:
    • InitialDP - نقطة الكشف الأولية (إشعار إعداد المكالمة)
    • Connect - ربط المكالمة بالوجهة
    • ReleaseCall - إنهاء/تحرير المكالمة
    • RequestReportBCSMEvent - طلب إشعارات الأحداث
    • Continue - مواصلة معالجة المكالمة
    • ApplyCharging - تطبيق حدود الشحن/المدة على المكالمات

القدرات الرئيسية:

  • قائمة منسدلة لاختيار نوع الطلب
  • حقول نموذج ديناميكية بناءً على نوع الطلب المحدد
  • خيارات SCCP/M3UA متقدمة (قسم قابل للطي)
    • عناوين الأطراف المتصلة/المتصل
    • تكوين SSN (رقم النظام الفرعي)
    • إعدادات OPC/DPC (رمز النقطة)
  • تاريخ الطلبات في الوقت الحقيقي (آخر 20 طلبًا)
  • تتبع الجلسة عبر OTID
  • ملاحظات النجاح/الخطأ
  • تتبع حجم الطلب

المسار: /camel_request

2. سجل الأحداث المحسن مع دعم CAMEL

الوظائف الجديدة:

  • paklog_camel/2 - تسجيل رسائل CAMEL/CAP المخصصة
  • lookup_cap_opcode_name/1 - البحث عن رمز عملية CAP
  • find_cap_opcode/1 - استخراج رمز CAP من JSON
  • extract_cap_tids/1 - استخراج OTID/DTID من رسائل CAP
  • format_cap_to_json/1 - تحويل PDUs CAP إلى تنسيق JSON

رموز عمليات CAP المدعومة:

0  => "initialDP"
5 => "connect"
6 => "releaseCall"
7 => "requestReportBCSMEvent"
8 => "eventReportBCSM"
10 => "continue"
13 => "furnishChargingInformation"
35 => "applyCharging"
... (47 إجمالي العمليات)

الميزات:

  • تسجيل JSON لجميع طلبات/استجابات CAMEL
  • اكتشاف تلقائي لإجراءات TCAP (بدء/استمرار/إنهاء/إلغاء)
  • استخراج عناوين SCCP
  • معالجة الأخطاء للرسائل غير الصحيحة
  • معالجة المهام في الخلفية (غير مت blocking)
  • أحداث مسبوقة بـ "CAP:" لتسهيل التصفية

3. تحديث CapClient

التغييرات:

  • إضافة استدعاءات paklog_camel/2 للرسائل الواردة والصادرة
  • تسجيل مزدوج: كل من MAP (paklog) و CAP (paklog_camel) للتوافق
  • تسجيل الرسائل الصادرة في sccp_m3ua_maker/2
  • تسجيل الرسائل الواردة في handle_payload/1

التكوين

تمت إضافة صفحات LiveView الجديدة إلى تكوين وقت التشغيل:

# الملف: config/runtime.exs

config :control_panel,
use_additional_pages: [
{SS7.Web.EventsLive, "/events", "SS7 Events"},
{SS7.Web.TestClientLive, "/client", "SS7 Client"},
{SS7.Web.M3UAStatusLive, "/m3ua", "M3UA"},
{SS7.Web.HlrLinksLive, "/hlr_links", "HLR Links"},
{SS7.Web.CAMELSessionsLive, "/camel_sessions", "CAMEL Sessions"},
{SS7.Web.CAMELRequestLive, "/camel_request", "CAMEL Request Builder"}
],
page_order: ["/events", "/client", "/m3ua", "/hlr_links",
"/camel_sessions", "/camel_request",
"/application", "/configuration"]

الاستخدام

الوصول إلى مُنشئ الطلب

  1. انتقل إلى: https://your-server:8087/camel_request
  2. اختر نوع الطلب من القائمة المنسدلة
  3. املأ المعلمات المطلوبة
  4. اختياريًا قم بتوسيع "خيارات SCCP/M3UA المتقدمة" للتعديل الدقيق
  5. انقر على "إرسال [RequestType] طلب"

تدفق الطلب

InitialDP (مكالمة جديدة)

  1. تعيين مفتاح الخدمة (على سبيل المثال، 100)
  2. تعيين رقم المتصل (A-Party)
  3. تعيين رقم المتصل به (B-Party)
  4. إرسال الطلب → يولد OTID جديد
  5. يتم تخزين OTID في الجلسة للطلبات اللاحقة

الطلبات اللاحقة (Connect، ReleaseCall، إلخ.)

  1. يجب أن يكون لديك OTID نشط من InitialDP
  2. يستخدم الطلب تلقائيًا OTID المخزن
  3. يظهر تحذير إذا لم يكن هناك OTID نشط

معلمات الطلب

InitialDP:

  • مفتاح الخدمة (عدد صحيح)
  • رقم المتصل (بتنسيق ISDN)
  • رقم المتصل به (بتنسيق ISDN)

Connect:

  • رقم الوجهة (أين يتم توجيه المكالمة)

ReleaseCall:

  • رمز السبب (16 = عادي، 17 = مشغول، 31 = غير محدد)

RequestReportBCSMEvent:

  • أحداث BCSM (مفصولة بفواصل: oAnswer، oDisconnect، إلخ.)

Continue:

  • لا توجد معلمات (تستخدم OTID النشط)

ApplyCharging:

  • المدة (بالثواني، 1-864000) - الحد الأقصى لمدة المكالمة قبل الإجراء
  • تحرير عند انتهاء المهلة (boolean) - ما إذا كان يجب تحرير المكالمة عند انتهاء المدة

الخيارات المتقدمة

توجيه SCCP:

  • GT (العنوان العالمي) للطرف المتصل
  • GT للطرف المتصل
  • SSN المتصل به (افتراضي 146 = gsmSSF)
  • SSN المتصل (افتراضي 146)

رموز نقاط M3UA:

  • OPC (رمز النقطة الأصلية، افتراضي 5013)
  • DPC (رمز النقطة الوجهة، افتراضي 5011)

تسجيل JSON

جميع رسائل CAMEL مسجلة الآن بتنسيق JSON في سجل الأحداث مع:

  • الاتجاه: وارد/صادر
  • إجراء TCAP: بدء/استمرار/إنهاء/إلغاء
  • عملية CAP: على سبيل المثال، "CAP:initialDP"، "CAP:connect"
  • توجيه SCCP: معلومات الطرف المتصل/المتصل
  • TIDs: OTID/DTID للتوافق
  • الرسالة الكاملة: PDU CAP مشفرة بتنسيق JSON

مثال على إدخال السجل

{
"map_event": "CAP:initialDP",
"direction": "outgoing",
"tcap_action": "Begin",
"otid": "A1B2C3D4",
"sccp_called": {
"SSN": 146,
"GlobalTitle": {
"Digits": "55512341234",
"NumberingPlan": "isdn_tele",
"NatureOfAddress_Indicator": "international"
}
},
"event_message": "{ ... full CAP PDU ... }"
}

تاريخ الطلب

تظهر واجهة المستخدم آخر 20 طلبًا مع:

  • الطابع الزمني
  • نوع الطلب (مع شارة ملونة)
  • OTID (أول 8 أحرف سداسية)
  • الحالة (تم الإرسال/خطأ)
  • حجم الرسالة بالبايت

تتبع الجلسة

لوحة معلومات الجلسة الحالية:

  • تعرض OTID النشط
  • تظهر حجم البايت للطلب الأخير
  • مرئية فقط عندما تكون الجلسة نشطة

سير عمل الاختبار

  1. بدء ��كالمة جديدة:

    • إرسال InitialDP → الحصول على OTID
    • يقوم النظام بإنشاء جلسة
  2. التحكم في المكالمة:

    • إرسال RequestReportBCSMEvent → طلب الإشعارات
    • إرسال ApplyCharging → تعيين حد مدة المكالمة (على سبيل المثال، 290 ثانية)
    • إرسال Connect → توجيه إلى الوجهة
    • أو إرسال ReleaseCall → إنهاء
  3. عرض النتائج:

    • تحقق من تاريخ الطلب
    • مراقبة صفحة جلسات CAMEL
    • مراجعة سجلات الأحداث مع بادئة "CAP:"

ApplyCharging - التحكم في مدة المكالمة

نظرة عامة

تتيح لك عملية ApplyCharging تعيين الحد الأقصى لمدة المكالمة وإمكانية تحرير المكالمة عند انتهاء تلك المدة. يستخدم هذا عادةً في سيناريوهات الشحن المدفوع مسبقًا أو فرض حدود زمنية على المكالمات.

حالات الاستخدام

  • الشحن المدفوع مسبقًا: تحديد مدة المكالمة بناءً على رصيد المشترك
  • الفوترة القائمة على الوقت: فرض فترات شحن دورية
  • إدارة ا��موارد: منع المكالمات من الاستمرار إلى أجل غير مسمى
  • تكامل OCS: التنسيق مع أنظمة الشحن عبر الإنترنت للتحكم في ��لائتمان في الوقت الحقيقي

المعلمات

المدة (maxCallPeriodDuration)

  • النوع: عدد صحيح (1-864000 ثانية)
  • الوصف: الحد الأقصى لعدد الثواني التي يمكن أن تستمر فيها المكالمة قبل انتهاء المؤقت
  • أمثلة:
    • 60 = 1 دقيقة
    • 290 = 4 دقائق و50 ثانية (قيمة اختبار شائعة)
    • 3600 = 1 ساعة
    • 86400 = 24 ساعة

الإفراج عند انتهاء المهلة (releaseIfDurationExceeded)

  • النوع: Boolean (true/false)
  • الافتراضي: true
  • الوصف: ماذا يحدث عند انتهاء المدة:
    • true: تحرير/فصل المكالمة تلقائيًا
    • false: إرسال إشعار ولكن إبقاء المكالمة نشطة (يسمح لـ gsmSCF باتخاذ إجراء)

هيكل الرسالة

يتم ترميز رسالة ApplyCharging كـ TCAP Continue مع:

  • TCAP: رسالة استمرار (تستخدم المعاملة الحالية)
  • Opcode: 35 (applyCharging)
  • المعلمات: ApplyChargingArg تحتوي على:
    • aChBillingChargingCharacteristics: معلومات الشحن القائمة على الوقت
      • timeDurationCharging: الحد الأقصى للم��ة وعلم الإفراج
    • partyToCharge: أي طرف يتم شحنه (افتراضي: sendingSideID)

مثال على الاستخدام

السيناريو: مكالمة مدفوعة مسبقًا بحد 5 دقائق

  1. إرسال InitialDP لبدء مراقبة المكالمة

    مفتاح الخدمة: 100
    المتصل: 447700900123
    المتصل به: 447700900456
    → OTID: A1B2C3D4
  2. إرسال ApplyCharging لتعيين حد 5 دقائق

    المدة: 300 (ثانية)
    الإفراج عند انتهاء المهلة: true
    → يستخدم OTID: A1B2C3D4
  3. إرسال Connect لإكمال المكالمة

    الوجهة: 447700900456
    → يستخدم OTID: A1B2C3D4
  4. بعد 5 دقائق (300 ثانية):

    • يتم تحرير المكالمة تلقائيًا بواسطة الشبكة
    • يتلقى gsmSCF إشعار فصل

أفضل الممارسات

  1. دائمًا أرسل ApplyCharging قبل Connect

    • يضمن أن الشحن نشط عند الاتصال بالمكالمة
    • يمنع أجزاء المكالمات غير المشحونة
  2. استخدم مع RequestReportBCSMEvent

    • طلب أحداث oAnswer و oDisconnect
    • يسمح بتتبع مدة المكالمة ال��علية
    • يمكّن من إعادة تطبيق الشحن إذا لزم الأمر
  3. تعيين مدد معقولة

    • قصيرة جدًا: عمليات شحن متكررة، تجربة مستخدم سيئة
    • طويلة جدًا: خطر فقدان الإيرادات على المكالمات المدفوعة مسبقًا
    • النموذجية: 60-300 ثانية للمدفوعة مسبقًا، أطول للمدفوعة لاحقًا
  4. التعامل مع انتهاء المهلة بشكل سلس

    • إذا كان release=false، كن مستعدًا للتعامل مع إشعارات انتهاء المؤقت
    • تنفيذ منطق لتمديد المدة أو تحرير المكالمة

معالجة الأخطاء

المشاكل الشائعة:

  • لا يوجد OTID نشط: يجب إرسال InitialDP أولاً
  • مدة غير صالحة: يجب أن تكون 1-864000 ثانية
  • دعم الشبكة: قد لا تدعم بعض تنفيذات SSF ApplyCharging
  • دقة المؤقت: عادةً ما تكون دقة مؤقت الشبكة 1 ثانية، ولكن قد تختلف

المراقبة

تتبع عمليات ApplyCharging عبر:

  • تاريخ الطلب: يظهر طلبات ApplyCharging المرسلة
  • سجل الأحداث: البحث عن "CAP:applyCharging"
  • جلسات CAMEL: مراقبة الجلسات النشطة مع تطبيق الشحن
  • تتبع TCAP: تصحيح مشاكل الترميز/فك الترميز

تفاصيل التنفيذ

إدارة الحالة

  • يقوم LiveView بتعيين حالة نموذج المسار
  • يتم تخزين OTID في تعيين المقبس
  • تاريخ الطلب محدود إلى 20 إدخال
  • تم تعطيل التحديث التلقائي (إرسال يدوي فقط)

إنشاء الطلب

  • يستخدم وحدة CapRequestGenerator الحالية
  • يبني هياكل TCAP/CAP الصحيحة
  • يقوم بالترميز باستخدام ترميز :TCAPMessages
  • يلف في SCCP عبر CapClient.sccp_m3ua_maker/2

آلية الإرسال

  • يرسل عبر M3UA إلى :camelgw_client_asp
  • يستخدم سياق التوجيه 1
  • تغليف SCCP/M3UA تلقائي

معالجة الأخطاء

  • تحقق من صحة النموذج مع ملاحظات المستخدم
  • التعامل السلس مع OTID المفقود
  • تظهر أخطاء التحليل في واجهة المستخدم
  • يتم تسجيل فشل الترميز

تحسينات مستقبلية

الإضافات المحتملة:

  1. قوالب/إعدادات مسبقة للطلبات
  2. ارتباط ال��ستجابة وعرضها
  3. تصور تدفق المكالمات
  4. تفاصيل الجلسة
  5. تصدير تاريخ الطلب
  6. اختبار التحميل (طلبات جماعية)
  7. تصدير PCAP للرسائل المولدة
  8. التحقق من معلمات CAP

ملاحظات التكامل

  • متوافق مع تسجيل MAP الحالي (paklog)
  • يشارك قاعدة بيانات سجل الأحداث مع أحداث MAP
  • يستخدم نفس بنية SCCP/M3UA
  • يعمل مع CAMELSessionsLive للمراقبة
  • يتكامل مع توجيه M3UA الحالي

الملفات المعدلة

  • config/runtime.exs - مُحدث

التبعيات

  • CapRequestGenerator الحالي
  • CapClient لإرسال M3UA
  • M3UA.Server لنقل الحزم
  • EventLog لتسجيل الرسائل
  • إطار عمل Phoenix LiveView
  • لوحة التحكم لبنية واجهة المستخدم