fastm3
26/09/2010, 10h14
Vous utilisez Elastix, trixbox, piaf, asterisk gui, asterisk now, alors vous utilisez en fait probablement freepbx.
Freepbx est un gui qui permet te couvrir une bonne partie des besoins standards. Mais Freepbx permet aussi pas mal de personnalisation, en fait il est pratiquement possible d'inserer tout dialplan comme avec une installation sans gui.
Ici, c'est l'usage des customs trunks que je vais decrire ou du moins un exemple. Il est nécessaire de connaitre un peu le dialplan d'asterisk et le principe des contextes pour que ce petit tuto vous soit utile.
Freepbx utilise les "outbounds routes", le principe est qu'on détermine si le numero composé "matche" un pattern, si c'est le cas, on compose le numéro par le ou les trunks successivement ( en cas d'erreur ) affectés à ce pattern.
Cela permets d'envoyer par exemple les numéros fixes vers un trunk ou les tarifs sont plus avantageux et les mobiles vers un autres.
Reste que cela n'est pas toujours suffisant pour faire du vrai LCR ( least cost routing ) par exemple. Un véritable AGI programmé dans le langage de cotre choix ( perl, php...) ou un bout de dialplan Asterisk sera plus efficace pour les cas complexes.
Prenons le cas ou vous avez 2 fournisseurs sip qui vous offre les communications nationales dans le cadre d'un abonnement, on desire partager l'emission dans ces 2 trunks alternativement pour repartir la charge sur les 2 trunks. Ca n'est pas possible uniquement avec le gui. Un agi serait plus puissant mais je vais indiquer ici la méthode avec un petit dialplan.
Etape pour réaliser cette répartition:
1- Créer vos trunks normalement.
Cela peut etre un trunk sip ou zap ( dahdi avec le mode compatibilité )
Par contre, on va noter le numéro d'identifiant interne à freepbx du trunk.
Lorsque vous editez le trunk, vous aurez une url du type :
http://mypbx/admin/config.php?display=trunks&extdisplay=OUT_2Ici le numero de trunk est le numero 2. On pourrais vérifier cela dans /etc/asterisk/extensions_additionnal.conf
Pour l'exercice, on va supposer que les numéros de trunks sont 1 et 2.
2- On va créer un trunk mais ici de type custom
Plutot que d'envoyer directement vers un trunk sip ou zap ou dahdi ou... , on va envoyer le numéro à composer vers notre propre bout de dialplan.
On va compléter les champs de la manière suivante.
Trunk description: ce que vous voulez
Dial Rules: 0X. ( par exemple pour les numeros nationaux )
Custom Dial String: local/$OUTNUM$@distribution-trunks
Valider et appliquer les changements.
3- Création du dialplan répartissant les appels entre le trunk 1 et 2 alternativement.
Dans extensions_custom.conf, ajouter le bout de dialplan suivant.
[distribution-trunks]
;trunks are number 1 and 2
exten => _0X..,1,Set(COUNT=${DB(test/count)})
;increment
exten => _0X.,n,SetVar(COUNT=$[${COUNT} + 1])
exten => _0X.,n,SetVar(COUNT=${IF($[ ${COUNT} = 3]?1:${COUNT})})
exten => _0X.,n,Set(DB(test/count)=${COUNT})
exten => _0X.,n,NoOp(Number dialed is ${EXTEN} by trunk pstn ${COUNT})
exten => _0X.,n,Macro(dialout-trunk,${COUNT},${EXTEN},,)
exten => _0X.,n,Macro(outisbusy,)Explication, on utilise un compteur sauvegardé à chaque appel pour récupérer la valeur précédente.
A la fin de ce bout de code, $COUNT contient 1 ou 2 alternativement. Il suffit ensuite d'appeler la macro dialout-trunk avec en paramètre le numéro trunk à utiliser en paramètre.
4- Création outbound routes
On crée une outbound route avec le pattern des numéros nationaux, le trunk choisi sera notre nouveau custom trunk.
Ainsi, en composant 2 fois de suite 0102030405, le trunk 1 sera utilisé la première fois et le trunk 2 lors du 2eme appel.
On peut en fait utiliser ce principe pour appliquer des règles plus contraignantes mais ce n'est pas le but de l'article ici. Je laisse cette possibilité au lecteur...
Fastm3.
Freepbx est un gui qui permet te couvrir une bonne partie des besoins standards. Mais Freepbx permet aussi pas mal de personnalisation, en fait il est pratiquement possible d'inserer tout dialplan comme avec une installation sans gui.
Ici, c'est l'usage des customs trunks que je vais decrire ou du moins un exemple. Il est nécessaire de connaitre un peu le dialplan d'asterisk et le principe des contextes pour que ce petit tuto vous soit utile.
Freepbx utilise les "outbounds routes", le principe est qu'on détermine si le numero composé "matche" un pattern, si c'est le cas, on compose le numéro par le ou les trunks successivement ( en cas d'erreur ) affectés à ce pattern.
Cela permets d'envoyer par exemple les numéros fixes vers un trunk ou les tarifs sont plus avantageux et les mobiles vers un autres.
Reste que cela n'est pas toujours suffisant pour faire du vrai LCR ( least cost routing ) par exemple. Un véritable AGI programmé dans le langage de cotre choix ( perl, php...) ou un bout de dialplan Asterisk sera plus efficace pour les cas complexes.
Prenons le cas ou vous avez 2 fournisseurs sip qui vous offre les communications nationales dans le cadre d'un abonnement, on desire partager l'emission dans ces 2 trunks alternativement pour repartir la charge sur les 2 trunks. Ca n'est pas possible uniquement avec le gui. Un agi serait plus puissant mais je vais indiquer ici la méthode avec un petit dialplan.
Etape pour réaliser cette répartition:
1- Créer vos trunks normalement.
Cela peut etre un trunk sip ou zap ( dahdi avec le mode compatibilité )
Par contre, on va noter le numéro d'identifiant interne à freepbx du trunk.
Lorsque vous editez le trunk, vous aurez une url du type :
http://mypbx/admin/config.php?display=trunks&extdisplay=OUT_2Ici le numero de trunk est le numero 2. On pourrais vérifier cela dans /etc/asterisk/extensions_additionnal.conf
Pour l'exercice, on va supposer que les numéros de trunks sont 1 et 2.
2- On va créer un trunk mais ici de type custom
Plutot que d'envoyer directement vers un trunk sip ou zap ou dahdi ou... , on va envoyer le numéro à composer vers notre propre bout de dialplan.
On va compléter les champs de la manière suivante.
Trunk description: ce que vous voulez
Dial Rules: 0X. ( par exemple pour les numeros nationaux )
Custom Dial String: local/$OUTNUM$@distribution-trunks
Valider et appliquer les changements.
3- Création du dialplan répartissant les appels entre le trunk 1 et 2 alternativement.
Dans extensions_custom.conf, ajouter le bout de dialplan suivant.
[distribution-trunks]
;trunks are number 1 and 2
exten => _0X..,1,Set(COUNT=${DB(test/count)})
;increment
exten => _0X.,n,SetVar(COUNT=$[${COUNT} + 1])
exten => _0X.,n,SetVar(COUNT=${IF($[ ${COUNT} = 3]?1:${COUNT})})
exten => _0X.,n,Set(DB(test/count)=${COUNT})
exten => _0X.,n,NoOp(Number dialed is ${EXTEN} by trunk pstn ${COUNT})
exten => _0X.,n,Macro(dialout-trunk,${COUNT},${EXTEN},,)
exten => _0X.,n,Macro(outisbusy,)Explication, on utilise un compteur sauvegardé à chaque appel pour récupérer la valeur précédente.
A la fin de ce bout de code, $COUNT contient 1 ou 2 alternativement. Il suffit ensuite d'appeler la macro dialout-trunk avec en paramètre le numéro trunk à utiliser en paramètre.
4- Création outbound routes
On crée une outbound route avec le pattern des numéros nationaux, le trunk choisi sera notre nouveau custom trunk.
Ainsi, en composant 2 fois de suite 0102030405, le trunk 1 sera utilisé la première fois et le trunk 2 lors du 2eme appel.
On peut en fait utiliser ce principe pour appliquer des règles plus contraignantes mais ce n'est pas le but de l'article ici. Je laisse cette possibilité au lecteur...
Fastm3.