AMI con PHP y accion ExtensionState

1,320 views
Skip to first unread message

Damocles

unread,
Oct 4, 2011, 2:10:24 AM10/4/11
to asterisk-es
BUENAS TARDES...

Llevo una cuantas horas viendo este tema, espero que me puedan
ayudar...
Estoy intentando averiguar el estado de una extension a traves de la
interface AMI de Asterisk. En tiendo los conceptos e incluso estoy
usando las acciones del AMI, mediante PHP (Sin API alguna) con otras
acciones como Originate sin problemas. El tema es: ¿Como o donde
extraigo el valor devuelto por la accion ExtensionState en PHP?

Esto es lo que tengo en el codigo PHP:
<?
$oSocket = fsockopen ("XXX.XXX.XXX.XXX", 5038, $errno, $errstr, 20);
fputs($oSocket, "Action: login\r\n");
fputs($oSocket, "Username: username\r\n");
fputs($oSocket, "Secret: password\r\n\r\n");
sleep (1);
fputs($oSocket, "Action: ExtensionState\r\n");
fputs($oSocket, "Context: extensiones\r\n");
fputs($oSocket, "Exten: 101\r\n\r\n");
sleep (1);
fputs($oSocket, "Action: Logoff\r\n\r\n");
fclose($oSocket);
?>

Y en el CLI de Asterisk optengo esto:
== Parsing '/etc/asterisk/manager.conf': Found
== Manager 'username' logged on from XXX.XXX.XXX.XXX
[Oct 4 07:43:17] ERROR[25016]: utils.c:966 ast_carefulwrite: write()
returned error: Connection reset by peer
[Oct 4 07:43:17] ERROR[25016]: utils.c:966 ast_carefulwrite: write()
returned error: Broken pipe
== Manager 'isaac' logged off from XXX.XXX.XXX.XXX

GRACIAS...
UN SALUDO...

Isaac

Elio Rojano

unread,
Oct 4, 2011, 3:40:34 AM10/4/11
to aster...@googlegroups.com

Asegúrate que tu usuario tiene permisos de lectura para "call" y "reporting".

Usa \n en lugar de \r\n y quítale un \r\n del logoff para que no te de
un Broken Pipe.


--
http://www.sinologic.net/

Isaac Cueli Chavarría

unread,
Oct 4, 2011, 5:38:32 AM10/4/11
to aster...@googlegroups.com
BUENAS TARDES...

Gracias Elio. He hecho o ue me comentabas y efectivamente ya no me salen los errores, Sin embargo he de dejar "/r/n" en la Action de logeo para que se loge correctamente, por que sino me sale el siguietne error en el CLI:
== Connect attempt from '192.168.0.99' unable to authenticate

Os pongo como queda tanto el script como el CLI:
SCRIPT EN PHP:
<?
$oSocket = fsockopen ("192.168.0.99", 5038, $errno, $errstr, 20);

fputs($oSocket, "Action: login\r\n");
fputs($oSocket, "Username: isaac\r\n");
fputs($oSocket, "Secret: 28760315\r\n\r\n");
sleep (1);
fputs($oSocket, "Action: ExtensionState\n");
fputs($oSocket, "Context: extensiones\n");
fputs($oSocket, "Exten: 101\n");
sleep (1);
fputs($oSocket, "Action: Logoff\r\n");
fclose($oSocket);
?>

CLI DE ASTERISK:
== Manager 'isaac' logged on from 192.168.0.99
== Manager 'isaac' logged off from 192.168.0.99

Con respecto al tema de lo que devuelve Asterisk para controlar el estado de la extension... Podriais comentarme algo...??? Se que debe devolver algun valor de estos:

-1 = Extension not found
0 = Idle
1 = In Use
2 = Busy
4 = Unavailable
8 = Ringing
16 = On Hold

Pero no se como rescatarlo desde el codigo PHP. No encuentro ningun ejemplo por la red.

GRACIAS...
UN SALUDO...

Isaac



