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

Discussion: Asterisk et phpAgi

  1. #1
    Membre Junior
    Date d'inscription
    juin 2015
    Messages
    18
    Downloads
    0
    Uploads
    0

    Asterisk et phpAgi

    Bonjour je suis nouvelle dans l'environnement asterisk ou du moins j'ai pas trop de connaissances la dessus. Je voudrais installer phpAgi sur centos. J'ai

    déjà téléchargé le phpAgi-2.20 mais je sais pas comment m'y prendre.

    Votre aide me sera d'une grande importance merci d'avance !

  2. #2
    Membre Senior
    Date d'inscription
    novembre 2013
    Localisation
    Bordeaux
    Messages
    427
    Downloads
    0
    Uploads
    0
    Bonjour

    Peux tu présenter le contexte ? Utilise tu un asterisk seul, ou combiné avec des interfaces comme freepbx ou xivio ?

    Quels genre d'agi veut tu utiliser ? Pour développer un "serveur vocal", pour effectuer des traitements spécifiques avant un appel ?

  3. #3
    Membre Junior
    Date d'inscription
    juin 2015
    Messages
    18
    Downloads
    0
    Uploads
    0
    J'utilise asterisk seul du 1.8. En fait je suis sur un projet le but est de créer une application web qui interagit avec asterisk celui ci permettra d'effectuer des appels et d'en recevoir aussi. Du coup jai crée une base de donnée contenant une table postes('id','nom_poste','numero','mot_pass') , donc au moment de l'appel je dois verifier dans la base si le numero de l'appelant existe dans la base si oui je décroche sinon on rejette l'appel.

    Voilà en gros

  4. #4
    Membre Senior
    Date d'inscription
    novembre 2013
    Localisation
    Bordeaux
    Messages
    427
    Downloads
    0
    Uploads
    0
    De mémoire l'installation de php agi ne consistait qu'a copier le fichier phpagi.php dans le répertoire en fonction de la conf asterisk ( par exemple /var/lib/asterisk/agi-bin/ ) de déposer ton script dans le même répertoire.

    Pour ton besoin, je ne pense pas qu'il indispensable de passer par agi, il est aussi possible de passer en dialplan avec des fonctions if est shell exec.

    Si tu en a la possibilité, je te conseille essayer une distribution avec freepbx ( comme elastix ) car elle utilise phpagi. Ca te permettrais d'étudier un exemple fonctionnel avec phpagi.

  5. #5
    Membre Junior
    Date d'inscription
    juin 2015
    Messages
    18
    Downloads
    0
    Uploads
    0
    Je penses je serai plus à l'aise avec le phpagi vu que l'appli je l'ai faite avec du php. As tu une fois utilisé du phpagi avec une base de donnée si oui, pourrais-je avoir un exemple de code, j'en ai vraiment besoin comme je te l'ai dit je m'y connais pas trop en phpagi

    Merci d'avance

  6. #6
    Membre Senior
    Date d'inscription
    novembre 2013
    Localisation
    Bordeaux
    Messages
    427
    Downloads
    0
    Uploads
    0
    Pour ton cas j'aurais imaginé quelque chose inspiré de cette url

    https://www.muchtall.com/2012/05/23/...s-on-asterisk/

    [macro-inbound-whitelist]
    exten => s,2,RESULT=${SHELL(/scripts/verif_numero.sh ${CALLERID(num}) )
    exten => s,1,GotoIf(RESULT="1")}?:blacklisted,s,1)
    exten => s,2,Dial(${ARG1})

    Et on suppose que le script /scripts/verif_numero.sh contient un appel a la base mysql et renvoie 0 si c'est OK, 1 si le numéro est inconnu.

    Si tu veux le faire en AGI, je pense que c'est possible aussi.

    Pour l'exemple de code, cela dépend ce que tu cherches, je pense que le mieux est de prendre les codes d’exemples officiels.
    http://sourceforge.net/projects/phpa...s/phpagi/2.20/

    Une fois que tu arrives à executer toi même l'un de ces codes, tu sais que phpagi est fonctionnel sur ton serveur et tu peux commencer a développer.

    Il n'y pas énormément de docs sur les fonction AGI de phpagi, mais cherche les fonctions agi en perl, elles sont identiques.

  7. #7
    Membre Junior
    Date d'inscription
    juin 2015
    Messages
    18
    Downloads
    0
    Uploads
    0
    Merci pour ton aide en suivant ton conseil j'ai chercher toute la journée sur le net et j'ai pu trouver quelques réponses. En fait j'ai un autre soucis quand j'essaie d'executer un script php le CLI d'asterisk me souligne une erreur :

    Executing [100@gerer:1] AGI("SIP/102-00000003", "test.php,102>") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/test.php
    -- <SIP/102-00000003>AGI Script test.php completed, returning 0
    -- Executing [100@gerer:2] Set("SIP/102-00000003", "__Identfiant=") in new stack
    -- Executing [100@gerer:3] NoOp("SIP/102-00000003", ""C'est un test d'affichage variable ") in new stack
    -- Auto fallthrough, channel 'SIP/102-00000003' status is 'UNKNOWN'

    Voici mon Dialplan

    [Test]
    exten => 100,1,agi(test.php,${CALLERID(num)})
    exten => s,n,WaitExten(5)
    exten => 100,2,Set(__Identfiant=${Identifiant})
    exten => 100,3,noop("C'est un test d'affichage variable ${Identifiant})



    Voici le script php: test.php

    #!/usr/bin/php -q
    <?php
    REQUIRE("phpagi-2.20/phpagi.php");
    ///inclusion du framework de phpagi
    INCLUDE("database.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)>=3):
    $REQSelection = "SELECT nom_poste FROM postes WHERE numero LIKE '%$Num%'";
    $RESSelection = MYSQL_QUERY($REQSelection);
    IF(MYSQL_NUM_ROWS($RESSelection)==1):
    $Identifiant = MYSQL_RESULT($RESSelection);
    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

    ?>


    Est-ce qu'on doit écrire un context au niveau du fichier sip.conf du diaplan correspondant quand on utilise phpagi ?

  8. #8
    Membre Senior
    Date d'inscription
    novembre 2013
    Localisation
    Bordeaux
    Messages
    427
    Downloads
    0
    Uploads
    0
    As tu essayé d’exécuter son script a la main ? A la main, il faut appuyer sur entrée une fois le script lancé, il va t'afficher ce qu'il renvoie a l'asterisk

    Je viens d'essayer ton script a la main: forcement ça plante car j'ai pas les includes, mais j'ai comme toi AGI Script test.php completed, returning 0 dans l'asterisk.

    # php /var/lib/asterisk/agi-bin/test.php
    PHP Warning: require(phpagi-2.20/phpagi.php): failed to open stream: No such file or directory in /var/lib/asterisk/agi-bin/test.php on line 3
    PHP Fatal error: require(): Failed opening required 'phpagi-2.20/phpagi.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/lib/asterisk/agi-bin/test.php on line 3

    Par contre si je change les includes et que je force le set_variable ( car je n'ai pas le reste de ta base ) , c'est mieux vision asterisk

    == Using SIP RTP TOS bits 184
    == Using SIP RTP CoS mark 5
    -- Executing [100@from-internal:1] AGI("SIP/5002-00003ec7", "test.php,5002") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/test.php
    -- <SIP/5002-00003ec7>AGI Script test.php completed, returning 0
    -- Executing [100@from-internal:2] WaitExten("SIP/5002-00003ec7", "5") in new stack
    -- Timeout on SIP/5002-00003ec7, continuing...
    -- Executing [100@from-internal:3] NoOp("SIP/5002-00003ec7", ""C'est un test d'affichage variable test 5002") in new stack

  9. #9
    Membre Junior
    Date d'inscription
    juin 2015
    Messages
    18
    Downloads
    0
    Uploads
    0
    ok, mais comment exécuter le script à la main ? parceque quand j'appelle le 100 le script se lance de façon automatique

  10. #10
    Membre Senior
    Date d'inscription
    novembre 2013
    Localisation
    Bordeaux
    Messages
    427
    Downloads
    0
    Uploads
    0
    Tout simplement en lignes de commandes comme dans mon exemple ( et tu fait entrée, une fois script en cours, il doit d'atticher un truc du genre set variable = valeur )

    php /var/lib/asterisk/agi-bin/test.php Numero


    Ce n'est pas un test complet, mais déjà ça permet de voir une éventuelle erreur php

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
  •