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

دليل التكوين

📖 العودة إلى الوثائق الرئيسية

يوفر هذا المستند مرجع تكوين شامل لخادم تطبيق TAS.

الوثائق ذات الصلة

التكوين الأساسي

واجهات التكامل

معالجة المكالمات

الخدمات ذات القيمة المضافة

الاختبار والامتثال


التكوين

يحتاج خادم التطبيق إلى:

  • الاتصال بـ SIP Trunks / SBCs للمكالمات من/إلى الشبكة الخارجية
  • الاتصال بـ DRA أو HSS للحصول على Sh
  • الاتصال اختياريًا بـ DRA أو OCS للشحن عبر الإنترنت Ro
  • تكوين خطة الاتصال
  • تكوين حول قواعد الاتصال / ترجمة الأرقام
  • تكوين البريد الصوتي
  • المطالب��ت
  • الاختبارات
  • القياسات (Prometheus)

تكوين مقبس الأحداث

يستخدم مقبس الأحداث للتحكم في المكالمات، ومراقبة المكالمات النشطة، والتفاعل مع محرك الهاتف. يسمح هذا الاتصال لـ TAS بالتحكم في توجيه المكالمات، واسترجاع متغيرات القناة، وإدارة الجلسات النشطة.

موقع التكوين: config/runtime.exs

config :tas,
fs_event_socket: %{
host: "127.0.0.1",
port: 8021,
secret: "YourSecretPassword"
}

معلمات التكوين:

  • host (سلسلة، مطلوب): اسم المضيف أو عنوان IP لخادم مقبس الأحداث

    • الافتراضي: "127.0.0.1" (localhost)
    • استخدم localhost إذا كان محرك الهاتف يعمل على نفس الخادم مثل TAS
    • استخدم IP بعيد للتوزيعات الموزعة
    • مثال: "10.8.82.60" للاتصال البعيد
  • port (عدد صحيح، مطلوب): منفذ TCP لاتصالات مقبس الأحداث

    • الافتراضي: 8021
    • المنفذ القياسي لمقبس الأحداث هو 8021
    • يجب أن يتطابق مع تكوين مقبس الأحداث في ��حرك الهاتف الخاص بك
    • مثال: 8021
  • secret (سلسلة، مطلوب): كلمة مرور المصادقة لمقبس الأحداث

    • يجب أن تتطابق مع كلمة المرور المكونة في محرك الهاتف الخاص بك
    • تستخدم لمصادقة اتصالات ESL
    • ملاحظة أمان: استخدم كلمة مرور عشوائية قوية واحتفظ بها آمنة
    • مثال: "cd463RZ8qMk9AHMMDGT3V"

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

  • التحكم في المكالمات وتوجيهها في الوقت الحقيقي
  • استرجاع معلومات المكالمات النشطة لعرض /calls في لوحة التحكم
  • تنفيذ تطبيقات خطة الاتصال برمجيًا
  • مراقبة تغييرات حالة المكالمات والأحداث
  • إدارة المكالمات الجماعية

سلوك الاتصال:

  • يقوم TAS بإنشاء اتصالات دائمة بمقبس الأحداث
  • يعيد الاتصال تلقائيًا عند فشل الاتصال
  • يستخدم لكل من الأوضاع الواردة (استقبال الأحداث) والصادرة (التحكم في المكالمات)
  • تم تضمين مهلات الاتصال ومنطق إعادة المحاولة

اعتبارات الأمان:

  • استخدم دائمًا كلمة مرور قوية وفريدة من نوعها لمعلمة secret
  • إذا كنت تستخدم اتصالات بعيدة، تأكد من أن قواعد جدار الحماية تسمح فقط للخوادم الموثوقة لـ TAS
  • ضع في اعتبارك استخدام اتصالات localhost فقط عندما يكون TAS ومحرك الهاتف متواجدين في نفس المكان
  • لا تعرض منفذ مقبس الأحداث على الشبكات العامة

استكشاف الأخطاء:

  • تم رفض الاتصال: تحقق من أن محرك الهاتف يعمل وأن مقبس الأحداث مفعل
  • فشل المصادقة: تحقق من أن secret يتطابق مع تكوين محرك الهاتف
  • أخطاء المهلة: تحقق من الاتصال الشبكي وقواعد جدار الحماية
  • لا يمكن التحكم في المكالمات: تأكد من أن TAS قد اتصل بنجاح (تحقق من السجلات)

تكوين لوحة التحكم

توفر لوحة التحكم واجهة قائمة على الويب لمراقبة وإدارة نظام TAS. يشمل ذلك عرض المشتركين، سجلات CDR، المكالمات النشطة، أقران Diameter، البوابات، وتكوين النظام.

موقع التكوين: config/runtime.exs

config :control_panel,
page_order: ["/application", "/configuration"]

