Consulta phpAGI + rutas salientes

428 views
Skip to first unread message

Dario Penesi

unread,
Jul 28, 2010, 8:34:41 AM7/28/10
to aster...@googlegroups.com
Estimados un saludo a todos.

Tengo una consulta, estoy haciendo un sistema con php y phpagi que dispara unas llamadas a unos moviles y los comunicar con un agi.
Esto lo hago usando originate, AMI y demas. Bueno les doy un esquema resumido de lo que tengo asi veo si me pueden ayudar.

1) les pego una porcion del codigo que realiza la llamada mediante Originate y AMI:

require_once("phpagi.php");

//$telefonos es un array de moviles ej formato 61111111 que llega desde una peticion http y las busca de una base de datos mysql

function control_llamada($habitacion, $planta, $telefonos, $idEmergencia) {

//El sistema intenta llamar al primer movil mientras $status devuelva  'Originate failed'

     while ($status == 'Originate failed' && isset($telefonos[$i])){
                                $receptor= "Destinatario";
$channel = "SIPl/$telefonos[$i]";
$application="AGI";
$context="helpme";
$priority="1";
$hora = date('H:i:s');
$callerid="<HELPMESystem>";
        $variable="ARG1=$idEmergencia|ARG2=$telefonos[$i]|ARG3=$habitacion|ARG4=$planta";
                        $astRess = $astManager->Originate($channel,NULL,$context,$priority,NULL,NULL,NULL,$callerid,$variable,NULL,NULL,NULL);
                                $status=$astRess['Message'];
    }
}

2) - Contexto: (utilizado en el Originate para comunicarme con distintos AGI's de distintas funcionalidades)

[helpme]
exten => s,1,Macro(helpme,${ARG1}|${ARG2}|${ARG3}|${ARG4}|${ARG5}|${ARG6})
include => from-internal

[macro-helpme]
exten => s,1,Noop(Comenzando Contexto helpme ${ARG1}-${ARG2}-${ARG3}-${ARG4}-${ARG5}-${ARG6})
;exten => s,n,Answer
exten => s,2,GotoIf($["${ARG6}" = "cerrar"]?5:4)
exten => s,3(agi1),AGI(call_emergencia.php|${ARG1}|${ARG2}|${ARG3}|${ARG4}|${ARG5}|${ARG6})
exten => s,4,GotoIf($["${ARG6}" = "llamaroperadora"]?6:3)
exten => s,5(agi2),AGI(call_emergencia_cerrar.php|${ARG1}|${ARG2}|${ARG3}|${ARG4}|${ARG5}|${ARG6})
exten => s,6(agi2),AGI(call_emergencia_operadora.php|${ARG1}|${ARG2}|${ARG3}|${ARG4}|${ARG5}|${ARG6})
exten => s,n,Hangup()

3)- El sistema es un Elastix con un gateway FXO GrandStream.
En este gateway hay 4 lineas moviles y 4 lineas analogicas.
El gateway lo tengo configurado contra asterisk en donde registro cada canal (1-8) como una cuenta sip, para poder despues crear en freepbx las troncales y poder configurar rutas salientes para moviles, o para numeros locales, etc. (El gateway no hace esto si no asterisk).

Entonces cual es el problema?

bueno por ejemplo si llamo desde un telefono comun o eyebean, etc.... a una linea movil, en el CLI dice algo como esto cuando comienza a llamar
SIP/GSM1/61111112
SIP/GSM2/62222221
Para llamados a lineas locales
SIP/Urbana6/9111112

Es decir detecta el patron de la ruta saliente de moviles (o la que sea) y buscar el canal libre en el gateway FXO y cursa la llamada como corresponde.

y aqui esta el centro del problema, ya que  cuando hago el originate y traigo el numero queda la variable $channel=SIPl/61111112 por ejemplo y me da error.

Que es lo que quiero?  que la búsqueda de lineas móviles libres me la haga asterisk ya que es un engorro guarda en la base de datos GSM1/61111112,GSM2/61111112,GSM3/61111112. y agregar esa logica en mis script no tiene sentido, ya que lo hace asterisk...etc..etc..etc

No se como resolver este problema.

Otro inconveniente  es que veo que con esta topologia de asterisk y gatewaysGSM, al hacer el originate y esperar el status del mismo, el gateway le informa que esa llamada esta ASNWERED  antes de cursar la llamada, siendo que puede que una vez que el gateway comience a llamar despues este ocupado el movil destino. Como se puede resolver esto?

