PDA

Voir la version complète : Comment savoir si l'appel a été transféré au moment du hangup



brenard
07/03/2017, 18h57
Bonjour,

Je cherche à corriger un problème sur un service qui fonctionne bien sauf dans un cas précis, je m'explique : il s'agit d'une extension qui enregistre les appels automatiquement et qui au moment du hangup déclenche une action pour aller stocker le message enregistré dans une application distante via l'appel d'un script AGI. Mon problème concerne les appels qui sont transférés :

- un appel arrive sur l'extension
- l'appel est automatiquement enregistré (via MixMonitor())
- l'appel est pris par l'utilisateur A
- l'utilisateur A met l'appel en pause pour appeler l'utilisateur B
- l'utilisateur A transfert l'appel à B
- l'utilisateur B traite l'appel et raccroche

Mon problème c'est que dans ce scénario, j'ai deux événement hanhup : lorsque A tranfert l'appel à B et lorsque B (ou l'appelant) raccroche. Je cherche à distinguer les deux pour ne déclencher l'action de stockage du message que dans le deuxième cas. J'ai bien cherché une variable me permettant de faire la différence mais je n'en ai pas trouvé une qui fasse l'affaire : le DIALSTATUS est à ANSWER dans les deux cas par exemple..

Auriez-vous une idée ?

Pour info, voilà à quoi ressemble l'extension (il s'agit d'un contexte entier) :



[support]
exten => s,1,Set(TICKET_RECORD_FILE_PREFIX=/var/cache/asterisk/support-${EPOCH})
exten => s,n,MixMonitor(${TICKET_RECORD_FILE_PREFIX}.wav,bW (4))
exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
exten => s,n,Dial(${SUPPORT},45,gm)
exten => s,n,Hangup()

exten => h,1,StopMixMonitor()
exten => h,n,AGI(/usr/local/peephone/ticket_update.py)

jean
07/03/2017, 21h31
Je chercherais à utiliser les variables globales qui se propagent sur les autres channels en les préfixant par __

Ex: Set(__myvar=lavaleur)

Puis Verbose(1,${myvar})

Ca doit peut etre permettre de s'en sortir !

brenard
14/03/2017, 19h36
Je chercherais à utiliser les variables globales qui se propagent sur les autres channels en les préfixant par __

Ex: Set(__myvar=lavaleur)

Puis Verbose(1,${myvar})

Ca doit peut etre permettre de s'en sortir !

Merci pour ta réponse mais je ne suis pas sur de la comprendre : en quoi une telle variable m'aiderai dans mon problème ?

Par ailleurs, j'ai repéré que lors du hangup du premier appel, l'agi_channel est systématiquement suffixé par "<ZOMBIE>". Serait-se un moyen fiable de faire la distinction ?

jean
14/03/2017, 21h06
je positionnerai une variable disant "je suis dans la première partie de l'appel" ou "l'appel a été transféré", et je la regarde au hangup et je décide ce qu'il faut faire