Pasar datos desde Asterisk a un AGI en PHP y viceversa...

5,153 views
Skip to first unread message

Ramses II

unread,
Mar 4, 2009, 3:55:50 PM3/4/09
to aster...@googlegroups.com

Buenas a todos,

 

Por fin me he tirado de cabeza a trastear con los AGI’s.

 

En principio estoy haciendo una chorrada que me pase un dato desde Asterisk a un AGI en PHP, tontear un poco con ese dato y devolverle una variable a Asterisk para que pueda jugar con ella, o eso es lo que pretendo…

 

En Principio el pasarlo lo tengo claro:

 

exten => s,n,set(VARIABLE = 955555555)

exten => s,n,AGI(busca-dato.sh,${VARIABLE})

 

Así se la paso, pero no tengo claro el cómo pillarla en el AGI.

 

Al igual me ocurre al contrario, en le AGI establezco una variable en el AGI:

 

$VARIABLE-AGI = “Hola AGI”

 

Pero no tengo claro cómo pasársela a Asterisk, por ejemplo, para hacer un:

 

exten => s,n,NoOp(${VARIABLE-AGI})

 

Por favor, ¿un empujoncito?

 

 

Saludos y gracias,

 

Ramses

Raúl Alexis Betancor Santana

unread,
Mar 4, 2009, 4:37:40 PM3/4/09
to aster...@googlegroups.com
On Wednesday 04 March 2009 20:55:50 Ramses II wrote:
> Buenas a todos,
>
>
>
> Por fin me he tirado de cabeza a trastear con los AGI’s.
>
>
>
> En principio estoy haciendo una chorrada que me pase un dato desde Asterisk
> a un AGI en PHP, tontear un poco con ese dato y devolverle una variable a
> Asterisk para que pueda jugar con ella, o eso es lo que pretendo…
>
>
>
> En Principio el pasarlo lo tengo claro:
>
>
>
> exten => s,n,set(VARIABLE = 955555555)
>
> exten => s,n,AGI(busca-dato.sh,${VARIABLE})

Esto no vale, esa ${VARIABLE} no se pasa así.

> Así se la paso, pero no tengo claro el cómo pillarla en el AGI.

Depende de si lo haces a pelo-peloide o usas alguna de las tropocientas
librerías para trabajar con AGI's que existen.
El "comando" AGI pelao es ... GetVar VARIABLE, si usas phpAGI, creo recordar
que era ... valor = $AGI.getVar('VARIABLE')

> Al igual me ocurre al contrario, en le AGI establezco una variable en el
> AGI:
>
>
>
> $VARIABLE-AGI = “Hola AGI”
>
>
>
> Pero no tengo claro cómo pasársela a Asterisk, por ejemplo, para hacer un:

En "pelao" ... SetVar VARIABLE VALOR

A base de phpAgi o lo que sea ... $AGI.SetVar('VARIABLE','VALOR')

Te lo estoy diciendo de cabeza .. así que mejor consulta la documentación de
la librería AGI que estés usando en función del lenguaje (php, python, shell,
lo que sea ...)

Saludos
--
Raúl Alexis Betancor Santana
Dimensión Virtual

Elio Rojano

unread,
Mar 4, 2009, 4:40:26 PM3/4/09
to aster...@googlegroups.com
Hola Ramses,

Primero lo fácil de AGI a Asterisk:
$AGI->exec("SET VARIABLE TELEFONO '708'");

y en Asterisk
exten=>s,n,NoOp(${TELEFONO})

Y ahora lo fácil, de Asterisk a AGI, las variables se pasan por el
stdin (entrada estandar) por lo que puedes leer la entrada y verás los
parámetros:

En PHP:
$stdin = fopen(‘php://stdin’, ‘r’);
while (!feof($stdin)) {
$temp = fgets($stdin);
$temp = str_replace("\n","",$temp);
$s = explode(":",$temp);
$agivar[$s[0]] = trim($s[1]);
}

:)


2009/3/4 Ramses II <ramses....@gmail.com>:
--
http://www.sinologic.net/

Ramses II

unread,
Mar 5, 2009, 3:22:22 PM3/5/09
to aster...@googlegroups.com
Elio, buenas tardes,

Mira, si pongo la línea

------------------------------------------
AGI->exec("SET VARIABLE TELEFONO '708'");
------------------------------------------

Que me comentaste en el PHP, me da el siguiente error:

------------------------------------------
PHP Fatal error: Call to a member function exec() on a non-object in.......
------------------------------------------

El PHP lo tengo así:

------------------------------------------
#!/usr/bin/php -q

<?
require ("/var/lib/asterisk/agi-bin/phpagi.php");

$agi=new AGI();

$VARIABLE1=$agi->get_variable("VARIABLE1");
$VARIABLE2=$agi->set_variable("VARIABLE2", $VARIABLE1);

