Expositores: Mercy Anchundia Ruíz Alberto Santos Flores IMPLEMENTACIÓN DE UN SISTEMA CALLBACK USANDO ARCHIVOS.CALL.

Slides:



Advertisements
Presentaciones similares
Registro de llamadas y logs
Advertisements

Windows Presentation Foundation
111 © 2002, Cisco Systems, Inc. All rights reserved. Presentation_ID.
Softphone.
Asterisk Configuración Canales SIP/IAX 1.
Correo de Voz (voic ) Asterisk Configuración del Correo de Voz (voic ) 1.
Asterisk Interconexion PBX 1.
Asterisk CLI.
Asterisk Conceptos de Asterisk 1.
Asterisk Configuración básica Primeros Pasos 1.
Asterisk Configuración Manejo de variables condicionales 1.
Asterisk Configuración Plan de Numeración 1.
Configuración Discado automatico Manejo de Colas
Replace this image with a relevant, licensed image. Siemens Enterprise Communications Comunicaciones que ahorran Presentado por: Alberto de la Cruz Grijalvo.
Asterisk Trixbox.
Configuración Avanzada
Programación con OpenMP* Intel Software College. Copyright © 2006, Intel Corporation. All rights reserved. Intel and the Intel logo are trademarks or.
DESARROLLO DE GUÍAS DE LABORATORIO PARA TELEFONÍA IP
Expositores: Alejandro Azú Campoverde Rafael Jiménez Ferrerosa
“Implementación de conexiones E1 entre 2 servidores Asterisk utilizando los equipos SDH del laboratorio de Telecomunicaciones” Isaura Ponguillo Fabrizio.
Guía de Implementación
Descripción: Audiencia: Esta presentación muestra cómo instalar el Sistema de Ejecución gsBase con Aplicaciones a Clientes Finales del Desarrollador. Sistemas.
SERVICIOS A TRAVES DE CABLE MODEM El servicio más popular es sin duda el acceso a Internet a alta velocidad y el empleo del correo electrónico. Este servicio.
ADELACU Graballo Graballo Adelacu Ltda. AVIZA Grab all Integración con Collaboration Suite.
EPI-Control Programa para la Vigilancia Epidemiológica Hospitalaria Ampliada y el Control de Infecciones Versión 7.0 Contacto Teléfono.
Base de datos y Microsoft Access
Visual basic Curso de Habilitación Laboral IV. ¿Qué es Visual Basic Visual Basic es uno de los tantos lenguajes de programación que podemos encontrar.
Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar las variables.
Tutorial de Inicio 1 B Á S I C O El Sistema de Localización Vehicular más Innovador Para seguir adelante Presione Enter o Click en su mouse.
Procedimientos Almacenados y Disparadores
Protocolos de Señalización y transmisión de Flujo Multimedia
Alexander Toala Paz Orlando Zambrano Romero
M.C. Juan Carlos Olivares Rojas
PL/SQL Francisco Moreno Universidad Nacional. Funciones Si un procedimiento tiene solo un parámetro de salida, se puede remplazar por una función y esta.
Expositores: Andrea Freire Eduardo López
MONITOREO DE SISTEMAS VOIP USANDO SOFTWARE LIBRE
Expositores: Sandra Pineda Obando Patricio Aguirre Sanabria
SISTEMAS DE VoIP Implementación de un IVR (Interactive Voice Response)
Oscar Navarrete J. Jorge Gutiérrez A.
Wendy Andrade I. Jason Jijón A. Fredy Buenaño V.
RODRIGO DANIEL GUAYAQUIL LOOR JOSÉ LUIS SILVA PALMA
Implementación de un cliente
Presentado por: Lenin Isaías Escobar Mendoza
El protagonismo incesante y cada vez más fuerte de Internet en la vida cotidiana de las personas y las actuales líneas de desarrollo tecnológico de.
Ivette Kembely Carrera M. Luis Andrés Vargas M.. La transmisión de voz a través de la red de datos aun está ciertamente monopolizada. Las comunicaciones.
“Implementación de un ambiente de Virtualización para el manejo de múltiples servidores de VoIP sobre una plataforma común de hardware” María Belén Sotaminga.
Copyright © 2008, Solid Quality Mentors. All rights reserved. PerformancePoint Server Implementar una solución PPS-Monitoring Pablo Ahumada Koschitzky.
Copyright 2005 Oki Electric Industry Co.,Ltd. c S OKI CONFIDENTIAL Configuración del sistema: Registrarse con IP Carrier & IP Trunk Carrier IP ADAM Telefonía.
Circuitos Digitales II
Asterisk Manager Interface
Asterisk Gateway Interface
Roberto Cutuli - Pablo Santi
PROYECTO DE GRADUACIÓN
Asterisk, Linux y Redes Libres JRSL CaFeLUG 2008 Mariano Acciardi
Unidad 4 Universidad Nacional de Jujuy–Cátedra de Comunicaciones–Redes de Datos de Banda Ancha Aplicaciones multimedia VOIP  Transmisión de la Voz convertida.
Instalación y Configuración
Eloísa Orozco Bueno Alvaro Padilla Vilema
Primer Foro Universitario de Software Libre 6, 7, 8 y 9 de Mayo de 2013 Proyecto GNU FreeBSD Linux Experiencias con Asterisk 1.8 Cert Dr. Ismael Esquivel.
Luis Miguel Andino Montalvo Javier Alejandro Urquizo Guevara
Diseño del Modelo de una Red WiFi con Servicios de Telefonía IP con enlaces de larga distancia en zonas rurales como solución a la demanda de telefonía.
LOGO Diseño e Implementación de un Sistema Telefónico Interactivo que me Permita Automatizar la Asignación y Consulta de Citas Médicas Expositoras: Cristina.
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL Facultad de Ingeniería en Electricidad y Computación.
Comunicaciones Unificadas
Asterisk Configuración.
Asterisk Conceptos de Asterisk. Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch2 Canal (channel) Es una conexión que conduce una llamada.
Es una tecnología que permite la transmisión de la voz a través de redes de computadores en forma de paquetes de datos. La Telefonía IP es una aplicación.
Laboratorio VoIP. Servicios Asterisk ● Usuarios SIP. ● Troncal IAX. ● Conexión a la PSTN. ● Redireccionamiento de llamadas. ● Buzón de voz. ● Estadísticas.
Sistema Nacional de Información Básica en Materia de Salud - SINBA
2-Configuración Recomendada: Memoria RAM: 2048 Megabytes 1- Configuración S.O 3- Configuración D.D 4-Tipo de Unidad Disco Duro 4-Tipo de Almacenamiento.
SISTEMAS DE VoIP Implementación de un IVR (Interactive Voice Response)
Transcripción de la presentación:

Expositores: Mercy Anchundia Ruíz Alberto Santos Flores IMPLEMENTACIÓN DE UN SISTEMA CALLBACK USANDO ARCHIVOS.CALL

Los antecedentes de este proyecto son: ANTECEDENTES Funcionalidades adicionales para las pbx Sistemas con capacidad de personalización Asterisk: precursor de la telefonía VoIP Soluciones de código abierto

OBJETIVOS Diseñar una alternativa para comunicación inmediata. Facilitar y extender el área de comunicación empresarial. Objetivos Generales Mostrar la aplicación de un sistema de retrollamada en Asterisk. Diseñar procedimiento para el retorno de llamada tipo Call-Through. Establecer canal de comunicación desde afuera hacia la PBX de la empresa. Aplicar el uso de las tecnologías de voz sobre ip más comunes. Objetivos Específicos

DESCRIPCIÓN Funcionamiento del sistema callback.

Llamante digita el número de la extensión requerida. La extension requerida se encuentra ocupada. PBX da la opción de devolver la llamada Llamante presiona la tecla 6 para que se le devuelva la llamada Cuando la extensión esté disponible se devuelve la llamada al llamante. Usuario digita el número telefónico de la empresa si esta fuera de la pbx

METODOLOGÍA Procedimiento de implementación del sistema callback.

1. Instalación del servicio Asterisk con sus dependencias. 2. Instalación del servicio de base de datos mysql. 3. Instalación del compilador para el lenguaje de programación php Instalación de Tarjeta Digium Tdm410p Pci 4 puertos. 5. Conexión y configuración de teléfonos IP Grandstream con usuarios sip. 6. Instalación y configuración del softphone zoiper con usuarios iax.

Especificaciones técnicas del hardware utilizado. COMPONENTES Especificaciones de hardware del servidor ComponenteCaracterísticas ProcesadorIntel Core Duo de 2.8 GHZ Ram2 GB Tarjeta de Red 10/100 Mbps Disco Duro80 GB Tarjeta analógicaMarca Digium TDM410p 4 puertos Teléfono IP Grandstream GXP2000

