تكوين خطة الاتصال وتوجيه المكالمات
دليل شامل لتكوين خطة الاتصال XML، منطق توجيه المكالمات، ومتغيرات خطة الاتصال.
الوثائق ذات الصلة
الوثائق الأساسية
- 📋 الملف التعريفي الرئيسي - نظرة عامة وبدء سريع
- 🔧 دليل التكوين - تكوين وصلة SIP وبوابة
- 🔧 دليل العمليات - اختبار خطة الاتصال وعرض القوالب
تدفق معالجة المكالمات
- 🔢 ترجمة الأرقام - تطبيع E.164 (يحدث قبل خطة الاتصال)
- 👥 واجهة Sh - استرجاع بيانات المشترك لمتغيرات خطة الاتصال
- 📡 خريطة SS7 - بيانات MSRN/HLR في متغيرات خطة الاتصال
- 💳 الشحن عبر الإنترنت - تفويض OCS في تدفق المكالمات
تنفيذ الخدمات
- ⚙️ الخدمات التكميلية - تنفيذ إعادة توجيه المكالمات، حظر CLI في خطة الاتصال
- 📞 البريد الصوتي - توجيه البريد الصوتي والإيداع/الاسترجاع في خطة الاتصال
- 🔊 تنبيهات TTS - استخدام التنبيهات في خطة الاتصال مع التشغيل
المراقبة
- 📊 مقاييس خطة الاتصال - مقاييس محددة لخطة الاتصال والمراقبة
- 📈 مرجع المقاييس - مقاييس النظام العامة
تكوين خطة الاتصال / توجيه المكالمات
تستخدم 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: https://freeswitch.org/confluence/display/FREESWITCH/Dialplan
- FreeSWITCH mod_dptools: https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools (مرجع التطبيق الكامل)
- مرجع التعبير النمطي: https://freeswitch.org/confluence/display/FREESWITCH/Regular+Expression
- متغيرات القناة: https://freeswitch.org/confluence/display/FREESWITCH/Channel+Variables
تحتوي ويكي 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- وجهة CFNRcscscf_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"]
كيف يعمل اكتشاف الطوارئ
يتحقق النظام من حالتين:
- URN خدمة الطوارئ SIP URI: يكشف
<urn:service:sos>أو أي URI يحتوي على "service:sos" - مطابقة رقم الوجهة: يقارن
Caller-Destination-Numberضدemergency_call_codesالمكونة
إذا كانت أي حالة صحيحة، يتم تصنيف المكالمة على أنها طارئة.
تدفق المعالجة
تفاصيل تدفق المكالمات:
- تصل المكالمة إلى TAS
- يتحقق وحدة التفويض من الوجهة مقابل أنماط الطوارئ
- إذا تم اكتشاف الطوارئ:
- يتم تعيين نوع المكالمة إلى
:emergency - يتم استخدام قالب
mo_emergency_dialplan.xml - يتم عادةً تجاوز تفويض OCS
- يتم توجيه المكالمة إلى بوابة PSAP
- يتم تعيين نوع المكالمة إلى
- يتم تسجيل المقاييس مع علامة
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:
-
MSRN مباشرة في SRI - مشترك متجول مع MSRN متاح بالفعل
- تتضمن الاستجابة: MSISDN، GMSC، IMSI، وMSRN
- مثال MSRN:
61412345678(تنسيق رقم الهاتف المحمول الأسترالي)
-
IMSI + رقم VLR - مشترك مسجل في شبكة CS (يتطلب PRN)
- تتضمن الاستجابة: MSISDN، GMSC، IMSI، ورقم MSC/VLR
- يشير إلى أن المشترك في شبكة CS ولكن يجب طلب MSRN
-
IMSI فقط (بدون VLR) - مشترك غير موجود في شبكة CS (IMS/PS فقط)
- تتضمن الاستجابة: MSISDN، GMSC، IMSI
- يشير إلى أن المشترك مسجل في IMS/4G فقط، وليس في شبكة CS
-
إعادة توجيه نشطة - تعيد 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 لتوجيه المكالمات إلى المشتركين المتجولين.
منطق خطة الاتصال:
- تحقق من MSRN: يتحقق الامتداد مما إذا كان متغير
msrnتم تعيينه (يحتوي على أرقام) - تعيين معلمات المهلة:
- مهلة التقدم: 10 ثوانٍ لتلقي الوسائط المبكرة
- مهلة إجابة الجسر: تستخدم مؤقت عدم الرد المكون للمشترك
- الجسر إلى MSRN: توجيه المكالمة إلى MSRN عبر بوابة CS
- يستخدم
ignore_early_media=ring_readyللحصول على رنين متسق - تفضيل الترميز: AMR (محمول)، PCMA/PCMU (خط ثابت)
- بوابة:
sofia/gateway/CS_Gateway/+${msrn}
- يستخدم
- الاحتياطي عند الفشل: إذا فشل الجسر، يتم توجيهه إلى وجهة إعادة التوجيه.
مثال على مقتطف خطة الاتصال:
<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>
النقاط الرئيسية
- MSRN مؤقت - صالح فقط لمدة إعداد المكالمة
- شبكة CS فقط - يتم استخدام MSRN لتجوال 2G/3G، وليس لتجوال VoLTE/IMS
- الأولوية في تدفق MT - يحدث تحقق MSRN قبل التوجيه القياسي IMS
- الاحتياطي إلى إعادة التوجيه - إذا فشل جسر MSRN، يتم توجيه المكالمة إلى وجهة إعادة التوجيه
- 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:
- أولاً، يسترجع التكوين الثابت من HSS عبر واجهة Sh
- ثم، يستفسر من HLR عبر SS7 MAP للحصول على الإعدادات الزمنية
- يدمج البيانات، مع أخذ قيم 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
- يتم إيداع البريد الصوتي في صندوق بريد الطرف المدعو الأصلي، وليس رقم خدمة البريد الصوتي
أفضل الممارسات
- تحقق دائمًا من "none" - استخدم التعبير النمطي
^(?!none$).*لتجنب التوجيه إلى السلسلة الحرفية "none" - تعيين History-Info - يجب تعيينه دائمًا عند إعادة التوجيه لتتبع المكالمات بشكل صحيح
- استخدم continue_on_fail - للسماح بالاحتياطي إلى إعادة التوجيه إذا فشل المسار الرئيسي
- تعديل تنسيق CLI - تنسيق البادئة الوطنية مقابل الدولية (انظر قسم معرف المتصل)
- اختبر حلقات إعادة التوجيه - تأكد من أن وجهات إعادة التوجيه لا تخلق حلقات توجيه
إدارة معرف المتصل (CLI)
تدير TAS عرض وتنسيق عرض معرف المتصل (CLI) طوال تدفق المكالمات، مع التعامل مع طلبات الخصوصية، تطبيع البادئات، ومتطلبات التنسيق الخاصة بالشبكة.
متغيرات CLI
المتغيرات الأساسية في CLI في خطط الاتصال:
| المتغير | الاستخدام | المثال |
|---|---|---|
msisdn | رقم المشترك (بدون +) | "61412345678" |
effective_caller_id_number | رقم المتصل المعروض | "+61412345678" أو "anonymous" |
effective_caller_id_name | اسم المتصل المعروض | "+61412345678" أو "anonymous" |
origination_caller_id_number | CLI للجزء الخارجي | "+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#- معيار أوروبي/GSM1831- تنسيق بديل
تتحقق 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 الخاصة بالبائع
- رؤوس التطبيقات المخصصة المخصصة للاستخدام الداخلي فقط
أفضل الممارسات
- استخدم
continue="true"لامتدادات CLI - يسمح بوجود قواعد تنسيق CLI متعددة - تعيين
sip_cid_type=pid- مطلوب للامتثال لشبكة IMS - اختبر حجب CLI - تحقق من أن بادئات
*67و#31#تعمل - تنسيق حسب الوجهة - تنسيق CLI الوطني مقابل الدولي
- إزالة الرؤوس الخاصة - منع تسرب البيانات الداخلية
- التعامل مع المجهول بشكل سلس - يجب أن تعمل كل من العرض والتوجيه مع 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}" />
ترتيب أولوية الترميز:
- AMR (معدل متعدد متكيف) - مُحسن للهاتف المحمول، مفضل للاتصالات الخلوية
- PCMA (G.711 a-law) - معيار الخط الثابت في أوروبا/الدولي
- 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>
كيف يعمل:
- تصل مكالمة MO: يتصل المشترك A بالمشترك B (كلاهما على الشبكة)
- تحقق من حالة الشبكة: تحدد TAS أن الوجهة على الشبكة عبر متغير
${on_net_status} - توجيه إلى TAS: جسر إلى
sofia/internal/${tas_destination_number}@${sip_local_network_addr}- يستخدم عنوان IP الخاص بـ TAS كوجهة
- يحافظ على call-id الأصلي للتتبع
- معالجة MT: تستقبل TAS المكالمة كمكالمة MT جديدة وتقوم بمعالجتها من خلال
mt_dialplan.xml- تتحقق من إعدادات إعادة التوجيه (CFU، CFB، CFNRy، CFNRc)
- تستفسر عن MSRN إذا كان المشترك متجولًا
- توجيه إلى نطاق IMS أو إعادة التوجيه حسب الحاجة
- خدمة كاملة: يحصل المشترك الوجهة على معالجة 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" />
<!-- تنظيف الرؤوس قبل الت