Support De Cours Asterisk

  • Published on
    24-Jun-2015

  • View
    1.034

  • Download
    3

DESCRIPTION

Avant proposCe document est bas sur la version de dveloppement (Asterisk SVN-trunk-r30630M futur 1.4) d'Asterisk pass en 1.4-beta en octobre 2006. Bien que beaucoup de prcautions aient t prise lors de la prparation de ce document, il est plus que possible que des erreurs, omissions, incorrections y soit dcels. Il y a certainement un grand nombre de fautes de franais, alors corrigeons tous ensemble s'il vous plait.Table des matiresAvant propos......................................

Transcript

Avant proposCe document est bas sur la version de dveloppement (Asterisk SVN-trunk-r30630M futur 1.4) d'Asterisk pass en 1.4-beta en octobre 2006. Bien que beaucoup de prcautions aient t prise lors de la prparation de ce document, il est plus que possible que des erreurs, omissions, incorrections y soit dcels. Il y a certainement un grand nombre de fautes de franais, alors corrigeons tous ensemble s'il vous plait.Table des matiresAvant propos..................................................................................................................1 Introduction....................................................................................................................5 Matriel......................................................................................................................5 Distribution GNU/Linux et Serveurs de Rgression.................................................5 Tlphonie..............................................................................................................5 Digium Inc..........................................................................................................6 Cartes numriques zaptel-compatible................................................................6 Cartes analogiques zaptel-compatible...............................................................6 Adaptateurs de TlphonesAnalogiques (ATA)....................................................6 Autres Fournisseurs matriel..............................................................................7 Sangoma............................................................................................................7 Xorcom...............................................................................................................7 Grandstream......................................................................................................7 Architecture................................................................................................................7 Canaux et Pilotes de Canaux..................................................................................7 Applications............................................................................................................8 Dialplan..................................................................................................................8 Dmarrer Asterisk..................................................................................................8 Syntaxe gnrique de Configuration........................................................................10 Pense-bte Codecs...................................................................................................11 Les principaux Canaux.................................................................................................11 Le Canal Zap.............................................................................................................11 FXO et FXS............................................................................................................12 zconfig.h...............................................................................................................12 zaptel.conf............................................................................................................12 zapata.conf...........................................................................................................13 Commandes CLI...................................................................................................13 IAX2..........................................................................................................................13SIP............................................................................................................................14 ALSA / OSS................................................................................................................15 Pseudo canal Agent..................................................................................................15 Pseudo canal Local...................................................................................................16 Jingle.........................................................................................................................16 H.323........................................................................................................................16 Skinny/SCCP.............................................................................................................16 UNISTIM....................................................................................................................16 CAPI/MISDN...............................................................................................................16 VPB...........................................................................................................................17 MGCP........................................................................................................................17 Dialplan........................................................................................................................17 extensions.conf........................................................................................................17 Commandes CLI...................................................................................................17 Exstensions..........................................................................................................17 Extensions et priorits spciales..........................................................................20 switch...................................................................................................................20 Variables et expressions.......................................................................................21 Fonctions prdfinitet Macro................................................................................21 extensions.ael (version 2)........................................................................................22 Commande CLI.....................................................................................................23 Utilitaires AEL.......................................................................................................23 Syntaxe du 'langage'............................................................................................23 Mots cls du 'langage'..........................................................................................24 Commentaires......................................................................................................24 Contextes.............................................................................................................25 Extensions............................................................................................................25 Inclusions..............................................................................................................25 Switches...............................................................................................................26 Variables...............................................................................................................26Boucles.................................................................................................................27 Macro....................................................................................................................27 Goto et Labels......................................................................................................28 Infrastructure RealTime (ARA).................................................................................28 extconfig.conf...........................................................................................................28 res_odbc.conf...........................................................................................................29 Structures de tables.................................................................................................29 DUNDI...........................................................................................................................31 Commanes CLI..........................................................................................................31 Crypto.......................................................................................................................31 dundi.conf.................................................................................................................31 Voicemail......................................................................................................................33 AGI................................................................................................................................33 Commandes AGI.......................................................................................................34 AGI en Python...........................................................................................................36 Debugger les AGI......................................................................................................37 AMI...............................................................................................................................37 Applications et fonctions..............................................................................................38 Ressources...................................................................................................................38IntroductionLa premire chose que j'ai apprise en crivant ce guide est que dfinir une infrastructure aussi versatile qu'Asterisk peut tre un exercice prilleux. Subitement, j'ai ralis ce que voulait vraiment dire l'angoisse de la page blanche. Les tlcommunications, comme disait Mark Spencer ont t l'une des contrs les moins explors dans le monde du libre, aussi peu que ne le sont les techniques de protection contre la copie dans ce monde. Asterisk est l'une des premire exprience retentissante pour combler ce vide si confortable pour cette vieille grosse industrie lthargique rompue la tche de la livraison de PC cadencs 700Mhz embarquant une version de VxWorks vieille de 15 ans et Windows NT 4 pour pas moins de 15.000 pour faire office de Commutateur. Asterisk est une plat-forme libre et flexible constituant un point de convergence de diverses technologies autour de la tlphonie.MatrielLes fournisseurs de matriels fonctionnant avec Asterisk sont trs nombreux, nous ne citeront ici que les plus populaires. Vous trouverez plthores d'informations sur http://www.voip-info.org/wiki/view/Asterisk+hardware et la liste ne cesse de crotre tous les jours.Distribution GNU/Linux et Serveurs de RgressionIl faut noter que Digium Inc. effectue des tests de Rgression pour la version Asterisk Business Edition et les distributions teste avec Asterisk Business Edition sont: RedHat Enterprise 3 (ES) Fedora Core 3Les serveurs utiliss ce propos sont: Dell Poweredge 2850 HP Proliant DL360TlphonieDans cette section nous parlons de cartes TDM numriques et analogiques ainsi quede quelques terminaux (Adaptateurs ATA et postes IP).Digium Inc.Cartes numriques zaptel-compatibleTE405P et TE410P: Cartes T1/E1 de quatre ports supportant les technologies voix et donnes sur T1 et E1 avec une configuration de port indpendante. Il s'agit de cartes pour des slots 5-vols et 3,3 volts respectivement. TE407P et TE412P: Cartes T1/E1 de quatre ports supportant les technologies voix et donnes sur T1 et E1 avec une configuration de port indpendante. Il s'agit de cartes pour des slots 5-vols et 3,3 volts respectivement. Elles disposent en plus, d'un module matriel de suppression d'choTE205P et TE210P: Cartes T1/E1 de deux ports supportant les technologies voix et donnes sur T1 et E1 avec une configuration de port indpendante. Il s'agit de cartes pour des slots 5-vols et 3,3 volts respectivement. TE207P et TE212P: Cartes T1/E1 de deux ports supportant les technologies voix et donnes sur T1 et E1 avec une configuration de port indpendante. Il s'agit de cartes pour des slots 5-volts et 3,3 volts respectivement avec module de suppression d'echo. TE110P: Carte T1/E1 d'un port avec les mmes fonctionnalits que les cartes de la srie TE ci-dessus. B410P et B405P: Cartes de quatre ports RNIS accs de base.Cartes analogiques zaptel-compatibleTDM400P: Carte supportant jusqu' quatre ports FXS ou FXO via des modules permettant de se connecter aux tlphones analogues. TDM2400P: Carte supportant jusqu' 24 ports FXS ou FXO en groupe de 4 pour un total de six modules par carte. Module FXS: Module vert FXS utilis avec la TDM400P Module FXO: Module rouge utilis avec la TDM400P Adaptateurs de TlphonesAnalogiques (ATA)IAXy S101I: Adaptateur de tlphone analogique utilisant le protocole IAX. Il existe en trois variante avec des alimentation (Europenne, Nord-Amricaine et Anglaise).Notons que le choix de ce type de matriel peut se rvler prilleux. Il peut tre bon de recourir la revue de la communaut avant d'acqurir du nouveau matriel (e.g. lisez les commentaires utilisateurs sur http://www.asteriskguru.com/tutorials/st_302_ip_phone_hardphone.html ).Autres Fournisseurs matrielSangomaLes cartes produites par Sangoma sont devenu trs populaires dans la communaut Asterisk. Ils produisent des cartes A101, A102, A104 et A104d qui sont respectivement des cartes T1/E1 un, deux et quatre ports. La A104d est une carte quatre port avec un module de suppression d'cho 128ms. Des cartes 8 ports T1/E1 haute densit sont galement disponible (http://www.sangoma.com/press/corporate/2006_04_05_A108_Card ). De plus ils fournissent les cartes A200 et A200d qui sont des cartes analogiques extensibles FXS/FXO de 2 24 ports. Les pilotes de ces cartes sont disponibles sur le site de Sangoma (http://wiki.sangoma.com/ )XorcomXorcom (http://www.xorcom.com ) produit Astribank-{8,16,32} spcialement conu pour Asterisk. Ce Channel Bank dispose entre autre de huit, seize ou trente-deux ports FXS et se connecte Asterisk via une connections USB-2 directe. Le pilote est fournit avec le paquetage zaptel.GrandstreamGrandstream produit des channels bank GXW-41 (http://www.grandstream.com/ygxw.htm ) avec une interface rseau WAN et une interface rseau LAN toutes 10/100. Il fournit entre 4 et 8 ports FXO et expose les lignes via SIP.ArchitectureLes blocs essentielles la constitution d'Asterisk sont: Les pilotes de canaux, les applications et le dialplan.Canaux et Pilotes de CanauxUn canal est l'unit atomique qui transporte un appel au sein d'Asterisk. Il peut s'agir d'une connection physique une ligne tlphonique ou un poste tlphoniquecomme il peut s'agir d'une connection logique induite par un appel en provenance d'un rseau de donnes. Avec Asterisk, chaque Canal est gr par un pilote (channel driver) qui en connat les moindres dtails et qui n'expose que le strict ncessaire la couche suprieure du PBX. Gnralement, un pilote de Canal lit dans un fichier de configuration les informations concernant le matriel/protocole qu'il doit grer puis entre en attente de modification d'tats sur les canaux physiques/logiques. Ds qu'un changement d'tat survient, (Sonnerie par exemple), le pilote cre une structure de donnes de type channel et y attache tous les callbacks ncessaires la communication. Le pilote dmarre ensuite le PBX (ast_pbx_start ) en passant la rfrence la structure de donnes cre. ast_pbx_start dmarre alors un thread pour la gestion du canal. Ainsi, tant que l'appel n'est pas raccroch, le pilote ne s'occupera pas de ce canal en particulier. Le thread du PBX utilisera le canal, lisant, crivant, multiplexant ce canal avec d 'autres canaux (en utilisant l'appel systme select sur le descripteur de fichier du canal). Ds que le canal est raccroch, le pilote reprendra la surveillance du canal dans l'attente du prochain changement d'tat.ApplicationsLes applications rendent des services lorsqu'un appel est trait dans le systme. Pour chaque appel, une suite d'applications est excut en srie dans l'ordre dans lequel elles sont dfini dans le diaplan. Une application trs utile est l'application Dial . Certaines applications utilisent un fichier de configuration comme l'application VoiceMailDialplanLe dialplan dfinit les instructions de traitement d'appel, il est configur travers extensions.conf et/ou extensions.ael. Nous les dcrirons un plus en dtails dans une autre section.Dmarrer AsteriskAsterisk s'intgre parfaitement au schma de dmarrage classiques et des exemples de scripts init SYSV sont fourni dans la distribution (contrib/init.d). Chaque distribution fournissant Asterisk l'intgre son systme de dmarrage et dfinit un mechanisme gnrique de configuration de dmarrage permettant d'activer telle ou telle autre option. Nous listerons les paramtres utiliss dans la distribution officielle. Option -V Description Affiche la version d'Asterisk puis quitte (e.g Asterisk SVN-trunk-r30630M ou Asterisk 1.2.8) Utiliser un fichier de configuration autre que celui par dfault (gnralement /etc/asterisk/asterisk.conf) Excute Asterisk avec les privilges du-C -G groupe -U -c Excute Asterisk avec les privilges de l'utilisateur Fournit une console. Cette option implique -f et elle force Asterisk ne pas se dtacher du terminal de control Active le debug (spcifier plusieurs d pour plus de debug) Instruit Asterisk de ne pas se dupliquer (fork) Gnrer un fichier core en cas de plantage Une fentre dcrivant les options dcrites ici Initialise les cl cryptographiques au dmarrage Active la synchronisation d'horloge interne si Zaptel est disponible Dfinit la charge maximale du systme au del de laquelle les appels sont rejets. Dfinit le nombre maximal d'appels gr par le systme un moment donn Supprime l'affichage des messages debug/verbose de la console Dsactive la colorisation de la console S'excuter comme processus pseudo temps rel si le systme hte supporte un tel mchanisme (et si le dmarrage est effectu par root). Cela se passe au dtriment des autres programmes s'excutant sur la mme machine. Rduit l'affichage des messages par dfaut de la console Se connecter Asterisk sur cette machine mme Se connecter Asterisk et tenter la reconnections en cas de dconnections. Enregistrer les fichiers audio sous /var/tmp avant de les dplacer vers leurs destinations finales Afficher la date au format [Mmm dd-d -f -g -h -i -I -L -M -m -n `-p-q -r -R -t-Thh:mm:ss] pour chaque ligne affich la console -v -x Accrotre le verbose (plusieurs v pour plus de verbose) Excute la commande (valable uniquement avec -r)Syntaxe gnrique de ConfigurationAsterisk utilise principalement des fichiers de configuration pour son opration. Il esiste un certain nombre de convention qu'on retrouve dans tous les fichiers de configuration d'Asterisk:La plupart des fichiers de configuration supporte l'inclusion d'autres fichiers de mme nature travers la directive #include (#include ). Il est gnralement possible dans ces cas de recourir des jokers comme '*' (#include ) Lorsque le paramtre execincludes est yes dans la section options du fichier asterisk.conf , il est possible de verser la sortie d'une commande dans un fichier (#exec ) Le point-virgule est utilis et conseill pour les commentaires dans les fichiers de configuration. Il est possible de faire des commentaires multi-ligne en utilisant la syntaxe ;-- --;La plupart des fichiers de configuration utilisent un dcoupage par section et chaque section contient des lments d'assignation (option=valeur). Pour certains fichiers (zapata.conf notamment), la configuration est lgrement diffrente: Les options sont globalement dfini, puis ds qu'un objet est spcifi, les options dfini lui sont appliques:context=incoming callerid=8647288 channel=>1-2Il existe galement un mcanisme de dfinition de templates: [section](options) option=valeur Par exemple: [section] option1=valeur [section](+) option2=valeur Cette syntaxe instruit que la section en (+) est la continuit de la premire section gnralement dfini dans un autre fichier et insr avec #include.[section](!) option=valeurCette configuration en point d'exclamation instruit l'analyseur qu'il s'agit juste d'une template et ne devrait pas tre utilis par Asterisk en l'tat. On peut alors faire rfrence ce template dans d'autres section fonctionnelles en utilisant la syntaxe [section](nomSection1, [nomSection2]) [sectionA] option1=valeur [sectionB] option2=valeur [sectionX](sectionA,sectionB) option3=valeur se traduirait par: [sectionX] option1=valeur option2=valeur option3=valeurPense-bte CodecsCodec G.711 G.726 G.723.1 G.729A iLBC Speex Taux de transfert (kbps) 64 16,24,32 5.3 ou 6.3 8 13,3 entre 1.15 et 22.4Les principaux CanauxLe Canal ZapIl s'agit gnralement d'interface physique au RTC. Nombre de ces cartes sont produites par Digium Inc.. Certains fabriquant de carte produisent galement des wrapper permettant plus ou moins de traiter leurs quipements comme des canaux zap (e.g. http://www.junghanns.net/en/home.html ). Ces cartes sont gnralement de type FXS, FXO, PRI et BRI. Certaines de ces cartes sont des cartes de haute densit modulaires permettant de disposer de plusieurs ports sur le mme slot PCI 2.2. La configuration des canaux zap s'effectue principalement au moyen du fichier zapata.conf1 . Les configurations bas niveau des cartes se fait par le fichier/etc/zaptel.conf, partie du paquetage zaptel.FXO et FXSPour faire la diffrence entre FXS et FXO il faut chercher la partie de la connections qui gnre la tonalit. Une carte FXO ne gnre pas de tonalit. Un port fournit la tonalit et le voltage ncessaire la sonnerie alertant le terminal connect lors de l'arrive d'un appel.zconfig.hCertaines options de configuration sont accessible par la modification du fichier zconfig.h du paquetage zaptel. Certains paramtres peuvent tre modifis lors du chargement des pilotes de cartes dont vous disposez (modprobe wctdm boostringer=1). Parmi ces options on peut citer:BOOST_RINGER permet d'augmenter le voltage envoy un tlphone de 70 89V. Ceci peut tre utile lorsque certains tlphones connects au canal zap ont du mal a dtecter la sonnerie. CONFIG_ZAPTEL_MMX pour les optimisations MMX Choix de l'algorithme de suppression de l'cho (ECHO_CAN_KB1, ECHO_CAN_MG2, etc) Suppression agressive de rsidu d'cho: AGGRESSIVE_SUPPRESSOR ZapRAS pour trnsformer Asterisk en RAS.zaptel.confCe fichier est analys par l'outil de configuration des interfaces zaptel ztcfg. On y dfinit les spans, la liste de priphriques regroupant les canaux et les tonalits.span=1,0,0,cas,hdb3,yellow,crc4Il faut noter que les framing utiliss pour les E1 ( moins qu'il ne s'agisse d'un channel Bank) sont cas ou ccs et le coding est ami ou hdb3. On peut utiliser le mot cl crc4 pour activer la vrification du CRC4 sur la ligne.fxsks=25,27,28,29 fxoks=1-12,19Une carte FXS est dfinit par le fait qu'elle connecte un terminal/station, donc elle doit se comporter comme une CO en utilisant une signalisation FXO.defaultzone=fr loadzone=frzapata.confCe fichier contient essentiellement deux section qui sont [trunkgroups] et [channels]. La section trunkgroups est utilis pour les liaisons NFAS et GR-303 de Bellcore. La section [channels] contient toutes les dfinitions des attributs de canaux utiliss par Asterisk.language=fr context=nomades internationalprefx=00 nationalprefix=9 localprefix=8 signalling=fxs_ks sendcalleridafter=2 cancallforward=yes (*72+Numros active et *73 dsactive) group=3 stripmsd=1 callerid=asreceived channel => 1-13Commandes CLIreload chan_zap.so zap show cadences zap show channel zap show channels zap show status pri show span pri show spans pri show debug pri debug span pri intense debug span pri set debug fileIAX2IAX2 est le protocole de tlphonie sur IP standard de fait (et pas encore standard dejure) dans la communaut Asterisk. Il possde des caractristiques intressantes comme le 'trunk' ou une excellente immunit aux rseaux translation d'adresse/port. Contrairement aux protocoles effectuant la signalisation sur un port diffrent de celui qui transporte le mdia, IAX utilise le mme port pour la signalisation et pour le transport du mdia.reload chan_iax2.so ou iax2 reload iax2 debug iax2 show netstats|threads|stats iax2 trunk debug iax2 jb debugSIPSIP est un standard de jure (IETF 02/1996 draft-ietf-mmusic-sip-00 ) de Tlphonie sur IP, il utilise RTP pour le transport du mdia. Il s'agit d'un protocole de signalisation au niveau de la couche application (c'est mme la principale source de ses problmes). SIP peut utiliser TCP ou UDP pour le transport mme si l'implmentation Asterisk n'est pas encore TCP capable. dans channels/chan_sip.c on peut lire:* * * * * * * * * * * * * * * * * * * * *Implementation of RFC 3261 - without S/MIME, TCP and TLS support Configuration file \link Config_sip sip.conf \endlink\todo \todo \todo \todo \todoSIP over TCP SIP over TLS Better support of forking VIA branch tag transaction checking Transaction support\ingroup channel_drivers \par Overview of the handling of SIP sessions The SIP channel handles several types of SIP sessions, or dialogs, not all of them being "telephone calls". - Incoming calls that will be sent to the PBX core - Outgoing calls, generated by the PBX - SIP subscriptions and notifications of states and voicemail messages - SIP registrations, both inbound and outbound - SIP peer management (peerpoke, OPTIONS) - SIP text messagesBien que SIP ne soit pas le seul protocole de voix sur IP du march, il semble bnficier d'une large adoption aussi bien par les constructeurs de terminaux que par les dveloppeurs, cela est en partie du la disponibilit des spcifications. Une configuration de base sip.conf ressemble ceci:[general] context=Hell srvlookup=yes tos_sip=cs3 tos_audio=ef tos_video=af41 useragent=AUFSIPUA Pwrd by Asterisk PBX externip = 1.2.3.4 externhost=foo.baz.bar localnet=192.168.0.0/255.255.0.0 localnet=10.0.0.0/255.0.0.0 localnet=172.16.0.0/12 localnet=169.254.0.0/255.255.0.0 [tom] type=friend secret=s3cr3t qualify=10 disallow=all allow=speex allow=gsm allow=alaw nat=no host=dynamic canreinvite=no context=hackersreload chan_sip.so ou sip reload sip list objects sip list peers sip list settings|domains|channels|subscriptions sip list peersALSA / OSSIl s'agit du pilote de canal console permettant entre autre de tester la configuration.Pseudo canal AgentCe canal est principalement utilis pour l'identification des agents (tl-acteurs, tlconseillers, tl-spameurs, tl-marketeurs, etc).Pseudo canal LocalCe canal permet pour crer une boucle sur le PBX lui mme. Il est utilis pour le routage rcursif.JingleLe support de Jingle sous Asterisk se dcline en deux variantes qui sont en ce moment (1.4.0-beta) assez semblables: Le pilote de canal Jingle vise supporter les spcifications JEP-166, 167, etc, alors que le pilote de canal Gtalk se focalise sur le protocole propritaire de Google trs semblable Jingle. L'objectif c'est de focaliser le dveloppement de chan_gtalk aux particularites non-jingle de GTalk alors que chan_jingle va converger vers le standard de jure.H.323Protocole de tlphonie IP de jure de l'ITU H.323. Il existe Trois implmentations H.323 pour Asterisk: Une implmentation inclus dans la distributions officielle d'Asterisk, une autre produite par Objective Systems et distribue avec asteriskaddons (asterisk-addons/asterisk-ooh323c) et enfin une dernire produite par inaccessnetworks(http://www.inaccessnetworks.com/projects/asterisk-oh323 )Skinny/SCCPSkinny est un protocole propritaire de Cisco utilis avec le PBX Cisco Call Manager. Asterisk supporte ce protocole via chan_skinnyUNISTIMIl s'agit d'un protocole propritaire de Nortel (voir http://mlkj.net/UNISTIM/ )CAPI/MISDNIl s'agit des principaux pilote de canaux utilis pour l'accs aux cartes RNIS d'accs de base. Ils supportent toutes les cartes gres par les infrastructure du noyau (CAPI2 et MISDN). chan_misdn commene s'imposer et fournit dj une ensemble impressionnant de fonctionnalits (mode NT/TE, Crypto (Blowfish), app_sendText, dtection DTMF, etc).VPBAsterisk supporte les cartes Voicetronix (http://www.voicetronix.com/index.htm ) travers chan_vpbMGCPMGCP est aussi un standard de jure de l'IETF de plus en plus supplant par SIP et IAX. Asterisk supporte MGCP travers chan_mgcpDialplanLes contextes sont utiliss par Asterisk pour diviser le Dialplan en units logiques, chacune avec la possibilit de traitement diffrent pour les mmes extensions. Les contextes peuvent avoir leurs propres modle de scurit et peuvent inclure d'autres contextes. Les contextes sont souvent vu comme des units organisationnelles d'entreprise avec les mmes droits d'accs des ressources que le contexte permet de regrouper. Les mcanisme d'inclusion de contexte peuvent dpendre de date/heure particulireextensions.confLe premier outil de configuration du dialplan est le fichier extensions.conf.Commandes CLIcore list hints|switches dialplan show [[exten@]contexte] dialplan reload dialplan add extension ,,, into contexte [replace] dialplan remove extension [priorit] include in dont include in dialplan save ExstensionsUne extension Asterisk n'est pas lie une interface, elle est constitue d'un ensemble d'application dont la squence est dtermine par la priorit attach l'application.exten => extension,priorit[+offset][(alias)],Application(args) [default] exten => 205,1,Goto(phrase-menu,s,1) [phrase-menu] exten => s,1,Answer exten => s,2,DigitTimeout,5 ; Dlai d'attente de DTMF exten => s,3,ResponseTimeout,10 ; Dlai d'attente de rponse exten => s,4,BackGround(custom/phrase-menu) ; Menu principal play. ; Enregistrement des Phrases exten => 1,1,Wait(1) exten => 1,2,Read(PHRASEID|custom/entrer-num-phrase) exten => 1,3,Wait(2) exten => 1,4,Record(custom/${PHRASEID}:gsm) exten => 1,5,Wait(2) exten => 1,6,Playback(custom/${PHRASEID}) exten => 1,7,Wait(1) exten => 1,8,Goto(s,2) ; Re-lecture des phrases exten => 2,1,Wait(1) exten => 2,2,Read(PHRASEID|custom/entrer-numm-phrase) exten => 2,3,Wait(1) exten => 2,4,Playback(custom/${PHRASEID}) exten => 2,5,Wait(1) exten => 2,6,Goto(s,2) exten => t,1,Hangup exten => i,1,Playback(custom/option-invalide) exten => i,2,Goto(s,2)La modification d'une extension peut tre pnible puisqu'il faut gnralement rordonner les priorits des applications mise en jeu. Asterisk fourni les priorits n et s qui signifient:s (same) mme priorit que la prcdente n (next) prochaine priorit disponible[phrase-menu] exten => s,1(entree),Answer exten => s,n,DigitTimeout,5 ; Set Digit Timeout to 5 seconds exten => s,n,ResponseTimeout,10 ; Set Response Timeout to 10 seconds exten => s,n,BackGround(custom/phrase-menu) ; Play main menu.; Phrase exten => exten => exten => exten => exten => exten => exten => exten =>Recording 1,1,Wait(1) 1,n,Read(PHRASEID|custom/enter-phrase-num) 1,n,Wait(2) 1,n,Record(custom/${PHRASEID}:gsm) 1,n,Wait(2) 1,n,Playback(custom/${PHRASEID}) 1,n,Wait(1) 1,s+1,Goto(s,entree)Asterisk fournit un mcanisme de groupage sous la forme de modle permettant d'exprimer un groupe d'extension de faon concise:exten => _0[8,9]XXXX,1,Dial(Zap/g1/${EXTEN:1}|20|tT)X Z N [25-7] . !Tous les chiffres entre 0 et 9 Tous les chiffres entre 1 et 9 Tous les chiffres entre 2 et 9 2, 5, 6, 7 Joker peut tre n'importe quoi Joker permettant la correspondance d'tre rsolu ds qu'il n'y a plus d'ambigutIl est important de noter qu'une extension peut tre rsolue par plusieurs modles, auquel cas le mcanisme de tri d'Asterisk effectuera l'arbitrage. Pour viter de subir ce tri, on peut utiliser le mcanisme d'inclusion qui donne la priorit aux extensions directes (non inclues) Au lieu de :[exemple] exten => _918.,1,Dial(Zap/g1/${EXTEN}) exten => _.,1,Dial(Zap/g2/${EXTEN}) exten => h,1,HangupUtilisez[exemple] include => sous-exemple exten => h,1,Hangup exten => _918.,1,Dial(Zap/g1/${EXTEN})[sous-exemple] exten => _.,1,Dial(Zap/g2/${EXTEN})Extensions et priorits spcialesLes extensions ne sont pas que numriques, Asterisk fournit des extensions spciales permettant d'effectuer certaines tches prdfinies: o s h i t T a failed fax talk Utilis avec VoiceMailet Directory, elle est utilis lorsque l'appelant appui sur 0 Extension utilis lorsqu'un appel arrive dans un contexte sans extension associ. Extension de raccroch. Extension invalide, elle est utilise lorsqu'une extension invalide est saisie Dlai d'attente dpass (Attente de DTMF gnralement) Extension invoque lorsque la valeur de TIMEOUT(ABSOLUTE) est atteinte Elle est utilis pour parler un oprateur sous VoiceMail et Directory utilis lorsque les appels automatiques chouent (/var/spool/asterisk/outgoing) Utilis lorsque qu'un FAX est dtect (tonalit 2100Hz lors de la ngociation) Utilis avec l'application BackGroundDetect (gnralement pour la dtection des rpondeurs)Il existe une priorit spciale 'hint' permettant Asterisk de communiquer l'tat d'un canal un quipement externe sans rvler la nomenclature externe qui s'avre inutile dans nombre de cas (voir http://www.voipinfo.org/wiki/view/Asterisk+standard+extensions )exten => 200,hint,SIP/tom exten => 200,1,Dial(SIP/tom)switchAsterisk utilise le mot cl pour la rsolution d'extensions inconnues au PBX local.switch => IAX2/utilisateur:passe@montreal/contextextil existe deux variantes de switch qui se distinguent essentiellement par le moment o les substitutions de variables (interpolations) s'oprent: Il s'agit de lswitch et de eswitch.Variables et expressionsDes variables peuvent tre dfini en utilisant la fonction Set:Set(variable=valeur) ; variable accessible par ${variable}Il existe nombre de variables prdfinies par Asterisk et dfinies plusieurs niveau (variables de canaux, variable dfini par certaines applications, variables de CDR, etc). Il est possible d'extraire des sous chanes de variables avec la syntaxe:${variable:offset:longueur}Des variables statiques peuvent tre dfinies dans la section [globals] du fichier extensions.conf[globals] CONSOLE=/dev/sound/dsp IAXINFO=utilisateur:passe TRUNK=IAX2/utilisateur:passe@quebec GTIMEOUT=37Asterisk est capable d'valuer des expressions et reconnat un grand nombre d'oprateurs:exten => 1,1,Set(variable1=$[1+102]) exten => 1,2,Set(variable2=$[${EXTEN}+${variable1}+200])Fonctions prdfinitet Macro${IF(?:)} ${EXISTS()} ${ISNULL()} ${REGEX("" )}Les macros sont implments comme des contextes particuliers avec des noms de type:[macro-NomMacro][macro-BoiteVocale] exten => s,1,Set(LANGUAGE()=fr) exten => s,n,Set(TIMEOUT(absolute)=60) exten => s,n,Voicemail(u${ARG1}) exten => s,n,Macro(fastbusy) exten => s,s+100,Voicemail(b${ARG1}) [home] exten => 600,1,Dial(IAX2/tom|${GTIMEOUT}tT) exten => 600,2,Macro(BoiteVocale|600@home)extensions.ael (version 2)AEL est un langage de description du dialplan d'Asterisk. On a souvent reproch au dialplan d'Asterisk de ne pas tre lisible, certains prtendent qu'AEL est une sorte de poudre aux yeux pour visuellement parer cette limitation s'il en est. En tous les cas, extensions.ael est 'compil' et la sortie est identique la syntaxe extensions.conf. Le module pbx_ael.so qui analyse le fichier extensions.ael est compltement diffrent de l'analyseur du fichier extensions.conf (pbx_config.so). La sortie de pbx_ael.so est injecte dans le dialplan comme ceci:SALAM*CLI> show dialplan inter2 [ Context 'inter2' created by 'pbx_ael' ] '123456789' => 1. Set(x=$[ 0 ]) 2. GotoIf($[ ${x} 1. Verbose("Channel isnt available") 2. Goto(123456789|12) '_sw-11-.' => 1. Verbose(${DIALSTATUS})[pbx_ael] [pbx_ael] [pbx_ael] [pbx_ael] [pbx_ael] [pbx_ael] [pbx_ael] [pbx_ael] [pbx_ael] [pbx_ael] [pbx_ael] [pbx_ael] [pbx_ael] [pbx_ael] [pbx_ael]Le fichier extensions.ael produisant ce dialplan est le suivant:context inter2 { 123456789 => { for(x=0; ${x} { begin: NoOp(Boucle infini!); Wait(1); goto begin; }; 3 => { goto s|begin; }; 4 => { goto gotoexemple|s|begin; }; }; context gotoexemple2 { s => { end: goto gotoexemple|s|begin }; };Pour plus de dtails sur AEL2 lisez le document doc/ael.txt dont cette section est extraite.Infrastructure RealTime (ARA)En plus des stockage sur fichier classique, Asterisk fournit un mcanisme dynamique permettant d'utiliser des SGBDR. Les pilotes les plus unifis sont construits sur res_odbc et res_config_odbc et utilisent UnixODBC (htt://www.unixodbc.org). D'autre travaux sont en cours et devraient fournir terme res_config_pgsql, res_config_ldap (voir l'une des branches de dveloppement de Olle E. Johansson sur http://svn.Digium Inc..com/view/asterisk/team/oej/res_config_ldap/ ).extconfig.confLa configuration ARA s'opre au moyen du fichier avec une syntaxe semblable celle-ci: => , [,] [settings] extensions => odbc,telephonie,extensions iaxpeers => odbc,telephonie,iax iaxusers => odbc,telephonie,iax sipusers => odbc,telephonie,sip sippeers => odbc,telephonie,sip voicemail => odbc,telephonie,voicemail2 jingle.conf => odbc,telephonie ; (table ast_configutilise)res_odbc.conf[ENV] [telephonie] enabled => yes dsn => telephonie username => tom password => s3cr3t pre-connect => yesStructures de tablesVoici quelques exemple de schma PostgreSQL de base:CREATE TABLE iax ( name character varying(30) NOT NULL, username character varying(30), type character varying(6) NOT NULL, secret character varying(50), md5secret character varying(32), dbsecret character varying(100), notransfer character varying(10), inkeys character varying(100), outkeys character varying(100), auth character varying(100), accountcode character varying(100), amaflags character varying(100), callerid character varying(100),context character varying(100), defaultip character varying(15), host character varying(31) DEFAULT 'dynamic'::character varying NOT NULL, mailbox character varying(50), deny character varying(95), permit character varying(95), qualify character varying(4), disallow character varying(100), allow character varying(100), ipaddr character varying(15), port integer DEFAULT 0, regseconds integer DEFAULT 0, language character varying(5) DEFAULT 'fr'::character varying, add_date timestamp without time zone DEFAULT now(), rent boolean DEFAULT true, acctid bigint DEFAULT 0 ); CREATE TABLE extensions ( id serial NOT NULL, context character varying(20) DEFAULT ''::character varying NOT NULL, exten character varying(20) DEFAULT ''::character varying NOT NULL, priority smallint DEFAULT 0 NOT NULL, app character varying(20) DEFAULT ''::character varying NOT NULL, appdata character varying(128)); CREATE TABLE voicemail ( customer_id bigint DEFAULT (0)::bigint NOT NULL, context character varying(50) DEFAULT ''::character varying NOT NULL, mailbox bigint DEFAULT (0)::bigint NOT NULL, password character varying(4) DEFAULT '0'::character varying NOT NULL, fullname character varying(50) DEFAULT ''::character varying NOT NULL, email character varying(50) DEFAULT ''::character varying NOT NULL, pager character varying(50) DEFAULT ''::character varying NOT NULL, stamp timestamp(6) without time zone NOT NULL, uniqueid serial NOT NULL ); Une table config standard MySQL CREATE TABLE ast_config ( id int(11) NOT NULL auto_increment, cat_metric int(11) NOT NULL default 0, var_metric int(11) NOT NULL default 0, commented int(11) NOT NULL default 0, filename varchar(128) NOT NULL default '', category varchar(128) NOT NULL default 'default', var_name varchar(128) NOT NULL default '', var_val varchar(128) NOT NULL default '', PRIMARY KEY (id), KEY filename_comment (filename,commented));DUNDIDUNDI est un protocole P2P utilis pour localiser les passerelles Internet vers des services de tlphonie. Il s'agit d'un protocole distribu sans autorit centrale. DUNDI permet de dterminer des chemin d'accs qui sont ensuite utiliss pour accder aux ressources localises travers les standards de tlphonie sur IP.Commanes CLIdundi dundi dundi dundi dundi dundi dundi dundi dundi dundi dundi dundishow peer show peers show transaction show requests show precache show mappings|identit query [@contexte] lookup [@contexte] [bypass] precache [@contexte] flush store history debugCryptoDUNDI est un protocole crypt, les pairs de cl doivent tre gnrs sur les systmes Asterisk qui veulent l'utiliser.dundi.conf[general] autoanswer=yes department=Infrstructures Techniques organization=Fongibilit Asymtrique locality=Dakar country=SNmail=dundi@courriel.com phone=+2215555555 bindaddr=0.0.0.0 port=4520 entityid=00:50:BA:1E:64:BC [mappings] contexte_dundi => contexte_local,poids,tech,dest[,options]Les correspondances 'mapping' fournissent la relation entre les contextes DUNDI et les contextes locaux au PBX: Mot cl contexte_dundi contexte_local poids Description Il s'agit du contexte spcifi dans la requte DUNDI. Le nom du contexte dans le dialplan local utilis pour effectuer la recherche Entre 0 et 60000 il permet de faire la discrimination sur les multiples rsultats obtenu pour une mme recherche La technologie utilise (IAX, SIP, MGCP, H.323) La destination fournir pour joindre le numro. Les variables ${NUMBER}, $ {IPADDR} et ${SECRET} peuvent tre utilises mobile, nounsolicited, residential, commercial, nopartial, nocomunsolicittech destoptionssenegal => local,0,IAX2,dundi:${SECRET}@dakar.example.com/${NUMBER}, nounsolicited,nocomunsol icit,nopartialLe fichier dundi.conf dfinit galement les homologues sous la forme:[00:11:22:44:88:FF] model = symmetric host = montreal.example.com inkey = montreal outkey = dakar include = senegal permit = senegal qualify = yes dynamic=yesLes derniers aspects consistent dfinir les accs aux ressources pointes par les correspondances 'mappings' (iax.conf pour permettre les appels, auquel cas on peut utiliser le mot de passe gnr par Asterisk toutes les heures et stock dans dundi/secret dans la base BerkeleyDB d'Asterisk) et dfinir les contextes dans lesquels des recherches DUNDI peuvent s'effectuer (switch => DUNDI/montreal par exemple).VoicemailLa configuration statique du systme de messagerie vocale s'effectue au travers du fichier voicemail.conf. Les paramtres les plus utiliss sont:[default] 3131 => 0000,Tom Tom,tomy@exemple.com 3132 => 0000,Jr Sant,jrstan@exemple.com,jrsant@pagerexemple.comL'accs la messagerie vocale se fait par les applications VoiceMail() et VoiceMailMain() dans le dialplan.AGILes AGI peuvent tre crit dans n'importe quel langage de programmation. Ils communiquent avec Asterisk travers les descripteurs de fichier standards STDIN, STDOUT et STDERR.. Les AGI sont invoqus directement dans le dialplan comme toutes les applications (AGI(), EAGI(), DeadAGI() et FastAGI()). Au dmarrage, Asterisk envoie une liste de variables ainsi que leurs valeurs l'AGI qu'il a dmarr, ces pairs ressemblent ceci:agi_request: Dial.py agi_channel: Zap/2-1 agi_language: fr agi_callerid: agi_context: topsecret agi_extension: 313 agi_priority: 1Ces pairs sont suivi d'une ligne vide pour signifier l'AGI qu'Asterisk attend des commandes pour le contrle du dialplan.Commandes AGILes commandes AGI peuvent tre obtenu avec la commnde show agi en console: Commande answer channel status database del database deltree database get database put exec get data get full variable get option get variable hangup noop receive char receive text record file say alpha say digits say number say phonetic say date say time say datetime send image Description Dcroche le canal Renvoie le statut du canal connect Supprime cl/valeur de la base Supprime une arborescence de la base Renvoie la valeur dans la base Dfinit la valeur dans la base Excute une application Rcupre des DTMF sur le canal Evalue une expression du canal Lit un fichier, demande des DTMF avec un timeout Rcupre une variable de canal Raccroche la canal Ne fait rien du tout Reois un caractre partir d'un canal qui le supporte Reois du texte partir d'un canal qui le supporte Enregistre dans un fichier Lit une chane de caractre Lits des digits Lit un nombre Lit une chane de caractre avec phontique Lit une date Lit une heure Lit une date avec un format spcifi Envoie une image un canal qui le supportesend text set autohangup set callerid set context set extension set music set priority set variable stream file control stream file tdd mode verbose wait for digitEnvoie du texte un canal qui le supporte Dfinit l'auto-raccroch pour un moment dtermin Dfinit le callerid pour le canal Dfinit le contexte du canal dans le dialplan Modifie l'extension du canal Active/Dsactive la musique d'attente Dfinit la priorit du canal dans le dialplan Dfinit une variable de canal Lit un fichier sur le canal Envoie un fichier audio sur le canal et fournit un moyen de navigation Active/Dsactive le mode TDD (pour les sourds) Envoie un message au journal verbose d'Asterisk Attend qu'une touche soit presse.Pour chaque commande envoye, Asterisk rpondra dans un style http et la rponse dtermine le statut de la commande. Les rponses ressemblent ceci:200 result=1 (VariableTest)Voici une routine Perl permettant de traiter la rponse d'Asterisk aux commandes, ce type de sous routine est gnralement fournit par les wrappers AGI:sub checkresult { my ($res) = @_; my $retval; $tests++; chomp $res; if ($res =~ /^200/) { $res =~ /result=(-?\d+)/; if (!length($1)) { print STDERR "FAIL ($res)\n"; $fail++; } else { print STDERR "PASS ($1)\n"; $pass++;} } else { print STDERR "FAIL (unexpected result '$res')\n"; $fail++; }Perl est trs populaire pur l'criture des AGI et James Golovich a produit une excellent wrapper permettant d'accder aux commandes AGI d'Asterisk d'une faon beaucoup plus simple (Asterisk::AGI). Vous trouverez cette bibliothque sur http://asterisk.gnuinter.net . Il existe galement une bibliothque AGI PHP sur http://phpagi.sourceforge.net .AGI en PythonDans cet exemple nous allons utiliser http://sourceforge.net/projects/pyst pour crire un petit AGI remplaant la commande Dial. Cet AGI va vrifier dans une table de la base, parmi une liste de fournisseurs, laquelle elle devra choisir pour envoyer l'appel en fonction de la capacit de la route. Il est trivial de l'amliorer pour gnrer des pondrations dynamiques en fonctions des statistiques sur la qualit des route crant ainsi un systme de routage dynamique convergeant. TableCREATE TABLE fournisseurs ( id serial NOT NULL, peer character varying(256), capacite integer, proto character varying(16) DEFAULT 'IAX2'::character varying, occurrence integer DEFAULT 0, dernierefois timestamp without time zone ); #!/usr/bin/python import psycopg, sys, time from asterisk import agi lcAGI = agi.AGI() db = psycopg.connect("user=test dbname=s3cr3t") curs = db.cursor() def getFournisseurs(): # Chercher les fournisseurs en vitant les plus rcent curs.execute("SELECT id, peer FROM fournisseurss WHERE occurrence < capacity ORDER BY dernierefois") return curs.fetchone() def INCoccurrence(id): curs.execute("UPDATE fournisseurss SET occurrence = occurrence + 1, dernierefois = now() WHERE id=%s" % id) db.commit()return 0 def DECoccurrence(id): curs.execute("UPDATE fournisseurs SET id=%s" % id) db.commit() return 0 dest = lcAGI.env['agi_extension'] try: (id, name) = getFournisseurs() except: id = 0 if id:occurrence = occurrence - 1 WHEREINCoccurrence(id) #TODO: Utiliser le protocole pour construire le paramtre du Dial lcAGI.set_variable("PeerId", id) lcAGI.appexec("Dial", "SIP/%s@%s|70" % (dest, name)) else: # Plus de ligne, inscrire dans le journal fd = open('/var/log/NoLines','a') fd.write('%s | %s | %s | Plus de ligne\n' % (time.ctime(), exten, lcAGI.env['agi_calleridname'])) fd.close() curs.close() db.close()Debugger les AGILes AGI peuvent tre difficile debugger. Une technique simple consiste simuler le comportement d'Asterisk en console en excutant directement l'AGI. Vous pouvez galement activer le debug des AGI en console (agi debug )AMIAsterisk fournit un autre mcanisme puissant pour exposer les routines internes du PBX et envoyer des vnements (abonnement aux vnement) sur un port TCP (5038 par dfaut) dtermin. Cette interface acceptera galement des commandes une fois l'authentification tablie. Vous pouvez vous connecter sur cet interface partir de votre application pour recevoir les vnements et envoyer des commandes. Il est mme possible de s'abonner aux CDR. Un excellent exemple utilisant cet interface est Mozphone (http://www.sysnux.pf/sections/telephonie ). En plus de l'interface brute (raw) fournit, une interface http(s) est disponible avec une extension AJAX (Asynchronous Javascript Asterisk Manger -- AJAM) RICO compatible. Noton que AJAM fournit un contrle lmentaire des appels (vue dtaille des canaux en ligne, transfert, raccroch, etc.).Applications et fonctionsAsterisk est fourni avec plthores de fonctions et d'applications traitant de tous les domaines lis de prs ou de loin au PBX. Vous aurez un excellent aperu en scrutant les sorties de commandes suivantes:show show show showapplications application functions function RessourcesAsterisk: The future of Telephony.: O'Reilly & Associates , Inc., 20052 par :Jared Smith, Jim Van Meggelen et Leif Madsen ISBN: 0-596-00962-3 http://www.oreilly.com/catalog/asterisk/ Le guide de rfrence Wiki pour Asterisk http://www.voip-info.org/wiki-Asterisk The Asterisk Asterisk Documentation Project http://www.asteriskdocs.org Digium Inc. Issue Tracker http://bugs.digium.com/main_page.php Asterisk.org http://www.asterisk.org Distribution GNU/Linux centr sur Asterisk: AstLinux http://www.astlinux.org/ Astricon http://www.astricon.net Daily Asterisk News http://www.sineapps.com/news.php Documentation en ligne Digium Inc. http://www.digium.com/en/supportcenter/documentation/ Zaptel Under the Hoodhttp://zapteldoc.blogspot.com/ Asterisk SS7 http://www.voip-info.org/wiki-Asterisk+SS7 OpenPBX.org http://www.openpbx.org Freeswitch http://www.freeswitch.org/ Yate (Yet Anothet Telephony Engine) http://yate.null.ro/ Listes de diffusion (svn-commits, asterisk-addons-commits, Asterisk-Announce, asterisk-biz, asterisk-bsd, asterisk-bugs, asterisk-ss7, dundi, asterisk-video, etc) http://lists.digium.com/mailman/listinfo/1. Jim Dixon les a ainsi nomm en rfrence Emiliano Zapata Since this concept was so revolutionary, and was certain to make a lot of waves in the industry, I decided on the Mexican revolutionary motif, and named the technology and organization after the famous Mexican revolutionary Emiliano Zapata. I decided to call the card the 'tormenta' which, in Spanish, means 'storm' but contextually is usually used to imply a big storm, like a hurricane or such 2. Disponible en tlchargement sur http://www.asteriskdocs.org/modules/tinycontent/index.php?id=11