config :control_panel, ControlPanelWeb.Endpoint,
url: [host: "0.0.0.0", path: "/"],
https: [
port: 443,
keyfile: "priv/cert/server.key",
certfile: "priv/cert/server.crt"
]

معلمات التكوين:

تكوين ترتيب الصفحات

  • page_order (قائمة من السلاسل): يتحكم في ترتيب عرض صفحات التكوين في لوحة التحكم
    • يحدد الصفحات التي تظهر في التنقل وترتيبها
    • مثال: ["/application", "/configuration"]
    • الافتراضي: إذا لم يتم تعيينه، تظهر الصفحات بترتيب أبجدي افتراضي

تكوين نقطة النهاية على الويب

  • url (خريطة): تكوين URL العام لواجهة لوحة التحكم

    • host: اسم المضيف لتوليد URLs (مثل: "tas.example.com" أو "0.0.0.0")
    • path: المسار الأساسي لجميع مسارات لوحة التحكم (الافتراضي: "/")
    • يستخدم لتوليد URLs المطلقة في إعادة التوجيه والروابط
  • https (خريطة): تكوين HTTPS/TLS للوصول الآمن

    • port (عدد صحيح): رقم منفذ HTTPS (القياسي هو 443)
    • keyfile (سلسلة): مسار ملف المفتاح الخاص TLS (بتنسيق PEM)
    • certfile (سلسلة): مسار ملف الشهادة TLS (بتنسيق PEM)
    • يجب أن تكون كلا الملفين قابلة للقراءة بواسطة تطبيق TAS

إدارة الشهادات:

تتطلب لوحة التحكم شهادات TLS صالحة للوصول عبر HTTPS:

  1. شهادات موقعة ذاتيًا (تطوير/اختبار):

    openssl req -x509 -newkey rsa:4096 -keyout priv/cert/server.key \
    -out priv/cert/server.crt -days 365 -nodes
  2. شهادات الإنتاج:

    • استخدم الشهادات من هيئة شهادات موثوقة (CA)
    • مقدمو الخدمة الشائعون: Let's Encrypt (مجاني)، CA التجارية
    • تأكد من أن الشهادات تشمل سلسلة كاملة من الثقة في المتصفح
    • احتفظ بالمفاتيح الخاصة آمنة مع أذونات الملفات المناسبة (chmod 600)

التحكم في الوصول:

توفر لوحة التحكم الوصول إلى بيانات تشغيل حساسة:

  • معلومات المشتركين: تفاصيل التسجيل، تاريخ المكالمات، المواقع
  • سجلات تفاصيل المكالمات: سجلات المكالمات الكاملة مع بيانات MSISDN
  • تكوين النظام: أقران Diameter، البوابات، التوجيه
  • المكالمات النشطة: مراقبة في الوقت الحقيقي للجلسات الجارية

تدابير الأمان الموصى بها:

  • نشر خلف جدار ناري أو VPN لبيئات الإنتاج
  • استخدم شهادات TLS قوية من CA موثوقة
  • تنفيذ ضوابط وصول على مستوى الشبكة (قائمة بيضاء IP)
  • ضع في اعتبارك إضافة طبقات مصادقة إضافية إذا تم الكشف عنها خارجيًا
  • مراجعة سجلات الوصول بانتظام
  • استخدم HTTPS فقط - لا تقدم عبر HTTP العادي

أنماط النشر الشائعة:

  1. الوصول الداخلي فقط:

    url: [host: "10.8.82.60", path: "/"]  # شبكة داخلية فقط
  2. الوصول الخارجي مع النطاق:

    url: [host: "tas.operator.com", path: "/"]
    https: [port: 443, ...]
  3. خلف وكيل عكسي:

    url: [host: "tas.internal", path: "/panel"]  # Nginx/Apache يوجه إلى هذا

استكشاف الأخطاء:

  • أخطاء الشهادة: تحقق من أن المسارات إلى keyfile و certfile صحيحة وأن الملفات قابلة للقراءة
  • المنفذ مستخدم بالفعل: تحقق مما إذا كانت خدمة أخرى تستخدم المنفذ 443، أو قم بتغييره إلى منفذ آخر
  • لا يمكن الوصول إلى واجهة المستخدم: تحقق من أن قواعد جدار الحماية تسمح بالوصول إلى منفذ HTTPS المكون
  • فشل مصافحة SSL: تأكد من أن الشهادة والمفتاح يتطابقان وأنهما بتنسيق PEM

تكوين API

يتضمن TAS واجهة برمجة تطبيقات REST للوصول البرمجي إلى وظائف النظام، وإدارة المشتركين، والبيانات التشغيلية. تدعم واجهة برمجة التطبيقات وثائق OpenAPI/Swagger ومحمية بواسطة TLS.

موقع التكوين: config/runtime.exs

config :api_ex,
api: %{
port: 8444,
listen_ip: "0.0.0.0",
product_name: "OmniTAS",
title: "API - OmniTAS",
hostname: "localhost",
enable_tls: true,
tls_cert_path: "priv/cert/server.crt",
tls_key_path: "priv/cert/server.key"
}

معلمات التكوين:

  • port (عدد صحيح، مطلوب): منفذ TCP لخادم API

    • الافتراضي: 8444
    • اختر منفذًا لا يتعارض مع خدمات أخرى
    • المنفذ القياسي لـ HTTPS هو 443، لكن المنافذ المخصصة شائعة لواجهات برمجة التطبيقات
    • مثال: 8444، 8443، 9443
  • listen_ip (سلسلة، مطلوب): عنوان IP لربط خادم API

    • "0.0.0.0": الاستماع على جميع واجهات الشبكة (الوصول الخارجي)
    • "127.0.0.1": الاستماع فقط على localhost (الوصول الداخلي فقط)
    • IP محدد: الربط بواجهة معينة (مثل: "10.8.82.60")
    • الأمان: استخدم "127.0.0.1" إذا كانت واجهة برمجة التطبيقات مطلوبة فقط داخليًا
  • product_name (سلسلة): معرف المنتج لبيانات واجهة برمجة التطبيقات

    • يستخدم في استجابات واجهة برمجة التطبيقات والوثائق
    • مثال: "OmniTAS"، "MyOperator-IMS"
  • title (سلسلة): عنوان مقروء بشريًا لوثائق واجهة برمجة التطبيقات

    • يظهر في رأس واجهة OpenAPI/Swagger
    • مثال: "API - OmniTAS"، "IMS Application Server API"
  • hostname (سلسلة): اسم المضيف لخادم واجهة برمجة التطبيقات في الوثائق

    • يستخدم في مواصفات OpenAPI لتوليد URLs نموذجية
    • يجب أن يتطابق مع كيفية وصول العملاء إلى واجهة برمجة التطبيقات
    • أمثلة: "localhost"، "api.operator.com"، "10.8.82.60"
  • enable_tls (منطقي): تمكين أو تعطيل TLS/HTTPS لواجهة برمجة التطبيقات

    • true: تقديم واجهة برمجة التطبيقات عبر HTTPS (موصى به للإنتاج)
    • false: تقديم واجهة برمجة التطبيقات عبر HTTP (فقط للاختبار/التطوير)
    • الأمان: استخدم دائمًا true في بيئات الإنتاج
  • tls_cert_path (سلسلة): مسار ملف شهادة TLS (بتنسيق PEM)

    • مطلوب عند enable_tls: true
    • يجب أن تكون قابلة للقراءة بواسطة تطبيق TAS
    • مثال: "priv/cert/server.crt"
  • tls_key_path (سلسلة): مسار ملف المفتاح الخاص TLS (بتنسيق PEM)

    • مطلوب عند enable_tls: true
    • يجب أن ت��ون قابلة للقراءة بواسطة تطبيق TAS
    • الأمان: احمِ بموجب أذونات الملفات (chmod 600)
    • مثال: "priv/cert/server.key"

ميزات واجهة برمجة التطبيقات:

توفر واجهة برمجة التطبيقات REST الوصول البرمجي إلى:

  • إدارة المشتركين والتزويد
  • استعلامات سجلات تفاصيل المكالمات (CDR)
  • حالة النظام وفحوصات الصحة
  • حالة أقران Diameter
  • حالة البوابة والإحصائيات
  • مراقبة المكالمات النشطة
  • إدارة التكوين

وثائق OpenAPI/Swagger:

تتضمن واجهة برمجة التطبيقات وثائق OpenAPI (Swagger) مدمجة:

  • الوصول إلى واجهة Swagger UI عند: https://hostname:port/api/swaggerui
  • مواصفة OpenAPI JSON عند: https://hostname:port/api/openapi
  • اختبار واجهة برمجة التطبيقات التفاعلي مباشرة من المتصفح
  • وثائق كاملة للنقاط النهائية مع مخططات الطلب/الاستجابة

اعتبارات الأمان:

  • المصادقة: تنفيذ مصادقة واجهة برمجة التطبيقات بناءً على متطلبات الأمان الخاصة ب��
  • الوصول الشبكي: استخدم قواعد جدار الحماية لتقييد وصول واجهة برمجة التطبيقات إلى العملاء المصرح لهم
  • TLS مطلوب: قم دائمًا بتمكين TLS في الإنتاج (enable_tls: true)
  • التحقق من الشهادة: استخدم شهادات موثوقة لواجهات برمجة التطبيقات في الإنتاج
  • تحديد المعدل: ضع في اعتبارك تنفيذ تحديد المعدل لواجهات برمجة التطبيقات المعرضة للجمهور
  • سجلات الوصول: راقب سجلات وصول واجهة برمجة التطبيقات للنشاط المشبوه

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

# استعلام واجهة برمجة التطبيقات باستخدام curl (استبدل بالنقطة النهائية الفعلية)
curl -k https://localhost:8444/api/health

# الوصول إلى وثائق Swagger
https://localhost:8444/api/swaggerui

سيناريوهات النشر الشائعة:

  1. واجهة برمجة التطبيقات الداخلية فقط:

    listen_ip: "127.0.0.1"  # متاحة فقط من localhost
    enable_tls: false # HTTP للاختبار الداخلي
  2. واجهة برمجة التطبيقات الإنتاجية مع TLS:

    listen_ip: "0.0.0.0"    # متاحة من الشبكة
    enable_tls: true # HTTPS مطلوب
    hostname: "api.operator.com"
  3. التطوير/الاختبار:

    listen_ip: "0.0.0.0"
    enable_tls: false # HTTP لتسهيل الاختبار
    port: 8080 # منفذ غير محمي

استكشاف الأخطاء:

  • فشل ربط المنفذ: تحقق من أن المنفذ ليس مستخدمًا بواسطة خدمة أخرى، أو قم بتشغيل كجذر للمنافذ < 1024
  • أخطاء TLS: تحقق من أن مسارات الشهادة والمفتاح صحيحة وأن الملفات قابلة للقراءة
  • لا يمكن الاتصال: تحقق من أن جدار الحماية يسمح بالوصول إلى المنفذ المكون
  • عدم تطابق الشهادة: تأكد من أن hostname يتطابق مع اسم الشهادة الشائع (CN) أو SAN
  • واجهة برمجة التطبيقات تعيد 404: تحقق من أن تطبيق واجهة برمجة التطبيقات بدأ بنجاح في السجلات

تكوين SIP Trunk

تتحمل Ansible مسؤولية إنشاء تكوين XML لكل بوابة صادرة، التي تظهر في علامة التبويب Gateways، والتي تستخدم للمكالمات الصادرة.

يجب تضمين عناوين CSCF وعناوين البوابة في تلك التي تظهر في تكوين وقت التشغيل، حتى نعرف أي IPs للسماح بالمكالمات منها، نقوم بذلك في allowed_sbc_source_ips للبوابات / SBCs (المصادر التي سترسل حركة مرور MT نحو الشبكة) و allowed_cscf_ips لـ CSCFs (المصادر التي ستنشأ منها حركة مرور MO).

ملاحظة - إذا كنت ستوجه المكالمات من TAS إلى نفسه (أي مكالمة MO لمشترك على الشبكة تعود إلى خطة الاتصال MT) فإن IP TAS الخاص بك يجب أن يكون أيضًا في قائمة IPs المصدر المسموح بها.

config :tas,
allowed_sbc_source_ips: ["10.5.198.200", "103.26.174.36"],
allowed_cscf_ips: ["10.8.3.34"],

من واجهة الويب يمكننا رؤية حالة كل بوابة، و:

  • حالة تسجيل SIP (إذا كان التسجيل مفعلًا)
  • مجال SIP
  • عنوان وكيل SIP (إذا تم استخدامه)
  • اسم المستخدم
  • زمن الاستجابة (متوسط زمن استجابة SIP OPTIONs (إذا كان SIP OPTIONs م��علًا))
  • زمن التشغيل (ثوانٍ منذ إعادة تشغيل الملف الشخصي أو ظهوره)
  • المكالمات الواردة / المكالمات الصادرة / المكالمات الواردة الفاشلة / المكالمات الصادرة الفاشلة
  • آخر زمن استجابة SIP OPTIONs (Epoch)
  • تكرار استجابة SIP OPTIONs
  • مزيد من المعلومات في زر التفاصيل

عرض البوابات

مرجع تكوين البوابة

تُكون البوابات بتنسيق XML. تمثل كل بوابة اتصال SIP trunk إلى SBC خارجي، أو ناقل، أو بوابة PSTN.

مثال بوابة أساسية:

<include>
<gateway name="carrier_trunk">
<param name="proxy" value="203.0.113.50;transport=tcp"/>
<param name="register" value="true"/>
<param name="caller-id-in-from" value="true"/>
<param name="username" value="trunk_user"/>
<param name="password" value="secure_password"/>
<param name="register-transport" value="tcp"/>
<param name="retry-seconds" value="30"/>
<param name="ping" value="25"/>
</gateway>
</include>

بوابة بدون تسجيل:

<include>
<gateway name="sbc_static">
<param name="proxy" value="198.51.100.10"/>
<param name="register" value="false"/>
<param name="caller-id-in-from" value="true"/>
</gateway>
</include>

معلمات البوابة