$agi->verbose($VARIABLE2[data]);

$AGI->exec("SET VARIABLE RESPUESTA '708'");

//echo "VERBOSE DID: $VARIABLE1";

?>
------------------------------------------

Y el Extensions.conf así:

------------------------------------------
.
.
exten => s,n,set(VARIABLE1=955555555)
exten => s,n,AGI(AGIs/busca-dato-02.sh,${VARIABLE1})
exten => s,n,noop(Llamante....tras el AGI ${RESPUESTA})
.
------------------------------------------

Para que me pase la variable desde Asterisk al AGI he tenido que hacer ese
juego de VARIABLE1 y VARIABLE2 que he visto por ahí en algún ejemplo y con
el "($VARIABLE2[data])" ya me muestra lo que le puse en el 955555555 que le
puse a VARIABLE1 en Asterisk.

Creo que el juego de variables hay que hacerlo porque la variable desde
Asterisk se la pasa como Array, no se si habrá forma de pasarla como un
único valor... :-(

El equivalente a la línea que tú me proponías, creo que es:

------------------------------------------
$agi->set_variable("RESPUESTA", "708");
------------------------------------------

Y eso sí me funciona. Es decir, desde AGI a Asterisk parece que ya está, el
tema creo que es la cosas rara que hay que hacer al contrario...


Saludos,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Elio Rojano
Enviado el: miércoles, 04 de marzo de 2009 22:40
Para: aster...@googlegroups.com
Asunto: [Asterisk-ES] Re: Pasar datos desde Asterisk a un AGI en PHP y
viceversa...

Ramses II

unread,
Mar 5, 2009, 3:32:12 PM3/5/09
to aster...@googlegroups.com
Raúl, buenas tardes,

Pasando la variable así, creo que la pasa como un Array.

¿Cómo habría que pasarla entonces?

Creo que esta es la línea que comentas que habría que poner en el PHP:

--------------------------------------------
$VARIABLE1=$agi->get_variable("VARIABLE1");
--------------------------------------------

¿no?


Saludos y gracias,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Raúl Alexis Betancor Santana
Enviado el: miércoles, 04 de marzo de 2009 22:38
Para: aster...@googlegroups.com
Asunto: [Asterisk-ES] Re: Pasar datos desde Asterisk a un AGI en PHP y
viceversa...

Saúl Ibarra

unread,
Mar 5, 2009, 5:53:54 PM3/5/09
to aster...@googlegroups.com
No es necesario que setees mil variables en el dialplan para
recogerlas en el AGI. En realidad es como llamar al intérprete desde
el sistema, por lo que tienes disponible el array $argv con los
parámetros:

exten => s,n,AGI(farsa.php,1234,lalala)

dentro del agi $argv[1] == 1234 y $argv[2] == lalala

Por otro lado, en el mail de arriba no te funciona porque tu variable
se llama $agi y luego haces $AGI->...

:)

Cualquier otra dudila comentas :)


--
Saúl -- "Nunca subestimes el ancho de banda de un camión lleno de disketes."
----------------------------------------------------------------
http://www.saghul.net/

Ramses II

unread,
Mar 6, 2009, 5:44:28 AM3/6/09
to aster...@googlegroups.com
Saúl, muchas gracias,

"Cago en la leche con las mayúsculas...."

Lo de pasar desde Asterisk a AGI con el Array argv[], listo.

Lo del error al poner la línea que me comentó Elio, listo.

Pero no me funciona desde el AGI al Asterisk con eso.

Sí me va con:

$agi->set_variable("RESPUESTA", "708");

Pero no me va con:

$agi->exec("SET VARIABLE RESPUESTA '708'");

En este último caso me muestra en Asterisk la variable "RESPUESTA" en
blanco.

¿Dónde he metido la gamba?


Saludos y gracias,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Saúl Ibarra
Enviado el: jueves, 05 de marzo de 2009 23:54
Para: aster...@googlegroups.com
Asunto: [Asterisk-ES] Re: Pasar datos desde Asterisk a un AGI en PHP y
viceversa...


Elio Rojano

unread,
Mar 6, 2009, 5:50:56 AM3/6/09
to aster...@googlegroups.com
Puede que hayan cambiado el comando del AGI: SET VARIABLE <nombre> <valor>
o el 'exec' no lo esté haciendo bien...
--
http://www.sinologic.net/

Saúl Ibarra

unread,
Mar 6, 2009, 6:59:55 AM3/6/09
to aster...@googlegroups.com
> $agi->exec("SET VARIABLE RESPUESTA '708'");
>
> En este último caso me muestra en Asterisk la variable "RESPUESTA" en
> blanco.
>
> ¿Dónde he metido la gamba?
>

En realidad set_variable hace eso :) Mira el código de la función y
compara a ver...

Reply all
Reply to author
Forward
0 new messages