--
Este email pertenece a la lista de Asterisk-ES (http://www.asterisk-es.org)

~~~ Normas de la lista Asterisk-ES: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asterisk-es
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Para anular la suscripción: asterisk-es...@googlegroups.com

Elio Rojano

unread,
Oct 4, 2011, 5:43:29 AM10/4/11
to aster...@googlegroups.com
Hola Isaac, me lo has puesto muy fácil... pásate este jueves por el
VoIP2DAY que doy una charla sobre cómo funciona el Manager de
Asterisk. :P

El día 4 de octubre de 2011 11:38, Isaac Cueli Chavarría
<isaac...@gmail.com> escribió:

--
http://www.sinologic.net/

Isaac Cueli Chavarría

unread,
Oct 4, 2011, 5:52:46 AM10/4/11
to aster...@googlegroups.com
JUAS... Tu por que te crees que te estoy preguntando por estos lares... JEJEJE... Si hubiera podido ir a la VOIP2DAY me hubiera pasado... Pero estoy en Almeria con esta gente de Orange para no se que puñetas de una centralita virtual... BUFF.. Suena a toston... ;)...

Por cierto... Lo hareis en directo como otras veces...???

Isaac

Juan Jose Marquez Perez

unread,
Oct 4, 2011, 5:50:14 AM10/4/11
to aster...@googlegroups.com
Buenas

Ya se que esto no esta relacionado, pero me gustaria saber si se pdria seguir por streaming esta charla

Gracias

Elio Rojano

unread,
Oct 4, 2011, 5:59:25 AM10/4/11
to aster...@googlegroups.com
Me temo que no.

Creo que se graban las charlas para publicarlas más adelante en la
web, pero de streaming en directo, nada.

El día 4 de octubre de 2011 11:50, Juan Jose Marquez Perez
<jjmarqu...@gmail.com> escribió:

Isaac Cueli Chavarría

unread,
Oct 4, 2011, 6:06:52 AM10/4/11
to aster...@googlegroups.com
En un momento dado hasta se podria intentar hablar por Gtalk... JEJEJE... Pero eso de la multiconferencia creo que aun no lo tienen mu conseguido... JEJEJE...

Isaac

Damocles

unread,
Oct 4, 2011, 11:15:56 AM10/4/11
to asterisk-es
YO Y MIS PRUEBAS...

A ver.. sigo liado con esto... Y nada de nada... Hemos probado con una
clase pero ahora me tira como estado -1 (Extension no encontrada), y
tengo registrada correctamente todas las extensiones (O por lo menos
eso aparece en el SIP SHOW PEERS.... JEJEJE).

Alguien sabria decirme como acceder al dato de STATUS dentro de la
variable que estoy usando (Que es $oSocket).
Os pongo el codigo nuevamente:

<?
$oSocket = fsockopen ("XXX.XXX.XXX.XXX", 5038, $errno, $errstr, 20);
fputs($oSocket, "Action: login\r\n");
fputs($oSocket, "Username: usuario\r\n");
fputs($oSocket, "Secret: password\r\n\r\n");
sleep (1);
fputs($oSocket, "Action: ExtensionState\n");
fputs($oSocket, "Context: extensiones\n");
fputs($oSocket, "Exten: 101\n");
fputs($oSocket, "Action: Logoff\r\n");
fclose($oSocket);
?>

En CLI me sigue saliendo:

== Parsing '/etc/asterisk/manager.conf': Found
== Manager 'usuario' logged on from XXX.XXX.XXX.XXX
== Manager 'usuario' logged off from XXX.XXX.XXX.XXX

Gracias...

Isaac


