Asterisk + la recomposition automatique (auto dial out)

dialout_image

Le but est donc de réessayer la recomposition automatique d’un poste interne ou externe occupé à intervalle régulier en mettant l’appelant en attente avec de la musique jusqu’à ce qu’il y ait réponse au poste externe en question.

Par exemple nous avons les clients SIP préconfigurés dans le sip.conf

# nano /etc/asterisk/sip.conf

[8001]

secret=passw0rd
type=friend
host=dynamic
callerid= »Alex Fergusson » <8001>
mailbox=8001@default
context= internal
disallow=all
allow=ulaw
allow=alaw
allow=g723

[8002]

secret=passw0rd
type=friend
host=dynamic
callerid= »Michael Cretu » <8002>
mailbox=8002@default
context= internal
disallow=all
allow=ulaw
allow=alaw
allow=g723

Pour effectuer des appelles nos clients utilisent le plan de numération « internal ».

Ce « context » nous permet d’enregistrer le dernier numéro composé dans la base de données d’Asterisk (AstDB).
Après le numéro composé serra traité dans le « context » from-internal :

nano /etc/asterisk/extensions.conf

[internal]

; sauvegarde de dernière numéro composé dans la base de données d’Asterisk

exten => _X.,1,Set(DB(LASTCALLED/${CALLERID(number)})=${EXTEN})

; puis l’envoyer en conexte ‘from-internal’ pour traiter
exten => _X.,2,Goto(from-internal,${EXTEN},1)

[from-internal]
exten => _8XXX,1,Dial(SIP/${EXTEN},30)
exten => _8XXX,2,Hangup()

exten => _0[1-9]XXXXXXXX,1,Dial(SIP/pstn/${EXTEN})
exten => _0[1-9]XXXXXXXX,n,Hangup()

Maintenait il faut créer une macro « autodial ».

Cette macro permet de créer le fichier « call » dans le dossier /var/spool/asterisk/outgoing/ pour effectuer la composition automatique.

[macro-autodial]

; vérification de la longueur du numéro interne (j’ai 4 chiffres)
exten => s,1,ExecIf($[« ${ARG1:0:1} » = « * » | ${LEN(${ARG2})} != 4 ]?Hangup)
; création du fichier call
exten => s,n,System(echo « Channel: Local/${ARG1}@from-internal » > /tmp/${ARG2}${UNIQUEID}.call)
exten => s,n,System(echo « MaxRetries: 10 » >> /tmp/${ARG2}${UNIQUEID}.call)
exten => s,n,System(echo « RetryTime: 20 » >> /tmp/${ARG2}${UNIQUEID}.call)
exten => s,n,System(echo « WaitTime: 40 » >> /tmp/${ARG2}${UNIQUEID}.call)
exten => s,n,System(echo « Callerid: ${ARG2} » >> /tmp/${ARG2}${UNIQUEID}.call)
; on choisi le « context » pour sonner
exten => s,n,System(echo « Context: from-internal » >> /tmp/${ARG2}${UNIQUEID}.call)
exten => s,n,System(echo « Extension: ${ARG2} » >> /tmp/${ARG2}${UNIQUEID}.call)
exten => s,n,System(echo « Priority: 1 » >> /tmp/${ARG2}${UNIQUEID}.call)
; on déplace le fichier call pour exécuter par Asterisk
exten => s,n,System(sleep 15 && mv -f /tmp/${ARG2}${UNIQUEID}.call /var/spool/asterisk/outgoing/ &)
; on annonce que la composition automatique commence
exten => s,n,Playback(activated)

Si vous voulez faire la composition automatique de dernier numéro composé, il faut composer *20 :

; *20 autodialout sur le dernier numero compose
exten=>*20,1,Answer()
exten=>*20,n,Macro(autodial,${DB(LASTCALLED/${CALLERID(number)})},${CALLERID(number)})
exten=>*20,n,Hangup()

Si vous voulez faire la composition automatique de numéro de votre choix, il faut taper *20 + <numéro>

; *20+<numéro> la composition automatique sur le numéro de votre choix <numéro>

exten => *20X.,1,Answer()
exten => *20X.,n,Macro(autodial,${EXTEN:3},${CALLERID(number)})
exten => *20X.,n,Hangup()

Lorsqu’on exécute ce fichier « call », le numéro de correspondant se met à sonner. Lorsqu’il décroche, c’est votre poste qui sonne. Lorsque ce dernier est décroché, les 2 se mettent en communication.

Laisser un commentaire