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

تكوين خطة الاتصال وتوجيه المكالمات

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

دليل شامل لتكوين خطة الاتصال بتنسيق XML، ومنطق توجيه المكالمات، ومتغيرات خطة الاتصال.

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

الوثائق الأساسية

تدفق معالجة المكالمات

تنفيذ الخدمات

المراقبة


تكوين خطة الاتصال / توجيه المكالمات

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

تكتب خطط الاتصال في priv/templates وتأخذ الشكل:

  • mo_dialplan.xml - خطة مكالمات منشأة من الهاتف المحمول
  • mo_emergency_dialplan.xml - خطة مكالمات الطوارئ المنشأة من الهاتف المحمول
  • mt_dialplan.xml - خطة مكالمات منتهية من الهاتف المحمول

يمكنك عرض خطط الاتصال من داخل واجهة الويب.

عرض التوجيه

تُحدد TAS متغيرات مختلفة قبل تحليل XML، وتُطبع هذه المتغيرات في السجل في بداية المكالمة مع قيمها الحالية وتكون مفيدة جدًا عند تعريف منطق المكالمات الخاص بك.

أساسيات خطة الاتصال XML لـ FreeSWITCH

تستخدم OmniTAS نفس نظام توجيه المكالمات بتنسيق XML مثل مشروع FreeSWITCH، مما يسمح بتوجيه المكالمات بشكل مرن لتلبية احتياجاتك.

تشرح هذه القسم المفاهيم الأساسية وتقدم أمثلة عملية.

الهيكل الأساسي

تتكون خطة الاتصال من امتدادات تحتوي على شروط و إجراءات:

<extension name="وصف لما تفعله">
<condition field="${variable}" expression="regex-pattern">
<action application="app_name" data="parameters"/>
<anti-action application="app_name" data="parameters"/>
</condition>
</extension>

تُقيم الامتدادات بالترتيب من الأعلى إلى الأسفل. عندما تتطابق شرط، يتم تنفيذ إجراءاتها.

الشروط ومطابقة regex

��ختبر الشروط المتغيرات مقابل التعبيرات العادية. إذا تطابقت regex، يتم تنفيذ الإجراءات؛ إذا لم تتطابق، يتم تنفيذ الإجراءات المضادة.

مطابقة دقيقة أساسية:

<condition field="${tas_destination_number}" expression="2222">
<action application="log" data="INFO Calling voicemail access number"/>
</condition>

مطابقة عدة أرقام:

<condition field="${tas_destination_number}" expression="^(2222|3444|3445)$">
<action application="log" data="INFO Calling special service"/>
</condition>

مطابقة النمط مع مجموعات الالتقاط:

<condition field="${tas_destination_number}" expression="^1(8[0-9]{9})$">
<!-- يتطابق 1 متبوعًا بـ 8 و 9 أرقام أخرى -->
<action application="log" data="INFO Matched toll-free: $1"/>
<action application="bridge" data="sofia/gateway/trunk/${tas_destination_number}"/>
</condition>

مطابقة البادئة:

<condition field="${tas_destination_number}" expression="^00">
<!-- يتطابق مع أي رقم يبدأ بـ 00 (دولي) -->
<action application="log" data="INFO International call detected"/>
</condition>

مطابقة النطاق:

<condition field="${msisdn}" expression="^5551241[0-9]{4}$">
<!-- يتطابق مع 55512410000 حتى 55512419999 -->
<action application="log" data="INFO Subscriber in range"/>
</condition>

الإجراءات مقابل الإجراءات المضادة

الإجراءات تُنفذ عندما يتطابق شرط. الإجراءات المضادة تُنفذ عندما لا يتطابق شرط.

<condition field="${cli_withheld}" expression="true">
<!-- تُنفذ إذا تم حجب CLI -->
<action application="set" data="effective_caller_id_number=anonymous"/>
<action application="set" data="origination_privacy=hide_number"/>

<!-- تُنفذ إذا لم يتم حجب CLI -->
<anti-action application="log" data="DEBUG CLI is normal"/>
<anti-action application="set" data="effective_caller_id_number=${msisdn}"/>
</condition>

خاصية continue="true"

بشكل افتراضي، عندما يتطابق شرط الامتداد، تتوقف خطة الاتصال عن معالجة الامتدادات الأخرى. تسمح خاصية continue="true" بمواصلة المعالجة إلى الامتداد التالي.

بدون continue (السلوك الافتراضي):

<extension name="First-Check">
<condition field="${tas_destination_number}" expression="^(.*)$">
<action application="log" data="INFO Processing call"/>
</condition>
</extension>

<extension name="Never-Reached">
<!-- هذا لا يُنفذ أبدًا لأن الامتداد السابق تطابق -->
<condition field="${tas_destination_number}" expression="^(.*)$">
<action application="log" data="INFO This won't print"/>
</condition>
</extension>

مع continue="true":

<extension name="Print-Vars" continue="true">
<condition field="${tas_destination_number}" expression="^(.*)$">
<action application="info" data=""/>
</condition>
</extension>

<extension name="Check-Balance" continue="true">
<condition field="${hangup_case}" expression="OUTGOING_CALL_BARRED">
<action application="log" data="ERROR Insufficient balance"/>
<action application="hangup" data="${hangup_case}"/>
</condition>
</extension>

<extension name="Route-Call">
<!-- يتم تقييم هذا الامتداد أيضًا -->
<condition field="${tas_destination_number}" expression="^(.*)$">
<action application="bridge" data="sofia/gateway/trunk/${tas_destination_number}"/>
</condition>
</extension>

استخدم continue="true" لـ:

  • تسجيل/تصحيح الامتدادات
  • تعيين المتغيرات التي تنطبق على سيناريوهات متعددة
  • تحقق من صحة لا تقوم بتوجيه المكالمة

التطبيقات الشائعة

التحكم في المكالمات

answer - الرد على المكالمة (إرسال 200 OK)

<action application="answer" data=""/>

hangup - إنهاء المكالمة بسبب محدد

<action application="hangup" data="NORMAL_CLEARING"/>
<action application="hangup" data="USER_BUSY"/>
<action application="hangup" data="NO_ANSWER"/>

bridge - ربط المكالمة بوجهة أخرى

<!-- جسر إلى بوابة خارجية -->
<action application="bridge" data="sofia/gateway/trunk/+12125551234"/>

<!-- جسر إلى امتداد داخلي مع تفضيلات الترميز -->
<action application="bridge" data="{absolute_codec_string=AMR-WB,AMR,PCMA}sofia/internal/sip:user@domain.com"/>

<!-- جسر مع مهلة -->
<action application="bridge" data="{originate_timeout=30}sofia/gateway/trunk/${tas_destination_number}"/>
المتغيرات وبيانات القناة

set - تعيين متغير قناة

<action application="set" data="my_variable=my_value"/>
<action application="set" data="sip_h_X-Custom-Header=CustomValue"/>
<action application="set" data="effective_caller_id_number=anonymous"/>

unset - إزالة متغير قناة

<action application="unset" data="sip_h_P-Asserted-Identity"/>

export - تعيين متغير وتصديره إلى B-leg (المكالمة المربوطة)

<action application="export" data="sip_h_X-Account-Code=ABC123"/>
الوسائط والتنبيهات

playback - تشغيل ملف صوتي

<action application="playback" data="/sounds/en/us/callie/misc/8000/out_of_credit.wav"/>
<action application="playback" data="$${base_dir}/sounds/custom_prompt.wav"/>

sleep - التوقف لمدة محددة من المللي ثانية

<action application="sleep" data="1000"/>  <!-- النوم لمدة 1 ثانية -->

echo - إعادة الصوت إلى المتصل (اختبار)

<action application="echo" data=""/>

conference - وضع المكالمة في مؤتمر

<action application="conference" data="room-${destination_number}@wideband"/>
البريد الصوتي

