Configuration du Plan de Numérotation & Routage des Appels
📖 Retour à la Documentation Principale
Guide complet sur la configuration du plan de numérotation XML, la logique de routage des appels et les variables de plan de numérotation.
Documentation Connexe
Documentation Principale
- 📋 README Principal - Aperçu et démarrage rapide
- 🔧 Guide de Configuration - Configuration des trunks SIP et des passerelles
- 🔧 Guide d'Opérations - Tests de plan de numérotation et visualiseur de modèles
Flux de Traitement des Appels
- 🔢 Traduction de Numéros - Normalisation E.164 (se produit avant le plan de numérotation)
- 👥 Interface Sh - Données d'abonnés récupérées pour les variables de plan de numérotation
- 📡 SS7 MAP - Données MSRN/HLR dans les variables de plan de numérotation
- 💳 Chargement en Ligne - Autorisation OCS dans le flux d'appel
Mise en Œuvre des Services
- ⚙️ Services Supplémentaires - Mise en œuvre du transfert d'appels, blocage CLI dans le plan de numérotation
- 📞 Messagerie Vocale - Routage de la messagerie vocale et dépôt/récupération dans le plan de numérotation
- 🔊 Prompts TTS - Utilisation des prompts dans le plan de numérotation avec lecture
Surveillance
- 📊 Métriques du Plan de Numérotation - Métriques spécifiques au plan de numérotation et surveillance
- 📈 Référence des Métriques - Métriques générales du système
Configuration du Plan de Numérotation / Routage des Appels
Le TAS utilise des plans de numérotation XML avec un schéma compatible avec les formats de plan de numérotation XML standard des télécommunications, avec des variables peuplées par le TAS. Cela signifie que vous pouvez définir votre propre plan de numérotation selon vos besoins, avec la logique commerciale pour l'opérateur, mais avoir toutes les données requises telles que les données du référentiel, les informations de routage SS7, les identités IMPI / IMPU, la normalisation du plan de numérotation, etc., etc.
Les plans de numérotation sont écrits dans priv/templates et prennent la forme :
mo_dialplan.xml- Plan de Numérotation des Appels Émismo_emergency_dialplan.xml- Plan de Numérotation des Appels d'Urgence Émismt_dialplan.xml- Plan de Numérotation des Appels Reçus
Vous pouvez visualiser les Plans de Numérotation depuis l'interface Web.
Diverses variables sont définies par le TAS avant que le XML ne soit analysé, ces variables sont imprimées dans le journal au début de l'appel avec leurs valeurs actuelles et sont très utiles lors de la définition de votre propre logique d'appel.
Fondamentaux du Plan de Numérotation XML FreeSWITCH
OmniTAS utilise le même système de routage d'appels XML que le projet FreeSWITCH, ce qui permet un routage d'appels flexible pour répondre à vos besoins.
Cette section explique les concepts de base et fournit des exemples pratiques.
Structure de Base
Un plan de numérotation se compose d'extensions contenant des conditions et des actions :
<extension name="description-de-ce-que-cela-fait">
<condition field="${variable}" expression="regex-pattern">
<action application="app_name" data="parameters"/>
<anti-action application="app_name" data="parameters"/>
</condition>
</extension>
Extensions sont évaluées dans l'ordre de haut en bas. Lorsqu'une condition correspond, ses actions s'exécutent.
Conditions et Correspondance Regex
Les conditions testent les variables par rapport aux expressions régulières. Si le regex correspond, les actions s'exécutent ; sinon, les anti-actions s'exécutent.
Correspondance exacte de base :
<condition field="${tas_destination_number}" expression="2222">
<action application="log" data="INFO Appel du numéro d'accès à la messagerie vocale"/>
</condition>
Correspondance de plusieurs numéros :
<condition field="${tas_destination_number}" expression="^(2222|3444|3445)$">
<action application="log" data="INFO Appel d'un service spécial"/>
</condition>
Correspondance de motif avec groupes de capture :
<condition field="${tas_destination_number}" expression="^1(8[0-9]{9})$">
<!-- Correspond à 1 suivi de 8 et 9 autres chiffres -->
<action application="log" data="INFO Correspondance numéro sans frais : $1"/>
<action application="bridge" data="sofia/gateway/trunk/${tas_destination_number}"/>
</condition>
Correspondance de préfixe :
<condition field="${tas_destination_number}" expression="^00">
<!-- Correspond à tout numéro commençant par 00 (international) -->
<action application="log" data="INFO Appel international détecté"/>
</condition>
Correspondance de plage :
<condition field="${msisdn}" expression="^5551241[0-9]{4}$">
<!-- Correspond à 55512410000 à 55512419999 -->
<action application="log" data="INFO Abonné dans la plage"/>
</condition>
Actions vs Anti-Actions
Actions s'exécutent lorsqu'une condition correspond. Anti-actions s'exécutent lorsqu'une condition NE correspond PAS.
<condition field="${cli_withheld}" expression="true">
<!-- S'exécute si le CLI est masqué -->
<action application="set" data="effective_caller_id_number=anonymous"/>
<action application="set" data="origination_privacy=hide_number"/>
<!-- S'exécute si le CLI N'EST PAS masqué -->
<anti-action application="log" data="DEBUG Le CLI est normal"/>
<anti-action application="set" data="effective_caller_id_number=${msisdn}"/>
</condition>
L'attribut continue="true"
Par défaut, lorsque la condition d'une extension correspond, le plan de numérotation cesse de traiter d'autres extensions. L'attribut continue="true" permet de continuer le traitement vers l'extension suivante.
Sans continue (comportement par défaut) :
<extension name="First-Check">
<condition field="${tas_destination_number}" expression="^(.*)$">
<action application="log" data="INFO Traitement de l'appel"/>
</condition>
</extension>
<extension name="Never-Reached">
<!-- Cela NE S'EXÉCUTE JAMAIS car l'extension précédente a correspondu -->
<condition field="${tas_destination_number}" expression="^(.*)$">
<action application="log" data="INFO Cela ne s'imprimera pas"/>
</condition>
</extension>
Avec 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 Solde insuffisant"/>
<action application="hangup" data="${hangup_case}"/>
</condition>
</extension>
<extension name="Route-Call">
<!-- Cette extension est toujours évaluée -->
<condition field="${tas_destination_number}" expression="^(.*)$">
<action application="bridge" data="sofia/gateway/trunk/${tas_destination_number}"/>
</condition>
</extension>
Utilisez continue="true" pour :
- Extensions de journalisation/debugging
- Définir des variables qui s'appliquent à plusieurs scénarios
- Vérifications de validation qui ne routent pas l'appel
Applications Courantes
contrôle des appels
answer - Répondre à l'appel (envoyer 200 OK)
<action application="answer" data=""/>
hangup - Terminer l'appel avec une cause spécifique
<action application="hangup" data="NORMAL_CLEARING"/>
<action application="hangup" data="USER_BUSY"/>
<action application="hangup" data="NO_ANSWER"/>
bridge - Connecter l'appel à une autre destination
<!-- Pont vers une passerelle externe -->
<action application="bridge" data="sofia/gateway/trunk/+12125551234"/>
<!-- Pont vers une extension interne avec préférences de codec -->
<action application="bridge" data="{absolute_codec_string=AMR-WB,AMR,PCMA}sofia/internal/sip:user@domain.com"/>
<!-- Pont avec délai d'attente -->
<action application="bridge" data="{originate_timeout=30}sofia/gateway/trunk/${tas_destination_number}"/>
Variables et Données de Canal
set - Définir une variable de canal
<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 - Supprimer une variable de canal
<action application="unset" data="sip_h_P-Asserted-Identity"/>
export - Définir une variable et l'exporter vers B-leg (appel ponté)
<action application="export" data="sip_h_X-Account-Code=ABC123"/>
Médias et Prompts
playback - Jouer un fichier audio
<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 - Faire une pause pendant un certain nombre de millisecondes
<action application="sleep" data="1000"/> <!-- Pause de 1 seconde -->
echo - Écho audio au correspondant (test)
<action application="echo" data=""/>
conference - Placer l'appel dans une conférence
<action application="conference" data="room-${destination_number}@wideband"/>
messagerie vocale
voicemail - Accéder au système de messagerie vocale
<!-- Laisser un message vocal pour la boîte aux lettres -->
<action application="voicemail" data="default default ${msisdn}"/>
<!-- Vérifier la messagerie vocale avec authentification -->
<action application="voicemail" data="check auth default default ${msisdn}"/>
Journalisation et Débogage
log - Écrire dans le fichier journal
<action application="log" data="INFO Traitement de l'appel de ${msisdn}"/>
<action application="log" data="DEBUG Destination : ${tas_destination_number}"/>
<action application="log" data="ERROR L'appel a échoué avec la cause : ${hangup_cause}"/>
info - Déverser toutes les variables de canal dans le journal
<action application="info" data=""/>
Applications Diverses
say - Lecture de numéro en texte-à-parole
<action application="say" data="en number iterated ${tas_destination_number}"/>
send_dtmf - Envoyer des tonalités DTMF
<action application="send_dtmf" data="1234#"/>
Exemples Pratiques
Routage des Services d'Urgence :
<extension name="Emergency-911">
<condition field="${tas_destination_number}" expression="^(911|112)$">
<action application="log" data="ALERT Appel d'urgence de ${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>
Routage Conditionnel Basé sur le Solde :
<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>
Routage On-Net vs Off-Net :
<extension name="Route-Decision">
<condition field="${on_net_status}" expression="true">
<!-- On-net : routage via TAS -->
<action application="log" data="INFO Routage vers abonné on-net"/>
<action application="bridge" data="sofia/internal/+${tas_destination_number}@10.179.3.60"/>
<anti-action application="log" data="INFO Routage off-net"/>
<anti-action application="bridge" data="sofia/gateway/trunk/+${tas_destination_number}"/>
</condition>
</extension>
Gestion de l'ID de l'Appelant Anonyme :
<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>
Messagerie Vocale en Cas de Non Réponse :
<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"/>
<!-- Si le pont échoue, aller à la messagerie vocale -->
<action application="log" data="INFO Le pont a échoué, routage vers la messagerie vocale"/>
<action application="answer" data=""/>
<action application="voicemail" data="default default ${tas_destination_number}"/>
</condition>
</extension>
Routage par Plage de Numéros :
<extension name="Local-Numbers">
<condition field="${tas_destination_number}" expression="^([2-9]\d{2})$">
<!-- Extensions locales à 3 chiffres 200-999 -->
<action application="log" data="INFO Extension locale : $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}$">
<!-- Numéros mobiles nationaux -->
<action application="log" data="INFO Appel mobile national"/>
<action application="bridge" data="sofia/gateway/national_trunk/${tas_destination_number}"/>
</condition>
</extension>
<extension name="International">
<condition field="${tas_destination_number}" expression="^00\d+$">
<!-- Appels internationaux commençant par 00 -->
<action application="log" data="INFO Appel international"/>
<action application="bridge" data="sofia/gateway/intl_trunk/${tas_destination_number}"/>
</condition>
</extension>
Documentation Supplémentaire
Pour des détails complets sur chaque application :
- Documentation du Plan de Numérotation FreeSWITCH : https://freeswitch.org/confluence/display/FREESWITCH/Dialplan
- FreeSWITCH mod_dptools : https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools (référence complète des applications)
- Référence des Expressions Régulières : https://freeswitch.org/confluence/display/FREESWITCH/Regular+Expression
- Variables de Canal : https://freeswitch.org/confluence/display/FREESWITCH/Channel+Variables
Le wiki FreeSWITCH contient une documentation détaillée pour chaque application de plan de numérotation, y compris tous les paramètres et cas d'utilisation.
Variables de Plan de Numérotation
Variables définies par le TAS dans la logique du plan de numérotation XML :
Variables Courantes (Tous Types d'Appels)
Configuration Initiale :
destination_number- numéro de destination traduittas_destination_number- numéro de destination traduiteffective_caller_id_number- numéro source traduit
Appels d'Urgence
hangup_case- "none"ims_private_identity- identité utilisateur privéeims_public_identity- identité utilisateur publiquemsisdn- numéro d'abonné (dépouillé de +)imsi- IMSI de l'identité privéeims_domain- domaine de l'identité privée
Appels MT (Terminés Mobiles)
ims_private_identity- identité utilisateur privéeims_public_identity- identité utilisateur publiquemsisdn- numéro d'abonné (dépouillé de +)imsi- IMSI de l'identité privéeims_domain- domaine de l'identité privéecall_forward_all_destination- destination CFA ou "none"call_forward_not_reachable_destination- destination CFNRcscscf_address- adresse S-CSCF ou "none"scscf_domain- domaine S-CSCF ou "none"no_reply_timer- délai d'attente pour aucune réponsehangup_case- "none" ou "UNALLOCATED_NUMBER"msrn- MSRN de PRN (si en itinérance) ou numéro transféré de SRI (si le transfert d'appel est actif)tas_destination_number- Remplacement de la destination de routage (défini sur MSRN ou numéro transféré)
Appels MO (Émis Mobiles)
hangup_case- "none", "OUTGOING_CALL_BARRED", ou "UNALLOCATED_NUMBER"ims_private_identity- identité utilisateur privéeims_public_identity- identité utilisateur publiquemsisdn- numéro d'abonné (dépouillé de +)imsi- IMSI de l'identité privéeims_domain- domaine de l'identité privéeallocated_time- temps alloué par l'OCS (si le chargement en ligne est activé)cli_withheld- chaîne "true" ou "false"on_net_status- chaîne "true" ou "false" (si la destination est on-net)msrn- MSRN pour les abonnés en itinérance (si applicable)tas_destination_number- Remplacement de MSRN (si en itinérance)
Appels d'Urgence
Les appels d'urgence sont contrôlés par le paramètre de configuration emergency_call_codes et sont automatiquement détectés lors de l'autorisation des appels.
Configuration
Configurez les codes d'appel d'urgence dans votre fichier config/runtime.exs :
config :tas,
emergency_call_codes: ["911", "912", "913", "sos"],
# ... autre config
Détails de Configuration :
emergency_call_codes(obligatoire) : Liste de chaînes représentant les numéros de services d'urgence- Ces codes sont vérifiés en plus des URN d'urgence SIP (par exemple,
<urn:service:sos>) - Le système effectue une comparaison de correspondance exacte par rapport au numéro de destination
- Les codes courants incluent : "911" (US), "112" (UE), "000" (AU), "999" (UK), "sos"
Comment Fonctionne la Détection d'Urgence
La fonction Tas.Dialplan.Authorization.is_emergency_call?/2 vérifie deux conditions :
- URN de Service d'Urgence SIP URI : Détecte
<urn:service:sos>ou toute URI contenant "service:sos" - Correspondance du Numéro de Destination : Compare
Caller-Destination-Numberavec lesemergency_call_codesconfigurés
Si l'une ou l'autre condition est vraie, l'appel est classé comme d'urgence.
Référence de Code : Voir lib/dialplan/authorization.ex
Flux de Traitement
Détails du Flux d'Appel :
- L'appel arrive au TAS
- Le module d'autorisation vérifie la destination par rapport aux motifs d'urgence
- Si une urgence est détectée :
- Le type d'appel est défini sur
:emergency - Le modèle
mo_emergency_dialplan.xmlest utilisé - L'autorisation OCS est généralement contournée
- L'appel est routé vers la passerelle PSAP
- Le type d'appel est défini sur
- Les métriques sont enregistrées avec l'étiquette
call_type: emergency
Routage du Plan de Numérotation
Définissez le routage pour les appels d'urgence dans priv/templates/mo_emergency_dialplan.xml. Ce modèle détermine comment les appels sont routés vers votre passerelle PSAP (Point d'Appel de Sécurité Publique) ou URI SIP selon les exigences de votre marché.
Exemple de plan de numérotation d'urgence :
<extension name="Emergency-SOS">
<condition field="${destination_number}" expression="^(911|912|913|sos)$">
<action application="log" data="ALERT Appel d'urgence de ${msisdn}"/>
<action application="answer" data=""/>
<action application="bridge" data="sofia/gateway/psap_gw/${destination_number}"/>
</condition>
</extension>
Meilleures Pratiques
- Incluez toujours "sos" dans votre liste de codes d'urgence pour la compatibilité avec l'URN SIP
- Incluez tous les numéros d'urgence locaux pour votre juridiction (par exemple, 911, 112, 000, 999)
- Testez régulièrement le routage d'urgence en utilisant le Simulateur d'Appels
- Contournez l'OCS pour les appels d'urgence afin de garantir qu'ils se connectent toujours (configuré via
skipped_regex) - Configurez la passerelle PSAP avec haute disponibilité et redondance
- Surveillez les métriques des appels d'urgence pour garantir la fiabilité du système
Appel Mobile Émis vers un Abonné Mobile Terminé On-Net
Vous pouvez routage de votre plan de numérotation vers votre plan de numérotation via quelque chose comme ceci :
<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" />
Où 10.179.3.60 est l'IP du TAS (Il routage l'appel de retour vers le TAS) - Assurez-vous simplement que l'IP du TAS est dans votre liste allowed_sbc_source_ips.