Especificaciones técnicas del software utilizado. COMPONENTES Softphones: X-Lite y Zoiper

Archivos de configuración modificados en el servidor Asterisk. CONFIGURACIÓN DE ASTERISK Archivos de configuración sip.conf iax.conf system.conf chan_dahdi.conf voic .conf extensions.conf

Sirve para la configuración del protocolo, proveedores y usuarios sip. SIP.CONF [general] srvlookup=yes disallow=all allow=alaw allow=ulaw allow=gsm language=es callwaiting=no qualify=yes calltransfer=no callforwarding=no [501] type=friend secret=501 qualify=yes nat=yes host=dynamic canreinvite=no context=internal [502] type=friend secret=502 qualify=yes nat=yes host=dynamic canreinvite=no context=internal

Sirve para la configuración del protocolo y usuarios iax. IAX.CONF [general] disallow=all allow=gsm allow=alaw allow=ulaw jitterbuffer=yes bindport=4569 language=es callwaiting=no [503] type=friend secret=503 host=dynamic context=internal callerid=503 requirecalltoken=no

Sirve para configuración de hardware a bajo nivel. SYSTEM.CONF Marca Digium TDM410p 4 puertos fxsks=4 echocanceller=mg2,4 loadzone=us defaultzone=us

Sirve para configuración de hardware a alto nivel. CHAN_DAHDI.CONF Marca Digium TDM410p 4 puertos [channels] usecallerid=yes hidecallerid=no callwaiting=no threewaycalling=yes transfer=yes echocancel=yes echotraining=yes inmediate=no group=1 context=incoming signaling=fxs_ks channel => 4

Sirve para especificar las características del buzón de voz. VOIC .CONF [default] Language=es 501=>501,Orly 502=>502,Jose 503=>503,Juan

Es el plan de marcado que ejecuta Asterisk. EXTENSIONS.CONF Define características generales del plan de marcado. [general] Define el plan de marcado para las extensiones configuradas en la pbx. [internal] Define el plan de marcado para llamadas entrantes. [incoming] Define la creación del archivo.call en base a los parámetros que recibe del contexto internal para originar la llamada a la extensión ocupada. [macro-internos] Define el comportamiento para retorno de la llamada al usuario llamante. [macro-verify]

autofallthrough=no clearglobalvars=no autofallthrough=no clearglobalvars=no exten => _XXX,1,Answer() exten => _XXX,2,Wait(1) exten => _XXX,n,AGI(actualiza_base.agi) exten => _XXX,n,AGI(scrbasefinal.agi,${EXTE N}) exten => _XXX,n,Set(GROUP(${EXTEN})=OU TBOUND_GROUP) exten => _XXX,n,Set(GROUP(${CALLERID(nu m)})=OUTBOUND_GROUP) exten => _XXX,1,Answer() exten => _XXX,2,Wait(1) exten => _XXX,n,AGI(actualiza_base.agi) exten => _XXX,n,AGI(scrbasefinal.agi,${EXTE N}) exten => _XXX,n,Set(GROUP(${EXTEN})=OU TBOUND_GROUP) exten => _XXX,n,Set(GROUP(${CALLERID(nu m)})=OUTBOUND_GROUP) exten => _XXX,n,GotoIf($[${GROUP_COUNT( > 1]?busy) exten => _XXX,n,Set(DB(channels/bandera)=0 ) exten => _XXX,n,Dial(${CHANN}/${EXTEN},30,wm) exten => u) exten => _XXX,n,GotoIf($[${GROUP_COUNT( > 1]?busy) exten => _XXX,n,Set(DB(channels/bandera)=0 ) exten => _XXX,n,Dial(${CHANN}/${EXTEN},30,wm) exten => u) exten => _XXX,n,Hangup() exten => _XXX,n(busy),Playback(rellamada) exten => _XXX,n,Read(callbusy,,1,,1,5) exten => _XXX,n,GotoIf($["${callbusy}" = "6"]?callfile) exten => t,b) exten => _XXX,n,Hangup() exten => _XXX,n(busy),Playback(rellamada) exten => _XXX,n,Read(callbusy,,1,,1,5) exten => _XXX,n,GotoIf($["${callbusy}" = "6"]?callfile) exten => t,b) exten => _XXX,n,Hangup() exten => _XXX,n(callfile),Set(DB(channels/src) =${CHANNEL(channeltype)}) exten => _XXX,n,Set(DB(channels/id)=${CALL ERID(num)}) exten => _XXX,n,Set(DB(channels/num)=${EX TEN}) exten => _XXX,n,AGI(scrbasefinal.agi,${DB(ch annels/num)}) exten => _XXX,n,Set(DB(channels/dst)=${CHA NN}) exten => _XXX,n(callfile),Set(DB(channels/src) =${CHANNEL(channeltype)}) exten => _XXX,n,Set(DB(channels/id)=${CALL ERID(num)}) exten => _XXX,n,Set(DB(channels/num)=${EX TEN}) exten => _XXX,n,AGI(scrbasefinal.agi,${DB(ch annels/num)}) exten => _XXX,n,Set(DB(channels/dst)=${CHA NN}) exten => _XXX,n,Set(DB(channels/bandera)=1 ) exten => _XXX,n,Playback(colgar) exten => _XXX,n,Hangup() exten => h,1,GotoIf($[${DB(channels/bandera)} =1]?h,2:h,3) exten => h,2,Macro(internos,${DB(channels/ds t)},${DB(channels/id)},${DB(channels/ num)},${DB(channels/src)}) exten => h,3,Hangup() exten => _XXX,n,Set(DB(channels/bandera)=1 ) exten => _XXX,n,Playback(colgar) exten => _XXX,n,Hangup() exten => h,1,GotoIf($[${DB(channels/bandera)} =1]?h,2:h,3) exten => h,2,Macro(internos,${DB(channels/ds t)},${DB(channels/id)},${DB(channels/ num)},${DB(channels/src)}) exten => h,3,Hangup()