voicemail - الوصول إلى نظام البريد الصوتي

<!-- ترك بريد صوتي لصندوق البريد -->
<action application="voicemail" data="default default ${msisdn}"/>

<!-- التحقق من البريد الصوتي مع التفويض -->
<action application="voicemail" data="check auth default default ${msisdn}"/>
التسجيل وتصحيح الأخطاء

log - الكتابة إلى ملف السجل

<action application="log" data="INFO Processing call from ${msisdn}"/>
<action application="log" data="DEBUG Destination: ${tas_destination_number}"/>
<action application="log" data="ERROR Call failed with cause: ${hangup_cause}"/>

info - تفريغ جميع متغيرات القناة إلى السجل

<action application="info" data=""/>
تطبيقات متنوعة

say - قراءة الرقم باستخدام النص إلى الكلام

<action application="say" data="en number iterated ${tas_destination_number}"/>

send_dtmf - إرسال نغمات DTMF

<action application="send_dtmf" data="1234#"/>

أمثلة عملية

توجيه خدمات الطوارئ:

<extension name="Emergency-911">
<condition field="${tas_destination_number}" expression="^(911|112)$">
<action application="log" data="ALERT Emergency call from ${msisdn}"/>
<action application="answer" data=""/>
<action application="playback" data="/sounds/emergency_services_transfer.wav"/>
<action application="bridge" data="sofia/gateway/emergency_gw/${tas_destination_number}"/>
</condition>
</extension>

توجيه مشروط بناءً على الرصيد:

<extension name="Check-Credit">
<condition field="${hangup_case}" expression="OUTGOING_CALL_BARRED">
<action application="answer" data=""/>
<action application="playback" data="/sounds/out_of_credit.wav"/>
<action application="hangup" data="CALL_REJECTED"/>
</condition>
</extension>

توجيه على الشبكة مقابل خارج الشبكة:

<extension name="Route-Decision">
<condition field="${on_net_status}" expression="true">
<!-- على الشبكة: توجيه مرة أخرى عبر TAS -->
<action application="log" data="INFO Routing to on-net subscriber"/>
<action application="bridge" data="sofia/internal/+${tas_destination_number}@10.179.3.60"/>
<anti-action application="log" data="INFO Routing off-net"/>
<anti-action application="bridge" data="sofia/gateway/trunk/+${tas_destination_number}"/>
</condition>
</extension>

معالجة هوية المتصل المجهول:

<extension name="CLI-Privacy" continue="true">
<condition field="${cli_withheld}" expression="true">
<action application="set" data="effective_caller_id_name=anonymous"/>
<action application="set" data="effective_caller_id_number=anonymous"/>
<action application="set" data="origination_privacy=hide_number"/>
</condition>
</extension>

البريد الصوتي عند عدم الرد:

<extension name="Try-Bridge-Then-VM">
<condition field="${tas_destination_number}" expression="^(555124115\d{2})$">
<action application="set" data="call_timeout=30"/>
<action application="bridge" data="sofia/internal/${tas_destination_number}@domain.com"/>

<!-- إذا فشل الجسر، انتقل إلى البريد الصوتي -->
<action application="log" data="INFO Bridge failed, routing to voicemail"/>
<action application="answer" data=""/>
<action application="voicemail" data="default default ${tas_destination_number}"/>
</condition>
</extension>

توجيه نطاق الأرقام:

<extension name="Local-Numbers">
<condition field="${tas_destination_number}" expression="^([2-9]\d{2})$">
<!-- امتدادات محلية من 3 أرقام 200-999 -->
<action application="log" data="INFO Local extension: $1"/>
<action application="bridge" data="sofia/internal/$1@pbx.local"/>
</condition>
</extension>

<extension name="National-Numbers">
<condition field="${tas_destination_number}" expression="^555\d{7}$">
<!-- أرقام الهواتف المحمولة الوطنية -->
<action application="log" data="INFO National mobile call"/>
<action application="bridge" data="sofia/gateway/national_trunk/${tas_destination_number}"/>
</condition>
</extension>

<extension name="International">
<condition field="${tas_destination_number}" expression="^00\d+$">
<!-- المكالمات الدولية التي تبدأ بـ 00 -->
<action application="log" data="INFO International call"/>
<action application="bridge" data="sofia/gateway/intl_trunk/${tas_destination_number}"/>
</condition>
</extension>

مزيد من الوثائق

للحصول على تفاصيل كاملة حول كل تطبيق:

تحتوي ويكي FreeSWITCH على وثائق مفصلة لكل تطبيق خطة الاتصال، بما في ذلك جميع المعلمات وحالات الاستخدام.

متغيرات خطة الاتصال

المتغيرات التي تحددها TAS في منطق خطة الاتصال XML:

المتغيرات الشائعة (جميع أنواع المكالمات)

الإعداد الأولي:

  • destination_number - رقم الوجهة المترجم
  • tas_destination_number - رقم الوجهة المترجم
  • effective_caller_id_number - رقم المصدر المترجم

المكالمات الطارئة

  • hangup_case - "none"
  • ims_private_identity - الهوية الخاصة بالمستخدم
  • ims_public_identity - الهوية العامة بالمستخدم
  • msisdn - رقم المشترك (مزال منه +)
  • imsi - IMSI من الهوية الخاصة
  • ims_domain - النطاق من الهوي�� الخاصة

المكالمات MT (منتهية من الهاتف المحمول)

  • ims_private_identity - الهوية الخاصة بالمستخدم
  • ims_public_identity - الهوية العامة بالمستخدم
  • msisdn - رقم المشترك (مزال منه +)
  • imsi - IMSI من الهوية الخاصة
  • ims_domain - النطاق من الهوية الخاصة
  • call_forward_all_destination - وجهة CFA أو "none"
  • call_forward_not_reachable_destination - وجهة CFNRc
  • scscf_address - عنوان S-CSCF أو "none"
  • scscf_domain - نطاق S-CSCF أو "none"
  • no_reply_timer - مهلة عدم الرد
  • hangup_case - "none" أو "UNALLOCATED_NUMBER"
  • msrn - MSRN من PRN (إذا كان التجوال) أو الرقم المحول من SRI (إذا كانت إعادة توجيه المكالمات نشطة)
  • tas_destination_number - تجاوز وجهة التوجيه (تم تعيينه إلى MSRN أو الرقم المحول)

المكالمات MO (منشأة من الهاتف المحمول)

  • hangup_case - "none"، "OUTGOING_CALL_BARRED"، أو "UNALLOCATED_NUMBER"
  • ims_private_identity - الهوية الخاصة بالمستخدم
  • ims_public_identity - الهوية العامة بالمستخدم
  • msisdn - رقم المشترك (مزال منه +)
  • imsi - IMSI من الهوية الخاصة
  • ims_domain - النطاق من الهوية الخاصة
  • allocated_time - الوقت المخصص بواسطة OCS (إذا كانت الشحن عبر الإنترنت مفعل)
  • cli_withheld - سلسلة "true" أو "false"
  • on_net_status - سلسلة "true" أو "false" (ما إذا كانت الوجهة على الشبكة)
  • msrn - MSRN للمشتركين المتجولين (إذا كان ذلك مناسبًا)
  • tas_destination_number - تجاوز MSRN (إذا كان التجوال)

الاتصال الطارئ

يتم التحكم في الاتصال الطارئ من خلال معلمة التكوين emergency_call_codes ويتم اكتشافه تلقائيًا أثناء تفويض المكالمات.

التكوين