المعلمات المطلوبة

name (سمة البوابة)

  • المعرف الفريد لهذه البوابة
  • يستخدم في خطة الاتصال للإشارة إلى البوابة: sofia/gateway/name/destination
  • مثال: <gateway name="my_trunk">

proxy

  • عنوان IP أو اسم المضيف لوكيل SIP/البوابة
  • يمكن أن يتضمن المنفذ وبروتوكول النقل
  • أمثلة:
    • value="203.0.113.50" (المنفذ الافتراضي 5060، UDP)
    • value="203.0.113.50:5061" (منفذ مخصص)
    • value="203.0.113.50;transport=tcp" (نقل TCP)
    • value="203.0.113.50:5061;transport=tls" (TLS على المنفذ 5061)

register

  • ما إذا كان يجب إرسال SIP REGISTER إلى البوابة
  • القيم: true | false
  • تعيين إلى true إذا كانت البوابة تتطلب التسجيل
  • تعيين إلى false للبوابات الثابتة المعتمدة على IP
معلمات المصادقة

username

  • اسم مستخدم المصادقة SIP
  • يستخدم في التسج��ل ولتحديات المصادقة الهضمية
  • مطلوب إذا كان register="true"
  • مثال: value="trunk_account_123"

password

  • كلمة مرور المصادقة SIP
  • تستخدم لتحديات المصادقة الهضمية
  • مطلوب إذا كان register="true"
  • مثال: value="MySecureP@ssw0rd"

realm

  • مجال SIP للمصادقة
  • اختياري - عادةً ما يتم اكتشافه تلقائيًا من التحدي
  • مثال: value="sip.carrier.com"

auth-username

  • اسم مستخدم بديل للمصادقة (إذا كان مختلفًا عن username)
  • نادرًا ما يكون مطلوبًا - فقط إذا كانت الناقل تتطلب مستخدمًا مختلفًا في المصادقة مقابل رأس From
  • مثال: value="auth_user_456"
معلمات التسجيل

register-transport

  • بروتوكول النقل لرسائل التسجيل
  • القيم: udp | tcp | tls
  • يجب أن يتطابق مع النقل المحدد في معلمة proxy
  • مثال: value="tcp"

register-proxy

  • عنوان وكيل بديل للتسجيل (إذا كان مختلفًا عن توجيه المكالمات)
  • مفيد عندما يختلف خادم التسجيل عن خادم توجيه المكالمات
  • مثال: value="register.carrier.com:5060"

retry-seconds

  • الثواني للانتظار قبل إعادة محاولة التسجيل الفاشل
  • الافتراضي: 30
  • النطاق: 5 إلى 3600
  • مثال: value="30"

expire-seconds

  • زمن انتهاء التسجيل بالثواني
  • الافتراضي: 3600 (ساعة واحدة)
  • ستعيد البوابة التسجيل قبل انتهاء الصلاحية
  • مثال: value="1800" (30 دقيقة)

caller-id-in-from

  • تضمين معرف المتصل في رأس SIP From
  • القيم: true | false
  • true: يتضمن رأس From رقم المتصل الفعلي (مطلوب من قبل معظم الناقلات)
  • false: يستخدم رأس From اسم مستخدم البوابة
  • التوصية: تعيين إلى true لمعظم النشر
  • مثال: value="true"
معلمات المراقبة

ping

  • إرسال ping SIP OPTIONS كل N ثوانٍ
  • يراقب توفر البوابة ويقيس زمن الاستجابة
  • معطل إذا لم يتم تحديده أو تم تعيينه إلى 0
  • القيم النموذجية: 15 إلى 60 ثانية
  • مرئي في واجهة حالة البوابة كـ "زمن الاستجابة"
  • مثال: value="25"

ping-max

  • الحد الأقصى للوقت (بالثواني) لإعادة محاولة pings قبل وضع علامة على البوابة كمعطلة
  • الافتراضي: محسوب من فترة ping
  • مثال: value="3"
معلمات توجيه المكالمات

extension

  • رقم وجهة ثابت يجب الاتصال به دائمًا على هذه البوابة
  • نادرًا ما يستخدم - عادةً ما تأتي الوجهة من خطة الاتصال
  • مثال: value="+12125551234"

extension-in-contact

  • تضمين الامتداد في رأس الاتصال
  • القيم: true | false
  • الافتراضي: false
  • مثال: value="false"

contact-params

  • معلمات إضافية لإضافتها إلى رأس الاتصال
  • مفيدة لمتطلبات الناقل المحددة
  • مثال: value="line=1;isup=true"
معلمات متقدمة

from-user

  • تجاوز اسم المستخدم في رأس From
  • الافتراضي: يستخدم رقم الاتصال أو اسم مستخدم البوابة
  • مثال: value="trunk_pilot"

