PDA

Voir la version complète : Faire suivi MSQL dans le dialplan ou dans FastAGI ?



survivant
09/11/2010, 16h24
Voici le contexte :

je voudrais faire des appels externes sur demande. Je pourrais prendre un call file ou la commande Originate. Comme je veux lancer mes appels à partir du web, je pensais utiliser l'action Originate. Comme je veux aussi garder une trace des appels qui ont été fait et non répondu. Je vais utiliser MySQL pour faire le suivi.

Je cherche des commentaires de personnes ayant de l'expérience sur le sujet.

Voici les cas dont j'ai pensé.. mais je ne sais pas ce qui est de mieux, (je pense que le diaplan plan être plus facile à modifier en temps-reel au besoin)

cas 1 :

faire un insert dans MySQl.. genre : status=0,
faire l'action Originate
si le résultat de OriginateResponse == SUCCESS status=1, sinon status=2
et faire le update dans la DB pour ce numéro de téléphone.

cas 2 :

faire l'action Originate mais appeller un script AGI (je n'ai rien fait que l'exemple Hello world.. donc pas sur comment ca marche) et faire les inserts MYSQL dans le script.. si possible

cas 3 : exemple prit ici : http://forums.digium.com/viewtopic.php?t=23834
OriginateAction dial = new OriginateAction();
dial.setChannel("Local/DIAL@my_context");
dial.setContext("my_context");
dial.setExten("ANSWERED");
dial.setPriority(1);
dial.setAsync(true);
dial.setCallerId("5555551212");
dial.setVariable("dial_string","SIP/+15555551213@myprovider.com");