قم بتكوين رموز الاتصال الطارئ في ملف تكوين TAS الخاص بك:

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

  • emergency_call_codes: قائمة بأرقام خدمات الطوارئ للكشف عنها
  • الرموز الشائعة: "911" (الولايات المتحدة)، "112" (الاتحاد الأوروبي)، "000" (أستراليا)، "999" (المملكة المتحدة)، "sos"
  • يتم التحقق من هذه الرموز بالإضافة إلى URNs الطارئة SIP (مثل <urn:service:sos>)
  • يقوم النظام بإجراء مقارنة مطابقة دقيقة مقابل رقم الوجهة

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

  • نشر الولايات المتحدة: ["911", "933"] - 911 للطوارئ، 933 للاختبار
  • نشر أوروبي: ["112", "999"]
  • نشر أسترالي: ["000", "106"] - 000 للطوارئ، 106 لنقل النص
  • متعدد المناطق: ["911", "112", "000", "sos"]

كيفية عمل اكتشاف الطوارئ

يتحقق النظام من حالتين:

  1. URN خدمة الطوارئ SIP URI: يكشف عن <urn:service:sos> أو أي URI يحتوي على "service:sos"
  2. مطابقة رقم الوجهة: يقارن Caller-Destination-Number ضد emergency_call_codes المكونة

إذا كانت أي حالة صحيحة، يتم تصنيف المكالمة على أنها طارئة.

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

تفاصيل تدفق المكالمات:

  1. تصل المكالمة إلى TAS
  2. يتحقق وحدة التفويض من الوجهة مقابل الأنماط الطارئة
  3. إذا تم اكتشاف الطوارئ:
    • يتم تعيين نوع المكالمة إلى :emergency
    • يتم استخدام قالب mo_emergency_dialplan.xml
    • يتم عادةً تجاوز تفويض OCS
    • يتم توجيه المكالمة إلى بوابة PSAP
  4. يتم تسجيل المقاييس مع تسمية call_type: emergency

توجيه خطة الاتصال

حدد التوجيه للمكالمات الطارئة في priv/templates/mo_emergency_dialplan.xml. يحدد هذا القالب كيفية توجيه المكالمات إلى بوابة PSAP (نقطة الإجابة العامة) أو URI SIP بناءً على متطلبات السوق الخاصة بك.

مثال على خطة الاتصال الطارئة:

<extension name="Emergency-SOS">
<condition field="${destination_number}" expression="^(911|912|913|sos)$">
<action application="log" data="ALERT Emergency call from ${msisdn}"/>
<action application="answer" data=""/>
<action application="bridge" data="sofia/gateway/psap_gw/${destination_number}"/>
</condition>
</extension>

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

  • تأكد دائمًا من تضمين "sos" في قائمة رموز الطوارئ الخاصة بك لتوافق URN SIP
  • تضمين جميع أرقام الطوارئ المحلية لمنطقتك (مثل 911، 112، 000، 999)
  • اختبر توجيه الطوارئ بانتظام باستخدام محاكي المكالمات
  • تجاوز OCS للمكالمات الطارئة لضمان اتصالها دائمًا (تم تكوينه عبر skipped_regex)
  • تكوين بوابة PSAP مع توفر عالي واحتياطي
  • راقب مقاييس المكالمات الطارئة لضمان موثوقية النظام

قوائم IVR

تسمح قوائم IVR للمتصلين باختيار الخيارات عبر أرقام DTMF قبل التوجيه. يتم تعريف القوائم كملفات XML ويتم استدعاؤها من خطة الاتصال باستخدام تطبيق ivr.

إضافة قائمة IVR

  1. أنشئ ملف XML في hosts/<environment>/group_vars/ivr_menus/:
<include>
<menu name="my_menu"
greet-long="$${base_dir}/sounds/en/us/callie/misc/8000/my_greeting.wav"
greet-short="$${base_dir}/sounds/en/us/callie/misc/8000/my_greeting.wav"
invalid-sound="silence_stream://250"
exit-sound=""
timeout="5000"
max-failures="1"
max-timeouts="1"
digit-len="1">

<!-- يمكن أن تنفذ كل رقم عدة إجراءات في تسلسل -->
<entry action="menu-exec-app" digits="1" param="playback $${base_dir}/sounds/option1.wav"/>
<entry action="menu-exec-app" digits="1" param="bridge sofia/internal/100@$${domain}"/>

<entry action="menu-exec-app" digits="2" param="playback $${base_dir}/sounds/option2.wav"/>
<entry action="menu-exec-app" digits="2" param="bridge sofia/internal/200@$${domain}"/>

<!-- معالجة المهلة والإدخال غير الصحيح -->
<entry action="menu-exec-app" digits="timeout" param="bridge sofia/internal/default@$${domain}"/>
<entry action="menu-exec-app" digits="invalid" param="bridge sofia/internal/default@$${domain}"/>
</menu>
</include>
  1. استدع القائمة من خطة الاتصال الخاصة بك:
<extension name="my_ivr_extension">
<condition field="destination_number" expression="^1234$">
<action application="answer"/>
<action application="ivr" data="my_menu"/>
</condition>
</extension>
  1. نشر عبر Ansible

سمات القائمة

السمةالوصف
nameمعرف القائمة المستخدمة في تطبيق ivr في خطة الاتصال
greet-longملف صوتي يتم تشغيله عند الدخول الأول
greet-shortملف صوتي يتم تشغيله بعد الإدخال غير الصحيح
timeoutالمللي ثانية للانتظار للإدخال
max-failuresالإدخالات غير الصحيحة قبل تشغيل إجراء invalid
max-timeoutsالمهلات قبل تشغيل إجراء timeout
digit-lenعدد الأرقام التي يجب جمعها

إجراءات الإدخال

تستخدم الإدخالات action="menu-exec-app" لتنفيذ تطبيقات خطة الاتصال. يتم تنفيذ إدخالات متعددة بنفس الرقم في تسلسل:

نوع الإدخالالوصف
digits="1"يتم التنفيذ عندما يضغط المتصل على 1
digits="timeout"يتم التنفيذ عندما لا يضغط المتصل على أي شيء
digits="invalid"يتم التنفيذ عندما يضغط المتصل على رقم غير مع��رف به

التطبيقات الشائعة: playback، bridge، transfer، hangup


مكالمة منشأة من الهاتف المحمول إلى مشترك منتهٍ على الشبكة

عندما يتصل مشترك بمشترك آخر على شبكتك (مكالمة على الشبكة)، فإن الطريقة الصحيحة هي توجيه المكالمة المنشأة من الهاتف المحمول مرة أخرى عبر TAS لمعالجة المكالمات المنتهية. يضمن ذلك أن يتلقى الطرف المتصل جميع خدمات المكالمات المنتهية بما في ذلك إعادة التوجيه، البريد الصوتي، توجيه MSRN للتجوال، وجميع خدمات المشترك الأخرى.

لماذا توجيه MO إلى MT؟

بدون معالجة MT (التوجيه المباشر):

  • يتم تجاهل إعدادات إعادة توجيه المكالمات للطرف المتصل
  • لا يوجد بريد صوتي عند عدم الرد
  • لا يوجد توجيه MSRN للمشتركين المتجولين
  • منطق خدمة المشترك مفقود

مع معالجة MT (التوجيه مرة أخرى إلى TAS):

  • دعم كامل لإعادة توجيه المكالمات (CFU، CFB، CFNRy، CFNRc)
  • بريد صوتي عند الانشغال/عدم الرد
  • توجيه MSRN للمشتركين المتجولين CS
  • تجربة خدمة مشترك كاملة
  • تتبع حالة المكالمة بشكل صحيح لكلا الطرفين

التنفيذ

تتحقق خطة الاتصال المنشأة من الهاتف المحمول مما إذا كانت الوجهة على الشبكة (تخدمها TAS)، وإذا كان الأمر كذلك، تقوم بتوجيه المكالمة مرة أخرى إلى TAS نفسه. تتلقى TAS هذه كمكالمة جديدة منتهية وتقوم بمعالجتها من خلال قالب mt_dialplan.xml.

مثال على مقتطف خطة الاتصال:

<extension name="On-Net-Route">
<condition field="${on_net_status}" expression="true">
<action application="log" data="DEBUG On-Net MO call - Routing back into TAS" />