exten => s,1,Answer() exten => s,2,Background(intro1) exten => s,2,Playback(bienvenida) exten => s,3,WaitExten() include => internal exten => s,1,Answer() exten => s,2,Background(intro1) exten => s,2,Playback(bienvenida) exten => s,3,WaitExten() include => internal exten => s,1,System(echo Channel:${ARG1}/${ARG3}>> /tmp/callback${ARG3}) exten => s,n,System(echo Callerid:CallBack " " >> /tmp/callback${ARG3}) exten => s,n,System(echo WaitTime:60 >> /tmp/callback${ARG3}) exten => s,n,System(echo Maxretries:10 >> /tmp/callback${ARG3}) exten => s,1,System(echo Channel:${ARG1}/${ARG3}>> /tmp/callback${ARG3}) exten => s,n,System(echo Callerid:CallBack " " >> /tmp/callback${ARG3}) exten => s,n,System(echo WaitTime:60 >> /tmp/callback${ARG3}) exten => s,n,System(echo Maxretries:10 >> /tmp/callback${ARG3}) exten => s,n,System(echo RetryTime:60 >> /tmp/callback${ARG3}) exten => s,n,System(echo Account: ${ARG2}>> /tmp/callback${ARG3}) exten => s,n,System(echo Application:Macro >> /tmp/callback${ARG3}) exten => s,n,System(echo Data: verify >> /tmp/callback${ARG3}) exten => s,n,GotoIf($[${GROUP_COUNT(OUT > 1]?busy) exten => s,n,System(echo RetryTime:60 >> /tmp/callback${ARG3}) exten => s,n,System(echo Account: ${ARG2}>> /tmp/callback${ARG3}) exten => s,n,System(echo Application:Macro >> /tmp/callback${ARG3}) exten => s,n,System(echo Data: verify >> /tmp/callback${ARG3}) exten => s,n,GotoIf($[${GROUP_COUNT(OUT > 1]?busy) exten => s,n,System(mv /tmp/callback${ARG3} /var/spool/Asterisk/outgoing) exten => s,n(busy),Macro(internos,${ARG1},${ ARG2},${ARG3},${ARG4}) exten => s,n,System(mv /tmp/callback${ARG3} /var/spool/Asterisk/outgoing) exten => s,n(busy),Macro(internos,${ARG1},${ ARG2},${ARG3},${ARG4}) exten => s,1,Set(GROUP(${DB(channels/id)})= OUTBOUND_GROUP) exten => s,2,GotoIf($[${GROUP_COUNT(OUT )})} > 1]?busy) exten => s,3,GotoIf($[${DB(channels/src}=DAH DI]?s,4:s,5) exten => s,4,Set(DB(channels/src)=DAHDI/4) exten => s,1,Set(GROUP(${DB(channels/id)})= OUTBOUND_GROUP) exten => s,2,GotoIf($[${GROUP_COUNT(OUT )})} > 1]?busy) exten => s,3,GotoIf($[${DB(channels/src}=DAH DI]?s,4:s,5) exten => s,4,Set(DB(channels/src)=DAHDI/4) exten => s,5,Dial(${DB(channels/src)}/${DB(ch annels/id)}) exten => s,n(busy),Voic (${DB(channels/id exten => s,5,Dial(${DB(channels/src)}/${DB(ch annels/id)}) exten => s,n(busy),Voic (${DB(channels/id

Scripts creados con lenguaje de programación php versión 5. SCRIPTS CREADOS EN ASTERISK

ACTUALIZA_BASE.AGI Creación y actualización de base de datos usuarios

Definicion de Variables #!/usr/bin/php -q <?php require '/var/lib/Asterisk/agi-bin/phpagi-2.14/phpagi.php'; $agi=new AGI(); Conexión a la base de datos connect_db(); $fichero or die("No se puede abrir el archivo"); $query0="DELETE FROM sip"; mysql_query($query0) or die('Error, delete query failed'); Leyendo archivo sip.conf while(!feof($fichero)){ if(strcasecmp(fgetc($fichero),"[")==0){ $temp=fgetc($fichero); $cadena=""; while(strcasecmp($temp,"]")!=0){ $cadena=$cadena.$temp; $temp=fgetc($fichero); }

Inserción de extensiones sip en la base de datos if(strcasecmp($cadena,"general")!=0){ $query = "INSERT INTO sip VALUES ('$cadena')"; mysql_query($query) or die('Error, insert query failed'); } fclose($fichero); Abriendo archivo iax.conf $fichero or die("No se puede abrir el archivo"); $query0="DELETE FROM iax"; mysql_query($query0) or die('Error, delete query failed'); Leyendo archivo iax.conf while(!feof($fichero)){ if(strcasecmp(fgetc($fichero),"[")==0){ $temp=fgetc($fichero); $cadena=""; while(strcasecmp($temp,"]")!=0){ $cadena=$cadena.$temp; $temp=fgetc($fichero); } Inserción de extensiones iax en la base de datos if(strcasecmp($cadena,"general")!=0){$query = "INSERT INTO iax VALUES ('$cadena')"; mysql_query($query) or die('Error, insert query failed'); }//fin de if de inserción }//fin de if de [ }//fin de while feof fclose($fichero); ?>

SCRBASEFINAL.AGI Identificación del canal destino del número marcado

Definicion de Variables #!/usr/bin/php -q <?php require '/var/lib/Asterisk/agi-bin/phpagi-2.14/phpagi.php'; $agi=new AGI(); $cli1 = $argv[1]; Verificando si la extensión marcada es tipo sip connect_db(); if(esSIP($cli1)) { //registro ya existe en SIP $temp="SIP"; } Verificando si la extensión marcada es tipo iax else if(esIAX($cli1)) { $temp="IAX2"; }else { $temp=""; }

En caso de no ser tipo sip o iax else { $temp=""; } Enviando al plan de marcado el tipo de canal destino $agi->set_variable("CHANN","$temp"); mysql_close(); ?>

A continuación se mostrará un video con las pruebas efectuadas. PRUEBAS Colocar aquí el video

CONCLUSIONES Las conclusiones obtenidas a partir de este proyecto son las siguientes:

Sistema callback usando archivos.call Contribución de código abierto a telecomunicaciones Callback con tecnologias comunes de telefonía IP Aprovechamiento de ventajas del codigo abierto Asterisk: personalizacion con bajos costos

RECOMENDACIONES Las recomendaciones para la implementación de este proyecto son:

Sistema callback usando archivos.call Personalizar archivo.call si necesita Permisos en los scripts agi librería phpagi en la ruta correcta Habilitar códecs de audio en softphones Puerto a usar de tarjeta Digium TDM410p

Este es el trabajo a futuro con este sistema callback. SOLUCIÓN A COSTOSAS LLAMADAS INTERNACIONALES Este sistema callback se puede ajustar para que sea activado de cualquiera de tres formas posibles: Mediante una llamada telefónica Mediante un mensaje sms Mediante una página web

Gracias por su atención. !!! ¿Tiene alguna pregunta? Gracias por su atención. !!! ¿Tiene alguna pregunta?