# TP de téléphonie ## Installation d'asterisk ### Récupérer asterisk wget @ip ou svn <checkout | update | info | status> mkdir -p /usr/src/asterisk cd /usr/src/asterisk su ## Commande Asterisk En étant root: asterisk -rvvvvvv \\ Pour accéder au CLI du serveur asterisk ? \\ Liste les commande reload \\ Recharge la conf pjsip show endpoints \\ Montre les abbonnés Pjsip ## Exemple de Config PJSIP.conf et extensions.conf pjsip.conf: ;Template commun pour les endpoints [endpoint-template](!) type=endpoint context = default disallow=all allow=ulaw transport=udptrans ;Template commun pour les authentifications [auth-template](!) type=auth auth_type=userpass ;Template commun pour les aors [aor-template](!) type=aor max_contacts=1 [2000](endpoint-template) auth=auth2000 aors=2000 [2001](endpoint-template) auth=auth2001 aors=2001 [2002](endpoint-template) auth=auth2002 aors=2002 [auth2000](auth-template) username=2000 password=2000 [auth2001](auth-template) username=2001 password=2001 [auth2002](auth-template) username=2002 password=2002 [2000](aor-template) [2001](aor-template) [2002](aor-template) extension.conf: exten => _200[0-7],Dial(PJSIP/200${EXTEN:7}) , déclaration des numéros interne exten => 15,1,NoOp(Appel vers le Samu) same => n,Dial(PJSIP/${EXTEN}@mon_trunk) same => n,Hangup() ## Paramétrage Tel Thomson config poste sip via navigateur 192.168.21.44/admin/html mdp admin: 784518 id: administrator ## Faire une Interception Pour paramétré les interceptions il faute attribué des Call group et des Pickup group au différents endpoints dans le pjsip.conf: [6001] Call_group=1 Pickup_group=1 [6002] Call_group=1 Dans cette configuration 6001 peut intercepté 6002 mais pas l'inverse. Il faut aussi dé-commenter la variable pickupexten dans features.conf. ## BVI Pour paramétrer une boite Vocal il faut: * Déclarer les numéros dans un contexte dans le fichier Voicemail.conf au format => "num => mdp, nom, email, email pager, options" *** * Il faut ensuite ajouté le voicemail au numéros paramétré dans extensions.conf: exten => 2000,1,Dial(PJSIP/2000) same => n,VoiceMail(2000@default,u) same=> n,Hangup() exten => 2001,1,Dial(PJSIP/2001) same => n,VoiceMail(2001@default,u) same=> n,Hangup() *Dans la déclaration de la boite vocale @default correspond au context déclaré dans Voicemail.conf* *** * Pour finir il faut définir un numéro de contact pour que les utilisateurs puisse contacter la boite vocal: exten => 7000,1,VoiceMailMain(${CALLERID(num)}@default) *Dans cette configuration les utilisateur devrons appelé 7000 pour écouter leurs messages* ## Faire un groupement Les groupements d'appels peuvent être configurer dans extensions.conf ou être déclaré sous forme de file d'attente dans queues.conf. **Avec extensions.conf:** Faire sonner les deux téléphone en même temps: exten => 30,1,Dial(PJSIP/2000&PJISP/2001) same => n,Hangup() Faire sonner les numéros chacun leurs tours: exten => 100,1,Dial(PJSIP/2000,15) ; Appelle 2000 pendant 15 secondes same => n,Dial(PJSIP/2001,15) ; Si 2000 ne répond pas, appelle 2001 same => n,Dial(PJSIP/2002,15) ; Si 2001 ne répond pas, appelle 2002 same => n,Hangup() Boucle d'appel qui fait sonner différents numéros en boucle chacun leurs tour pendant un nombre de tours définie: exten => 3000,1,NoOp(Boucle pour le groupement 3000 soit 2000 et 2001) same => n,Set(LOOPCOUNT=0) same => n(LOOPSTART),GotoIf($[${LOOPCOUNT} > 5]?hangup) same => n,Dial(PJSIP/2000,15) same => n,Dial(PJSIP/2001,15) same => n,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1]) same => n,Goto(LOOPSTART) *** **Avec queues.conf:** Déclaration d'une file d'attente: [general] persistentmembers = yes ; Sauvegarde les membres dynamiques dans un fichier autofill = yes ; Distribue les appels à plusieurs agents simultanément updatecdr = no ; Ne pas mettre à jour les CDR avec les détails de la file [my_queue] ; Nom de la file d'attente musicclass = default ; Musique en attente (définie dans musiconhold.conf) strategy = rrmemory ; Stratégie de distribution (Round-Robin avec mémoire) timeout = 15 ; Temps d'attente maximum pour un agent avant de passer au suivant retry = 5 ; Temps d'attente avant de rappeler un agent après un échec maxlen = 5 ; Nombre maximal d'appels en attente joinempty = yes ; Autorise les appels même si aucun agent n'est disponible leavewhenempty = no ; Garde les appels en attente même si aucun agent n'est disponible ringinuse = no ; Ne sonne pas les agents déjà en communication announce = queue-thankyou ; Annonce à jouer avant de joindre un agent periodic-announce = queue-periodic-announce ; Annonce périodique periodic-announce-frequency = 30 ; Intervalle en secondes pour l'annonce périodique memberdelay = 0 ; Délai avant de joindre un agent après l'annonce ; Membres statiques (agents fixes) member => PJSIP/2000 ; Ajoute l'agent 2000 à la file member => PJSIP/2001 ; Ajoute l'agent 2001 à la file *** Différent paramètre pour la strategy: ringall : Tous les agents sonnent en même temps. rrmemory : Appelle les agents en boucle, en reprenant à l'agent suivant après chaque appel. rrordered : Appelle les agents en boucle, mais toujours dans le même ordre. leastrecent : Appelle l'agent qui n'a pas pris d'appel depuis le plus longtemps. fewestcalls : Appelle l'agent ayant pris le moins d'appels. random : Appelle un agent au hasard. *** Ajout de la file d'attente dans extentions.conf: exten => 100,1,Answer() ; Répond à l'appel same => n,Queue(my_queue) ; Place l'appelant dans la file "my_queue" same => n,Hangup() ; Termine l'appel si la file est vide ## Heures d'ouverture exten => 600,1,GotoIfTime(11:00-11:50,mon-fri,*,*?open,s,1) ; Renvoie vers le context open si les condition sont remplie same => n,Goto(closed,s,1) ;Renvoie vers le context Closed si les conditions précédentes ne sont pas valides [open] exten => s,1,Dial(PJSIP/6001,20) same => Hangup() [closed] exten => s,1,agi(googletts.agi,"L'entreprise est fermé pour le moment",fr,any) same => n,MusicOnHold(pers1) ;Le profil pers1 est à définir dans le fichier MusicOnHold.conf same => n,Hangup() ## SVI - Installation des dépendances de player mpg *apt-get install perl libwww-perl sox mpg123* - Installation de l’application googletts (script pour mettre en place la synthèse vocale) */var/lib/asterisk/agi-bin/ ou /usr/share/asterisk/agi-bin/* - Selon le type d’installation (manuelle premier cas ou automatique par apt-get install asterisk) *wget https://raw.github.com/zaf/asterisk-googletts/master/googletts.agi* - chmod +x googletts.agi ; "permet de rendre l’application exécutable par asterisk" *** Paramétrage d'une SVI dans extensions.conf: exten => 500,1,Answer() same => n,agi(googletts.agi,"Salut !",fr,any) same =>n,agi(googletts.agi,"Je vais bientot te répondre.",fr,any) same =>n,agi(googletts.agi,"appuie sur 1 pour joindre le 6001",fr,any) same =>n,agi(googletts.agi,"appuie sur 2 pour joindre le 6002",fr,any) same => n,agi(googletts.agi,"Faite votre choix",fr,any) same =>n,WaitExten(10) exten => 1,1, Goto(6001,1) exten => 2,1,Goto(6002,1) exten =>_[3-8#],1,Goto(500,5) exten => t,1,Goto(500,5) exten => i,1,Goto(500,5) ## Musique d'attente Exemple de config d'un profil de musique: dans MusicOnHold.conf [default] mode=files directory=moh Set(CHANNEL(musicclass)=pers1) [pers1] mode=files directory=/var/lib/asterisk/moh/pers1 sort=random