<!-- تنظيف الرؤوس للتوجيه الداخلي -->
<action application="set" data="sip_copy_multipart=false"/>
<action application="set" data="sip_h_Request-Disposition=no-fork"/>

<!-- التوجيه مرة أخرى إلى TAS (تصبح مكالمة MT) -->
<action application="bridge"
data="{absolute_codec_string='AMR-WB,AMR,PCMA,PCMU',originate_retries=1,originate_timeout=60,sip_invite_call_id=${sip_call_id}}sofia/internal/${tas_destination_number}@${sip_local_network_addr}" />
<action application="hangup" data="" />
</condition>
</extension>

المعلمات الرئيسية:

  • ${sip_local_network_addr} - عنوان IP الخاص بـ TAS (مثل 10.179.3.60)
  • ${tas_destination_number} - MSISDN للطرف المتصل
  • sip_invite_call_id=${sip_call_id} - يحافظ على call-id للتتبع
  • sip_copy_multipart=false - يمنع نسخ الرسالة متعددة الأجزاء
  • sip_h_Request-Disposition=no-fork - يضمن المعالجة المتسلسلة

تدفق المكالمات:

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

  • يجب أن يكون عنوان IP الخاص بـ TAS (مثل 10.179.3.60) في قائمة allowed_sbc_source_ips الخاصة بتكوينك
  • يسمح ذلك لـ TAS بتلقي المكالمات من نفسه لمعالجة MT
  • بدون ذلك، سترفض TAS المكالمة باعتبارها قادمة من مصدر غير مصرح به

استخدام MSRN للمشتركين المتجولين في 2G/3G

عندما يكون المشترك متجولًا في شبكة 2G/3G Circuit-Switched (CS)، يجب على TAS الحصول على MSRN (رقم التجوال لمحطة الهاتف المحمول) لتوجيه المكالمة الواردة إلى موقع المشترك الحالي. يشرح هذا القسم كيفية عمل استرجاع MSRN والتوجيه.

ما هو MSRN؟

MSRN (رقم التجوال لمحطة الهاتف المحمول) هو رقم توجيه مؤقت يتم تعيينه بواسطة VLR (سجل موقع الزائر) للشبكة التي يتم زيارتها لتوجيه المكالمات إلى مشترك متجول. يعمل كرقم وجهة مؤقت يشير إلى موقع المشترك الحالي في شبكة CS.

تدفق استرجاع MSRN

تسترجع TAS بيانات MSRN عبر بروتوكول SS7 MAP (جزء تطبيق الهاتف المحمول) باستخدام عملية من خطوتين:

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

الخطوة 1: إرسال معلومات التوجيه (SRI)

تستعلم TAS من HLR عبر SS7 MAP للحصول على معلومات التوجيه للمشترك المدعو.

سيناريوهات استجابة SRI:

  1. MSRN مباشرة في SRI - مشترك متجول مع MSRN متاح بالفعل

    • تتضمن الاستجابة: MSISDN، GMSC، IMSI، و MSRN
    • مثال على MSRN: 61412345678 (تنسيق رقم الهاتف المحمول الأسترالي)
  2. IMSI + رقم VLR - مشترك مسجل في شبكة CS (يتطلب PRN)

    • تتضمن الاستجابة: MSISDN، GMSC، IMSI، ورقم MSC/VLR
    • تشير إلى أن المشترك في شبكة CS ولكن يجب طلب MSRN
  3. IMSI فقط (بدون VLR) - المشترك ليس في شبكة CS (فقط IMS/PS)

    • تتضمن الاستجابة: MSISDN، GMSC، IMSI
    • تشير إلى أن المشترك مسجل في IMS/4G فقط، وليس في شبكة CS
  4. إعادة التوجيه نشطة - تعيد SRI معلومات إعادة التوجيه

    • تتضمن الاستجابة سبب إعادة التوجيه (غير مشروط، مشغول، عدم الرد، غير قابل للوصول)
    • تتضمن الاستجابة الرقم المحول.

الخطوة 2: توفير رقم التجوال (PRN) - إذا لزم الأمر

إذا أعادت SRI IMSI + VLR ولكن لا يوجد MSRN، ترسل TAS طلب PRN إلى VLR للحصول على MSRN.

تخصص VLR رقم MSRN مؤقت من مجموعة أرقامها وتعيده إلى TAS. يكون هذا MSRN صالحًا فقط لهذه الإعدادة المحددة للمكالمة.

مثال على استجابة PRN: MSRN 61412345678

متغير خطة الاتصال: msrn

بمجرد استرجاع MSRN عبر SS7 MAP، يتم تعيينه كمتغير خطة الاتصال الذي يمكن استخدامه في خطة الاتصال MT.

المتغير: ${msrn}

  • النوع: سلسلة (رقم E.164 بدون +)
  • مثال: "61412345678" (تنسيق الهاتف المحمول الأسترالي)
  • الاستخدام: توجيه المكالمات إلى المشتركين المتجولين CS
  • يتم تعيينه بواسطة: عملية استرجاع بيانات HLR أثناء معالجة مكالمة MT

التوجيه إلى MSRN في mt_dialplan.xml

يتم استخدام متغير MSRN في قالب خطة الاتصال MT لتوجيه المكالمات إلى المشتركين المتجولين.

منطق خطة الاتصال:

  1. التحقق من MSRN: تتحقق الامتداد مما إذا كان المتغير msrn مضبوطًا (يحتوي على أرقام)
  2. تعيين معلمات المهلة:
    • مهلة التقدم: 10 ثوانٍ لاستلام الوسائط المبكرة
    • مهلة إجابة الجسر: تستخدم مؤقت عدم الرد المكون للمشترك
  3. الجسر إلى MSRN: توجيه المكالمة إلى MSRN عبر بوابة CS
    • يستخدم ignore_early_media=ring_ready للحصول على رنين متسق
    • تفضيل الترميز: AMR (محمول)، PCMA/PCMU (خط ثابت)
    • بوابة: sofia/gateway/CS_Gateway/+${msrn}
  4. الاحتياط عند الفشل: إذا فشل الجسر، يتم توجيه المكالمة إلى وجهة إعادة التوجيه.

مثال على مقتطف خطة الاتصال:

<extension name="Route-to-CS-MSRN" continue="false">
<condition field="msrn" expression="^(\d+)$">
<!-- تكوين المهلات -->
<action application="set" data="progress_timeout=10" />
<action application="set" data="bridge_answer_timeout=${no_reply_timer}" />

<!-- الجسر إلى MSRN عبر بوابة CS -->
<action application="bridge"
data="{ignore_early_media=ring_ready,absolute_codec_string='AMR,PCMA,PCMU',continue_on_fail=true,originate_retries=1,originate_timeout=60}sofia/gateway/CS_Gateway/+${msrn}" />

<!-- الاحتياط إلى البريد الصوتي/إعادة التوجيه -->
<action application="bridge"
data="sofia/internal/${call_forward_not_reachable_destination}@${local_ip_v4}" />
</condition>
</extension>

النقاط الرئيسية

  1. MSRN مؤقت - صالح فقط لمدة إعداد المكالمة
  2. شبكة CS فقط - يتم استخدام MSRN للتجوال في 2G/3G، وليس للتجوال VoLTE/IMS
  3. الأولوية في تدفق MT - يتم التحقق من MSRN قبل التوجيه القياسي IMS
  4. الاحتياط لإعادة التوجيه - إذا فشل جسر MSRN، يتم توجيه المكالمة إلى وجهة إعادة التوجيه
  5. تجاوز HLR - MSRN من HLR له أولوية على بيانات المشترك Sh

التكوين

يجب تمكين تكامل SS7 MAP في تكوين TAS:

الإعدادات المطلوبة:

  • enabled: تعيين إلى true لتمكين استعلامات SS7 MAP
  • http_map_server_url_base: عنوان URL لبوابة SS7 MAP الخاصة بك (مثل "http://10.1.1.100:5001")
  • gmsc: رقم بوابة MSC لطلبات SRI/PRN (مثل "61400000000")
  • timeout_ms: مهلة الاستعلام بالمللي ثانية (الافتراضي: 5000 مللي ثانية)

انظر وثائق SS7 MAP للحصول على تفاصيل التكوين الكاملة.


استخدام بيانات إعادة توجيه المكالمات

تحدد إعدادات إعادة توجيه المكالمات كيفية توجيه المكالمات عندما تكون الوجهة الرئيسية غير متاحة. تسترجع TAS بيانات إعادة التوجيه من مصدرين: واجهة Sh (HSS) و SS7 MAP (HLR)، مع أخذ بيانات HLR في الاعتبار.

أنواع إعادة التوجيه

يدعم النظام أربعة أنواع من إعادة توجيه المكالمات:

نوع إعادة التوجيهالمتغيرعند التفعيل
إعادة توجيه المكالمات غير المشروطة (CFU)call_forward_all_destinationدائمًا ما يعيد توجيه جميع المكالمات على الفور
إعادة توجيه المكالمات المشغولة (CFB)call_forward_not_reachable_destinationخط المشترك مشغول
إعادة توجيه المكالمات عند عدم الرد (CFNRy)call_forward_not_reachable_destinationلا يرد المشترك خلال المهلة
إعادة توجيه المكالمات غير القابلة للوصول (CFNRc)call_forward_not_reachable_destinationالمشترك غير قابل للوصول/غير متصل

مصادر البيانات

1. واجهة Sh (HSS)

التكوين الثابت المخزن في ملف تعريف المشترك HSS.

تسترجع TAS إعدادات إعادة التوجيه من HSS عبر واجهة Sh أثناء معالجة المكالمات. هذه هي الإعدادات المخصصة/الافتراضية للمشترك.

مثال على البيانات المسترجعة:

  • call_forward_all_destination: وجهة CFU (مثل "61412345678")
  • call_forward_not_reachable_destination: وجهة CFB/CFNRy/CFNRc (مثل "61487654321")
  • no_reply_timer: الثواني ��بل تشغيل CFNRy (مثل "20")

2. SS7 MAP (HLR)

البيانات في الوقت الحقيقي من HLR، والتي قد تختلف عن HSS إذا قام المشترك بتغيير الإعدادات عبر رموز USSD/MMI (مثل الاتصال برموز *21*).

تستعلم TAS من HLR عبر SS7 MAP أثناء إعداد المكالمة للحصول على إعدادات إعادة التوجيه الحالية/النشطة.

تتضمن استجابة HLR لإعادة التوجيه:

  • forwarded_to_number: رقم الوجهة لإعادة التوجيه (مثل "61412345678")
  • reason: نوع إعادة التوجيه (غير مشروط، مشغول، عدم الرد، غير قابل للوصول)
  • flags الإخطار: ما إذا كان يجب إخطار الطرف المتصل، والطرف المحول، إلخ.

الربط إلى متغيرات خطة الاتصال:

  • إذا كان السبب غير مشروط → يتم تعيين call_forward_all_destination
  • إذا كان السبب مشغول، عدم الرد، أو غير قابل للوصول → يتم تعيين call_forward_not_reachable_destination

أولوية دمج المتغيرات

تتجاوز بيانات HLR بيانات Sh عندما تكون كلاهما موجودة.

تسترجع TAS بيانات المشترك من كلا المصدرين أثناء معالجة مكالمة MT:

  1. أولاً، تسترجع التكوين الثابت من HSS عبر واجهة Sh
  2. ثم، تستعلم HLR عبر SS7 MAP للحصول على الإعدادات في الوقت الحقيقي
  3. تدمج البيانات، مع أخذ قيم HLR في الاعتبار على قيم Sh

يضمن ذلك أن التغييرات الأخيرة للمشترك (عبر رموز USSD) تُحترم حتى إذا لم يتم تحديث HSS بعد.

متغيرات خطة الاتصال

المتاحة في مكالمات MT:

المتغيرالنوعالمثالالوصف
call_forward_all_destinationسلسلة"61412345678"رقم وجهة CFU
call_forward_not_reachable_destinationسلسلة"61487654321"رقم وجهة CFB/CFNRy/CFNRc
no_reply_timerسلسلة"20"المهلة بالثواني لـ CFNRy

القيم الافتراضية:

  • إذا لم يتم تكوينها: "none" (سلسلة)
  • تحقق من الوجود: استخدم regex ^(?!none$).* لمطابقة أي قيمة باستثناء "none"

إعادة التوجيه في mt_dialplan.xml

المثال 1: إعا��ة توجيه غير مشروط (CFU)

توجه جميع المكالمات الواردة على الفور إلى وجهة إعادة التوجيه. عادةً ما تكون وجهة إعادة التوجيه رقمًا خارج الشبكة، لذا تستخدم بوابة خارجية.

البوابة المستخدمة: sofia/gateway/ExternalSIPGateway (بوابة PSTN/الاتصال الخاصة بك)

مثال القالب:

<extension name="Check-Call-Forward-All">
<condition field="${call_forward_all_destination}" expression="^(?!none$).*">
<action application="log" data="INFO Call Forward All Set to redirect to ${call_forward_all_destination}" />

<!-- تعيين رأس History-Info لإعادة توجيه المكالمات -->
<action application="set" data="sip_h_History-Info=<sip:${destination_number}@${ims_domain}>;index=1.1" />

<!-- وضع علامة على call-id للإشارة إلى نوع إعادة التوجيه -->
<action application="set" data="sip_call_id=${sip_call_id};CALL_FORWARD_UNCONDITIONAL" />

<!-- الجسر إلى وجهة إعادة التوجيه خارج الشبكة -->
<action application="bridge"
data="{absolute_codec_string='AMR-WB,AMR,PCMA,PCMU',originate_retries=1,originate_timeout=60}sofia/gateway/ExternalSIPGateway/+${call_forward_all_destination}" />
</condition>
</extension>

النقاط الرئيسية:

  • تستخدم بوابة خارجية لأن إعادة التوجيه عادةً إلى رقم خارج الشبكة
  • تضع علامة على call-id بـ ;CALL_FORWARD_UNCONDITIONAL للتتبع
  • تعيين رأس History-Info لتحديد الرقم المدعو الأصلي
  • مثال: المشترك 61412345678 لديه CFU إلى 61487654321 - يتم إعادة توجيه جميع المكالمات على الفور

المثال 2: إعادة توجيه عدم الرد/غير القابل للوصول

تستخدم كاحتياط عندما يفشل الجسر إلى الوجهة الرئيسية (لا يرد المشترك، مشغول، أو غير قابل للوصول).

مثال مقتطف خطة الاتصال:

<!-- بعد فشل الجسر إلى MSRN أو IMS... -->
<action application="log" data="INFO Failed to bridge Call - Routing to Call Forward No-Answer Destination" />

<!-- تعيين History-Info للإشارة إلى إعادة التوجيه -->
<action application="set" data="sip_h_History-Info=<sip:${destination_number}@${ims_domain}>;index=1.1" />

<!-- توجيه إلى وجهة إعادة التوجيه -->
<action application="bridge"
data="{absolute_codec_string='AMR,PCMU,PCMA',originate_timeout=65}sofia/gateway/ExternalSIPGateway/${call_forward_not_reachable_destination}" />

سيناريو المثال:

  • المشترك 61412345678 لديه CFNRy إلى رقم البريد الصوتي 61487654321
  • تحاول المكالمة الوصول إلى المشترك
  • لا يوجد رد بعد 20 ثانية (no_reply_timer)
  • يتم إعادة توجيه المكالمة إلى 61487654321 مع رأس History-Info الذي يحافظ على الوجهة الأصلية

