Asterisk en réseau et passage de paramètre via SIP
Lors de la mise en réseau de PABX, il est parfois nécessaire de passer des informations spécifiques avec chaque appel. L’ouverture du protocole SIP autorise la surcharge des paramètres d’appel. Voici comment passer des paramètres et les récupérer avec un Asterisk.
Usage
Dans la majorité des cas les appels SIP ne sont pas effectués entre deux PABX de la même entité, mais l’arrivée d’Asterisk en entreprise, surtout dans celles réparties sur un territoire national ou international peut nécessiter de garder des informations cohérentes lors du passage d’un appel. Par exemple, un centre d’appel qui souhaite faire transiter le numéro du client d’un site à l’autre afin que l’application couplée via le CTI garde le contexte.
Inclusion de paramètres
La commande SIPAddHeader permet, avant un appel via Dial de surcharger la liste des paramètres d’appel SIP. Il est d’usage de préfixer le nom du paramètre par un X- de façon à expliciter le caractère privé de ce paramètre. Si plusieurs paramètres sont requis, il suffit d’appeler plusieurs fois la commande:
exten => s,2,SIPAddHeader(X-ast-param1: valeur1)
exten => s,3,SIPAddHeader(X-ast-param2: valeur2)
Récupération du paramètre
Sur l’Asterisk qui reçoit l’appel via SIP, les entêtes SIP sont accessibles par le groupe de variables SIP_HEADER. On récupérera donc les paramètres de l’exemple précédent grâce à:
exten => s,2,Verbose(${SIP_HEADER(X-ast-param1)})
Automatisation
Afin de rendre la manipulation plus simple, je vous propose les deux macros suivantes1:
; ---------Start: [macro-sipargs-push] ----------------
[macro-sipargs-push]
exten => s,1,set(_SIP_ARGS_LIST=${SIP_ARGS_LIST} ${ARG1})
exten => s,2,SIPAddHeader(X-ast-${ARG1}: ${ARG2})
exten => s,3,SIPAddHeader(X-ast-list: ${SIP_ARGS_LIST})
; ---------End: [macro-sipargs-push] ------------------
; ---------Start: [macro-sipargs-pop] ----------------
[macro-sipargs-pop]
exten => s,1,Set(sipargs_list=${SIP_HEADER(X-ast-list)})
exten => s,2,Set(i=1)
exten => s,3,Set(siparg=${CUT(sipargs_list,' ',${i})})
exten => s,4,While($["${siparg}" != ""])
exten => s,5,Set(${siparg}=${SIP_HEADER(X-ast-${siparg})})
exten => s,6,Set(i=$[${i}+1])
exten => s,7,Set(siparg=${CUT(sipargs_list,' ',${i})})
exten => s,8,EndWhile
; ---------End: [macro-sipargs-pop] ------------------
sipargs-push
Cette marco permet d’empiler un nouveau paramètre à inclure dans l’appel SIP, elle est donc appelée, une fois par paramètre et avant la commande Dial. Les paramètres sont passés préfixés par X-ast- et un paramètre supplémentaire est automatiquement crée et passé, contenant la liste de tous les paramètres: X-ast-list. L’utilisation peut s’effectuer comme suit:
exten => _931.,1,Macro(sipargs-push,SIPCALLID,${SIPCALLID})
exten => _931.,2,Macro(sipargs-push,ID_CUSTOMER,12)
exten => _931.,3,Dial(SIP/${EXTEN:3}@to-asterisk-paris,20,t)
Ici, on pousse le paramètre SIPCALLID (variable contenu dans l’appel initial depuis le poste) et une variable pour notre application (ID_CUSTOMER).
sipargs-pop
La seconde macro permet de récupérer, avec un appel SIP, l’ensemble des paramètres supplémentaires, contenus dans la variable X-ast-list. Chaque paramètre est réincorporé dans le chanel en cours et donc directement utilisable après coup. Par exemple:
exten => _[12].,1,Macro(sipargs-pop)
exten => _[12].,2,Verbose(${SIPCALLID})
exten => _[12].,3,Verbose(${ID_CUSTOMER})
exten => _[12].,4,Dial(SIP/${EXTEN},20,t)
Conclusion
On peut profiter de l’ouverture du protocole SIP pour enrichir nos applications de téléphonie, avec Asterisk, c’est encore plus simple, alors profitez-en.
- écrites avec notre outil Asterisk::Configure [↩]
|
Posté par: Alexandre Chauvin-Hameau, le 04/06/2007 Trackback | Popularité: 37% marqué 1.4, asterisk, configuration, extensions.conf et SIP |
|







(3 votes, average: 3.67 out of 5)

Bravo pour une fois de plus pour cet excellent billet. Je le mets de coté. Ca laisse entrevoir effectivement pas mal de possibilités.
le 07/06/2007 à 01:46Fastm3.