Apartir de esto podemos decir que en corazón de asterisk (*) es el dialpan que se define en el archivo extension.conf.



Documentos relacionados
Anexo B. Configuraciones del Archivo extensions.conf

Internet Information Server

COPIAS DE SEGURIDAD CON COBIAN BACKUP INSTALACIÓN Y CONFIGURACIÓN

AGREGAR COMPONENTES ADICIONALES DE WINDOWS

Tutorial: Primeros Pasos con Subversion

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

TICAR TALLER VOIP: Asterisk, como lo hacemos. Foro de Responsables de TICS de las Universidades Nacionales

UNIDAD 1. LOS NÚMEROS ENTEROS.

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

La ventana de Microsoft Excel

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

MANUAL DE AYUDA MODULO TALLAS Y COLORES

Guía N 1: Fundamentos básicos(i)

Cómo creo las bandejas del Registro de Entrada /Salida y de Gestión de Expedientes?

Gracias a ese IP único que tiene cada ordenador conectado a la red de internet se pueden identificar y comunicar los ordenadores.

La plantilla propone aprovechar esta estructura en común y sólo modificar el contenido del área del documento que sea diferente.

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.

MANUAL DE CREACIÓN DE CARPETAS PARA ACCESO POR FTP DE CLIENTES EN UN NAS

TEMA 20 EXP. WINDOWS PROC. DE TEXTOS (1ª PARTE)

Uso de Visual C++ Pre-Practica No. 3

Para trabajar este tema vamos a situarlo un poco más en el lenguaje común:

Manual para la utilización de PrestaShop

CAPÍTULO I: UNA PRESENTACIÓN EN POCOS MINUTOS

Curso Internet Básico - Aularagon

MANUAL BASICO DE WEBEX

ZILOG DEVELOPER STUDIO

GVisualPDA Módulo de Almacén

Configuración en Red

Al finalizar, se podrán instalar Asterisk, crear usuario y extensiones. Requisitos del lector, para llevar acabo las tareas citadas en este manual

Formas de Pago y Efectos en Facturas de Venta WhitePaper Febrero de 2007

Manual hosting acens

Conceptos Generales en Joomla

Manual de Instalación y uso de FTP

GUIA BREVE PARA EL ENVIO DE MAILING

MANUAL COPIAS DE SEGURIDAD

UNIVERSIDAD DE MEDELLÍN NUEVO PORTAL WEB MANUAL DE USUARIO GESTOR DE CONTENIDOS

QUÉ ES UN SERVIDOR Y CUÁLES SON LOS PRINCIPALES TIPOS DE SERVIDORES? (PROXY, DNS, WEB, FTP, SMTP, ETC.) (DV00408A)

DOMINIO Y RANGO página 89. Cuando se grafica una función existen las siguientes posibilidades:

ÍTEMS DEL MENÚ CREACIÓN Y GESTIÓN (Última revisión: lunes, 9 de marzo de 2009)

GENERACIÓN DE TRANSFERENCIAS

Hostaliawhitepapers. Las ventajas de los Servidores dedicados. Cardenal Gardoki, BILBAO (Vizcaya) Teléfono:

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.

El control de la tesorería consiste en gestionar desde la aplicación los cobros y pagos generados a partir de las facturas de venta y de compra.

Prácticas con Elastix Asterisk - Lab. 3

GENERACIÓN DE ANTICIPOS DE CRÉDITO

MANUAL SERVICIOS TELEFONIA FIJA

Porcentajes. Cajón de Ciencias. Qué es un porcentaje?

Comercial Cartas de Fidelización

Manual de uso de la plataforma para monitores. CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

Guía Práctica para el Uso del Servicio de Software Zoho CRM

Proceso de cifrado. La fortaleza de los algoritmos es que son públicos, es decir, se conocen todas las transformaciones que se aplican al documento

Una vez que tengamos el padrón de un determinado tributo con todos sus datos actualizados, podemos generar los recibos de ese padrón.

Módulo II - PowerPoint

15 CORREO WEB CORREO WEB

Nociones básicas de Windows: Organizando: El Explorador de archivos de Windows

COMO REPRODUCIR MENSAJE DE BIENVENIDA EN ELASTIX

MARTIN JARAMILLO PINO Proyecto Final Programación, creatividad y solución de problemas con Scratch

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

En caso de que el cliente nunca haya obtenido una concesión de licencia de un servidor DHCP:

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

Como verás pone Microsoft Office y si te colocas sobre esta línea debería salir:

Configuración de DNS seguros

Unidad Didáctica 12. La publicación

COMO FUNCIONA INTERNET

Análisis de esquemas XML [1]