رأس History-Info

يستخدم رأس SIP History-Info لتتبع إعادة توجيه المكالمات:

<action application="set" data="sip_h_History-Info=<sip:${destination_number}@${ims_domain}>;index=1.1" />

الغرض:

  • يشير إلى أن المكالمة كانت أصلًا لـ ${destination_number}
  • يسمح للأنظمة السفلية بتحديد المكالمات المعاد توجيهها
  • يستخدمه أنظمة البريد الصوتي لإيداع البريد في صندوق البريد الصحيح

مثال في توجيه البريد الصوتي:

<extension name="Voicemail Route" continue="false">
<condition field="${tas_destination_number}" expression="^(555121|555122)$">
<!-- استخراج رقم الهاتف من History Info -->
<action application="set" data="history_info_value=${sip_i_history_info}"/>
<action application="log" data="DEBUG Called Voicemail Deposit Number for ${history_info_value}" />

<!-- إيداع البريد الصوتي للطرف المدعو الأصلي، وليس رقم خدمة البريد الصوتي -->
<action application="voicemail" data="default default ${history_info_value}"/>
</condition>
</extension>

كيف يعمل:

  • أرقام خدمات البريد الصوتي: 555121، 555122 (رموز قصيرة عامة)
  • عندما يتم إعادة توجيه المكالمة إلى البريد الصوتي، يحتوي History-Info على الوجهة الأصلية
  • يستخرج نظام البريد الصوتي الرقم الأصلي من رأس History-Info
  • يتم إيداع البريد الصوتي في صندوق البريد للطرف المدعو الأصلي، وليس رقم خدمة البريد الصوتي

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

  1. تحقق دائمًا من "none" - استخدم regex ^(?!none$).* لتجنب التوجيه إلى السلسلة "none" حرفيًا
  2. تعيين History-Info - قم دائمًا بتعيينه عند إعادة التوجيه لتتبع الم��المات بشكل صحيح
  3. استخدم continue_on_fail - السماح بالاحتياط لإعادة التوجيه إذا فشل المسار الرئيسي
  4. تعديل تنسيق CLI - تنسيق البادئة الوطنية مقابل الدولية (انظر قسم هوية المتصل)
  5. اختبر حلقات إعادة التوجيه - تأكد من أن وجهات إعادة التوجيه لا تخلق حلقات توجيه

إدارة هوية المتصل (CLI)

تدير TAS عرض وتنسيق هوية المتصل (CLI) طوال تدفق المكالمات، مع التعامل مع طلبات الخصوصية، وتطبيع البادئات، ومتطلبات التنسيق الخاصة بالشبكة.

متغيرات CLI

المتغيرات الأساسية CLI في خطط الاتصال:

المتغيرالاستخدامالمثال
msisdnرقم المشترك (بدون +)"61412345678"
effective_caller_id_numberرقم المتصل المعروض"+61412345678" أو "anonymous"
effective_caller_id_nameاسم المتصل المعروض"+61412345678" أو "anonymous"
origination_caller_id_numberCLI للجزء الخارجي"+61412345678"
caller_id_numberمتغير CLI القياسي في FreeSWITCH"+61412345678"
sip_from_userجزء المستخدم من رأس SIP From"0412345678" أو "+61412345678"
cli_withheldعلامة الخصوصية"true" أو "false" (سلسلة)
origination_privacyإعداد الخصوصية"hide_number"

خصوصية CLI (محجوبة/مجهولة)

طرق الكشف

تكتشف TAS طلبات خصوصية CLI من خلال ثلاث طرق:

1. بادئة محجوبة في الرقم المدعو

يتصل المشترك ببادئة قبل رقم الوجهة لحجب هوية المتصل.

البادئات الشائعة:

  • *67 - المعيار في أمريكا الشمالية
  • #31# - المعيار الأوروبي/GSM
  • 1831 - تنسيق بديل

تتحقق TAS مما إذا كان الرقم المدعو يبدأ بأي بادئة CLI محجوبة تم تكوينها. إذا تم الكشف عنها، يتم تعيين المتغير cli_withheld إلى "true".

مثال: يتصل المشترك بـ *67555 1234 - يتم الكشف عن بادئة *67 وإزالتها، وتستمر المكالمة إلى 5551234 مع حجب CLI.

2. مجهول في رأس From

تقوم معدات المستخدم (UE) بتعيين اسم المتصل إلى "مجهول" في رأس SIP From.

تتحقق TAS من حقل Caller-Orig-Caller-ID-Name (غير حساسة لحالة الأحرف) عن السلسلة "مجهول". إذا تم العثور عليها، يتم تعيين cli_withheld إلى "true".

3. رؤوس الخصوصية SIP

قد يقوم S-CSCF بتعيين رؤوس Privacy: id في INVITE SIP، والتي يتم احترامها بواسطة خطة الاتصال.

تنفيذ خطة الاتصال

تتحقق خطة الاتصال من المتغير cli_withheld وتعين جميع المتغيرات المتعلقة بـ CLI وفقًا لذلك.

مثال مقتطف خطة الاتصال:

<extension name="Manage-Caller-ID" continue="true">
<condition field="${cli_withheld}" expression="true">
<!-- تم حجب CLI - تعيين إلى مجهول -->
<action application="log" data="DEBUG CLI withheld detected" />
<action application="set" data="effective_caller_id_name=anonymous" />
<action application="set" data="effective_caller_id_number=anonymous" />
<action application="set" data="origination_caller_id_number=anonymous" />
<action application="set" data="origination_privacy=hide_number" />

<!-- CLI ليس محجوبًا - استخدم MSISDN العادي -->
<anti-action application="log" data="DEBUG CLI is normal (not withheld)" />
<anti-action application="set" data="effective_caller_id_number=${msisdn}" />
</condition>
</extension>

ملاحظة: تستخدم هذه الامتداد continue="true" حتى تستمر معالجة المكالمات إلى امتدادات التوجيه حتى بعد تعيين CLI.

تنسيق CLI: الوطنية مقابل الدولية

قد تتطلب الوجهات المختلفة تنسيقات CLI مختلفة اعتمادًا على متطلبات الشبكة الخاصة بك.

مثال: التنسيق الوطني

بالنسبة للمكالمات الوطنية داخل بلدك، قد تحتاج إلى تقديم CLI بدون رمز البلد.

مثال مقتطف خطة الاتصال (شبكة الهاتف المحمول الأسترالية):

<extension name="Outgoing-Call-CLI-National" continue="true">
<condition field="${msisdn}" expression="^61(.*)$">
<action application="log" data="Setting source CLI to $1 for national" />
<action application="set" data="effective_caller_id_number=$1"/> <!-- 0412345678 -->
<action application="set" data="effective_caller_id_name=$1"/>
<action application="set" data="sip_from_user=$1"/>
<action application="set" data="sip_cid_type=pid"/>
</condition>
</extension>

كيف يعمل:

  • تطابق regex ^61(.*)$ كل شيء بعد رمز البلد 61
  • الإدخال: msisdn="61412345678" → الإخراج: $1="412345678" أو "0412345678"
  • يقدم CLI في التنسيق الوطني للمكالمات المحلية

مثال: التنسيق الدولي

بالنسبة للمكالمات الدولية، قدم CLI في تنسيق E.164 الكامل مع بادئة +.

مثال مقتطف خطة الاتصال:

<extension name="Outgoing-Call-CLI-International" continue="true">
<condition field="${tas_destination_number}" expression="^61(.*)$">
<action application="log" data="Call is to national" />

<!-- تقوم الإجراءات المضادة بالتنفيذ عندما لا تكون الوجهة وطنية -->
<anti-action application="log" data="Setting source CLI for international" />
<anti-action application="set" data="effective_caller_id_number=+${msisdn}"/> <!-- +61412345678 -->
<anti-action application="set" data="effective_caller_id_name=+${msisdn}"/>
<anti-action application="set" data="sip_from_user=+${msisdn}"/>
<anti-action application="set" data="sip_cid_type=pid"/>
</condition>
</extension>

