PDA

Voir la version complète : Action Monitor



asteriskAGI
14/05/2014, 23h16
Bonsoir tout le monde,

Je reviens encore une fois pour un sujet que j'ai déjà évoqué cela fait longtemps. C'est à propos des enregistrements par AMI. Je passe des appels sans aucun souci avec Originate, mais on me renvoie une erreur (no such channel), sachant que c'est le même que je spécifie pour Originate.

Action: Login
Events: off
Username: user
Secret: passwd

Action: Originate
Channel: SIP/100
CallerID: 101
Context: default
Priority: 1

Action: Monitor
Channel: SIP/100

Action: Logoff

JE commence à perdre ma patience à cause de ce problème qui me bloque depuis des semaines.
Prière de me donner un coup de main.

Grand MERCI

quintana
15/05/2014, 00h12
Salut,

Tu te trompes de channel pour le monitor, tu ne peux pas faire cela. Tu dois avoir le vrai nom du channel et non celui de la techno/peer.
C'est normal que cela ne fonctionne pas.
Fais un core show channels dans la cli et tu verras à quoi il ressemble.

++

asteriskAGI
15/05/2014, 01h09
Merci énormément quintana .

La réponse est du forme: SIP/101-000000xx. Je me demande s'il est possible de fixer le canal (xx prennent des valeurs différentes à chaque nouveau lancement d'appel) ?

quintana
15/05/2014, 01h25
Non tu ne peux pas, tu dois aller chercher toi même le canal que tu veux enregistrer et l'utiliser.

quintana
15/05/2014, 01h26
Récupères les events que tu reçois dans l'AMI pour faire cela.

