Astérisque Dialplan Askozia 6. Appels sortants

L'article parlera du PBX gratuit Askozia version 6 . Lors du développement d'un central téléphonique, l'une des premières tâches a été l'organisation des appels sortants.

Comment c'était


Dans l'ancienne version d'Askozia, des modèles de «plan de numérotation» standard étaient utilisés.

  • X! - tous les numéros de téléphone
  • XXX - nombres à trois chiffres
  • .! - absolument tous les numéros de téléphone

Un exemple de contexte peut être décrit schématiquement:

[outgoing] exten => _XXXXXX!,1,NoOp(Start outgoing calling...) same => n,Dial… 

Cette approche ne nous a pas semblé suffisamment flexible. Il n'y a aucun moyen de décrire la règle suivante:

  • Le nombre commence à 79
  • Il suit soit 35 ou 26
  • Le reste du numéro est composé de 7 chiffres

Sous la coupe, notre approche et le résultat du développement sont décrits.

Implémentation actuelle


Nous avons décidé d'implémenter cette fonctionnalité différemment, en utilisant REGEX .

Exemple de modèle:

 79(25|26)[1-9]{7} 

  • (25 | 26) est 25 OU 26
  • [0-9] - un chiffre de 0 à 9, occurrence à partir de la 1ère fois ou plus
  • {7} - nombre d'occurrences du caractère précédent

La syntaxe de la fonction REGEX est:

 REGEX("regular expression" string) Return '1' on regular expression match or '0' otherwise 

Un exemple d'utilisation dans Askozia 6:

 [outgoing] exten => _X!,1,NoOp(Start outgoing calling...) same => n,Ringing() same => n,ExecIf($["${REGEX("^[0-9]{6}$" ${EXTEN})}" == "1"]?Gosub(SIP-PR-1-out,${EXTEN},1)) same => n,ExecIf($["${REGEX("^(7|8)[0-9]{10}$" ${EXTEN})}" == "1"]?Gosub(SIP-PR-2-out,${EXTEN},1)) same => n,Hangup() 

Pour les appels sortants, un point d'entrée est organisé - le contexte « sortant », la fonction « ExecIf » y est appelé:

 ExecIf($["${REGEX("^[0-9]{6}$" ${EXTEN})}" == "1"] 

Si le numéro de téléphone spécifié dans la variable « $ {EXTEN} » correspond au modèle, alors l'appel est acheminé vers le sous-contexte à l'aide de la fonction « Gosub ».

Si l'appel n'a pas été interrompu dans le sous-contexte , alors l'ensemble se déroulera selon la règle appropriée suivante.

De cette façon, nous avons résolu le problème avec les lignes à canal unique. Si la ligne est occupée, l'appel passe par le suivant jusqu'à ce qu'il soit répondu.

Exemples de contexte:

 [SIP-PR-1] exten => _X!,1,ExecIf($["${number}x" == "x"]?Hangup()) same => n,Dial(SIP/PR-1/${EXTEN},600,TeK)) same => n,ExecIf($["${DIALSTATUS}" = "ANSWER"]?Hangup()) same => n,return [SIP-PR-2] exten => _X!,1,ExecIf($["${number}x" == "x"]?Hangup()) same => n,Dial(SIP/PR-2/${EXTEN},600,TeK)) same => n,ExecIf($["${DIALSTATUS}" = "ANSWER"]?Hangup()) same => n,return 

Obligatoire dans « sub » - le contexte vérifie « DIALSTATUS ». Si l'appel est répondu, après la conversation, le canal sera interrompu à l'aide de la fonction « Raccrocher () ». Si cela n'est pas fait, à la fin de l'appel par le client, une nouvelle numérotation du numéro de client peut se produire.

Une subtilité importante, lorsque vous utilisez " Gosub " ou " Goto ", nous ne modifions pas intentionnellement $ {EXTEN} . Même si vous devez modifier le numéro de téléphone (ajouter / supprimer le préfixe).

Le fait est que lorsque EXTEN est modifié, Asterisk modifiera la valeur de la variable CDR (dst) , ce qui conduira à un résultat mal prévu dans la table d'historique des appels CDR. Je pense qu'il est important dans l'histoire de conserver le numéro composé par un employé.

Soyez prudent lorsque vous décrivez une expression régulière. Utilisez les caractères « ^ », le début de la ligne et « $ » - la fin de la ligne, sinon vous pourriez obtenir des résultats inattendus.

Par exemple, le motif « [0-9] {6} » correspondra à tous les nombres où il y a 6 chiffres ou plus. Le modèle « ^ [0-9] {6} $ » correspond uniquement aux nombres à 6 chiffres.

Résumé


Nous avons obtenu un sous-système flexible pour décrire le routage sortant vers le PBX.
La liste des règles s'affiche comme suit:

image

Un exemple de carte «Règles» spécifique:

image

Source: https://habr.com/ru/post/fr445536/


All Articles