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

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

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

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

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

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

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

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

المراقبة


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

تستخدم TAS خطط اتصال XML مع مخطط متوافق مع تنسيقات خطة الاتصال 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="نمط التعبير النمطي">
<action application="اسم التطبيق" data="المعلمات"/>
<anti-action application="اسم التطبيق" data="ا��معلمات"/>
</condition>
</extension>

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

الشروط ومطابقة التعبيرات النمطية

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

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

<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>

توجيه On-Net مقابل Off-Net:

<extension name="Route-Decision">
<condition field="${on_net_status}" expression="true">
<!-- On-net: توجيه مرة أخرى عبر 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 مع توفر عالي واحتياطي
  • مراقبة مقاييس المكالمات الطارئة لضمان موثوقية النظام

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

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

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

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

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

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

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

التنفيذ

تتحقق خطة الاتصال من ما إذا كانت الوجهة على الشبكة (مقدمة من قبل TAS)، وإذا كان الأمر كذلك، فإنها توجّه المكالمة مرة أخرى إلى TAS نفسه. تستقبل TAS هذه كمكالمة MT جديدة وتعالجها من خلال قالب 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',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 يتجاوز Sh - 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: نوع إعادة التوجيه (غير مشروط، مشغول، عدم الرد، غير قابل للوصول)
  • notification 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" (سلسلة)
  • تحقق من الوجود: استخدم التعبير النمطي ^(?!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" - استخدم التعبير النمطي ^(?!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>

كيف يعمل:

  • التعبير النمطي ^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

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

  • معرفات التتبع/التنسيق الداخلية
  • معلومات الشبكة الوصول (قد تكشف عن تخطيط الشبكة)
  • رؤوس 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 إلى الأنظمة الخارجية. تستخدم 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} بناءً على خطة ترقيم المشترك في شبكتك. يمكنك أيضًا استخدام التعبيرات النمطية لمطابقة نطاقات الأرقام الخاصة بك.

معلمات معرف المتصل

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 للمشتركين المتجولين
  • سيتجاوز منطق خدمة المشترك
  • سيكون تتبع المكالمات وCDRs غير مكتمل

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

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

<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>

كيف يعمل:

  1. تصل مكالمة MO: يتصل المشترك A بالمشترك B (كلاهما على الشبكة)
  2. تحقق من حالة الشبكة: تحدد TAS أن الوجهة على الشبكة عبر متغير ${on_net_status}
  3. توجيه إلى TAS: جسر إلى sofia/internal/${tas_destination_number}@${sip_local_network_addr}
    • يستخدم عنوان IP الخاص بـ TAS كوجهة
    • يحافظ على call-id الأصلي للتتبع
  4. معالجة MT: تستقبل TAS المكالمة كمكالمة MT جديدة وتقوم بمعالجتها من خلال mt_dialplan.xml
    • تتحقق من إعدادات إعادة التوجيه (CFU، CFB، CFNRy، CFNRc)
    • تستفسر عن MSRN إذا كان المشترك متجولًا
    • توجيه إلى نطاق IMS أو إعادة التوجيه حسب الحاجة
  5. خدمة كاملة: يحصل المشترك الوجهة على معالجة MT كاملة

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

  • توجيه إلى ${sip_local_network_addr} (عنوان IP لـ TAS، مثل 10.179.3.60)
  • تتم معالجة المكالمة مرة أخرى كمكالمة MT إلى المشترك الوجهة
  • يحافظ على call-id مع معلمة sip_invite_call_id للتتبع من النهاية إلى النهاية
  • يمكّن جميع ميزات MT: إعادة توجيه المكالمات، البريد الصوتي، توجيه MSRN، خدمات المشترك
  • تتبع حالة المكالمات وتوليد CDR بشكل صحيح لكلا الطرفين
  • تحصل المكالمات على الشبكة على نفس معالجة الخدمة مثل المكالمات الخارجية MT
  • يجب أن يكون IP لـ TAS في قائمة allowed_sbc_source_ips الخاصة بك

المتغير: يتم تعيين ${on_net_status} إلى "true" عندما يكون رقم الوجهة مقدماً بواسطة TAS. يتم تحديد ذلك أثناء تفويض مكالمات MO من خلال التحقق مما إذا كان MSISDN الوجهة موجودًا في قاعدة بيانات المشترك الخاصة بك.

النمط 4: توجيه خارج الشبكة (MO إلى PSTN/خارجي)

توجيه مكالمة MO إلى PSTN خارجي، أو ترابط، أو شبكة خارجية أخرى عبر بوابة.

البوابة المستخدمة: sofia/gateway/ExternalSIPGateway أو sofia/gateway/PSTN_Gateway

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

<extension name="Outgoing-Call-Off-Net">
<condition field="${tas_destination_number}" expression="^(.*)$">
<action application="log" data="Sending call off-net" />

<!-- تنظيف الرؤوس قبل الت