Espero haya sido claro, porque de verdad estoy trabado con esto y ya me ha superado. :(

Espero vuestros comentarios

Muchas gracias 

Dario

Raúl Alexis Betancor Santana

unread,
Jul 28, 2010, 9:43:19 AM7/28/10
to aster...@googlegroups.com
On Wednesday 28 July 2010 13:34:41 Dario Penesi wrote:

> Entonces cual es el problema?

El problema está clarísimo, que estas manando la llamada al contexto
equivocado, consulta en la lista de elastix sobre como funcionan los flujos
de llamadas en elastix, y luego modifica tu script para que mande la llamada
a donde toca.

> Otro inconveniente es que veo que con esta topologia de asterisk y
> gatewaysGSM, al hacer el originate y esperar el status del mismo, el
> gateway le informa que esa llamada esta ASNWERED antes de cursar la
> llamada, siendo que puede que una vez que el gateway comience a llamar
> despues este ocupado el movil destino. Como se puede resolver esto?

Uff ... a ver ... eso tiene que ver con las unidades de FCL que tengas
conectadas al gateway y la configuración del gateway.
En resumidas cuentas, tienes el gateway o las FCL's mal configuradas y te dan
ANSWERED nada más descolgar para empezar a marcar.
Aquí te toca buscar información sobre dichas FCL's, configurarlas
correctamente y el gateway tambien.

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

Dario Penesi

unread,
Jul 28, 2010, 11:13:45 AM7/28/10
to aster...@googlegroups.com
OK, hay una corrección en lo que he puesto y es que el gateway no es GSM, sorry, es un gateway FXO GrandStream en donde hay conectados 4 lineas analógicas y 4 Telulares.

Siento no haberlo puesto correctamente.

Saludos cordiales

Dario

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

Entra ahora en el canal de irc de Asterisk-ES para charlar en directo sobre VoIP y
Asterisk: 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

Raúl Alexis Betancor Santana

unread,
Jul 28, 2010, 11:29:28 AM7/28/10
to aster...@googlegroups.com
On Wednesday 28 July 2010 16:13:45 Dario Penesi wrote:
> OK, hay una corrección en lo que he puesto y es que el gateway no es GSM,
> sorry, es un gateway FXO GrandStream en donde hay conectados 4
> lineas analógicas y 4 Telulares.

La respuesta sigue siendo la misma ... sustituye FCL por Telular, a ver si lo
pillas.

Dario Penesi

unread,
Jul 28, 2010, 11:49:20 AM7/28/10
to aster...@googlegroups.com
El 28 de julio de 2010 10:43, Raúl Alexis Betancor Santana <ra...@dimension-virtual.com> escribió:
On Wednesday 28 July 2010 13:34:41 Dario Penesi wrote:

> Entonces cual es el problema?

El problema está clarísimo, que estas manando la llamada al contexto
equivocado, consulta en la lista de elastix sobre como funcionan los flujos
de llamadas en elastix, y luego modifica tu script para que mande la llamada
a donde toca.

Raul gracias por tu respuesta, te comento el sistema lo probe antes con extensiones SIP entonces cuando de la base me llega un interno por ejemplo 400, el originate envia SIP/400 y me comunica con el contexto helpme y anda todo bien. El tema es cuando quiero realizar la llamada a un movil, es decir cuando viene el numero 61111233 esto me lo arma como SIP/ 61111233 y me lo deniega porque ese channel no lo conoce. Si yo lo fuerzo y le pongo por ejemplo SIP/Moviles1/61111233 (Donde Moviles corresponde a la troncar del puerto 5 del Gateway FXO), alli si funciona.

Ahora el tema es que la elección de la tronca Mobil1,Movil2,Movil3, MovilN quiero que la haga asterisk y no mi codigo, quiero enviar solo el numero 61111233 y que asterisk lo tome como si marcara desde un x-lite por ejemplo. 

Esto no es un capricho, si le agrego toda la lista de telefonos con las troncales en la base de datos y antes de enviarlo lo concateno y armo todo, el dia que cambie el nombre de una ruta tengo que cambiarlo en la base, codigo, etc.

Raúl Alexis Betancor Santana

unread,
Jul 28, 2010, 12:19:36 PM7/28/10
to aster...@googlegroups.com

Y vuelvo y te repito, que estás enviando la llamada al sitio incorrecto.

Tu tienes un contexto en alguna parte, que es el que ejecuta el código de
selección de la ruta de salida y es ahí a donde has de mandar una de las
patas de la llamada.

Es que estas mezclado en concepto de CANAL SIP, con el de contexto del
dialplan, tienes primero que aclarar esos conceptos básico para que luego
puedas reprogramar el script.

Te avanzo, que no solo has de reprogramar el script, también has de toquetear
el dialplan para conseguir el objetivo que persigues.

Dario Penesi

unread,
Jul 28, 2010, 12:34:27 PM7/28/10
to aster...@googlegroups.com

Bien gracias por tu respuesta.

Creo que a lo que te refieres es que la llamada sea algo SIP/61212122@Mobiles ,  y que esto se comunique con el contexto "helpme", y que a su vez estos dos contextos se puedan comunicar..


Es a eso a lo que te refieres?




Saludos cordiales


Raúl Alexis Betancor Santana

unread,
Jul 28, 2010, 1:03:00 PM7/28/10
to aster...@googlegroups.com
On Wednesday 28 July 2010 17:34:27 Dario Penesi wrote:
> Bien gracias por tu respuesta.
>
> Creo que a lo que te refieres es que la llamada sea algo
> SIP/61212122@Mobiles , y que esto se comunique con el contexto "helpme", y
> que a su vez estos dos contextos se puedan comunicar..
>
>
> Es a eso a lo que te refieres?

exacto

Reply all
Reply to author
Forward
0 new messages