-
Scritp AGI et PHP : interaction entre asterisk et application web php
J'ai mis en place la téléphonie avec Asterisk 1.8 (qui marche bien) et dans la suite de mon cahier de charges je suis tenu de développer une application web en php (qui est déjà en place) avec laquelle asterisk va interagir. Je m'explique : lorsqu'un client appelera le standard pour demander le solde de son compte il faudra que asterisk puisse recupérer le numero de l'appelant et ensuite le prendre en paramètre dans un script php et l'envoyer à l'application qui ensuite à son tour lui retournera (à asterisk) le resultat sous forme de "string" (chaine de caractère) et qui sera lu par le module festival(c'est un application de lecture de texte) (que j'ai dejà installé) ainsi l'appellant pourra écouter le solde de son compte communiqué par le standard.
Quelqu'un peut-il m'aider, sur le comment du script ? et l'interaction entre ces deux entités (asterisk et l'application web) !
"Votre Atitude determinera votre Altitude dans la vie !"
-
Bonjour, sans savoir programmer en php j'ai pu effectuer ce type de demande avec les exemples sur la page de wiki http://www.voip-info.org/wiki/view/Asterisk+AGI+php
Ils sont simples et lisibles.
-
Puis je voir des exemples de tes scripts, je voudrais avoir un truc qui marche et puis l'adapter à mon cas !
"Votre Atitude determinera votre Altitude dans la vie !"
-
Quelqu'un peut m'aider ? je fais du sur place dans mes codes qui ne produisent rien à rien !
"Votre Atitude determinera votre Altitude dans la vie !"
-
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.
-
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 !"
-
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 !
-
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 !
-
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 !"
-
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 !
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
-
Règles du forum