Hagamos que México crezca..

Prefiere el consumo de lo Hecho en México

Visitantes








Conversación

  • Elvin: Estimado ando muy preocupado me compre el USRP2 y las tarjetas de GSM cuando me entere que no trabaja openbts con usrp2, help me :(  
  • Phylevn: Si claro, hay un software israelí que es gratuito no recuerdo como se llama, solo tienes que compilar asterisk-addons para que también guarde en el CDR el ID de la llamada para asi despues relacionarla con la grabación.  
  • Cesar: Que ta amigo... sobre la pregunta de ligar una extencion a una troncal o hice con customcontext en freepbx.
    solo tengo una duda, hay algun plugin para freepbx para poder monitorear las llamadas grabadas como en elastix?
    gracias.. y saludos  
  • Sergio: Hola!!
    Oie al parecer hay errores en las entradas sobre la Facturacion Electronica del SAT, hace unos dias lei los Post y hoy YA NO PUEDO ENTRAR, me marca que la pagina no se encontro.
    Gracias  
  • Conmutador IP: @Max: Para que tu Tel IP haga y reciba llamadas necesitas configurarlo, si tu teléfono usa el protocolo SIP entonces necesitas configurar usuario, password, dominio o proxy, outbound proxy en algunos casos y puerto que el default es 5060, estos datos te los da el proveedor IP con los que contrates el servicio como puede ser Alestra en México, o callcentric.com en estados unidos por ejemplo  
  • Max: hola tengo una duda, tengo un telefono IP pero nose si se requiere alguna configuracion para que trabaje con el modem de infinitum, es decir que tengo q hacer para que pueda hacer y recibir llamadas con el.
    espero puedas ayudarme  
  • Phylevn: Si lo puedes hacer, busca lo que son los contextos en asterisk.  
  • Cesar: Que tal, si me funciono, solo que curiosamente con no-ip o ddns solo fuinciona cuando son isp diferentes, aquí en Nayarit, Telmex y Megacable, si lo hago solo con Megacable debo poner la ip de la der de Megacable, 10.163.x.x no tengo idea por que solo así funciono... Otra duda, en asterisk se puede hacer que por ejemplo la extensión 500 solo use la troncal 1 y todas las demás extensiones utilizen otra troncal? Esto sin teniendo el mismo plan de marcado en ambas troncales, es decir, poder hacer que una troncal y una extensión estén vinculadas para hacer llamadas.  
  • Angel Reyes: Hey Filein,
    Quiero conversar contigo sobre una oportunidad de negocio. ¿me pasas tu email?
    Saludos.  
  • Comutador IP: @Cesar: Si es posible, solo requieres poner el puerto SIP de tu Conmutador IP Asterisk en una IP Pública, puedes usar DynDNS para este caso junto con DDClient y ya solo el SPA lo apuntas a la IP Pública de tu conmutador IP Asterisk siguiendo los mismos pasos de configuración de siempre. Eso es todo.  

Escribe el código Captcha que estás viendo

Como colgar una llamada con un script en PHP y Asterisk Manage Interface

Probando el uso de AMI (Asterisk Manager Interface) para controlar de forma externa acciones, eventos y comandos de Asterisk desde algún script, me he metido a estudiar esta tecnología interesante que potencializa el uso de Asterisk y permite crear diversas aplicaciones externas e integrarlas a aplicaciones terceras, tales como CRM, ERPs, Encuestas, etc.
Como demo he intentado hacer un script en php que buscará información de una extensión dada, si está estuviera llamando, entonces que buscara información del canal, para luego mandar a colgar esa extensión.
El código que hice para poder hacer este ejemplo es el siguiente:
/*
Script creado por Filein Rommel Leon(aka Phylevn)
Licencia GPL
Script de demostración del uso de AMI con PHP, este script cuelga una extensión si estuviera en uso, ocupada ó no disponible, como demo agrego la opción de que si una extensión está en una llamada(uso) para que se pueda hacer la prueba
0=> Disponible
1=>Use: Si una extension esta llamando
2=>Busy: Si una extensión esta ocupada
4=>Unavailable: Si una extensión está ocupada
En este caso comparo si las extensiones tienen el status 1,2 ó 4, entonces obtengo el canal correspondiente a la extensión y luego la cuelgo.
Para probar este script hacer una llamada de la extensión a colgar a otra extensión y correr el script paraver su funcionamiento.
*/

                $amiHost = "localhost"; //servidor de AMI
                $amiUser = "asterisk"; //login AMI
                $amiSecret = "4st3r1sk";//password AMI
                $amiExten = "102";
                $amiChannel = "SIP/$amiExten"; //extension a buscar para colgar
                $amiContext = "from-internal";//contexto
                $getTextSearched = 0;
               
                $amiStatusExt = 0;
               
                //Estados de una extension
                $_extStatus = array(-1=>"Extension not found",0=>"Idle",1=>"Use",2=>"Busy",4=>"Unavailable",8=>"Ringing",16=>"On Hold");
               
                if ($amiChannel == null) :
                        exit() ;
                endif ;
               
                if ($pos===false) :
                        $errno=0 ;
                        $errstr=0 ;
                        $oSocket = fsockopen ($amiHost, 5038, $errno, $errstr, 20);
                        if (!$oSocket) {
                                echo "$errstr ($errno)<br>\n";
                        } else {
                                if(!strpos($amiChannel, "/") )
                                        $amiChannel =  "SIP/".$amiChannel;
                               
                                //Nos validamos dentro de AMI
                                fputs($oSocket, "Action: login\r\n");
                                fputs($oSocket, "Events: off\r\n");
                                fputs($oSocket, "Username: $amiUser\r\n");
                                fputs($oSocket, "Secret: $amiSecret\r\n\r\n");
                               
                                //Obtenemos el status de la extension deseada
                                fputs($oSocket, "Action: ExtensionState\r\n");
                                fputs($oSocket, "exten: $exten\r\n");
                                fputs($oSocket, "context: default\r\n");
                                fputs($oSocket, "actionid: 1\r\n\r\n");
                                $echo = "ok";
                                while ($echo!="") {
                                        if(strstr($echo, "Status:")!=""){
                                                $amiStatusExt  = ereg_replace( "[^0-9]", "", $echo);
                                                echo "Exten : ".$_extStatus[$amiStatusExt ]."\n";
                                                $echo = "";
                                        }else{
                                                //echo ":::".$echo;
                                                $echo = fgets($oSocket);
                                        }
                                }
                               
                                //Obtiene la información de canales y buscamos informacion sobre nuestro canal
                                if($amiStatusExt==2 or $amiStatusExt ==4 or $amiStatusExt ==1){
                                        fputs($oSocket, "Action: command\r\n");
                                        fputs($oSocket, "command: show channels\r\n\r\n");
                                        echo $echo = "getting SIP Channels\n";
                                        while ($echo!="" or $echo == "--END COMMAND--") {
                                                if(strstr($echo, $amiChannel)!=""){
                                                        $_values = split("[\s]+|[\t]", $echo);
                                                        $_values[0] = ereg_replace("[^(SIP/)0-9a-zA-Z-]", "", $_values[0]);
                                                        echo $_values[0]."\n";
                                                        $echo = "";
                                                }else{
                                                        //echo ":::".$echo;
                                                        $echo = fgets($oSocket);
                                                }
                                        }
                                }
                               
                                //Si se encontró nuestro canal entonces lo colgamos
                                if($_values[0]!=""){
                                        fputs($oSocket, "Action: Hangup\r\n");
                                        fputs($oSocket, "channel: $_values[0]\r\n\r\n");
                                        echo "hanging channel:  $_values[0]\r\n";
                                }
                               
                                //Salismo de AMI
                                fputs($oSocket, "Action: Logoff\r\n\r\n");
                                sleep(2);
                               
                                //Cerramos la conexion
                                fclose($oSocket);
                        }
                else :
                        exit() ;
                endif ;
?>
 
solo basta correr el script de alguna forma como esta:
php hangup.php
 
Antes solo hay que checar la configuración de AMI en /etc/asterisk/manager.conf ó /etc/asterisk/manager_custom.conf si están usando freepbx.
Entender el protocolo de AMI no es tan complicado, pero lo interesante es la potencia que le brinda a Asterisk para desarrollos más avanzados, este código está hecho a pelo precisamente para entender como se interactua con AMI, aunque ya hay librerías que disminuyen la chamba tal como asterisk-perl ó por ahí el nuevo killer app de Ruby creo que se llama AdHearsion o algo asi que luce muy interesante para hacer este tipo de cosas..
Para conocer un poco más sobre la tecnología de Asterisk Manager Interface entrar a la siguiente URL:
http://www.voipinfo.org/wiki/view/Asterisk+manager+API

# Re: Re: Como colgar una llamada con un script en PHP y Asterisk Manage Interface

Atcherley, <atcherley@gmail.com> / 3 March, 10:21am  
avatar

Gracias por la respuesta, voy a implementarlo......saludos

Dejar un comentario

Escribe el código Captcha que estás viendo

Fuentes XML de comentario: RSS | Atom

Estadísticas de visitantes

185508

Emblemas

Energizado por Jaws Project
Soporta RSS2
Energizado por Software Libre
Energizado por Mozila Firefox
Energizado por Ubuntu Linux
Energizado por PHP
Energizado por Apache Web Server
Energizado por MySQL
Energizado por SQLite
atom

¿ Where The Hell Am I ?

Mi Flickr







Aquí Mis Mejores Fotos

Eventos

Encuesta

¿Que medio de comunicación usas más ?

Comentarios Recientes