Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 10 sur 37

Discussion: Scritp AGI et PHP : interaction entre asterisk et application web php

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre
    Date d'inscription
    février 2011
    Localisation
    Saint-Marcellin (Isère)
    Messages
    46
    Downloads
    0
    Uploads
    0
    Salut Nabil,
    Moi, j'ai aussi utilisé un script php... Mais l'agi n'était pas oppérationnel chez moi j'ai fait tout autrement.
    J'ai utilisé tout d'abord une autre voix (ibm) qui me semble plus compréhensible.
    Voici un bout de mon script extensions.conf
    [Maison]
    exten => s,1,Ringing()
    exten => s,2,Wait(1)
    exten => s,3,Answer()
    exten => s,4,PlayBack(${ChmAudio}/Bienvenu)
    exten => s,5,Goto(Maison,TousTels,1)
    exten => TousTels,1,Set(CALLFILENAME=${ChmEnreg}/Entrant/${STRFTIME(${EPOCH},,%Y-%m-%d_%H%M)}-${CALLERID(num)})
    exten => TousTels,2,Set(__ContextProvenance=Maison)
    exten => TousTels,3,Set(__ExtensionProvenance=TousTels)
    exten => TousTels,4,Monitor(wav,${CALLFILENAME},m)
    exten => TousTels,5,Set(CHANNEL(musicclass)=Attente)
    exten => TousTels,6,agi(Identifiant.php,${CALLERID(num)})
    exten => TousTels,7,Set(__Identifiant=${Identifiant})
    exten => TousTels,8,System(/usr/bin/sox /var/local/Monitor/Asterisk/Appelant.wav -r 8000 /var/local/Monitor/Asterisk/Appelant.ogg && /bin/chmod +x /var/local/Monitor/Asterisk/Appelant.ogg && /bin/rm /var/local/Monitor/Asterisk/*.wav)
    exten => TousTels,9,DIAL(SIP/SPABureau&SIP/SPASallon&SIP/SPAStudio,40,rG(RecupAppel^Choix^1))
    exten => TousTels,10,GoToIf($["${DIALSTATUS}" == "CHANUNAVAIL"] ?TousTels,13)
    exten => TousTels,11,Voicemail(713@MANU,bs)
    exten => TousTels,12,hangup
    exten => TousTels,13,Voicemail(713@MANU,us)
    exten => TousTels,14,hangup

    J'utilise ce procédé car je suis aveugle et je ne peux pas lire l'écran de mon téléphone.
    J'ai stocké un carnet d'adresse sur une base mysql.
    Lorsque quelqu'un m'appelle, je décroche et j'ai le choix de refuser l'appel ou l'accepter.
    Voici mon autre "fonction"
    [RecupAppel]
    exten => Choix,1,GoTo(RecupAppel,ring,1)
    exten => Choix,2,GoTo(RecupAppel,identity,1)
    exten => identity,1,Wait(1)
    exten => identity,2,PlayBack(${ChmAudio}/AppelQui)
    exten => identity,3,PlayBack(/var/local/Monitor/Asterisk/Appelant)
    exten => identity,4,Background(${ChmAudio}/AppelChoix)
    exten => identity,5,WaitExten(3)
    exten => 1,1,Pickup(ring@RecupAppel)
    exten => 2,1,GoTo(RecupAppel,identity,4)
    exten => t,1,GoTo(${CONTEXT},identity,1)
    exten => ring,1,Dial(LOCAL/null@RecupAppel,20,rg)
    exten => ring,2,GoToIf($["${DIALSTATUS}" == "ANSWER"] ?h,1)
    exten => null,1,Wait(100)

    Puis voici mon script php :
    #!/usr/bin/php
    <?php
    ///REQUIRE("phpagi.php");
    INCLUDE("ConnexionSql.php");
    ///$agi = new AGI();
    $Num = $_SERVER['argv'][1];
    ///$Num= preg_replace("#[^0-9]#","",$agi->request[agi_callerid]);
    IF(STRLEN($Num)>=10):
    $REQSelection = "SELECT CONCAT(prenom,' ',nom) AS Contact FROM $TBLC WHERE TelPort LIKE '%$Num%' OR TelPerso LIKE '%$Num%'";
    $RESSelection = MYSQL_QUERY($REQSelection,$Connexion);
    IF(MYSQL_NUM_ROWS($RESSelection)==1):
    $Identifiant = MYSQL_RESULT($RESSelection,0,"Contact");
    ELSE:
    $Identifiant = UTF8_DECODE(CHUNK_SPLIT($Num,2," ").' non présent dans la base de donnée');
    ENDIF;
    ELSE:
    $Identifiant = UTF8_DECODE(CHUNK_SPLIT($Num,2," ").' non présent dans la base de donnée');
    ENDIF;
    $Identifiant = '/usr/bin/say -w /var/local/Monitor/Asterisk/Appelant.wav "'.$Identifiant.'"';
    ///$agi->set_variable("Identifiant", $Identifiant);
    exec("$Identifiant");
    ?>

    Pour l'instant ça répond à ma demande actuelle mais je cherche quand-même à faire fonctionner l'agi donc si quelqu'un peut m'aider !!!
    J'espère nabil que cela pourra t'aider aussi.

  2. #2
    Membre Junior
    Date d'inscription
    juillet 2012
    Messages
    17
    Downloads
    0
    Uploads
    0
    etann38, merci pour ta compil je vais voir comment je peux me l'adapter mais jusque là je veux faire marcher mon AGI !
    "Votre Atitude determinera votre Altitude dans la vie !"

  3. #3
    Membre
    Date d'inscription
    février 2011
    Localisation
    Saint-Marcellin (Isère)
    Messages
    46
    Downloads
    0
    Uploads
    0
    Oui, je suis d'accord !
    Ma sollution, un peu cascadeuse malgré tout, pourrait tout à fait fonctionner dans ton cas aussi...

    A toi de voir en tout cas !

  4. #4
    Membre
    Date d'inscription
    février 2011
    Localisation
    Saint-Marcellin (Isère)
    Messages
    46
    Downloads
    0
    Uploads
    0

    Cool

    Nabil,
    Après avoir écumer le net pour configurer et installer phpagi : j'ai de bons réusltats :
    Voici mes testes :
    1. On appelle le 100 avec le tel avec le callerid(num)=714
    2. On lance l'agi qui va chercher si en base de donnée le numéro 714 correspond.
    Et on renvoie la valeur : le nom ou le message 714 non présent en base de donnée :
    extensions.conf
    [Test]
    exten => 100,1,agi(test.php,${CALLERID(num)})
    exten => 100,2,Set(__Identifiant=${Identifiant})
    exten => 100,3,noop("C'est un test d'affichage de variable ${Identifiant})

    test.php
    #!/usr/bin/php
    <?php
    REQUIRE("phpagi-2.20/phpagi.php");
    $agi = new AGI();
    $Num = $agi->request[agi_callerid];
    ///requete SQL
    ///resultat
    $Identifiant = $Num;

    $agi->set_variable("Identifiant", $Identifiant);
    ?>

    Adaptes tout ça pour ton cas !
    Vive asterisk !

  5. #5
    Membre Junior
    Date d'inscription
    juillet 2012
    Messages
    17
    Downloads
    0
    Uploads
    0
    etann38, j'ai un gros gros soucis mes script php simples ne s'executent pas sous asterisk 1.8 je ne sais pas pourquoi ! je galère grave ! je voudrais que tu m'explique succintement comment t'a pu faire fonctionner tes scripts à toi ! de la config jusqu'a la mise en oeuvre et l'execution ! Mil merci d'avance .........................
    "Votre Atitude determinera votre Altitude dans la vie !"

  6. #6
    Membre
    Date d'inscription
    février 2011
    Localisation
    Saint-Marcellin (Isère)
    Messages
    46
    Downloads
    0
    Uploads
    0
    Euh, je ne vais pas te détailler l'installation complète d'asterisk ici... Y'a plein de tuto sur le net et ce serait trop long !
    Mais peut-être que tu devrais vérifier si sur ta machine qui execute asterisk le phpcli est bien installé.
    Et vérifer dans ton script php si le chemin d'exécution php est bon...
    Je suis en train de réaliser une documentation pour toute mon installation asterisk, si tu passiente un peut je te l'enverrai !

  7. #7
    Membre Junior
    Date d'inscription
    juillet 2012
    Messages
    17
    Downloads
    0
    Uploads
    0
    Etann38 je t'explique !

    J'ai une BD sous Mysql qui a 3 tables : client(code_clt,nom_clt), compte(code_cpt,solde_courant, solde_debiteur) et phone(numero,code_pin,code_clt,code_cpt)

    J'ai écris un script agi qui doit permettre de récupérer la valeur du solde courant de l'appellant (Callerid(num)) lorsqu'il sollicite cela comme je vais l'indiquer dans mon Dialplan , mais je coince grave ! regarde mon script : solde.agi

    #!/usr/bin/php5
    <?php
    /*
    //temps limite d'execution du script 30 secondes
    set_time_limit(60);

    // supprime le "buffering" sur les sorties
    ob_implicit_flush(false);

    // supprime l'affichage des erreurs pour éviter que celles-ci interferent avec Asterisk
    error_reporting(0);

    // creation des log avec droit d'écriture
    $stdlog= fopen("/var/log/asterisk/infosolde.log", "w");

    // creation des fichiers STDIN, STDOUT et STDERR qui se chargera de toutes les communications
    //entre Asterisk et notre script php
    if(!defined('STDIN')) define('STDIN', fopen('php://stdin', 'r'));
    if(!defined('STDOUT')) define('STDOUT', fopen('php://stdout', 'w'));
    if(!defined('STDERR')) define('STDERR', fopen('php://stderr', 'w'));

    $pdo_options [PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=blalla', 'admin', 'admin', $pdo_options);

    //On fait une requete du numero
    $req = $bdd->prepare('SELECT numero FROM phone WHERE numero = :callid');

    // va verifier s'il existe
    $donnees = $req->fetch();

    // $reqsolde=$bdd->prepare("SELECT solde_courant as sd FROM phone,compte WHERE phone.code_cpt=compte.code_cpt AND numero=$callid");
    $reqsolde->execute(array(':numero'=>$[callid]));
    $reqsolde->execute();
    $row= $reqsolde ->fetch();

    $result_solde='<tr><td>Le solde du numero </td>'.$callid.'<td> est de </td>'.$row['sd'].'<td> FCFA</td></tr>';

    echo $result_solde;

    fclose($stdlog);
    $bdd =null;
    ?>

    Mon dialplan :

    exten => s,1,Festival(Please enter your phone number to check your request, thanks you)
    exten => s,2,Read(callid)
    exten => s,3,Gotoif($[${callid} = CALLERID(num)]?5:2)
    exten => s,4,Festival(You have enter the correct number)
    exten => s,5,agi(/usr/share/asterisk/agi-bin/solde.agi, ${callid})
    exten => s,6,Festival(you are welcome)
    exten => s,7,Hangup()




    Ce que je voudrais savoir c'est comment faire pour passer en paramètre le numero de l'appellant pour que le script puisse réssir son execution, car vous tu peux le constater à la ligne 5 j'ai passé ${callid} en paramètre mais lorsque j'ouvre la CLI je n'ai aucun resulat mais en revanche tout le dialplan ci-dessus s'execute jusqu'au Hangup()...


    En passant lorsque j'ouvre le fichier solde.agi et que je fixe le callid ($callid=23) et que j'execute le dialplan je vois apparaitre dans la CLI la valeur exacte qui se trouve dans ma BD du solde courant pour ce numero

    J'aimerais un coup de main, Merci l'ami..........
    "Votre Atitude determinera votre Altitude dans la vie !"

  8. #8
    Membre Junior
    Date d'inscription
    avril 2013
    Messages
    4
    Downloads
    0
    Uploads
    0

    Lightbulb Plein de choses géniales, plein de bonnes idées, mais pas de simplicité...

    Sur internet, il y a tout... Renvoyer quelqu'un sur le net est une absurdité, tout n'est pas juste, bien au contraire, sur internet!

    Il y a des très jolis scripts, et possibilités avec Asterisk, seulement c'est à chacun de bricoler pour faire fonctionner, or c'est normalement à Asterisk qui propose une solution, de s'assurer que tout va fonctionner au mieux, et poser des questions simples aux administrateurs, pour savoir comment exploiter au mieux les composants présents sur le réseau, les extensions, les scripts, les fonctionnalités supplémentaires, ... La version 2.0.0. d'Asterisk est la seule possibilité, et hélas Medical Technologies devra peut-être retirer les droits à Digium, pour les céder à une autre société, probablement ErgoSum Operating Systems qui a déjà repris les droits de Microsoft Corporation... Il faut simplifier, afin de permettre à chacun de faire que le meilleur, sans configuration, sans aucun problème, sans se poser de question... Pour le reste, les améliorations, là oui, il faut se poser des questions, et SDC++ et SMC++ permettent de trouver les moyens de réaliser tout ce qu'il manque, à qui a un peu de temps à consacrer... Merci pour votre volonté de faire fonctionner cet outil de malheur, mélange de paramètres, produits, standards, besoins, idées, problèmes, solutions, scripts, faux outils, mensonges, ... Il y a pour lînstant aucun serveur vocal qui respecten les standards d'EJFJ Coproration (C.D.M.) datant de 1996! Il faut simplifier, comme en justice, comme en politique, comme en tout! L'humain est trop compliqué, pas parfait, les machines doivent au contraire simplifier en rendre effective tout ce qui doit être fait, sans aucun problème (ou alors ils n'ont qu'à être réglés automatiquement!). L'économie, c'est ça! De plus, ça permet de faire beaucoup plus de choses utiles, plus vite, plus simplement, avec plus de satisfaction!

  9. #9
    Membre Junior
    Date d'inscription
    mai 2014
    Messages
    5
    Downloads
    0
    Uploads
    0

    serveur vocal interactif

    Salut chers membres je suis en train de faire de la reconnaissance vocale avec asterisk.je m'explique: quand l'utilisateur appelle le serveur lui demande son besoin et l'utilisateur répond après le serveur traite sa requête et lui transmet la réponse,j'ai crée une base de donnée ou on stocke les informations qu'on doit retourner aux clients.J'attend votre aide

  10. #10
    Membre Junior
    Date d'inscription
    janvier 2014
    Messages
    2
    Downloads
    0
    Uploads
    0

    script AGI et PHP

    bonjour nabyl vous allez bien.s'il vous plait je travaille sur asterisk et une partie de mon memoire porte sur c que t as realisé sa reste la derniere parti pour finaliser mon memoire j'ai pas des idés est ce que vous pouvez m'envoiyer un tuto pour que je puisse finaliser
    sael@hotmail.fr


    merci

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
  •