Asterisk

Categories

Latest News

Monthly archives


Search




Plan de numérotation - IVR

La création des règles d’appel

Le plan de numérotation est le cerveau de Asterisk. Il définit comment Asterisk gère les appels entrants et sortants. Il est défini dans le fichier extensions.conf. Chaque section dans le fichier extensions.conf correspond à un contexte, défini dans les comptes utilisateurs.

Exemple: [helpdesk]

Remarque: il y a deux contextes spéciaux, qui sont [general] et [globals].

Dans chaque section, on trouve des extensions. Elles se présentent ainsi:

exten=nom,priorité,application()

nom: nom de l’extension, par ex : 123 (numéro qui appelera l’extension).
priorité: les priorités doivent commencer à 1 et leur numéro doivent se suivrent.

Exemple:

exten=123,1,Answer()

exten=123,2,Hangup()

Pour être quitte d’écrire chaque priorité, on peut utiliser la priorité n qui ajoute 1 à la priorité précédente. Cela ajoute plus de souplesse.

Exemple:

exten=123,1,Answer()

exten=123,n,Hangup()

application: chaque application réalise une action spécifique qui prend, ou pas des arguments.

Extension particulière: s. Cette extension est utilisée quand les appels rentrent dans un contexte sans extension particulière.

Quelques applications

Answer():

Utlisé pour répondre au canal de communication.

Hangup():

Utilisé pour raccrocher

Playback(fichier)

Lit le fichier son fichier.gsm. Pendant la lecture, l’entrée de l’utilisateur est ignorée.

Exemple:

exten=123,1,Answer()

exten=123,2,Playback(hello-world)

exten=123,3,Hangup()

Background():

Pareil que Playback, joue un son. Cependant, l’entrée de l’utilisateur est prise en compte.

Goto():

Permet de se rendre à un contexte particulier (une extension particulière).

Exemple:

exten=123,1,Goto(contexte,extension,priorité)

Dial():

Exemple:

exten=123,1,Dial(SIP/1000)

ou

exten=123,1,Dial(SIP/1000&SIP/1001,10)

=> dans le dernier exemple, le serveur appelle l’utilisateur 1000 et le 1001. Il les met en relation par la suite.

L’argument 10 est une temporisation.

Si personne ne décroche, Dial() va à la prochaine priorité de l’extension.

Si le canal est occupé, Dial() ira à la priorité n+101.

Utilisation de variables

Exemple:

JEAN=SIP/1

exten=555,1,Dial(${JEAN})

Plus loin:

Exemple:

exten=321,1,Set(COMPTE=3)

exten=321,2,Set(NEWCOMPTE=$[${COMPTE} + 1])

exten=321,3,SayNumber(${NEWCOMPTE})

=> Ici, on fixe à 3 la variable COMPTE. Ensuite, on créer la variable NEWCOMPTE qui vaut 4.

Enfin, on appelle l’application SayNumber qui va jouer le son 4.

Gotoif();

Syntax: Gotoif(expression?destination1:destination2)

Il existe une multitude d’autres fonctions disponibles (70).

On peut y avoir accès en tapant core show functions dans le CLI de Asterisk.

Elles sont également disponible ici: http://www.asteriskguru.com/tutorials/dialplan_applications.html

Un exemple concrèt

Commencer par étudier le contexte helpdesk.

[helpdesk]
// Ce contexte est appelé quand les utilisateurs qui ont pour contexte helpdesk numérotent 100.

exten=100,1,Answer() // Le système décroche

exten=100,n,Goto(helpdesk-menu,s,1) // Ensuite, on va au context helpdesk-menu.

 

[helpdesk-menu]

exten=s,1,Background(enter-conf-call-number) // On joue une musique de fond

exten=1,1,Goto(say-time,s,1) // Si on appuie sur 1, redirection vers le 1er élement du contexte say-time

exten=2,1,Dial(SIP/1000&SIP/1001,5,r) // Si on appuie sur 2, le serveur appelle le compte 1000 et 1001, puis les mets en relation.

exten=2,n,Playback(vm-nobodyavail) // Si personne ne répond dans les 5sec, on joue un message qui préviens que personne n’est disponible.

exten=2,102,Playback(all-reps-busy) // Joue un son si les utilisateurs sont occupés.

exten=s,n,Hangup() // Raccroche si l’utilisateur n’appuie ni sur 1 ni sur 2 pendant la lecture du son enter-conf-call-number

exten=i,1,Playback(pbx-invalid) // Joue le son pbx-invalid si l’utilsateur appuie sur une entrée non autorisée (3 par exemple).

exten=i,n,Goto(helpdesk-menu,s,1) // …puis reviens au début du contexte helpdesk-menu.

exten=t,1,Playback(vm-goodbye)

exten=t,n,Hangup()

 

[say-time]
exten=s,1,Set(CallTimeHeure=${STRFTIME(${EPOCH},GMT+1,%H)})

// On met l’heure dans la variable CallTimeHeure

exten=s,n,Set(CallTimeMinute=${STRFTIME(${EPOCH},GMT+1,%M)})

// On met les minutes dans la variable CallTimeMinute

exten=s,n,SayNumber(${CallTimeHeure})

// Asterisk prononce l’heure

exten=s,n,Playback(hours)

// … suivi du mot « heure »

exten=s,n,SayNumber(${CallTimeMinute})

// Asterisk prononce les minutes

exten=s,n,Playback(minutes)

// … suivi du mot « minutes ».

