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

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

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

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

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

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

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

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

  • ⚙️ الخدمات التكميلية - تنفيذ إعادة توجيه المكالمات، حظر 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="regex-pattern">
<action application="app_name" data="parameters"/>
<anti-action application="app_name" data="parameters"/>
</condition>
</extension>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

خاصية continue="true"

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

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

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

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

مع continue="true":

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

say - قراءة الأرقام بتحويل النص إلى كلام

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

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

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

أمثلة عملية

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

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

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

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

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

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

معالجة معرف المتصل المجهول:

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

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

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

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

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

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

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

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

الوثائق الإضافية

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

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

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

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

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

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

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

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

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

المكالمات MT (مكالمات مستلمة على الهاتف المحمول)

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

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

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

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

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

التكوين

قم بتكوين رموز الاتصال الطارئ في ملف config/runtime.exs الخاص بك:

config :tas,
emergency_call_codes: ["911", "912", "913", "sos"],
# ... تكوينات أخرى

تفاصيل التكوين:

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

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

تتحقق دالة Tas.Dialplan.Authorization.is_emergency_call?/2 من شرطين:

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

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

مرجع الكود: انظر lib/dialplan/authorization.ex

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

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

  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 مع توفر عالي وازدواجية
  • راقب مقاييس المكالمات الطارئة لضمان موثوقية النظام

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

يمكنك توجيه من خطة الاتصال الخاصة بك إلى خطة الاتصال الخاصة بك عبر شيء مثل هذا:

<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}@10.179.3.60" />

حيث أن 10.179.3.60 هو عنوان IP الخاص بـ TAS (إنه يقوم بتوجيه المكالمة مرة أخرى إلى TAS) - فقط تأكد من أن عنوان IP الخاص بـ TAS موجود في قائمة allowed_sbc_source_ips الخاصة بك.