asteriskAGI
15/05/2014, 01h47
Merci encore une fois quintana. Je me permets de vous lister ce que cela me donne comme résultat. (J'aimerais bien savoir si le choix du channel est fait juste au niveau de la ommande, ou y -t elle une modification à faire au niveau des fichiers de conf).

Event: FullyBooted
Privilege: system,all
Status: Fully Booted


Sending> Action: originate
Sending> Channel: SIP/101
Sending> WaitTime: 10
Sending> CallerId: 101
Sending> Exten: 102
Sending> Context: default
Sending> Priority: 1
Sending>
Response: Success
Message: Originate successfully queued

Event: Newchannel
Privilege: call,all
Channel: SIP/101-0000005d
ChannelState: 0
ChannelStateDesc: Down
CallerIDNum: 101
CallerIDName: device
AccountCode:
Exten:
Context: from-internal
Uniqueid: 1400078777.93

Event: NewAccountCode
Privilege: call,all
Channel: SIP/101-0000005d
Uniqueid: 1400078777.93
AccountCode:
OldAccountCode:

Event: NewCallerid
Privilege: call,all
Channel: SIP/101-0000005d
CallerIDNum: 101
CallerIDName: device
Uniqueid: 1400078777.93
CID-CallingPres: 0 (Presentation Allowed, Not Screened)

Event: ExtensionStatus
Privilege: call,all
Exten: 101
Context: ext-local
Hint: SIP/101
Status: 8

Event: Newstate
Privilege: call,all
Channel: SIP/101-0000005d
ChannelState: 5
ChannelStateDesc: Ringing
CallerIDNum: 101
CallerIDName: device
ConnectedLineNum: 101
ConnectedLineName:
Uniqueid: 1400078777.93

Event: Newstate
Privilege: call,all
Channel: SIP/101-0000005d
ChannelState: 6
ChannelStateDesc: Up
CallerIDNum: 101
CallerIDName: device
ConnectedLineNum: 101
ConnectedLineName:
Uniqueid: 1
Sending> Action: Logoff
Sending>
400078777.93

Event: ExtensionStatus
Privilege: call,all
Exten: 101
Context: ext-local
Hint: SIP/101
Status: 1

Event: Newexten
Privilege: dialplan,all
Channel: SIP/101-0000005d
Context: default
Extension: 102
Priority: 1
Application: Macro
AppData: exten-vm,novm,102
Uniqueid: 1400078777.93

Event: VarSet
Privilege: dialplan,all
Channel: SIP/101-0000005d
Variable: MACRO_EXTEN
Value: 102
Uniqueid: 1400078777.93

Event: VarSet
Privilege: dialplan,all
Channel: SIP/101-0000005d
Variable: MACRO_CONTEXT
Value: default
Uniqueid: 1400078777.93

Event: VarSet
Privilege: dialplan,all
Channel: SIP/101-0000005d
Variable: MACRO_PRIORITY
Value: 1
Uniqueid: 1400078777.93

Event: VarSet
Privilege: dialplan,all
Channel: SIP/101-0000005d
Variable: MACRO_DEPTH
Value: 1
Uniqueid: 1400078777.93

Event: VarSet
Privilege: dialplan,all
Channel: SIP/101-0000005d
Variable: ARG1
Value: novm
Uniqueid: 1400078777.93

Event: VarSet
Privilege: dialplan,all
Channel: SIP/101-0000005d

asteriskAGI
15/05/2014, 03h38
En fait, j'ai remarqué que le changement du canal se fait par incrémentation à chaque nouvel appel. dès que j'en choisisse un qui diffère de celui qui allait être pris, j'obtiens une erreur.

asteriskAGI
15/05/2014, 15h49
Bonjourrrr,

En fait, j'ai suivi ce lien : http://comments.gmane.org/gmane.comp.telephony.pbx.asterisk.user/275654. Si j'ai bien compris, nous récupérons une valeur d'un canal avec Event : GetVar que nous définissons au niveau de manager.conf. Sauf que Value qui m'est retourné reste vide.

Je procède ainsi:
Action: GetVar
ActionID: 12
Channel: SIP/101-00000012c (cette valeur que je dois incrémenter à chaque fois pour faire un nouveau test :s)
Variable: chan

Response: Success

Action: Logoff
ActionID: 12
Variable:chan
Value:

Excusez moi si la solution est juste devant mes yeux, et que je n'y parviens tjrs pas :s
Encore Merci

quintana
15/05/2014, 16h16
je ne comprends pas où tu bloques ... Tu ne dois rien incrémenter, tu dois juste utiliser le channel que tu souhaites pour faire de l'enregistrement. Si tu avais un autre type de channel en plus cela ne fonctionnerai pas.
Donc tu emets ton appel, tu récupères la liste de tes channels, tu choisi lequels tu veux enregistrer et puis c'est tout. Sinon si tu veux le faie automatiquement à chaque appel, rajoutes dans ton dialplan un mixmonitor() par exemple, cela sera plus simple.

asteriskAGI
17/05/2014, 17h55
Merci énormément pour votre help :)

asteriskAGI
19/05/2014, 19h31
Salut,

Je reviens encore une fois pour mieux exposer mon problème.

alors, en fait mon but était d’exécuter le script suivant: http://www.banquise.org/python/how-to-dial-a-number-using-asterisk-and-python/, en rajoutant en plus de Originate, Monitor.

Grace à Quintana, j'ai compris, que je me trompais de canal pour Monitor, alors en visualisant Events lors des appels, j'ai pu voir le format exact (SIP/exten-xxxxxxxx). ce format je ne pouvais pas en choisir un, comme je le croyais, et l'attribuer à Channel dans l'action Monitor, puisqu'il était généré par Asterisk automatiquement à chaque lancement d'appel en respectant une certaine croissance (exemple pour appel1: SIP/101-0000000d, après SIP/101-0000000e, SIP/101-0000000f, SIP/101-00000010 ... SIP/101-000000ff, SIP/101-00000100 ..., une fois asterisk redémarré il revient SIP/101-00000000).

Alors, je croyais pouvoir trouver des actions (en AMI) pouvant m'aider à récupérer le canal, mais c'était en vain.

Actuellement, j'ai réussi à le faire, en ajoutant dans mes actions:

Action: Status
Command: Lists channels status