[my_context]
exten => DIAL,1,Verbose(1,About to perform outdial)
exten => DIAL,n,Dial(${dial_string},30)
exten => DIAL,n,Agi(agi://127.0.0.1/MyAGI.agi?dial_result=${DIALSTATUS})
exten => DIAL,n,Hangup()

exten => ANSWERED,1,Answer()
exten => ANSWERED,n,Agi(agi://127.0.0.1/MyAGI.agi?dial_result=ANSWER)
exten => ANSWERED,n,Hangup()

ou je pourrais bien remplacer le call AGI, par les insert mysql.

Qu'est-ce que vous en pensez ?

Reaper
14/11/2010, 14h09
Asterisk par défaut possède une possibilité d'enregistrer l'ensemble des appels en cdr mysql. Pas la pein de forcer, je vous invite de chercher cdr_mysql.com (il faut installer asterisk-addonns.

Il vous reste seulement comprendre comment utiliser originate.

survivant
14/11/2010, 16h36
Asterisk par défaut possède une possibilité d'enregistrer l'ensemble des appels en cdr mysql. Pas la pein de forcer, je vous invite de chercher cdr_mysql.com (il faut installer asterisk-addonns.

Il vous reste seulement comprendre comment utiliser originate.

ca enregistre seulement les appels qui ont été acceptés. pas ceux qui sont refusés. Donc ce n'est pas ce que je cherche.

si j'utilise la commande Originate et la personne refuse l'appel.. il n'aura pas d'entrée dans le CDR.

celya
14/11/2010, 23h16
J'utilise à peu près la meme méthode que le cas 3.

Si cela peu t'aider, j'ai une règle de base. Pourquoi utiliser un AGI alors que le dialplan peu le faire simplement.

Donc je te conseille une bonne vielle commande mysql dans le dialplan.

survivant
14/11/2010, 23h20
J'utilise à peu près la meme méthode que le cas 3.

Si cela peu t'aider, j'ai une règle de base. Pourquoi utiliser un AGI alors que le dialplan peu le faire simplement.

Donc je te conseille une bonne vielle commande mysql dans le dialplan.

ok.. mais comment je fais le code suivant :

Action : Originate

et la personne ne répond pas.

comment vais-je voir le CDR dans la database, si le dialplan plan ne s'est pas exécuté ?

as-tu un exemple ?

est-ce un timeout ?

ca serait bien d'avoir un exemple.. ca aide beaucoup plus.

ffossard
16/11/2010, 02h07
ok.. mais comment je fais le code suivant :

Action : Originate

et la personne ne répond pas.

comment vais-je voir le CDR dans la database, si le dialplan plan ne s'est pas exécuté ?

as-tu un exemple ?

est-ce un timeout ?

ca serait bien d'avoir un exemple.. ca aide beaucoup plus.

Le dialplan peut s'exécuter dans tous les cas.
Que se passe-t-il dans votre cli quand l'appelant "refuse l'appel" (je ne sais pas exactement ce que vous entendez par là, mais peu importe), à quelle priorité asterisk saute-t-il ? (ps: c'est pour vous mettre sur la piste de la solution)

survivant
16/11/2010, 02h53
voici mon dialplan

c'est celui là qui est appellé : TestMenuOriginate


voici le cas.. je lance la commande action : Originate



OriginateAction originateAction;
ManagerResponse originateResponse;

originateAction = new OriginateAction();
originateAction.setChannel("SIP/1001");
//originateAction.setContext("default");
originateAction.setContext("TestMenuOriginate");

originateAction.setExten("1001");
originateAction.setPriority(new Integer(1));
originateAction.setTimeout(new Integer(30000));

// connect to Asterisk and log in
managerConnection.login();

// send the originate action and wait for a maximum of 30 seconds for Asterisk
// to send a reply
originateResponse = managerConnection.sendAction(originateAction, 30000);




[TestMenu]

exten => start,1,Answer()
same => n,Background(main-menu)
same => n,WaitExten(5)

exten => 1,1,Playback(digits/1) ; si appuye sur 1
same => n,Log(NOTICE, Menu selectionne est : ${EXTEN})
same => n,SayAlpha(${EXTEN})
same => n,Set(HOTDESK_UPDATE_STATUS(1001)=${EXTEN})

exten => 2,1,Playback(digits/2) ; si appuye sur 2
same => n,Log(NOTICE, Menu selectionne est : ${EXTEN})
same => n,SayAlpha(${EXTEN})

exten => 3,1,Playback(digits/3) ; si appuye sur 3
same => n,Log(NOTICE, Menu selectionne est : ${EXTEN})
same => n,SayAlpha(${EXTEN})

exten => i,1,Playback(pbx-invalid) ; invalid
same => n,Goto(TestMenu,start,1)

exten => t,1,Playback(vm-goodbye) ; timeout
same => n,Hangup()


[TestMenuOriginate]
;Contexte pour les appels entrants : TestMenuOriginate

exten => s,1,Log(NOTICE, Incoming call from ${CALLERID(all)})
exten => s,n,Goto(TestMenu,start,1) ; syntaxe : Goto(context,extension,priority)
exten => s,n,Hangup()



Voici le scénario.

je lance l'appel via le Originate. La personne recoit un appel, mais elle ne répond pas.. elle racroche directement. Comme si je m'appelle sur mon cellulaire.. je peux faire : Répondre, ou refusé.

Quand je faisais refusé.. le ne voyait jamais dans mes logs la 1ere ligne du dialplan : exten => s,1,Log(NOTICE, Incoming call from ${CALLERID(all)})

seulement si je répondais.

survivant
16/11/2010, 04h29
je viens de lire qu'il faudrait mettre

unanswered = yes dans cdr.conf

est-ce vrai ?

Reaper
16/11/2010, 22h12
Pourquoi pas tester ?

survivant
17/11/2010, 20h45
Pourquoi pas tester ?

car il était trop tard. sans joke... faire du copie/coller à l'aveugle.. c'est pas brillant non plus. Le but était de savoir si c'est CETTE ligne qui fallait mettre.. ca aurait pu sembler fonctionner.. mais en meme temps causer des problèmes ailleurs.

Et c'est ca que je voulais savoir. Et oui ca marche.