PDA

Voir la version complète : Probleme appel sortant asterisk (call files)



Schumi
08/02/2017, 10h17
Bonjour,
Dans le cadre d'un projet en alternance je dois émettre des appels. J'ai une liste de numéros, et chaque numéro à un message audio qui lui est lié, cette liste est ordonnée, et si le premier numéro répond, je ne lance pas d'appel supplémentaire, si ce numéro ne répond pas je passe au suivant. J'arrive à appeler avec le message, mais seulement le premier, je n'arrive pas à trouver comment avoir un retour, (a décroché ou non) exploitable ensuite en php. Merci pour votre aide.

Schumi
08/02/2017, 12h15
Précisions importantes, mes appels sont généré avec un call file, tres minimaliste:
channel: SIP/sip-ovh/<numéro que j'appelle>
application: Playback
data: /var/www/html/Megaphone/audio/<nom du fichier .gsm>

A chaque numéro que je dois appeler je crée un nouveau fichier .gsm avec le bon fichier audio a jouer. Et un nouveau fichier .call, ou je change le numéro et le nom du .gsm

Ce n'est pas moi qui ai configuré le serveur asterisk, j'ai donc une expérience extrêmement limité de ce logiciel.
J'espere que j'ai donné toutes les infos dont vous ayez besoin pour m'aider.

Merci à tous

olppp
09/02/2017, 11h30
Bonjour,
Utilises plutôt l'interface de management AMI. Il existe des librairies PHP pour d'aider.

Schumi
09/02/2017, 11h50
Cette solution me fait installer un nouveau truc, lire encore des tonnes de docs et refaire une partie non négligeable de mon code x), il n'y a pas moyen de juste récupérer un retour d'un appel ? J'ai vu des pistes avec les extensions mais je n'ai pas tout compris.

fastm3
10/02/2017, 11h17
Regardes la puissance des "local channel" . Plutot que de creer directement ton channel avec sip dans ton call file , passe par un local channel.
Ca serait par exemple: local/number@customcontext
Ton customcontext contiendra le dial: ( avec pattern ou passage variable )
exten => number,1,Dial(SIP/sip-ovh/${EXTEN})
( sachant que le playback est deja declenché si le channel repond ) . Un channel c'est 2 extremités, c'est un peu difficile a comprendre au debut.
Tu peux exploiter ensuite ${DIALSTATUS} en le sauvant dans une base ou fichier ou en lancant un script php.

Sinon, tu dois rajouter des callerids peut etre pour que ton appel apparaissent dans les cdrs.
Tu pourras exploiter d'un scipt php le status de l'appel en lisant la base cdr qui contiendra le resultat de l'appel
Quelques pistes a examiner...
Cheers!
Francois.

Schumi
10/02/2017, 15h46
En cherchant ce matin, j'ai trouvé des trucs a propos de Dialstatus, ça ressemble effectivement beaucoup a ce que je cherche, j'ai donc modifié mon .call pour le lié avec un context, je cherche encore a le faire correctement ^^, je vais regarder maintenant le "local channel" dont tu me parles, même si je vois pas bien l’intérêt comme ça. Et je ne savais pas que Playback() se lançait tout seul. Je posterai mes fichiers si je n'arrive pas a quelque chose ce week end. Merci a Toi pour ton aide

fastm3
10/02/2017, 22h24
je vais regarder maintenant le "local channel" dont tu me parles, même si je vois pas bien l’intérêt comme ça.
L'interet ici pour toi est de conserver le principe des call files tout en faisant le dial dans ton contexte pour en recuperer le dialstatus, c'est tout.
L'interet est donc juste de répondre a ton besoin. :)
Francois.

Schumi
14/02/2017, 11h08
J'ai a peu près compris le fonctionnement de la variable DIALSTATUS, c'est le lien entre le call file et le context que je ne comprend pas, la fonction Dial(), c'est bien pour créer un appel ? Donc j'ai pas besoin de Channel dans mon call file. Et je passe a Dial le numéro de téléphone grace a setVar dans le call file. Ce qui nous donnerai (environ):

fichier.call
Channel: SIP/sip-ovh/num (?)
Context: context-test
Extension: <num>
Priority: 1
SetVar num=<num>
SetVar fichier_audio=<chemin fichier>

[context-test]
exten => _X,1,Dial(SIP/sip-ovh/${EXTEN});
exten => _X,n,Playback(${fichier_audio})
exten => _X, n,NoOp( Dial Status: ${DIALSTATUS})
exten => _X, n,Goto(s-${DIALSTATUS},1)

