Page 2 sur 4 PremièrePremière 1234 DernièreDernière
Affichage des résultats 11 à 20 sur 37

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

  1. #11
    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 !"

  2. #12
    Membre
    Date d'inscription
    février 2011
    Localisation
    Saint-Marcellin (Isère)
    Messages
    46
    Downloads
    0
    Uploads
    0
    #!/usr/bin/php
    <?php
    ///REQUIRE("phpagi.php");
    INCLUDE("ConnexionSql.php");
    $agi = new AGI();
    $Num = $_SERVER['argv'][1]; /// c ça qui permet de récupérer une variable en paramètre

    ///$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;
    $agi->set_variable("Identifiant", $Identifiant);

    ?>

  3. #13
    Membre Association
    Date d'inscription
    septembre 2010
    Messages
    1 236
    Downloads
    0
    Uploads
    0
    Met le Noop(${callid}) avant pour voir si c'est ton read() qui fonctionne mal.

  4. #14
    Membre Junior
    Date d'inscription
    juillet 2012
    Messages
    17
    Downloads
    0
    Uploads
    0
    Etann38 !

    Merci bien mais je serai heureux que tu puisse mieux commenter ton code !
    "Votre Atitude determinera votre Altitude dans la vie !"

  5. #15
    Membre
    Date d'inscription
    février 2011
    Localisation
    Saint-Marcellin (Isère)
    Messages
    46
    Downloads
    0
    Uploads
    0
    Citation Envoyé par etann38 Voir le message
    #!/usr/bin/php
    <?php
    REQUIRE("phpagi.php");
    ///inclusion du framework de phpagi
    INCLUDE("ConnexionSql.php");
    ///inclusion de mes infos sql
    $agi = new AGI();
    ///création d'un nouvel objet agi
    $Num = $_SERVER['argv'][1];
    ///Récupération de la valeur de ma première variable passée en paramètre

    ///$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;
    $agi->set_variable("Identifiant", $Identifiant);
    ///Renvoi du résultat à la variable identifiant de mon dialplan

    ?>
    Je ne suis pas expert en asterisk lol...
    Ce code fonctionne en tout cas, il faut juste l'adapter à ton cas!

  6. #16
    Membre Junior
    Date d'inscription
    juillet 2012
    Messages
    17
    Downloads
    0
    Uploads
    0
    Etann38

    $REQSelection = "SELECT CONCAT(prenom,' ',nom) AS Contact FROM $TBLC WHERE TelPort LIKE

    Que represente la variable $TBLC dans ton cas !
    "Votre Atitude determinera votre Altitude dans la vie !"

  7. #17
    Membre
    Date d'inscription
    février 2011
    Localisation
    Saint-Marcellin (Isère)
    Messages
    46
    Downloads
    0
    Uploads
    0
    Ce n'est pas très important.
    Mais bon, la variable $TBLC correspond au nom de ma table où je vais chercher mes infos

  8. #18
    Membre Junior
    Date d'inscription
    juillet 2012
    Messages
    17
    Downloads
    0
    Uploads
    0
    Etann38

    Mil merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii ça marche comme sur dè roulette !
    "Votre Atitude determinera votre Altitude dans la vie !"

  9. #19
    Membre
    Date d'inscription
    février 2011
    Localisation
    Saint-Marcellin (Isère)
    Messages
    46
    Downloads
    0
    Uploads
    0
    J'en suis ravi Nabil,
    Bon courage pour la suite!

  10. #20
    Membre Junior
    Date d'inscription
    avril 2013
    Messages
    3
    Downloads
    0
    Uploads
    0

    Red face Demande D'aide

    Bonjour Etann38, je suis Fabrice et vous écris du Congo à Pointe-Noire.

    je voudrais créer un script pour interfacer asterisk avec une application web. je souhaiterai que l’authentication se fasse a partir du callerid c’est à dire quand j’appelle ma centrale téléphonique, asterisk reconnais mon numéro puis lance une page web en m’authentifiant avec mon username ainsi que mon mot de passe. alors humblement, je fais appel à vos connaissance pour m’aider si cela est possible.

    Merci d’avance.

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
  •