from-domain

  • تجاوز المجال في رأس From
  • الافتراضي: يستخدم مجال الوكيل
  • مثال: value="my-domain.com"

outbound-proxy

  • وك��ل خارجي لجميع رسائل SIP
  • مختلف عن proxy - يستخدم كهدف رأس Route
  • مثال: value="edge-proxy.carrier.com:5060"

context

  • سياق خطة الاتصال للمكالمات الواردة من هذه البوابة
  • الافتراضي: public
  • يسمح بتوجيه المكالمات الواردة المختلفة لكل بوابة
  • مثال: value="from-carrier"

channels

  • الحد الأقصى للمكالمات المتزامنة على هذه البوابة
  • الافتراضي: غير محدود
  • يستخدم لإدارة السعة
  • مثال: value="100"

dtmf-type

  • طريقة نقل DTMF
  • القيم: rfc2833 | info | inband | auto
  • الافتراضي: rfc2833 (موصى به)
  • rfc2833: أحداث RTP الهاتفية (الأكثر شيوعًا)
  • info: رسائل SIP INFO
  • inband: نغمات صوتية
  • مثال: value="rfc2833"

codec-prefs

  • قائمة الترميز المفضلة لهذه البوابة
  • قائمة مفصولة بفواصل بترتيب التفضيل
  • مثال: value="PCMU,PCMA,G729"
  • الترميزات الشائعة: PCMU، PCMA، G729، AMR، AMR-WB، G722، OPUS

rtp-timeout-sec

  • إنهاء المكالمة إذا لم يتم استلام RTP لم��ة N ثانية
  • الافتراضي: 0 (معطل)
  • مفيد لاكتشاف المكالمات الميتة
  • مثال: value="120"

rtp-hold-timeout-sec

  • مهلة للمكالمات المعلقة بدون RTP
  • الافتراضي: 0 (معطل)
  • مثال: value="1800" (30 دقيقة)
خيارات إشارة SIP

sip-port

  • منفذ SIP المحلي لاستخدامه لهذه البوابة
  • الافتراضي: منفذ الملف الشخصي
  • نادرًا ما يكون مطلوبًا
  • مثال: value="5060"

rtp-ip

  • عنوان IP المحلي لوسائط RTP
  • الافتراضي: IP RTP للملف الشخصي
  • مثال: value="10.0.0.5"

register-proxy-port

  • منفذ لوكيل التسجيل
  • مطلوب فقط إذا كان مختلفًا عن منفذ الوكيل
  • مثال: value="5061"

contact-host

  • تجاوز جزء المضيف من رأس الاتصال
  • مفيد لسيناريوهات NAT
  • مثال: value="public-ip.example.com"

distinct-to

  • استخدام رأس To مميز (مختلف عن Request-URI)
  • القيم: true | false
  • متطلب خاص بالناقل
  • مثال: value="false"

cid-type

  • نوع معرف المتصل في رؤوس Remote-Party-ID أو P-Asserted-Identity
  • القيم: rpid | pid | none
  • rpid: رأس Remote-Party-ID
  • pid: رأس P-Asserted-Identity
  • مثال: value="pid"

extension-in-contact

  • إضافة معلمة الامتداد إلى URI الاتصال
  • القيم: true | false
  • مثال: value="true"
أمان النقل

transport (في معلمة الوكيل)

  • بروتوكول النقل
  • القيم: udp | tcp | tls | ws | wss
  • يتم تحديده كجزء من قيمة الوكيل
  • مثال: proxy="203.0.113.50;transport=tcp"

بالنسبة لاتصالات TLS، قد تكون هناك حاجة إلى تكوين شهادة إضافية في ملف SIP.

مثال كامل مع خيارات شائعة

<include>
<gateway name="primary_carrier">
<!-- Required: Basic connection -->
<param name="proxy" value="sbc.carrier.com:5060;transport=tcp"/>
<param name="register" value="true"/>

<!-- Authentication -->
<param name="username" value="customer_trunk_01"/>
<param name="password" value="SecurePassword123"/>

<!-- Registration -->
<param name="register-transport" value="tcp"/>
<param name="expire-seconds" value="1800"/>
<param name="retry-seconds" value="30"/>

<!-- Caller ID -->
<param name="caller-id-in-from" value="true"/>

<!-- Monitoring -->
<param name="ping" value="30"/>

<!-- Media -->
<param name="codec-prefs" value="PCMU,PCMA,G729"/>
<param name="dtmf-type" value="rfc2833"/>

<!-- Call limits -->
<param name="channels" value="100"/>

<!-- RTP timeouts -->
<param name="rtp-timeout-sec" value="300"/>
</gateway>
</include>

استخدام البوابة في خطة الاتصال

قم بالإشارة إلى البوابات في خطة الاتصال الخاصة بك باستخدام تنسيق sofia/gateway/name/destination:

<!-- Route to specific gateway -->
<action application="bridge" data="sofia/gateway/primary_carrier/+12125551234"/>

<!-- Route using variable -->
<action application="bridge" data="sofia/gateway/primary_carrier/${tas_destination_number}"/>

<!-- Route with custom SIP headers -->
<action application="bridge" data="{sip_h_X-Custom=Value}sofia/gateway/primary_carrier/${tas_destination_number}"/>

<!-- Failover between gateways -->
<action application="bridge" data="sofia/gateway/primary_carrier/${tas_destination_number}|sofia/gateway/backup_carrier/${tas_destination_number}"/>

استكشاف مشكلات البوابة

البوابة لا تسجل:

  • تحقق من أن username و password صحيحة
  • تحقق من أن عنوان proxy قابل للوصول
  • تأكد من أن register-transport يتطابق مع متطلبات الناقل
  • راجع السجلات للبحث عن فشل المصادقة

فشل المكالمات:

  • تحقق من حالة البوابة في واجهة الويب (/gw)
  • تحقق من أن إعداد caller-id-in-from يتطابق مع متطلبات الناقل
  • تأكد من توافق الترميز مع codec-prefs
  • تحقق من أن جدار الحماية يسمح بحركة SIP و RTP

جودة المكالمات رديئة:

  • راجع أوقات ping في حالة البوابة
  • تحقق من أن rtp-timeout-sec ليس عدوانيًا جدًا
  • تأكد من أن تفضيلات الترميز تتوافق مع قدرات الشبكة
  • راقب زمن الاستجابة وفقدان الحزم في الشبكة

تكوين نظير Diameter

يجب تعريف أقران Diameter في تكوين وقت التشغيل.

هذا التكوين هو في الغالب نموذج.

لا تحتاج واجهة Ro إلى أن تتضمن في التط��يقات إذا لم يتم استخدام Ro في النشر الخاص بك.

config :diameter_ex,
diameter: %{
service_name: :omnitouch_tas,
listen_ip: "10.8.82.60",
listen_port: 3868,
decode_format: :map,
host: "example-dc01-as01",
realm: "epc.mnc001.mcc001.3gppnetwork.org",
product_name: "OmniTAS",
request_timeout: 5000,
peer_selection_algorithm: :random,
allow_undefined_peers_to_connect: true,
log_unauthorized_peer_connection_attempts: true,
control_module: Tas.Control.Diameter,
processor_module: DiameterEx.Processor,
auth_application_ids: [],
acct_application_ids: [],
vendor_id: 10415,
supported_vendor_ids: [10415],
# اختياري: مجال الوجهة العالمي لجميع التطبيقات
# destination_realm: "global.destination.realm",
applications: [
%{
application_name: :sh,
application_dictionary: :diameter_gen_3gpp_sh,
# اختياري: مجال الوجهة المحدد للتطبيق لطلبات Sh
# destination_realm: "sh.destination.realm",
vendor_specific_application_ids: [
%{
vendor_id: 10415,
auth_application_id: 16_777_217,
acct_application_id: nil
}
]
},
%{
application_name: :ro,
application_dictionary: :diameter_gen_3gpp_ro,
# اختياري: مجال الوجهة المحدد للتطبيق لطلبات Ro
# destination_realm: "ocs.destination.realm",
vendor_specific_application_ids: [
%{
vendor_id: 0,
auth_application_id: 4,
acct_application_id: nil
}
]
}
],
peers: [
%{
port: 3868,
host: "example-dc01-dra01.epc.mnc001.mcc001.3gppnetwork.org",
ip: "1.2.3.4",
realm: "epc.mnc001.mcc001.3gppnetwork.org",
tls: false,
transport: :diameter_tcp,
initiate_connection: true
},
%{
port: 3869,
host: "example-dc01-dra02.epc.mnc001.mcc001.3gppnetwork.org",
ip: "1.2.3.44",
realm: "epc.mnc001.mcc001.3gppnetwork.org",
tls: false,
transport: :diameter_tcp,
initiate_connection: true
}
]
}

معلمات تكوين Diameter

تكوين الخدمة:

  • service_name (ذرة): معرف فريد لهذه الخدمة Diameter

    • مثال: :omnitouch_tas
    • يستخدم داخليًا لإدارة الخدمة
  • listen_ip (سلسلة): عنوان IP للربط لاتصالات Diameter

    • مثال: "10.8.82.60"
    • استخدم "0.0.0.0" للاستماع على جميع الواجهات
    • سيتصل الأقران بهذا IP
  • listen_port (عدد صحيح): منفذ TCP لاتصالات Diameter

    • المنفذ القياسي لـ Diameter: 3868
    • يجب ألا يتعارض مع خدمات أخرى
  • host (سلسلة): هوية مضيف Diameter (بدون مجال)

    • مثال: "example-dc01-as01"
    • يتم دمجه مع realm لتشكيل AVP Origin-Host
    • يجب أن يكون فريدًا داخل شبكة Diameter
  • realm (سلسلة): هوية مجال Diameter

    • مثال: "epc.mnc001.mcc001.3gppnetwork.org"
    • يستخدم في AVP Origin-Realm
    • يجب أن يتطابق مع تقاليد معرف الشبكة 3GPP
  • product_name (سلسلة): معرف المنتج في رسائل CER/CEA

    • مثال: "OmniTAS"
    • يستخدم في رسائل تبادل القدرات
  • request_timeout (عدد صحيح): مهلة بالمللي ثانية لطلبات Diameter

    • مثال: 5000 (5 ثوانٍ)
    • ستنتهي الطلبات بدون استجابة خلال هذا الوقت
  • peer_selection_algorithm (ذرة): خوارزمية لاختيار نظير عند توفر عدة أقران

    • القيم: :random | :round_robin | :priority
    • :random: اختيار نظير عشوائي
    • :round_robin: توزيع الطلبات بالتساوي عبر الأقران
  • vendor_id (عدد صحيح): معرف البائع 3GPP

    • معرف البائع القياسي 3GPP: 10415
    • يستخدم في AVP Vendor-Specific-Application-Id

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

تتحكم معلمة destination_realm في AVP Destination-Realm المضمنة في طلبات Diameter. تخبر هذه AVP وكيل توجيه Diameter (DRA) إلى أين يجب توجيه الطلب.

ثلاث مستويات من التكوين:

  1. محدد للتطبيق (أعلى أولوية): تعيين destination_realm داخل كل تكوين تطبيق
  2. عالمي: تعيين destination_realm على المستوى الأعلى من تكوين diameter
  3. احتياطي (أدنى أولوية): يستخد�� قيمة realm إذا لم يتم تكوين أي من السابق

أمثلة التكوين:

# مثال 1: مجالات الوجهة المحددة للتطبيق
config :diameter_ex,
diameter: %{
realm: "epc.mnc001.mcc001.3gppnetwork.org",
applications: [
%{
application_name: :sh,
destination_realm: "hss.epc.mnc001.mcc001.3gppnetwork.org",
# ... تكوين آخر
},
%{
application_name: :ro,
destination_realm: "ocs.epc.mnc001.mcc001.3gppnetwork.org",
# ... تكوين آخر
}
]
}

# مثال 2: مجال الوجهة العالمي مع تجاوز محدد للتطبيق
config :diameter_ex,
diameter: %{
realm: "epc.mnc001.mcc001.3gppnetwork.org",
destination_realm: "dra.epc.mnc001.mcc001.3gppnetwork.org", # الافتراضي لجميع التطبيقات
applications: [
%{
application_name: :sh,
# سيستخدم العالمي: "dra.epc.mnc001.mcc001.3gppnetwork.org"
},
%{
application_name: :ro,
destination_realm: "ocs.epc.mnc001.mcc001.3gppnetwork.org", # تجاوز
}
]
}

# مثال 3: لا يوجد مجال وجهة محدد (يستخدم المجال)
config :diameter_ex,
diameter: %{
realm: "epc.mnc001.mcc001.3gppnetwork.org",
# لا يوجد مجال وجهة محدد في أي مكان
applications: [
%{
application_name: :sh,
# سيستخدم المجال الاحتياطي: "epc.mnc001.mcc001.3gppnetwork.org"
}
]
}

متى يجب استخدام مجال الوجهة:

  • أنظمة خلفية مختلفة: عندما يذهب Sh إلى HSS و Ro إلى OCS في مجالات مختلفة
  • توجيه DRA: عندما يستخدم DRA مجال الوجهة لتوجيه إلى مجموعات خلفية مختلفة
  • نشر متعدد المستأجرين: توجيه تطبيقات مختلفة إلى مجالات مستأجرين مختلفة
  • سيناريوهات الاختبار: تجاوز مجال الوجهة لكل تطبيق للاختبار دون تغيير الأقران

تسلسل الاحتياطي:

مجال الوجهة المحدد للتطبيق
↓ (إذا لم يتم تعيينه)
المجال العالمي
↓ (إذا لم يتم تعيينه)
المجال

هذا يضمن أن AVP Destination-Realm الإلزامية موجودة دائمًا في الطلبات الصادرة.

يمكنك التحقق من حالة أقران Diameter من علامة التبويب Diameter على واجهة ��لويب.

عرض أقران Diameter

يمكنك أيضًا اختبار استرجاع بيانات Sh من علامة التبويب Sh على واجهة الويب لمحاولة جلب أي من البيانات من Sh.

اختبار بيانات Sh