Affichage des résultats 1 à 10 sur 10

Discussion: Faire suivi MSQL dans le dialplan ou dans FastAGI ?

  1. #1
    Membre
    Date d'inscription
    octobre 2010
    Messages
    45
    Downloads
    0
    Uploads
    0

    Faire suivi MSQL dans le dialplan ou dans FastAGI ?

    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 ?

  2. #2
    Membre Association
    Date d'inscription
    septembre 2010
    Messages
    1 236
    Downloads
    0
    Uploads
    0
    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.

  3. #3
    Membre
    Date d'inscription
    octobre 2010
    Messages
    45
    Downloads
    0
    Uploads
    0
    Citation Envoyé par Reaper Voir le message
    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.

  4. #4
    Membre Association Avatar de celya
    Date d'inscription
    septembre 2010
    Messages
    135
    Downloads
    0
    Uploads
    0
    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.

  5. #5
    Membre
    Date d'inscription
    octobre 2010
    Messages
    45
    Downloads
    0
    Uploads
    0
    Citation Envoyé par celya Voir le message
    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.

  6. #6
    Membre Association
    Date d'inscription
    août 2010
    Messages
    856
    Downloads
    0
    Uploads
    0
    Citation Envoyé par survivant Voir le message
    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)

  7. #7
    Membre
    Date d'inscription
    octobre 2010
    Messages
    45
    Downloads
    0
    Uploads
    0
    voici mon dialplan

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


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

    Code:
    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);
    Code:
    [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.

  8. #8
    Membre
    Date d'inscription
    octobre 2010
    Messages
    45
    Downloads
    0
    Uploads
    0
    je viens de lire qu'il faudrait mettre

    unanswered = yes dans cdr.conf

    est-ce vrai ?

  9. #9
    Membre Association
    Date d'inscription
    septembre 2010
    Messages
    1 236
    Downloads
    0
    Uploads
    0
    Pourquoi pas tester ?

  10. #10
    Membre
    Date d'inscription
    octobre 2010
    Messages
    45
    Downloads
    0
    Uploads
    0
    Citation Envoyé par Reaper Voir le message
    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.

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •