PDA

Voir la version complète : Transfert



pokemon
30/07/2012, 13h43
Bonjour,
Mon problème concerne les transferts.

je souhaiterais être en mesure de déterminer quand arrive un appel entrant et le moment où il se termine, ainsi que la durée des différents appels sortants qui seraient effectués durant les transferts.
Sans transfert aucun problème Mais avec les transferts j'ai vraiment du mal à comprendre ce qui se passe.
Il y a un moyen simple, c'est passer par un proxy, et prendre mes mesures au niveau du proxy. Malheureusement je dois écarter cette méthode car je n'ai qu'un serveur.

En dehors de mon problème j'aurais bien aimé comprendre :
- fonctionnement des channels
- comment utiliser les fonctions qui agissent sur les CDR et dans quel cadre les utiliser : ForkCDR, ResetCDR, NoCDR, Dial (option "C")
Connaisez-vous des sites avec la documentation et qui donne des exemples d'utilisation ?

Mes contraintes : un seul serveur asterisk & la version 1.6

Voici un extrait de mon code, en faites j'ai quelque chose de vraiment bizarre, si je recois un appel, et qu'ensuite j'effectue un transfert, je vois dans ma console le channel en zombie se terminer avec l'extension "H" au moment du transfert. puis quand on raccroche j'ai bien mon son "aurevoir" qui est joué, mais du coup l'extension "H" n'est plus exécutée ????


[transfert]
exten => _X.,1,Answer()
exten => _X.,n,NoOp(Debut transfert)
exten => _X.,n,Dial(SIP/1/33632005XXX,20,tT)
exten => h,n,NoOp(Fin Transfert ${CDR(billsec)}/$[${DIALEDTIME}-${ANSWEREDTIME}])

[depart]
exten => _X.,1,Wait(2)
exten => _X.,n,Answer()
exten => _X.,n,NoOp(bonjour)
exten => _X.,n,Set(TRANSFER_CONTEXT=transfert)
exten => _X.,n,Dial(SIP/2/33632005XXX,20,gT)
exten => _X.,n,Playback(aurevoir)
exten => h,1,NoOp(Fin entrant ${CDR(billsec)} $[${DIALEDTIME}-${ANSWEREDTIME}])

olppp
30/07/2012, 15h39
bonjour,

pour ma part, j'utilise la fonction CDR() :
j'enregistre les info que je veux récupérer avec par example

Set(CDR(userfield)=${ext});

ext est le numéro source du renvoi

si le renvoi est vers l'extérieur je passe
Set(CDR(amaflags)=BILLING);

j'ai ensuite des scripts externes pour exploiter les enregistrements.