On 4 oct, 12:06, Isaac Cueli Chavarría <isaac.cu...@gmail.com> wrote:
> En un momento dado hasta se podria intentar hablar por Gtalk... JEJEJE...
> Pero eso de la multiconferencia creo que aun no lo tienen mu conseguido...
> JEJEJE...
>
> Isaac
>
> El 4 de octubre de 2011 11:59, Elio Rojano <hel...@gmail.com> escribió:
>
>
>
>
>
>
>
> > Me temo que no.
>
> > Creo que se graban las charlas para publicarlas más adelante en la
> > web, pero de streaming en directo, nada.
>
> > El día 4 de octubre de 2011 11:50, Juan Jose Marquez Perez
> > <jjmarquezpe...@gmail.com> escribió:
> > > Buenas
>
> > > Ya se que esto no esta relacionado, pero me gustaria saber si se pdria
> > seguir por streaming esta charla
>
> > > Gracias
>
> > > El 04/10/2011, a las 11:43, Elio Rojano escribió:
>
> > >> Hola Isaac, me lo has puesto muy fácil... pásate este jueves por el
> > >> VoIP2DAY que doy una charla sobre cómo funciona el Manager de
> > >> Asterisk. :P
>
> > >> El día 4 de octubre de 2011 11:38, Isaac Cueli Chavarría
> > >> <isaac.cu...@gmail.com> escribió:
> > >>>> El día 4 de octubre de 2011 08:10, Damocles <isaac.cu...@gmail.com>
> >http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asteris...
> > >>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > >>>> - Para anular la suscripción:
> > asterisk-es...@googlegroups.com
>
> > >>> --
> > >>> Este email pertenece a la lista de Asterisk-ES (
> >http://www.asterisk-es.org)
>
> > >>> ~~~ Normas de la lista Asterisk-ES: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> >http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asteris...
> > >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > >>> - Para anular la suscripción: asterisk-es...@googlegroups.com
>
> > >> --
> > >>http://www.sinologic.net/
>
> > >> --
> > >> Este email pertenece a la lista de Asterisk-ES (
> >http://www.asterisk-es.org)
>
> > >> ~~~ Normas de la lista Asterisk-ES: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> >http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asteris...
> > >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > >> - Para anular la suscripción: asterisk-es...@googlegroups.com
>
> > > --
> > > Este email pertenece a la lista de Asterisk-ES (
> >http://www.asterisk-es.org)
>
> > > ~~~ Normas de la lista Asterisk-ES: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> >http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asteris...
> > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > > - Para anular la suscripción: asterisk-es...@googlegroups.com
>
> > --
> >http://www.sinologic.net/
>
> > --
> > Este email pertenece a la lista de Asterisk-ES (http://www.asterisk-es.org
> > )
>
> > ~~~ Normas de la lista Asterisk-ES: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asteris...

Elio Rojano

unread,
Oct 4, 2011, 11:32:28 AM10/4/11
to aster...@googlegroups.com
El día 4 de octubre de 2011 17:15, Damocles <isaac...@gmail.com> escribió:
> YO Y MIS PRUEBAS...
>
> A ver.. sigo liado con esto... Y nada de nada... Hemos probado con una
> clase pero ahora me tira como estado -1 (Extension no encontrada), y
> tengo registrada correctamente todas las extensiones (O por lo menos
> eso aparece en el SIP SHOW PEERS.... JEJEJE).
>
> Alguien sabria decirme como acceder al dato de STATUS dentro de la
> variable que estoy usando (Que es $oSocket).

Aprendiendo PHP, mirando en la documentación fgets o fread y
preguntando en la lista correspondiente. :P

> http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asterisk-es

Isaac Cueli Chavarría

unread,
Oct 4, 2011, 11:46:16 AM10/4/11
to aster...@googlegroups.com
JEJEJE... No creo que sea un problema de concepto o uso de funciones PHP... Creo que se trata mas bien de que Asterisk no devuelve nada de nada... Por eso era la pregunta... JEJEJE... Es mas haciendo un bucle while y fgets($oSocket) al cargar la pagina .php se queda en blanco... Por eso digo que mas bien se trataria de un problema de que no manda una respuesta Asterisk... O por lo menos no en la menera en la que yo le estoy pidiendo.

Isaac

Elio Rojano

unread,
Oct 4, 2011, 12:10:35 PM10/4/11
to aster...@googlegroups.com
Entonces la respuesta en el primer email que te envié.


El día 4 de octubre de 2011 17:46, Isaac Cueli Chavarría
<isaac...@gmail.com> escribió:

Isaac Cueli Chavarría

unread,
Oct 4, 2011, 12:28:56 PM10/4/11
to aster...@googlegroups.com
Pues si te digo al verdad... Me parece que tampoco dado que cuando uso la clase para Action par AMI me devuelve el valor -1 por pantalla (Eso aun cuando la extension esta registrada). Ademas de los parametros de lectura y escritura del usuario del AMI solo tengo entendido que hay: SYSTEM, CALL, LOG, VERBOSE, COMMAND, AGENT, USER y CONFIG... Eso del reporting no me suena a nada de lo que he leido (Aunque tambien lo he probado... JUAS...)

Isaac

Isaac Cueli Chavarría

unread,
Oct 4, 2011, 3:43:55 PM10/4/11
to aster...@googlegroups.com
Estaba pensando yo una cosita... No sera tema de versionamiento de Asterisk... El server esta en la version Asterisk v1.4.26.1. NO TENDRA ALGO QUE VER CON ESO...???

Isaac

Elio Rojano

unread,
Oct 4, 2011, 3:58:49 PM10/4/11
to aster...@googlegroups.com
No, no tiene que ver con eso.

Pega aquí el código que estás haciendo que veamos porqué no recibes
nada del Manager...

El día 4 de octubre de 2011 21:43, Isaac Cueli Chavarría

Saúl Ibarra Corretgé

unread,
Oct 4, 2011, 6:20:39 PM10/4/11
to aster...@googlegroups.com
2011/10/4 Isaac Cueli Chavarría <isaac...@gmail.com>:

> Estaba pensando yo una cosita... No sera tema de versionamiento de
> Asterisk... El server esta en la version Asterisk v1.4.26.1. NO TENDRA ALGO
> QUE VER CON ESO...???
>

Creo que tienes que comprar un teclado nuevo, se te ponen las
mayúsculas aleatoriamente.

--
/Saúl
http://saghul.net | http://sipdoc.net

Isaac Cueli Chavarría

unread,
Oct 4, 2011, 6:50:03 PM10/4/11
to aster...@googlegroups.com
+1 a lo del teclado...

En cuanto al codigo... Lo he puesto antes, pero lo vuelvo a escribir para que lo veais:


<?
$oSocket = fsockopen ("XXX.XXX.XXX.XXX", 5038, $errno, $errstr, 20);
fputs($oSocket, "Action: login\r\n");
fputs($oSocket, "Username: usuario\r\n");
fputs($oSocket, "Secret: password\r\n\r\n");
sleep (1);
fputs($oSocket, "Action: ExtensionState\n");
fputs($oSocket, "Context: extensiones\n");
fputs($oSocket, "Exten: 101\n");
fputs($oSocket, "Action: Logoff\r\n");
fclose($oSocket);
?>

En CLI me sigue saliendo:

 == Parsing '/etc/asterisk/manager.conf': Found
 == Manager 'usuario' logged on from XXX.XXX.XXX.XXX
 == Manager 'usuario' logged off from XXX.XXX.XXX.XXX

Gracias...

Isaac

2011/10/5 Saúl Ibarra Corretgé <sag...@gmail.com>

Elio Rojano

unread,
Oct 4, 2011, 7:02:36 PM10/4/11
to aster...@googlegroups.com
Ok, si ese es el código, entonces tu código está mal y no, no tiene
nada que ver con Asterisk.


El día 5 de octubre de 2011 00:50, Isaac Cueli Chavarría
<isaac...@gmail.com> escribió:

--
http://www.sinologic.net/

Isaac Cueli Chavarría

unread,
Oct 4, 2011, 7:05:38 PM10/4/11
to aster...@googlegroups.com
JUAS... Podrias ser un poco mas especifico, por favor... Mas que nada por que es un calco a un ejemplo de voip-info.org... Aunque seguramente falte algo (Que intuyo que sera eso, mas que nada porque no veo por donde extrae el estado de la extension)...

Isaac

Elio Rojano

unread,
Oct 5, 2011, 11:11:32 AM10/5/11
to aster...@googlegroups.com
El día 5 de octubre de 2011 01:05, Isaac Cueli Chavarría
<isaac...@gmail.com> escribió:

> JUAS... Podrias ser un poco mas especifico, por favor... Mas que nada por
> que es un calco a un ejemplo de voip-info.org...

Pues o está mal calcado, o es un ejemplo mal escogido.

> Aunque seguramente falte
> algo (Que intuyo que sera eso, mas que nada porque no veo por donde extrae
> el estado de la extension)...

ya te lo he dicho, mírate el fgets o fread...

Isaac Cueli Chavarría

unread,
Oct 5, 2011, 3:16:38 PM10/5/11
to aster...@googlegroups.com
Si, si... Ya lo mire.. Se que se trata de algun parametro de la funcion fgets para tomar el resultado del action a traves de la variable de conexion... Taba liado con eso... JEJEJE...

Por cierto... Com ofue hoy Miercoles el VoIP2DAY...???

Isaac

José Luis Gómez

unread,
Oct 6, 2011, 2:08:16 PM10/6/11
to aster...@googlegroups.com
Buenas.
Te ejemplo bien escrito:


<?
$oSocket = fsockopen ("XXX.XXX.XXX.XXX", 5038, $errno, $errstr, 20);
fputs($oSocket, "Action: login\r\n");
fputs($oSocket, "Username: usuario\r\n");
fputs($oSocket, "Secret: password\r\n\r\n");
sleep (1);
fputs($oSocket, "Action: ExtensionState\r\n");
fputs($oSocket, "Context: extensiones\r\n");
fputs($oSocket, "Exten: 101\r\n\r\n");
sleep (1);

fputs($oSocket, "Action: Logoff\r\n");
fclose($oSocket);
?>

Siempre despues de cada comando tenés que dejar dos "enter".
Pirmero siempre te conviene verificar que asterisk te tome bien el usuario y los comandos que ingresás, para ello, conectate por telnet.
Saludos.

--
José Luis Gómez
www.qualis.com.ar

Elio Rojano

unread,
Oct 7, 2011, 2:18:45 PM10/7/11
to aster...@googlegroups.com
El 6 de octubre de 2011 20:08, José Luis Gómez <jos...@gmail.com> escribió:
Buenas.
Te ejemplo bien escrito:


<?
$oSocket = fsockopen ("XXX.XXX.XXX.XXX", 5038, $errno, $errstr, 20);
fputs($oSocket, "Action: login\r\n");
fputs($oSocket, "Username: usuario\r\n");
fputs($oSocket, "Secret: password\r\n\r\n");
sleep (1);
fputs($oSocket, "Action: ExtensionState\r\n");
fputs($oSocket, "Context: extensiones\r\n");
fputs($oSocket, "Exten: 101\r\n\r\n");
sleep (1);

fputs($oSocket, "Action: Logoff\r\n");
fclose($oSocket);
?>

Siempre despues de cada comando tenés que dejar dos "enter".
Pirmero siempre te conviene verificar que asterisk te tome bien el usuario y los comandos que ingresás, para ello, conectate por telnet.
Saludos.


Además de eso, necesitas el fgets... 



--
http://www.sinologic.net/

Isaac Cueli Chavarría

unread,
Oct 7, 2011, 6:51:52 PM10/7/11
to aster...@googlegroups.com
Si, si... que si... JEJEJE... Ya lo tengo resuelto eso... Bucle While recorriendo el fichero y tomando array... La verdad es que no ha sido cosa mia... JEJEJE...
 Ahora voy con otro tema... JUAS... Pero lo posteare en un nuevo post... AGI y los .call, a ver que me contais...

Un saludo...

Isaac

PD: Elio, se sabe algo de cuando estaran colgadas las conferencias del VOIP2DAY...??? Este año me lo he tenido que perder... SNIFF
Reply all
Reply to author
Forward
0 new messages