exten => s-BUSY,1,...
exten=> s-BUSY,n,...
...
exten => s-NOANSWER,1,...
exten => s-NOANSWER,n,...
..

Par contre j'ai pas compris comment utiliser local channel :/

EDIT: ${EXTEN} nous donne le "canal" qu'on appelle. Et dial ouvre la connexion, donc ${EXTEN} n'existe pas tant que dial n'a pas été lancé, ou un Channel dans le call file, mais si on fait un Channel, pourquoi fait un dial ? C'est un point que je n'ai pas compris :)

PS: j'ai trouvé Asterisk the future of the telephonie sur le site, mais j'ai pas encore vraiment eu le temps de le lire. Je m'y attelle.

EDIT2: D'apres ce que je viens de voir, pas besoin de Playback si on met cette option dans le dial (A(x): Play an announcement (x.gsm) to the called party.), c'est ça ?

Schumi
22/02/2017, 11h50
Up svp

fastm3
22/02/2017, 12h42
Pas trop le temps de faire des tests pour toi et un peu compliqué a expliquer.
Essaie de jeter un coup d'oeuil a https://wiki.asterisk.org/wiki/display/AST/Local+Channel
il y a un exemple pour les call files et pourquoi le local channel peut etre utile.
Il faut bien comprendre que tu as toujours 2 "extremités" à gérer en meme temps. J'ai eu moi meme bcp de mal à integrer ce principe au debut.
Avec le call files, on lance d'un coté et l'autre partie n'est executé que si le channel est etabli.
Francois.

Schumi
23/02/2017, 09h53
Ah ok, je n'avais pas compris l'histoire des 2 extrémités, merci pour ton aide, je vais essayer de me débrouiller maintenant, je posterai le résultat pour les prochains newbie comme moi.

Schumi
30/03/2017, 09h42
Je reviens vers vous car je n'arrive toujours pas a quelque chose qui fonctionne avec les local channel.

Mon call file:
channel: Local/<num_tel>@call-file/n
extension: <num_tel>

extension.conf:
exten => _X.,1,Dial(SIP/${EXTEN}@sip-ovh)
exten => _X.,n,noOp(Dial Status: ${DIALSTATUS})
exten => _X.,n,Goto(s-${DIALSTATUS},1)

Mon call file est créer a partir d'un script php, j'ai compris comment jouer des sons, faire des goto etc, c'est vraiment juste dialstatus que je n'arrive pas à utiliser.
J'ai essayer de suivre les explications de ces pages:
https://www.voip-info.org/wiki/view/Asterisk+variable+DIALSTATUS
https://www.voip-info.org/wiki/index.php?page_id=398
https://wiki.asterisk.org/wiki/display/AST/Using+Callfiles+and+Local+Channels

Cette derniere utilise la BD de asterisk et ce n'est pas ce qui m'interesse

Si je lance l'appel avec les fichiers que je viens de vous donner, voila les messages d'erreur:
WARNING[14219][C-00000001]: chan_sip.c:23023 handle_response_invite: Received response: "Forbidden" from '"asterisk" <sip:asterisk@<adresse de mon serveur>>;tag=as53595ee5'
Dialstatus: chanunavail
...
WARNING[14271][C-00000001]: pbx.c:6646 __ast_pbx_run: Channel 'Local/0607438729@call-file-00000001;1' sent to invalid extension but no invalid handler: context,exten,priority=call-file,s-CHANUNAVAIL,1 == Everyone is busy/congested at this time (1:0/0/1)

Merci a tous

jean
30/03/2017, 17h17
le message: sent to invalid extension but no invalid handler: context,exten,priority=call-file,s-CHANUNAVAIL,1

dit qu'il ne trouve pas dans le contexte call-file, l'extension s-CHANUNAVAIL

dans extensions.conf, il faut que tu aies une section
[call-file]

et ensuite tes trois lignes:
exten => _X.,1,Dial(SIP/${EXTEN}@sip-ovh)
exten => _X.,n,noOp(Dial Status: ${DIALSTATUS})
exten => _X.,n,Goto(s-${DIALSTATUS},1)


