PDA

Voir la version complète : Jouer un son dans une conversation en cours puis couper pour libérer la ligne



Penegal
25/11/2011, 15h45
Bonjour.

Je suis actuellement en train de travailler sur un futur dialplan qui comportera des lignes SIP trunk et 3 lignes SIP ou analogiques provenant de passerelles GSM.

Afin que les services d'urgence puissent tracer un éventuel appel depuis notre entreprise, je voudrais, après avoir choisi une ligne GSM et avoir vérifié si elle était occupée (déjà fait), jouer un fichier son sur la conversation en cours pour indiquer que la ligne va être coupée pour un appel prioritaire, puis couper effectivement la conversation pour ensuite faire passer l'appel d'urgence. À défaut de pouvoir jouer un son, je voudrais que la personne voulant contacter les services d'urgence puisse annoncer à l'employé qui fait partie de la conversation, et seulement à lui, qu'il va prendre la ligne et que l'employé doit terminer immédiatement son appel. J'ai essayé d'utiliser ChanSpy et ExtenSpy, mais je ne comprends pas comment leur indiquer un fichier à lire.

J'ai également pensé à envoyer un UserEvent avec ce code (trouvé ici (http://asteriskfaqs.org/2010/09/20/asterisk-users/playing-audio-to-one-channel.html)) :


CfMC_ActionID=PlayBack
CfMC_WhatToPlay=lyrics-louie-louie
CfMC_WhoHear=SIP/GXP280_18-00000002
exten => do_chanspy,n,UserEvent(BeforeChanSpy,ActionID:${Cf MC_ActionID} & ${UNIQUEID} & ${CHANNEL} & ${CfMC_WhatToPlay} & ${CfMC_WhoHear})
exten => do_chanspy,n,ChanSpy(${CfMC_WhoHear},qW)
exten => do_chanspy,n,UserEvent(AfterChanSpy,ActionID:${CfM C_ActionID} & ${UNIQUEID} & ${CHANNEL} & ${CfMC_WhatToPlay} & ${CfMC_WhoHear})
Le problème, c'est qu'il me faudrait trouver pour ce code la valeur de ${UNIQUEID} pour un channel dans lequel je ne suis pas, et je ne sais pas comment accéder aux variables d'un autre channel.

J'ai également lu que je pouvais faire ça en mettant les correspondants des lignes GSM dans une salle de conférence par ligne, mais cela me paraît être lourd à jouer et surtout risque de ne pas être transparent pour les utilisateurs.

Parmi ces méthodes, ChanSpy et ExtenSpy ont ma préférence car elles sont plus simples à gérer côté AEL, mais comment leur faire lire un son prédéfini?

Sinon, comment extraire le UNIQUEID d'un channel autre que le channel courant? Cette méthode par UserEvent fonctionnerait-elle?

Sinon, si seule la conférence peut fonctionner, comment la configurer pour que cela soit identique à un appel standard pour les utilisateurs?

Je sais, je ma fais bien ch**r, mais je ne peux pas me permettre de router les appels d'urgence au plus simple et d'entraver ainsi l'arrivée des secours parce que je n'aurais pas su effectuer une configuration assez fine d'Asterisk. :cry:

Merci d'avance à tout bonne âme qui voudra m'aider.:ouimaitre:

Reaper
25/11/2011, 16h59
Joue pas le message, coupe. Ça va par arriver tout les jours.

ffossard
27/11/2011, 14h26
c'est clair, en cas d'appel d'urgence, il n'y a pas une seconde à perdre, un channel doit être raccroché sans attendre.

Par contre la possibilité de jouer un son sur une "autre" conversation est une fonctionnalité intéressante pour différents usages, on peut continuer à creuser :)

On peut récupérer les identifiants des channels en parsant le résultat d'une commande comme "core show channels"
Pour lire les variables des autres channels, on peut partager cette variable "intéressante" (fonction shared() )

Thera
29/12/2011, 17h35
Il n'y a pas photo, tu coupes l'appel. Mais pour répondre à ton problème, utilises la commande manager redirect, ça devrait répondre à ton besoin.

Penegal
29/12/2011, 17h42
Joue pas le message, coupe. Ça va par arriver tout les jours.

C'est clair que ça m'aurait évité des tracas, mais comme ce sont nos commerciaux qui utilisent ces lignes, je préfère prévenir avant, car je ne peux quand même pas raccrocher au nez des clients; de toute façon, comme on est à la campagne, les secours mettront 10 minutes minimum à arriver, ce qui ne sauvera en aucun cas une personne en danger de mort. Si il n'y a pas risque de mort, alors 15 secondes ne changeront pas tellement la donne.


Il n'y a pas photo, tu coupes l'appel. Mais pour répondre à ton problème, utilises la commande manager redirect, ça devrait répondre à ton besoin.

J'y avais pensé, mais ne voyait pas comment appeler cette commande depuis mon dialplan, ni comment obtenir les 2 channels de la conversation pour pouvoir leur indiquer que la communication avait été interrompue pour un appel prioritaire.

Je pense avoir réussi à m'en sortir avec une conférence, mais cette configuration n'a pas été testée. Je donnerai le retour de cette façon de faire quand je l'aurai.