كيف يعمل:

  • تتحقق الشرط مما إذا كانت الوج��ة تبدأ برمز وطني (مثل 61 لأستراليا)
  • يتم تنفيذ <anti-action> عندما لا تتطابق الشرط (مكالمة دولية)
  • تضيف بادئة + لتنسيق E.164 الكامل للمكالمات الدولية

تنسيق CLI لإعادة التوجيه

عند التوجيه إلى وجهات إعادة التوجيه، قد تحتاج إلى تعديل تنسيق CLI اعتمادًا على ما إذا كنت تعيد التوجيه إلى أرقام على الشبكة أو خارجها.

مثال: تعديل بادئة CLI لوجهة إعادة التوجيه

<!-- تعديل تنسيق CLI إذا لزم الأمر لوجهة إعادة التوجيه -->
<action application="set" data="effective_caller_id_number=${effective_caller_id_number:3}"/>
<action application="set" data="effective_caller_id_name=${effective_caller_id_name:3}"/>

قص السلسلة: ${variable:N} يزيل أول N أحرف

  • الإدخال: effective_caller_id_number="+61412345678" مع :3 → الإخراج: "412345678"
  • الإدخال: effective_caller_id_number="+61412345678" مع :1 → الإخراج: "61412345678"

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

  • إزالة + لإعادة التوجيه الوطنية: استخدم :1
  • إزالة رمز البلد للتنسيق المحلي: استخدم الإزاحة المناسبة (:3 لـ +61، :2 لـ +1، إلخ.)

SIP P-Asserted-Identity (PAI)

تتحكم إعدادات sip_cid_type=pid في كيفية تقديم هوية المتصل:

<action application="set" data="sip_cid_type=pid"/>

التأثير:

  • تعيين رأس SIP P-Asserted-Identity مع معلومات المتصل
  • يستخدم لتأكيد هوية المتصل في الشبكات الموثوقة
  • معيار لشبكات IMS

إزالة الرؤوس الملكية

لمنع تسرب معلومات الشبكة الداخلية، يجب على خطط الاتصال إزالة الرؤوس الملكية أو الداخلية قبل توجيه المكالمات خارج الشبكة.

مثال: تنظيف الرؤوس قبل التوجيه الخارجي

<action application="set" data="sip_copy_multipart=false"/>
<action application="set" data="sip_copy_custom_headers=false"/>
<action application="unset" data="sip_h_P-Internal-Correlation-ID"/>
<action application="unset" data="sip_h_P-Access-Network-Info"/>
<!-- إضافة المزيد من الرؤوس الخاصة بالبائع أو الداخلية حسب الحاجة -->

الغرض:

  • يمنع تسرب بيانات التوجيه الداخلية إلى الشبكات الخارجية
  • يزيل الرؤوس الملكية الخاصة بالبائع
  • أفضل ممارسة للخصوصية والأمان
  • يقلل من حجم رسالة SIP

الرؤوس الشائعة التي يجب إزالتها:

  • معرفات التتبع/التCorrelation الداخلية
  • معلومات الشبكة الوصول (قد تكشف عن بنية الشبكة)
  • رؤوس P خاصة بالبائع
  • رؤوس التطبيقات المخصصة المخصصة للاستخدام الداخلي فقط

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

  1. استخدم continue="true" لامتدادات CLI - يسمح بقواعد تنسيق CLI متعددة
  2. تعيين sip_cid_type=pid - مطلوب للامتثال لشبكة IMS
  3. اختبر حجب CLI - تحقق من أن بادئات *67 و #31# تعمل
  4. تنسيق حسب الوجهة - تنسيق CLI الوطني مقابل الدولي
  5. إزالة الرؤوس الملكية - منع تسرب البيانات الداخلية
  6. التعامل مع المجهول بشكل جيد - يجب أن تعمل كل من العرض والتوجيه مع CLI المجهول

الجسر إلى البوابات

تقوم TAS بربط المكالمات بالبوابات الخارجية (نواة IMS، PSTN، إلخ) باستخدام تطبيق bridge في FreeSWITCH مع معلمات مُعدة بعناية لتفاوض الترميز، ومعالجة المهلات، ومنطق إعادة المحاولة.

تكوين البوابة

تُكون البوابات كـ SIP trunks للأنظمة الخارجية. تستخدم TAS واجهة SIP واحدة لجميع حركة المرور، مع تعريف بوابات مختلفة لوجهات مختلفة.

مثال على تكوين البوابة:

<gateway name="CS_Gateway">
<param name="proxy" value="10.1.1.100:5060"/>
<param name="register" value="false"/>
<param name="caller-id-in-from" value="true"/>
<param name="extension-in-contact" value="true"/>
</gateway>

انظر دليل التكوين للحصول على إعدادات البوابة الكاملة.

بناء الجسر

يتم ربط المكالمات بالبوابات باستخدام بناء الجملة التالي:

البناء الأساسي:

<action application="bridge" data="sofia/gateway/GATEWAY_NAME/DESTINATION_NUMBER" />

مع المعلمات:

<action application="bridge" data="{param1=value1,param2=value2}sofia/gateway/GATEWAY_NAME/DESTINATION_NUMBER" />

حيث GATEWAY_NAME هو اسم البوابة المعرفة في تكوينك (مثل IMS_Core، PSTN_Primary، International_Gateway).

معلمات الجسر

اختيار الترميز

absolute_codec_string - قائمة الترميز ذات الأولوية للتفاوض:

<action application="bridge" data="{absolute_codec_string='AMR,PCMA,PCMU'}sofia/gateway/IMS_Gateway/+${msisdn}" />

ترتيب أولوية الترميز:

  1. AMR (معدل متعدد متكيف) - مُحسّن للهاتف المحمول، مفضل للاتصالات الخلوية
  2. PCMA (G.711 a-law) - معيار خط ثابت في أوروبا/الدولية
  3. PCMU (G.711 μ-law) - معيار خط ثابت في أمريكا الشمالية

استخدام القالب: priv/templates/mt_dialplan.xml:80، mo_dialplan.xml:124، mo_dialplan.xml:202

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

originate_timeout - الحد الأقصى للثواني للانتظار للإجابة (يشمل الرنين):

<action application="set" data="originate_timeout=60"/>
<action application="bridge" data="{originate_timeout=60}sofia/gateway/CS_Gateway/+${msisdn}" />

progress_timeout - الثواني للانتظار لاستلام 180/183 (وسائط مبكرة/رنين):

<action application="set" data="progress_timeout=10" />

bridge_answer_timeout - الثواني للانتظار لاستلام 200 OK بعد بدء الرنين:

<action application="set" data="bridge_answer_timeout=${no_reply_timer}" />

leg_progress_timeout - مهلة التقدم لكل ساق:

<action application="set" data="leg_progress_timeout=${no_reply_timer}" />

مثال القالب: priv/templates/mt_dialplan.xml:73-76

<action application="set" data="progress_timeout=10" />
<!-- كم من الوقت ننتظر بين INVITE و 200 OK (بما في ذلك الرنين) -->
<action application="set" data="bridge_answer_timeout=${no_reply_timer}" />
<action application="set" data="leg_progress_timeout=${no_reply_timer}" />

المتغير: ${no_reply_timer} يأتي من بيانات المشترك (عادةً 20-30 ثانية)

معالجة إعادة المحاولة والفشل

originate_retries - عدد محاولات إعادة الاتصال:

<action application="bridge" data="{originate_retries=1}sofia/gateway/CS_Gateway/+${msisdn}" />

continue_on_fail - متابعة تنفيذ خطة الاتصال بعد فشل الجسر:

<action application="set" data="continue_on_fail=true" />
<action application="bridge" data="{continue_on_fail=true}sofia/gateway/CS_Gateway/+${msisdn}" />
<!-- الإجراءات التالية تنفذ إذا فشل الجسر -->
<action application="log" data="INFO Bridge failed - routing to voicemail" />

hangup_after_bridge - إنهاء A-leg عندما ينتهي B-leg:

<action application="set" data="hangup_after_bridge=true"/>

معالجة الوسائط المبكرة

ignore_early_media - التحكم في سلوك الوسائط المبكرة:

<action application="set" data="ignore_early_media=ring_ready" />
<action application="bridge" data="{ignore_early_media=ring_ready}sofia/gateway/CS_Gateway/+${msisdn}" />

الخيارات:

  • ring_ready - توليد رنين محلي، تجاهل الوسائط المبكرة البعيدة
  • true - تجاهل الوسائط المبكرة تمامًا
  • false (افتراضي) - تمرير الوسائط المبكرة (الإعلانات، النغمات)

لماذا تستخدم ring_ready؟ - يمنع المتصل من سماع الإعلانات أو النغمات الشبكية من الشبكة البعيدة

مثال القالب: priv/templates/mt_dialplan.xml:78-79

<action application="set" data="ignore_early_media=ring_ready" />
<action application="bridge" data="{ignore_early_media=ring_ready,...}sofia/gateway/CS_Gateway/+${msrn}" />

معالجة المتصلين على الشبكة مقابل خارج الشبكة:

<extension name="Route-to-IMS-Sub-Early-Media" continue="true">
<condition field="${on_net_caller}" expression="true">
<!-- المتصل على الشبكة - استخدم ring_ready -->
<action application="log" data="INFO On-net caller ${effective_caller_id_number} - using ignore_early_media=ring_ready"/>
<action application="set" data="ignore_early_media=ring_ready"/>

<!-- المتصل خارج الشبكة - توفير رنين فوري -->
<anti-action application="log" data="INFO Off-net caller ${effective_caller_id_number} - setting instant ringback"/>
<anti-action application="set" data="instant_ringback=true"/>
<anti-action application="set" data="ringback=${fr-ring}"/>
<anti-action application="set" data="transfer_ringback=${fr-ring}"/>
</condition>
</extension>

ملاحظة: يتم تعيين المتغير ${on_net_caller} بناءً على خطة ترقيم المشترك في شبكتك. يمكنك أيضًا استخدام أنماط regex لمطابقة نطاقات أرقامك المحددة.

معلمات هوية المتصل

sip_cid_type=pid - استخدم P-Asserted-Identity لهوية المتصل:

<action application="set" data="sip_cid_type=pid" />
<action application="bridge" data="{sip_cid_type=pid}sofia/gateway/CS_Gateway/+${msisdn}" />

أنماط الجسر الشائعة

النمط 1: التوجيه إلى مشترك IMS عبر نطاق IMS

توجيه مكالمة MT إلى مشترك IMS عن طريق إرسالها إلى نطاق IMS (سيتولى S-CSCF الحل والتوجيه).

مثال القالب:

<extension name="Route-to-IMS-Sub" continue="false">
<condition field="destination_number" expression="^(.*)$">
<action application="set" data="continue_on_fail=true" />
<action application="set" data="hangup_after_bridge=true"/>
<action application="set" data="progress_timeout=10" />

<!-- كم من الوقت ننتظر بين INVITE و 200 OK (بما في ذلك الرنين) -->
<action application="set" data="bridge_answer_timeout=${no_reply_timer}" />
<action application="set" data="leg_progress_timeout=${no_reply_timer}" />

<!-- إرسال المكالمة إلى نطاق IMS (S-CSCF يحل) -->
<action application="set" data="ignore_early_media=ring_ready" />
<action application="set" data="sip_cid_type=pid" />

<action application="bridge"
data="{absolute_codec_string='AMR-WB,AMR,PCMA,PCMU',ignore_early_media=ring_ready,continue_on_fail=true,sip_cid_type=pid,originate_retries=1,originate_timeout=${no_reply_timer},sip_invite_call_id=${sip_call_id}}sofia/internal/${msisdn}@${ims_domain}" />

<!-- الاحتياط إلى إعادة التوجيه إذا فشل الجسر -->
<action application="log" data="INFO Failed to bridge Call - Routing to Call Forward No-Answer Destination" />
<action application="set" data="sip_h_History-Info=<sip:${destination_number}@${ims_domain}>;index=1.1" />
<action application="set" data="sip_h_Diversion=<sip:${destination_number:2}@${ims_domain}>;reason=busy" />

<!-- التوجيه إلى بوابة خارجية لإعادة التوجيه -->
<action application="bridge"
data="{absolute_codec_string='AMR-WB,AMR,PCMU,PCMA',originate_timeout=65,originate_retries=0}sofia/gateway/ExternalSIPGateway/${call_forward_not_reachable_destination}" />
</condition>
</extension>

النقاط الرئيسية:

  • يتم التوجيه إلى ${msisdn}@${ims_domain} (مثل 5551234567@ims.mnc380.mcc313.3gppnetwork.org)
  • تتولى نواة IMS (S-CSCF/I-CSCF) التوجيه النهائي إلى المشترك
  • ignore_early_media=ring_ready يوفر رنينًا متسقًا
  • عند الفشل، يستخدم بوابة خارجية لإعادة توجيه المكالمات
  • يحدد رؤوس History-Info و Diversion لتتبع إعادة التوجيه

النمط 2: التوجيه إلى MSRN (التجوال CS)

توجيه إلى مشترك متجول عبر شبكة CS:

القالب: priv/templates/mt_dialplan.xml:67-80

<extension name="Route-to-CS-MSRN" continue="false">
<condition field="msrn" expression="^(\d+)$">
<action application="set" data="continue_on_fail=true" />
<action application="set" data="hangup_after_bridge=true"/>
<action application="set" data="progress_timeout=10" />
<action application="set" data="bridge_answer_timeout=${no_reply_timer}" />
<action application="set" data="leg_progress_timeout=${no_reply_timer}" />

<!-- إرسال المكالمة إلى MSRN عبر بوابة -->
<action application="set" data="ignore_early_media=ring_ready" />
<action application="set" data="sip_cid_type=pid" />
<action application="bridge"
data="{ignore_early_media=ring_ready,absolute_codec_string='AMR,PCMA,PCMU',continue_on_fail=true,sip_cid_type=pid,originate_retries=1,originate_timeout=60}sofia/gateway/CS_Gateway/+${msrn}" />
</condition>
</extension>

النمط 3: التوجيه على الشبكة (MO إلى MT عبر TAS)

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

لماذا يتطلب هذا النمط:

بدون التوجيه مرة أخرى إلى TAS، ستتجاوز المكالمات على الشبكة معالجة MT تمامًا، مما يعني:

  • لن يتم احترام إعدادات إعادة توجيه المكالمات
  • لا يوجد بريد صوتي عند عدم الرد
  • سيفشل توجيه MSRN للمشتركين المتجولين
  • سيفتقد منطق خدمة المشترك

من خلال توجيه المكالمة المنشأة من الهاتف المحمول مرة أخرى إلى TAS كمكالمة جديدة منتهية، يحصل الطرف المتصل على معالجة كاملة للخدمة.

مثال على القالب:

<extension name="On-Net-Route">
<condition field="${on_net_status}" expression="true">
<action application="log" data="DEBUG On-Net MO call - Routing back into TAS" />

<!-- تنظيف الرؤوس للتوجيه الداخلي -->
<action application="set" data="sip_copy_multipart=false"/>
<action application="set" data="sip_h_Request-Disposition=no-fork"/>

<!-- التوجيه مرة أخرى إلى TAS (تصبح مكالمة MT) -->
<action application="bridge"
data="{absolute_codec_string='AMR