puis que tu ajoutes dans cette même section:
exten => s-CHANUNAVAIL,1,Verbose(1, C'est raté )

Schumi
30/03/2017, 17h53
J'avais compris ça, j'avais juste pas fait le rapprochement entre le 2nd message et ça ^^, désolé. Ce n'est pas ça mon réel problème, c'est que quelque soit l'action que je fais avec mon téléphone portable (laisser sonner jusqu’à la messagerie, raccrocher, être occupé etc), c'est toujours CHANUNAVAIL qui sort, j'aimerai avoir un retour pour chacun de ces cas, et d’après ce que j'ai lu la variable DIALSTATUS et les local channel peuvent me le fournir.

jean
30/03/2017, 21h06
il faudrait vérifier avec sip set debug on que c'est bien ce que te retourne ovh.

Schumi
31/03/2017, 10h39
J'ai trouvé ça, ils disent que j'essaye de faire quelque chose alors que je n'ai pas le droit. Et que le soucis viens du fournisseur, donc dans mon cas de ovh
http://forums.asterisk.org/viewtopic.php?f=1&t=89847
Mais pourtant l'appel ce passe, je ne comprend pas

Schumi
31/03/2017, 11h55
Voila le CLI complet pour un call file:

-- Attempting call on Local/<tel>@call-file/n for <tel>@:1 (Retry 1)
-- Executing [0607438729@call-file:1] Dial("Local/<tel>@call-file-00000000;2", "SIP/0607438729@sip-ovh") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/<tel>@sip-ovh
-- SIP/sip-ovh-00000000 is ringing
-- SIP/sip-ovh-00000000 is making progress passing it to Local/<tel>@call-file-00000000;2
-- SIP/sip-ovh-00000000 answered Local/0607438729@call-file-00000000;2
-- Executing [0607438729@call-file:1] Dial("Local/0607438729@call-file-00000000;1", "SIP/<tel>@sip-ovh") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/0607438729@sip-ovh
-- Local/<tel>@call-file-00000000;1 requested media update control 20, passing it to SIP/sip-ovh-00000001
-- Local/<tel>@call-file-00000000;1 requested media update control 20, passing it to SIP/sip-ovh-00000001
-- Local/<tel>@call-file-00000000;1 requested media update control 20, passing it to SIP/sip-ovh-00000001
-- Local/<tel>@call-file-00000000;1 requested media update control 20, passing it to SIP/sip-ovh-00000001
[Mar 31 11:53:30] WARNING[3603][C-00000003]: chan_sip.c:23023 handle_response_invite: Received response: "Forbidden" from '"asterisk" <sip:asterisk@<<mon serveur>>;tag=as5ba11cb8'
== Everyone is busy/congested at this time (1:0/0/1)
-- Executing [<tel>@call-file:2] NoOp("Local/<tel>@call-file-00000000;1", "Dial Status: CHANUNAVAIL") in new stack
-- Executing [<tel>@call-file:3] Goto("Local/<tel>@call-file-00000000;1", "s-CHANUNAVAIL,1") in new stack
-- Goto (call-file,s-CHANUNAVAIL,1)
-- Executing [s-CHANUNAVAIL@call-file:1] Verbose("Local/0607438729@call-file-00000000;1", "1, C'est raté ") in new stack
C'est raté
-- Auto fallthrough, channel 'Local/0607438729@call-file-00000000;1' status is 'CHANUNAVAIL'
== Spawn extension (call-file, 0607438729, 1) exited non-zero on 'Local/0607438729@call-file-00000000;2'
[Mar 31 11:53:30] NOTICE[3687]: pbx_spool.c:402 attempt_thread: Call completed to Local/0607438729@call-file/n

Schumi
31/03/2017, 14h21
J'ai envoyé un mail chez OVH, j’attends leur réponse

jean
31/03/2017, 16h04
en fait il y a 2 appels simultanés au meme 06 et probablement ovh te limite à un appel simultané. peux tu poster ton call file et le bout de dialplan call-files ?

Schumi
03/04/2017, 08h40
Ce sont ceux que j'ai posté un peu plus haut, je les remet.

Call file:
channel: Local/<tel>@call-file/n
extension: <tel>

[call-file]
exten => _X.,1,Dial(SIP/${EXTEN}@sip-ovh)
exten => _X.,n,noOp(Dial Status: ${DIALSTATUS})
exten => _X.,n,Goto(s-${DIALSTATUS},1)

exten => s-CHANUNAVAIL,1,Verbose(1, C'est raté )

La c'est juste un call file de test pour vois si j'arrive a récupérer différentes valeurs pour DIALSTATUS, c'est pour ça qu'il est très minimaliste.