dans la réponse envoyé par Asterisk ( data = s.recv(1024) ), je cherche (SIP/exten-) avec la fonction python find(), je récupère le canal et je l'attribue à Channel dans l'action Monitor. Ainsi je passe mes appels depuis un script python, et je les enregistre (sous le nom que je souhaite), sans aucun souci.

Alors je peux me contenter de ceci (bien que ça ne m'est pas l'aire être pratique), sauf que s'il y a autre manière de faire, j'aurais apprécié encore plus ...

Grand Merci à Quintana et Jean

jean
19/05/2014, 20h56
Salut

Si j'ai bien compris, tu veux initier un appel via AMI, en récupérer l'identifiant (ie, le channel complet) afin de lancer un monitor dessus.
J'ai fait un petit test, en faisant un bete telnet 127.0.0.1 5038 et en tapant les commandes à la main. Effectivement, c'est pas aussi trivial que cela n'y parait.
Le Originate ne renvoie pas le channel attribué. Il faut attendre un événement Newchannel, récupérer le champ Channel et comparer que le la partie avant le - corresponde à l'appel que tu viens de lancer.
Mais, chose encore plus bizarre, je ne reçois (sur mon serveur de test), que le newchannel pour la deuxième "leg" de l'appel (pour mémoire, un appel est consitué de deux legs, le poste appelant vers asterisk, asterisk vers le poste appelé, qui sont ensuite bridgée au décrochage de l'appelé).
peux tu faire ce test (en lançant d'abord un
Action: Events
EventMask: on

et voir si tu vois bien tous les évts ?

J

asteriskAGI
19/05/2014, 21h44
Vous avez bien cerné mon problème et mon objectif.

Mon test donne le résultat suivant: (je les liste sans détails)

Action: Originate
...
Action: Events
...
Event: Newchannel
...
Action: Logoff
....
Event: VarSet
Event: NewAccountCode
Event: NewCallerid
Event: ExtensionStatus
Event: NewState

Effectivement, ça ne donne que le canal de l'appelant.

jean
19/05/2014, 22h45
j'ai des pistes...

en fait, le event arrive une fois le décroché fait, donc si ca te convient, la séquence est bonne, il suffit d'attendre (de toutes facons, je doute qu'un monitor fonctionne si le channel n'est pas UP)
sinon, il faut rajouter: Async: 1 à la fin des paramètres originate, et les événements liés à l'originate seront envoyés tout de suite, avec en plus un evenemnet OriginateResponse
En revanche, faire le lien "formel" entre le originate et le event n'est pas assuré (si on voit passer un event , avec les bons paramètres, on peut supposer que c'est le notre, mais on a pas un id garanti).

ceci étant dit, pourquoi ne pas faire le monitor dans le contexte ?

asteriskAGI
19/05/2014, 23h19
Avec Async: 1 le résultat est encore mieux.

Sinon, pouvez vous me dire comment je pourrais faire le monitor dans le contexte (je n'ai pas bien compris) ?

jean
20/05/2014, 00h00
dans le originate, tu vais as un paramètre 'Context: default' (peso, j'aime pas utiliser default, au niveau sécurité ca peut poser des pbm)
il suffit dans ce contexte, et dans l'extension ou l'on se branche (en fonction du numero) de rajouter le monitor

asteriskAGI
20/05/2014, 00h17
Excusez moi, mais vous parlez toujours de Monitor par AMI ? parce que je n'arrive pas à voir comment serait la syntaxe

jean
20/05/2014, 14h18
le monitor peut être fait soit via AMI après l'originate, soit dans le dialplan, en le mettant dans le contexte activé (indiqué en paramètre du originate, dans ton cas, default). je suis juste pas sur qu'il fonctionne avant le dial, mais c'est la façon la plus simple

asteriskAGI
20/05/2014, 17h18
Oui tout à fait, d'ailleurs au début je m'appuyais sur l'enregistrement fait par défaut (par Elastix), mais comme je devais renommer mes enregistrements à partir de mon script, donc je devais forcément le faire par AMI.

Je vous remercie énormément pour vos réponses et votre temps consacré à nous répondre.
ça m'a éclaircit énormément des choses.