Globalement le contexte say-time permet de lire l’heure courante.

 

D’autres IVR

Exemple 1: A simple IVR system can be:

[incoming]

exten => _XX.,1,Answer()

exten => _XX.,n,Wait(2)

exten => _XX.,n,Background(choice_1)

exten => _XX.,n,Background(choice_2)

exten => 1,1,Goto(friend-1,s,1)

exten => 2,1,Goto(friend-2,s,1)

exten => i,1,Playback(TimeOut_EN)

 

[friend-1]

exten => s,1,ChanIsAvail(ZAP/1)

exten => s,2,NoOp(${AVAILCHAN})

exten => s,3,Dial(ZAP/1/234234234)

exten => s,4,Hangup()

exten => s,102,Playback(unavail)

exten => s,103,Hangup()

 

[friend-2]

exten => s,1,ChanIsAvail(SIP/choice2)

exten => s,2,NoOp(${AVAILCHAN})

exten => s,3,Dial(SIP/choice2)

exten => s,4,Hangup()

exten => s,102,Dial(SIP/mainchief)

exten => s,103,Hangup()

 

Explanation:

ChanIsAvail() application checks if via ZAP/1 can be sent a call, if it can be, it dials “234234234″ through ZAP/1. If the Zap channel is not available, it play backs unavailable audio message. The same situation is with the [friend-2] context. With this difference that it checks if the SIP/choice2 peer is known and registered, if it is not it dials the mainchief.

Posted by admin Posted in: Asterisk Configuration No Comments » octobre 2007


Enregistrement d’appels

Enregistrement de conversations

Il est possible d’enregistrer les conversations avec l’application Monitor() d’Asterisk assez simplement. Monitor() surveille (et enregistre) le flux audio du canal en cours. Par défaut les enregistrements sont placés dans /var/spool/asterisk/monitor

Monitor(format, file, [options])

Plus de détail:

Monitor( [format [:urlbase] [,fname_base] [,options] ] )

Exemple:

Monitor(wav, conference, m)

Option m : Lorsque l’enregistrement d’arrête, l’application mélange les flux entrant et sortant en un seul flux et efface les fichiers originaux file-in et file-out.

Option b : Ne démarre pas l’enregistrement tant qu’un appel n’est pas raccordé à un autre canal (tant que l’interlocuteur n’a pas décroché).

Voir aussi ChangeMonitor et StopMonitor.

Voici un exemple:

[helpdesk]
exten=130,1,Monitor(wav,conference,m)
exten=130,n,MeetMe(2000,Mpa)
exten=140,1,Playback(/var/spool/asterisk/monitor/conference)

Commentaires:

En appelant l’extension 130, on démarre l’enregistrement avant d’être connectée à la salle 2000 de la conférence. En appelant le 140, on peut réécouter l’enregistrement.

Autre exemple:

[record-out]

exten => _8.,1,SetVar(CALLFILENAME=${EXTEN:1}-${TIMESTAMP})
exten => _8.,2,Monitor(wav,${CALLFILENAME},m)
exten => _8.,3,Dial(ZAP/g1/${EXTEN:1})
exten => _8.,4,Congestion
exten => _8.,104,Congestion

Plus d’infos sur:

http://www.voip-info.org/wiki/index.php?page=Monitor+setup+sample

Nous pouvons également utiliser l’application MixMonitor() à la place de Monitor. Cette application permet de traiter le mixage des flux entrant et sortant en simultané (natively), pendant la conversation.

=> Permet d’utiliser moins de temps CPU à la fin de la conversation pour procéder au mélange des flux.

Enregistrement de sons

Le script ci-dessous permet à une personne d’enregistrer sa voix avec l’application Record() et de restituer l’enregistrement effectué.

Remarque: il faut appuyer sur # pour terminer l’enregistrement.

[record-test]
exten=s,1,Pla
yback(hello-world)
exten=s,1,Wait(2)
exten=s,n,Record(/var/lib/asterisk/sounds/recording:gsm) // Enregistrement au format gsm.
exten=s,n,Wait(2)
exten=s,n,Playback(/var/lib/asterisk/sounds/recording) // Lecture du son enregistré.
exten=s,n,Wait(1)

exten=s,n,Hangup()

Posted by admin Posted in: Asterisk Configuration No Comments » octobre 2007


VoiceMail – La boite vocale


Création d’une boite mail

[contexte]
mailbox_number => password, name, email

Exemple:
[mb_tutorial]
777 => 1212, ivan, ivan@asteriskguru.com

Ici, je crée une un contexte de mailbox nommé mb_tutorial, le numéro de boite vocale est le 777 avec le mot de passe 1212 détenu par ivan avec l’e mail ivan@asteriskguru.com.

VoiceMail(mailbox_number@context)
exten => 1234,2,VoiceMail(777@mb_tutorial)

Si personne ne répond ou si la ligne est occupée, on est rediriger vers la voite vocale (777) pour laisser un message.

Dans l’exemple ci dessous, quand on appelle 1234, on appelle ivan. S’il ne répond pas dans les 30 secondes, on tombe sur sa boite vocale et on peux lui laisser un message.

exten => 1234,1,Dial(SIP/ivan, 30)
exten => 1234,2,VoiceMail(777@mb_tutorial)
exten => 1234,3,PlayBack(vm-goodbye)

exten => 1234,4,HangUp()

Posted by admin Posted in: Asterisk Configuration No Comments » octobre 2007


« Previous Entries