TUTORIAL DE LinkedIn. Proyecto Empleo 2.0

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

Gestión de Subtotales en Documentos de Venta WhitePaper Febrero de 2007

PS.Vending Almacén Pocket PC

Manual Sistema de Planillas

NORMA 34.14(SEPA) 05/11/2013

Técnicas para mejorar nuestro Posicionamiento

Como montar un servidor web + Anonimización con Tor

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: Fax.:

INDICE. 1. Introducción El panel Entities view El panel grafico Barra de botones Botones de Behavior...

Microsoft Excel II Formato de celdas

INSTALACIÓN DE GATEWAYS SIP

Ministerio de Educación. Diseño de Presentaciones en la Enseñanza. Módulo 9: Imprimir

Guia de realización de un GIG personal en nuestra página web (

Acronis License Server. Guía del usuario

CONCEPTOS BASICOS. Febrero 2003 Página - 1/10

GENERAR DOCUMENTOS HTML USANDO LENGUAJE PHP. EJERCICIO RESUELTO EJEMPLO SENCILLO. (CU00733B)

Tutorial: Cuento Aristotélico

MANUAL CONFIGURACION SIPTAR Y ADAPTADOR VOIP

MÓDULO 3 HERRAMIENTAS EN LA NUBE: ANFIX

Como se instala un controlador o DRIVER

MANUAL DE AYUDA. SAT Móvil (Movilidad del Servicio Técnico)

Alberto Marcano Díaz

LICENCIATURA EN EDUCACION FISICA RECREACION Y DEPORTES

Plataforma Helvia. Manual de Administración Administración General. Versión

Manual de administración Administración General V

MATERIAL 2 EXCEL 2007

Modulo 1 El lenguaje Java

Manual CMS Mobincube

Base de datos en Excel

Transcripción:

Asterisk 101++ o Trabajando en un Dialplan e introducción a AGI Breve resumen del charla anterior Apartir de esto podemos decir que en corazón de asterisk (*) es el dialpan que se define en el archivo extension.conf. Como habíamos hablado cada dispositivo se le define un contexto que es donde comienza a trabajar ese dispositivo. Veamos un ejemplo de una entrada de telefonía (zap) y 2 teléfonos SIP En zaptel.con tengo algo como: [channels] transfer=yes cancallforward=yes signalling=fxs_ks context=from-pstn rxgain=2.0 txgain=4.0 callprogress=yes usecallerid=yes callerid=asreceived group=0 channel=> 1 Esta es una famosa X100 placa que es un WinModem con un chipset Ambient de Intel. Lo mas importante es que la definí en el contexto from-pstn.

Luego en el sip.conf tenemos lo siguiente: [general] context=from-local bindport=5060 bindaddr=0.0.0.0 [100] type=friend host=dynamic username=100 secret=xxxxxxx [101] type=friend host=dynamic username=101 secret=xxxxxxx Una muestra de lo que es un dialplan básico seria: [from-local] exten => 100,1,Dial(SIP/100) exten => 101,1,Dial(SIP/101) exten => _9.,1,Dial(Zap/1/${EXTEN:1}) [from-pstn] exten => s,1,answer exten => s,2,playback(welcome) exten => s,3,dial(sip/101,15,t) exten => s,4,dial(sip/102,15,t) exten => s,5,playback(nobody) exten => s,6,voicemail(101) exten => s,7,hangup Hace falta explicar un par de cosas acerca de esto: Primeramente el archivo extension.conf tiene como casi todos un [general] que es para definiciones básicas las mas importantes son 2 definiciones: static y writeprotect ambas por defecto en NO. Sirve solo si static es Yes y writeprotect es No. Pero esto es un detalle menor Hay una parte de [global] donde se definen variables globales y lo que se puede decir que una variable se define en este lugar así: VARIABLE => Zap/1 Y se usa ${VARIABLE} o ${Variable} o ${variable}.

Pero ahora definamos extensiones, cada extensión es: exten => extensión,prioridad,comando(parámetros) Primeramente veamos extensión, la cual puede ser literales, patrones o predefinidas, Las primeras son aquellas en las cuales definimos el numero que se marca por ejemplo 101 o 100 en los cuales hacemos cosas especificas para cada uno de estos números. Los Patrones nos aquellos que match con el numero discado, comienzan con _ y pueden contener: X números del 0 al 9 Z números del 1 al 9 N números del 2 al 9 [24-7] números específicos en este caso 2,4,5,6,7. uno o mas números! cero o mas números Un ejemplo seria que tenemos diferentes proveedores para diferentes provincias y un dial plan puede ser: _0351. Córdoba _0352. Santa Fe etc... o si se disca: _4XXXXXX Un numero común loca acá en Córdoba Hay que tratar de no usar cosas como _. porque esto machearia con cualquier cosa, es mejor _X. También podemos usar cosas un poco mas complejos como discar algo solo si el caller id machea con algún patrón: 123/4892233 Entra al contexto discando 123 desde el teléfono 4892233 Y podemos remplazar todo por los patrones antes definidos. Las extensions predefinidas son las siguientes: i extensión invalida. Un contexto tiene un limitado números que un usuario puede marcar y si marco otro podemos tomar ese error y hacer algo, por ejemplo [from-local] exten => 100,1,Dial(SIP/100) exten => 101,1,Dial(SIP/101) exten => _9.,1,Dial(Zap/1/${EXTEN:1}) exten => i,1,playback(discadoinvalido) exten => i,2,hungup h corte de la extensión Es cuando un cliente corta la comunicación y generalmente se usa para cobrar

o loguear llamadas. a asterisco Es para determinar que se presiono el asterisco s para llamadas no conocidas Es generalmente cuando las llamadas entran y no conocemos que puede llegan a discar. t máximo tiempo de respuesta Esto es para dar un tiempo especifico a las respuestas de un cliente sobretodo en los IVRs [from-local] exten => 100,1,Dial(SIP/100) exten => 101,1,Dial(SIP/101) exten => _9.,1,Dial(Zap/1/${EXTEN:1}) exten => t,1,playback(muchotiempotecorto) exten => t,2,hungup exten => i,1,playback(discadoinvalido) exten => i,2,hungup T máximo tiempo de llamada Es para controlar cuanto tiempo la llamada del cliente esta activa, por defecto el tiempo absoluto de llamada esta en 0 o sea que no se controla. Hay otros como fax, que es obvio y solo se usa con drivers ZAP. Los demás son de poco uso o nos vamos a poner a discutir un monton. Hay un problema con el orden de los patrones en cada contexto. Veamos el siguiente ejemplo: [demo] exten => _450.,1,Dial(SIP/100) exten => _X.,1,Dial(SIP/102) exten => h,1,hungup Cuando hagamos un show dialplan vemos como asterisk lo ordeno: 1 _X. 2 _450. 3 h No importa lo que hagamos en este contexto todo va salir por la opción _X. Para cambiar el orden debemos usa un trampa para el parser. [demo] include => demo-uno exten => _450.,1,Dial(SIP/100) exten => h,1,hungup [demo-uno] exten => _X.,1,Dial(SIP/102)

Si dentro de un contexto encontramos un include sera parceado al final del contexto y en el orden de los include, para nuestro ejemplo queda: 1 _450 2 h 3 _X. Que era lo que nosotros queríamos Hasta acá todo acerca de extensiones, ahora hablaremos de prioridades. En nuestro ejemplo primigenio teníamos un buen ejemplo de prioridades: [from-pstn] exten => s,1,answer exten => s,2,playback(welcome) exten => s,3,dial(sip/101,15,t) exten => s,4,dial(sip/102,15,t) exten => s,5,playback(nobody) exten => s,6,voicemail(101) exten => s,7,hangup Las prioridades son el orden que debe tener para cada extensión. Cual es la otra función además de darle un orden estos números de prioridad, para ser usados con funciones como GotoIf. exten => s,6,gotoif($[ ${x} < 3 ]?2:5) A partir de la versión 1.2 podemos escribir [from-pstn] exten => s,n,answer exten => s,n,playback(welcome) exten => s,n,dial(sip/101,15,t) exten => s,n,dial(sip/102,15,t) exten => s,n,playback(nobody) exten => s,n,voicemail(101) exten => s,n,hangup En la cual se entiende que el orden de esta extensión esta dado por el orden que la hemos escrito. Pero entonces perdimos el tema de los GotoIf, no se pueden escribis cosas feas como: exten => s,n(start),answer Y entoces podemos hacer: exten => s,n,goto(start) Hay un par de cosas mas acerca de la prioridad pero voy muy atrasado. Hay 2 cosas que que nos faltan que son los comandos y la variables, los comandos son mas simples y uno de los mas importante es Dial. Dial(tipo/identificador,timeout,opciones,URL)

tipo puede ser cualquiera de los canales definidos (Zap, SIP, IAX2, h323, oh323, ooh323) identificador depende mucho de la definición del canal. Ya que como venimos poniendo en nuestros ejemplos SIP/100 depende de que en el sip.con hayamos definido un dispositivo SIP con el label 100. Pero También podremos hacer una llamada a un teléfono SIP ignoto con SIP/${EXTEN}@145.12.22.30. timeout es el tiempo que dial intentara discar dado en segundos, luego terminara la función y prenderá la opción de t. opciones tiene una gran cantidad, como por ejemplo t en la cual permite a esta llamada poder hacer transferencia de llamadas, pueden llegar a tener cosas como cambiar de tipo de ring, determinar como va ser la llamada, entre otras. URL este es opcional y es para ciertos canales que permiten URLs Answer(delay) Generalmente se pone en los contexto que toman llamadas desde fuera de nuestro Asterisk y podemos hacer esperar un tiempo determinado en segundos Playback(file,option) Backgroud(file,option) Emite el mensaje de voz almacenado en file. Playback emite el mensaje y devuelve el control a la aplicación, En cambio Backgroud emite el mensaje de voz y si algun DTMF es regitrado y machea con el contexto lo ejecuta. Los archivos de audio lo busca en /var/lib/asterisk/sound, por defecto, en instalacion estan los sonidos en Ingles. Pero uno en la misma estructura agrega el directorio es y dentro los mismos sonido pero en español y setea la vriable de lenguaje SetLanguage en es y vera solo los sonidos dentro del directorio es. Goto(contex,extension,priority) Goto(extension,priority) Goto(priority) Goto(contex,extension,label) Goto(extension,label) Goto(label) Es un salto a un contexto, extension, prioridad o label especifico. SayDigits(numeros) Muy util, solo dice los numeros, si dentro de numeros esta 123, el comando dice uno, dos, tres.

SayNumber(numeros,genero) Hace lo mismo pero dice el numero por ejemplo 123 dice ciento veintitres y en genero va m por male, f por female o c por computer. Pero se torna indomito para el manejo multilenguaje. Con esto podemos armar nuestro primer IVR. [from-pstn] exten => s,n,answer exten => s,n,playback(bienvenidos) exten => s(menu0),n,background(opcionesmenu0) exten => 1,n,goto(menu1) exten => 2,n,goto(menu2) exten => a,n,playback(graciasporcomunicarse) exten => a,n,hungup exten => i,n,playback(ingresoinvalido) exten => i,n,goto(menu0) exten => t,n,playback(marqueunaopcion) exten => t,n,goto(menu0) [menu1] exten => s,n,playback(ingresedni) exten => t,n,playback(porfavor) exten => t,n,goto(menu1) exten => XXXXXXX.,n,SayDigits(${EXTEND}) exten => XXXXXXX.,n,Goto(from-pstn,a) exten => i,n,goto(from-pstn,i) Falta obviamente el contexto menu2 pero puede ser algo muy parecido. De todas maneras quiero poner 2 comandos mas: NoOp() Que como su nombre lo indica no hace nada pero sirve como printf para debug basico. Macro(nombremacro,arg1,arg2,...,argN) Ejecuta un contexto llamado macro-nombremacro y pasa los argumentos que se necesitan al nuevo contexto. Usa todas las variables ademas de MACRO_EXTEN, MACRO_CONTEXT and MACRO_PRIORITY den donde es llamado, por ejemplo: exten => s,n,macro(internacional,${extend}) [macro-internacional] exten => s,n,dial(sip/${arg1}@11.12.12.12,20) exten => s,n,dial(oh323/${arg1}@123.1.1.15,20) exten => s,n,playback(nohaylinea) exten => s,n,congestion

Toda la info sobre los comandos los podemos encontrar en: http://www.voip-info.org/wiki/view/asterisk+-+documentation+of+application+commands Ya entrando en la interface de programacion de Asterisk nos encontramos con 2 que son las unicas que utilice, AGI y FastAGI. AGI (script.agi arg1 arg2... argn) y se ejecuta: exten => s,n,agi(dialradius.agi) El archivo dialradius.agi debe estar en /var/lib/asterisk/agi-bin debe ser ejecutable y leible por el usuario que corre Asterisk y puede ser uno de los varias interfaces que hay a diferentes lenguajes, y hay para todo Java, Perl, Python, Ruby, PHP, C, C# y bash. Yo lo he usado en Perl y alli solo se hace: use Asterisk::AGI; $AGI = new Asterisk::AGI; %input = $AGI->ReadParse(); $AGI->set_callerid($number) $AGI->exec('Dial', 'SIP/'. $number. '@'. $someip); $AGI->exec('Hungup'); Es una interface de comandos que al dar exect ejecutamos funciones del dialplan, o podemos setear variables. Es para integrar Arterisk a Bases de datos pero con programacion incluida, como los programas de Prepagos. No creo que haya mucho mas que esto. El resto hay que dedicarse a leer.