Está en la página 1de 77

DialPlan en Asterisk segn horarios

va faungg Algo que me han preguntado bastante y que han estado visitando el blog en busca de ello es configurar Asterisk y prepararlo para realizar cierta accin dependiendo de la hora o fecha que entre la llamada, para esto tenemos que tener ciertos conocimientos del manejo de extensiones ya que es ah en el /etc/asterisk/extensions.conf dnde configuramos todos estos parmetros. Los comandos que vamos a utilizar son : Goto y GotoIfTime , que nos daran la posibilidad de saltar en los extension segn la necesidad u horario. Ahora un ejemplo ms detallado que deja completamente claro el uso de estos 2 comandos en el exten. Ejemplo:
[llamadas] exten => 555,1,Goto(horarios,s,1) // ac recibimos una llamada a la extensin 555 y la envamos al contexto horarios [horarios] exten => s,1,GotoIfTime(09:00-12:00|mon-fri|1-31|jan-dec?lineas,333,1) // Ac vemos si estamos en horario de maana de lunes a viernes de 1 a 31 todos los meses del ao y si cumple la regla enva la llamada al contexto lineas. // Los atributos de cada regla pueden cambiar a gusto o remplazar por * para que sean todos los das o meses.

[lineas] exten => 333,1,Dial(SIP/333,30,Tt) // Hacemos el Dial al anexo 333, pasa a este contexto slo cuando cumple la regla de horarios

Espero que haya quedado claro el tema de cmo usar el GotoIfTime, se puede usar para programar IVR y mensajes fuera de horario, quedo atentos a sus comentarios por cualquier consulta.

Asterisk: Funcionalidades bsicas y avanzadas


El sistema asterisk incorpora todas la funcionalidades que pueden esperarse en una centralita convencional y asimismo muchsimas funcionalidades avanzadas que tendran un elevado coste en sistemas tradicionales propietarios. A continuacin enumeramos slo ls ms importantes:

Funciones bsicas:

Transferencias (directa o consultiva): Permite transferir una llamada en curso a otra extensin. Existen dos formas: o Transferencia atendida: consultando al nuevo destino si quiere que le pasen la llamada, o Transferencia directa: pasando la llamada sin consultar al destinatario.

En versiones anteriores a la 1.8, al transferir una llamada se perda el CLID (el nmero del usuario llamante). Esto no ocurre con la versin 1.8, que mantiene por tanto el CLID. tras una transferencia.

Desvos: Permiten la transferencia automtica de una llamada entrante hacia un nmero determinado (interno o externo) cuando se cumplen determinadas condiciones: por ejemplo si el nmero esta ocupado, si no contesta, etc. Capturas (de grupo o de extensin): La captura permite coger una llamada que se esta recibiendo en una extensin desde otra distinta. o Captura de extensin: por defecto se hace con el codigo *8 + la extensin. o Captura de grupo: se predefinen unos deteminados grupos de extensiones de modo que al marcar un codigo de asterisk - por defecto el *8 - se coge cualquier llamada que est recibiendo el grupo en el que estamos. Conferencia mltiple: En funcin del modelo de terminal se podr establecer una comunicacin entre mltiples usuarios de la centralita.

Llamada directa a extensin: Si adems del nmero de cabecera disponemos de diferentes nmeros pblicos (DDIs), podremos enrutar directamente la llamada entrante a uno de estos DDIs, a una extensin de la centralita. Ring groups: grupos de llamadas. Una llamada entrante podr ser dirigida directamente a un ring group, que es un grupo de extensiones que sonaran de acuerdo a una determinada estrategia previamente establecida. Si la llamada no se descuelga no podr ser tratada posteriormente y se perder. DND (Do not disturbe): Opcin de no molestar, que podr ser configurado en Asterisk mediante un cdigo o directamente en el terminal.

Funciones avanzadas:

Correo Vocal (Voicemail) integrado con correo electrnico. En caso de que el usuario no pueda atender una llamada, se puede programar que se transfiera a un sistema de buzn de voz. En caso de que se deje un mensaje, se enviar un correo electrnico avisando del mismo al usuario destinatario. Operadora Automtica (IVR): Una operadora automtica o IVR es una aplicacin de telefona que permite interactuar con el usuario que realiza la llamada, de forma que ste pueda pulsar opciones previamente anunciadas y acceder de forma automtica a los destinos programados. Msica en espera con archivos WAV: Asterisk nos permite introducir categoras de msica en espera basadas en archivos .wav y mp3. De este modo podremos poner diferentes melodas para ser reproducidas como msica en espera. Colas de Llamadas (ACD) : Un sistema de colas o ACD es una aplicacin que distribuye las llamadas entrantes a un grupo especfico de agentes de acuerdo a una determinada estrategia. Si la llamada no puede ser descolgada, no se pierde y puede ser transferida a otro destino. Salas de Audio-Conferencias: Una sala de audioconferencias es un sistema que permite conectar a multiples usuarios en una misma conversacin telefonica. Los usuarios pueden acceder a la sala desde una extensin interna, o bien desde el exterior (a traves de un nmero directo o bien a traves de un IVR). Es un sistema muy til para hacer reuniones internas (por ejemplo seguimiento de ventas) o bien con clietnes o proveedores. No hay una capacidad mxima de salas por lo que podremos definir tantas como nos hagan falta (la limitacin principal sern los recursos del servidor). Las salas tampoco tienen una capacidad mxima de llamadas por lo que principalmente la limitacin vendr dada por el nmero de lneas que la empresa disponga para salir a la PSTN. Gestin de llamadas entrantes segn horario o fecha (Time Conditions). Con la incorporacin de el gestor web FreePBX en su versin 2.5 o superior, es muy sencillo definir un horario y calendario laboral que nos permita hacer un tratamiento diferenciado de las llamadas entrantes segun el mismo. Por ejemplo, si estamos en horario laboral y no es fetivo, la llamada se envia a la extensin 100 (de operadora). En caso contrario, se puede enviar a una locucin que advierta de que son horas no laborables, o bien es un da festivo. Extensiones DISA: Es posible configurar opciones de post marcacin para determinadas llamadas entrantes, de forma que una vez hemos comunicado con la centralita, podamos llamar a un nuevo destino de forma sencilla y automatizada. Callback: llamada automtica de respuesta a una llamada perdida. Cuando redirigimos una llamada al mdulo de Callback el sistema lo que har ser colgar y originar una

llamada hacia el nmero que nos ha llamado, de este modo se pueden centralizar costes de llamada. La llamada saldr siguiendo las normas de routing saliente de llamadas. Retrollamada: funcionalidad disponible en la versin 1.8. Si se hace una llamada a una extension y esta no contesta (por estar ocupado o ausente), se puede activar la funcin Asterisk de retrollamada. En cuanto el usuario llamado cuelgue, se avisa al que activo la funcin de retrollamada para que este pueda llamar de nuevo a la extensin incial. Informes detallados de llamadas (CDR): Detalle de llamadas realizadas/recibidas por extensin, para imputacin de costes departamentales, por cliente o incluso para facturacin. Integracin CTI: Integracin de la telefona con sistemas informatizados de gestin comercial o de atencin a cliente (CRM). Estos sistemas permiten por ejemplo ejecutar una llamada desde el PC o bien recibir informacin sobre una llamada entrante en la pantalla.

Asterisk: Principales ventajas


Funcionalidad
Asterisk dispone de todas las funcionalidades de las grandes centralitas propietarias (Cisco, Avaya, Alcatel, Siemens, etc). Desde las ms bsicas (desvios, capturas, transferencias, multi-conferencias, ) hasta las ms avanzadas (Buzones de voz, IVR, CTI, ACD).

Escalabilidad
El sistema puede dar servicio desde 10 usuarios en una sede de una pequea empresa, hasta 10.000 de una multinacional repartidos en mltiples sedes.

Competitividad en coste
No solo por ser un sistema de cdigo abierto (Open Source) sino gracias a su arquitectura hardware: utiliza plataforma servidor estndar (de propsito no especfico) y tarjetas PCI para los interfaces de telefona, que por la competencia del mercado se han ido abaratando progresivamente.

Interoperatibilidad y Flexibilidad
Asterisk ha incorporado la mayora de estndares de telefona del mercado, tanto los tradicionales (TDM) con el soporte de puertos de interfaz analgicos (FXS y FXO) y RDSI (bsicos y primarios), como los de telefona IP (SIP, H.323, MGCP, SCCP/Skinny). Eso le permite conectarse a las redes pblicas de telefona tradicional e integrarse fcilmente con centralitas tradicionales (no IP) y otras centralitas IP.

Asterisk: Capacidades de lneas y extensiones


El sistema Asterisk es sumamente flexible y soporta todos los sistema de conectividad interna o externa tanto tradicionales (PSTN, RDSI o analgicos) como los ms actuales (SIP e incluso Skype). A continuacin enumeramos los tipos de puerto disponibles y sus capacidades:

Lneas de enlace o Trunks


Son las que permiten conectar la centralita con la red pblica de telefonia. Existen las siguientes opciones:

Enlaces RDSI: interfaces BRI o PRI. Existen configuraciones con 2, 4, 6, 8, 10 o 12 BRI o 1, 2, 4, 8 o 16 PRI. Todos ellos se suministran con cancelacin de eco por Hardware. Enlaces Analgicos (FXO): configuraciones para 1/2/4/8 enlaces, con cancelacin eco por Hw. Enlaces directos GSM, va Gateways voip-GSM. Son equipos IP que incoporan bahias para colocar las tarjetas SIM, y llevan directamente tecnologia 2G/3G para conexin con las redes de operador de movil. Enlaces VoIP: SIP, IAX y Skype. Para optimizar las conexiones SIP es recomendable incorporar tarjetas de transcodificacin para poder comprimir las sesiones RTP. El codec que se utiliza normalmente es el G729.

Extensiones
Son las conexiones internas que utilizan los usuarios o terminales de nuestra compaia. Existen las siguientes opciones:

Extensiones SIP o IAX.

Extensiones analgicas (FXS): configuraciones de 1/2/4/824 extensiones para conectar telfonos analgicos o terminales de fax. Extensiones inalambricas WIFI. Con soporte de diferentes terminales. Extensiones inalambricas DECT-GAP estndar. Requiere de la instalacin de antenas DECT IP (nosotros utilizamos la tecnologa Polycom-Kirk).

Versiones de Asterisk
Existen varias versiones soportadas de Asterisk, cada una de las cuales se distinguen por las funcionalidades incluidas. Cada vez que se lanza una versin, se soporta durante un periodo de tiempo determinado. Durante este perodo de soporte inicial, habr minor releases que incluyen cambios para corregir los errores que vayan siendo reportados. En algn momento, la versin se hace obsoleta y slo se mantiene con las correcciones para problemas de seguridad. Por ltimo, la versin llegar a su final de la vida (EOL), donde ya no recibir cambios de ningn tipo.
El tipo de versin (Release type) define durante cunto tiempo va a ser soportada. Una versin LTS (de largo plazo, Long Term Support) ser totalmente vigente durante 4 aos, con un ao adicional de mantenimiento de parches de seguridad. Las versiones estndar estn soportadas por un perodo de tiempo ms corto, que ser por lo menos un ao ms un ao adicional de mantenimiento de parches de seguridad. Debido a sto, nosotros siempre hemos optado por instalar versiones tipo LTS (1.4 y 1.8, hasta la fecha) en nuestras soluciones.

La siguiente tabla muestra las lneas de tiempo para todas las versiones de Asterisk, incluyendo aquellas que han llegado al final de la vida.

Release Series Release Type Release Date Security Fix Only EOL 1.2.X 1.4.X 1.6.0.X 1.6.1.X LTS Standard Standard 2005-11-21 2006-12-23 2008-10-01 2009-04-27 2007-08-07 2011-04-21 2010-05-01 2010-05-01 2010-11-21 2012-04-21 2010-10-01 2011-04-27

1.6.2.X 1.8.X 10.X

Standard LTS Standard

2009-12-18 2010-10-21 2011-12-15

2011-04-21 2014-10-21 2012-12-15

2012-04-21 2015-10-21 2013-12-15

A continuacin se incluye tambien una planificacin de las futuras versiones de Asterisk que se iran lanzando:

Servicios de Mantenimiento Asterisk

Quarea da servicio de mantenimiento de sistemas Asterisk para toda Espaa en modalidad de cobertura en horario de atencion estandar (laboral de lunes a viernes de 9 a 15h y de 15:30 a 18:30 horas) o bien en horario extendido (lunes a sbado no festivos de 9 a 22 horas). En nuestro

servicio definimos diferentes componentes opcionales segun cuales sean los requisitos de servicio del cliente:

Soporte bsico y mantenimiento software Mantenimiento Hardware Administracion Intervenciones fuera horas

Soporte Bsico y Mantenimiento software del sistema


Este es el componente bsico e imprescindible para la contratacin del mantenimiento en cualquier sistema. Incluye las siguientes prestaciones de servicio:
o o o

Soporte telefnico para atencin a incidencias y consultas. Acceso remoto para realizar las intervenciones Control de inventario: control de la configuracin hardware y software del equipo. Copia configuracin inicial del sistema. Mantenimiento Software de los sistemas open source (cdigo abierto, GPL): Vlido para sistemas Asterisk-FreePBX, Hylafax, Openfire u OpenSIPS. Reposicin elementos software en caso de fallo. Incluye sistema operativo. Actualizacin de versiones de software del tipo minor release, e instalacin de parches, para correccin de problemas de estabilidad o seguridad. Objetivo de resolucin de incidencias software: al siguiente da laborable.

Mantenimiento Hardware sistemas


Este componente es opcional, y debera especificarse en la oferta comercial. En funcin del tipo de equipo a gestionar o mantener, existen diferentes condiciones de servicio y precios. Las condiciones se detallan en la siguiente tabla:

Tipo Equipo Servidor Avanvox Tarjetas Interfaz TDM/Voip Terminales: Telfonos IP y adaptadores (ATA) Conmutador LAN (Switch) Routers Antenas DECT u otros equipos

Desplazamiento/Portes Intervencin in-situ Intervencin in-situ Envi a cargo del cliente, con sustitucin. Intervencin in-situ opcional Intervencin in-situ opcional Intervencin in-situ opcional

Tiempo objetivo de respuesta 4 horas 4 horas 24 horas 4 horas Depende servicio 4 horas

Tiempo objetivo de resolucin 24 horas 24 horas 72 horas 48 horas Depende servicio 48 horas

Administracin del equipo:


En el mantenimiento de ciertos sistemas como los Asterisk se incluye una pequea bolsa de horas para cambios de configuracin. Las caractersticas del servicio son:

Atencin a cambios de configuracin del sistema (Peticiones de Servicio). Un ejemplo podran ser cambios en el enrutado de las llamadas entrantes, o la definicin de nuevos das festivos para tratamiento fuera horas. Mantenimiento de la parametrizacin inicial del sistema: correccin de errores de manipulacin del sistema por parte del cliente. Existe un lmite de mximo de horas de servicio segn el sistema, que se indicar en la oferta. Tiempo de respuesta, 5 das

Intervenciones Fuera Horas


En las instalaciones crticas para el Cliente y que por tanto no admiten cortes de servicio en el horario de atencin a cliente de Quarea, se ofrece opcionalmente al cliente la contratacin de un paquete de horas anuales para intervenciones fuera horas que exigen para el sistema. Las condiciones son las siguientes:

Sirven para intervenciones planificadas con una antelacin mnima de una semana. Se contabilizaran en fracciones mnimas de una hora.
Actuaciones/Intervenciones

Las intervenciones se realizarn preferentemente de forma remota (por telecontrol). En caso de que no sea posible la intervencin remota, se enviar a un tcnico in situ. Se incluyen gastos desplazamiento siempre y cuando la intervencin se realice en Catalua. Para intervenciones fuera de estas provincias los gastos de desplazamiento se repercutirn al CLIENTE. Notificacin de incidencias: Para cursar las incidencias de servicio, se puede hacer por medio de correo electrnico o por telfono nicamente en los siguientes puntos de contacto: Atencin.cliente@quarea.com

902 520 520.

Servicios Instalacin Asterisk

Instalacin Sistemas Asterisk


Quarea est especializada en la instalacin y mantenimiento de centralitas telefnicas Asterisk, con cerca de 300 clientes satisfechos. Tenemos clientes en casi todas las provincias espaolas (Albacete, Alicante, Almeria, Badajoz, Baleares, Barcelona, Cantabria, Castelln, Girona, Granada, La Corua, Las Palmas, Lleida, Madrid, Mlaga, Navarra, Orense, Palencia, Santa Cruz de Tenerife, Sevilla, Soria, Tarragona, Valencia, Valladolid y Vizcaya) y varios en el extranjero (Francia, Alemania, Portugal, Colombia, EEUU, Canada, Brasil, etc). Nuestro equipo de ingenieros intentarn responder a sus necesidades y resolver sus problemas con la mxima celeridad.

Asterisk @ 10000 Horas


Mejorando la curva de aprendizaje de Asterisk

Posts tagged

dialplan
...
16/11/2011 19:48

Asterisk Advanced. Day 3


2 comments by SirLouen in Asterisk,Basicos,DialPlan,Introduccion,Telefonia Analogica

Hoy voy a hacer una prueba, escribir un articulo durante la clase a modo Inline. Seguramente salga un articulo demasiado extenso pero al menos, lo mximo completo. - Teora de Macros en el DialPlan En primer lugar un tema que no hemos visto hasta la fecha y es crucial para configuraciones de dialplan repetitivas, las Macros. Dos conceptos basicos Las macros se componen del contexto del Macro [macro-<nombredelmacro>] Solo tienen una extension, la s exten => s,1,Answer() same => n,Hangup Por otro lado, las Macros se ejecutan desde el Plan de Marcacion, como una aplicacin cualquiera con el formato Macro(<nombredelmacro>, <argumento1>, <argumento2>, etc) Luego dentro del contexto Macro para poder utilizar esos argumentos llamados se utilizan las variables especificas de las macros ${ARG1}, ${ARG2}, etc Ejemplo: [extensiones] exten => 100,1,Macro(prueba,SIP/mitelefono, 30) [macro-prueba] exten => s,1,Dial(${ARG1},${ARG2})

Aparte disponemos de variables especificas de las Macro. ${MACRO_CONTEXT}, ${MACRO_EXTEN} y ${MACRO_PRIORITY}. Sirven para saber dentro de la macro, que contexto, que extensin y que prioridad llam a la Macro. Un ejemplo, si utilizamos un Buzon de Voz, que coincide con el numero de extension pues podriamos utilizar ${MACRO_EXTEN}: [extensiones] exten => 100,1,Macro(prueba,SIP/mitelefono, 30) [macro-prueba] exten => s,1,Dial(${ARG1},${ARG2}) exten => n,VoiceMail(${MACRO_EXTEN}) A partir de aqu ya podemos dar rienda suelta a la imaginacion y poder simplificar nuestro trabajo de escritura de tareas repetitivas. - Asterisk Realtime Ya conocemos esto de artculos anteriores, como el uso del Web-MeetMe (configuraciones de salas de conferencia directamente desde la Web, a travs de bases de datos en tiempo real (realtime). Pero ahora una visin un poco mas prctica de como se trabaja con Realtime, ya que realmente el Web-Meetme siguiendo los pasos venia prcticamente preparado paso por paso y no podamos entender que estaba haciendo realmente a nivel interno. La utilidad de Realtime sobre configuraciones en ficheros de texto, es simplemente el hecho de poder introducir modificaciones constantes de una forma ultra-rapida (mediante un interfaz web por ejemplo que acceda a la base de datos). Un ejemplo tipico: en la web vemos el listado de usuarios, con un boton para borrarlos cuando los damos de baja, y luego un mini formulario en el que ponemos el usuario y la contrasea y damos de alta una extensin inmediatamente. No habria que estar accediendo al servidor, accediendo al fichero de texto, editndolo, guardando, recargando el modulo, etc En configuraciones estticas (situaciones en las que rara vez se cambia una extension por ejemplo), es poco practico por que puede salir mas caro el collar que el perro. Pero si un dia nos da por disear una interfaz web sencilla, y una base de datos (fichero .sql) que precargue nuestros valores default, podriamos implementar esto en tiempo record y podramos tenerlo siempre presente en todas nuestras instalaciones (quiz algn da lo plantee esto como un articulo, muchos temas ya tengo pendientes conforme avanzamos en el mundo de Asterisk). Un primer inconveniente que encontramos, es que Asterisk pretende centralizar todas las conexiones a bases de datos a traves de una capa de abstraccion como ODBC, es decir que los conectores directos nativos como MySQL y PostgreSQL tienden a su desaparicion. Para los no demasiado experimentados en el mundo ODBC esto podria ser un inconveniente a corto plazo.

Si recuerdan, el Web-Meetme lo hacia todo a traves de ODBC asi que este problema lo salvan (lo que no salvan que Meetme tiende a desaparcer tambien en favor de ConfBridge (nueva aplicacin para conferencias sin necesidad de timing, tambien hablaremos de ella en un futuro). Ahora sobre la configuracin los ficheros involucrados En primer lugar /etc/asterisk/extconfig.conf necesitamos aadir una linea del tipo <nombredelaconfiguracion> => <driver>,<nombrebasededatos>,<nombretabla> En el caso ejemplo del Web-Meetme era: meetme => odbc,meetme, booking El segundo fichero es el /etc/asterisk/res_config.conf [nombrebasededatos] enabled => yes // Esta activada la conexion dsn => el Data Source Name del driver ODBC pre-connect => yes // La conexin se ejecuta al arrancar Asterisk username => usuario de la base de datos // En caso que conectemos por Puerto a la base de Datos, como en bases remotas password => password de la base de datos // Lo mismo que lo anterior En el ejemplo que estamos siguiendo: [meetme] dsn => meetme (este es el contexto que creamos antes en el sistema) username => asterisk (supuestamente va a ser nuestro usuario para asuntos de Asterisk y servidor de base de datos) password => asterisk (o la que le pusiramos) pre-connect => yes enabled => yes Ahora la configuracion del driver odbc en el sistema, /etc/odbc.ini [meetme] Description = ODBC para MySQL // Una descripcion cualquiera Driver = MySQL // El driver ODBC que utilizamos, en este caso para MySQL por el tema ese que va a tender a desaparecer que comentbamos antes Server = localhost // Servidor donde esta la base de datos Database = meetme // Nombre de la base de datos con la que trabajaremos Port = 3306 // Puerto de la base de datos User = asterisk // En caso que conectemos por puerto en vez de por Socket Password = asterisk // En caso que conectemos por Socket Socket = /var/run/mysqld/mysqld.sock // Por aqu conectamos por Socket Y finalmente /etc/odbcinst.ini [MySQL] Description = MySQL ODBC MyODBC Driver

Driver = /usr/lib/odbc/libmyodbc.so // librera ODBC del Driver MySQL Setup = /usr/lib/odbc/libodbcmyS.so // librera ODBC de Configuracin MySQL Solo quedaria configurar la tabla y base de datos y ya preparado. Algunas consideraciones adicionales: para reducir el numero de peticiones a cache, el fichero de configuracion del modulo que estamos convirtiendo en RealTime introducimos la siguiente variable: rtcachefriends=yes De aqu pueden surgir multiples ideas prcticas que me gustaria probar personalmente y dedicar un articulo especifico con mis resultados, como por ejemplo, crear una funcion en func_odbc.conf para consultar algo especifico de una base de datos externa para tratarlo a traves del DialPlan, como por ejemplo consultar el telefono de un Cliente. - CDR y CEL Esta parte trata sobre como se gestiona CDR (Registro de Detalles de Llamada) y la nueva implementacin mas detallada del registro CEL, en el que es posible ver a nivel de flujo de llamada de DialPlan, no solo a nivel de canal. La verdad es que es meramente informativa con informacion sobre los campos que se utilizan, y algunas aplicaciones de dialplan para edicion, pero realmente merece un articulo bastante amplio para poder entrar en detalle incluso algun mecanismo para extraer informacion como vimos en el articulo de CDR-Stats, una gran aplicacin para poder visualizar los datos de forma bastante generica (y recuerdo que quede en montar un software para analizar llamadas pero mas en detalle para un proposito en concreto). - El mundo de las Tarjetas Analogicas Ya dedique varios articulos a este tema cuando empece a trabajar con la tarjeta TDM410P como el siguiente y la segunda parte del mismo. Algunos conceptos novedosos y no vistos hasta la fecha: Sobre la tecnologia Analogica, existen tres posibles de sistemas de sealizacion, (en el fichero chan_dahdi.conf) ground start (en desuso), loop start (tambien en desuso) y kewl start (sistema mas utilizado en la actualidad, 99% de los casos). Otra novedad que trae la version 1.8 es la posibilidad de crear contextos en el chan_dahdi.conf y tener por ejemplo un contexto generico [channels] donde especificar ciertos argumentos especificos de la tecnologia analogica (que eran los que soliamos definir antes del channel => cuando utilizabamos un modulo FXO Ejemplo: [channnels] usecallerid = yes transfer = yes

[telefono-analogico] callerid = Telefono Analogico <1001> context= extensiones signaling = fxo_ks dahdichan = <el_canal_que_definimos_en_/etc/dahdi/system.conf> [linea-analogica] callerid=asreceived context = llamadas_entrantes signaling = fks_ks dahdichan = <el_canal_que_definimos_en_/etc/dahdi/system.conf> Pero luego, en el Dialplan tenemos que seguir definiendo en canal a la vieja usanza (DAHDI/1, DAHDI/2, etc) Dato importante de las lineas extrantes analogicas, es que hay que mandarlas a un contexto en el DialPlan (por ejemplo, llamadas_entrantes) y dentro de ese contexto, poner la extension s (start) ya que es imposible reconocer hacia donde pretende ir esa llamada por las limitaciones de la analogia. Maana parece que seguiremos con el tema de las conexiones de Tarjeteria, pero esta vez con una nueva que no hemos visto hasta la fecha, una tarjeta de Primarios. Espero vuestros comentarios sobre como quedo esta modalidad de blogging inline. Para mi particularmente resulto mas comoda porque en los huecos libres podia ir escribiendo, y no tener que hacer todo el texto ya a deshoras y ademas tambien ha servido un poco con apuntes personales de lo visto para revisiones futuras (como realmente es el blog entero para mi personalmente).
tags: asterisk, asterisk ad, cdr, cel, dahdi, dialplan, digium, fxo, FXS, ground start, kewl start, loop start, macros, realtime, tarjeta analogica, tarjetas analogicas, vanced 2 comments! 30/01/2011 14:40

Conquistando el Dialplan II: Configuracin DID para Operadores IP


2 comments by SirLouen in Aplicaciones,Asterisk,DialPlan

Para todos aquellos que utilizamos operadores SIP tenemos la gran posibilidad de adquirir mltiples canales entrantes a muy bajo coste. A da de hoy la verdad que las llamadas salientes salen realmente caras, sobre todo si nos vemos en entornos empresariales. Ya hace tiempo os comente mltiples alternativas que haba barajado en su da, con operadores como Netelip, Voztelecom, Telsome. A da de hoy, 2 cntimos el minuto para llamadas nacionales: Es muy caro. Tenemos alternativas internacionales como CheapVoip, pero aqu entra en juego el tema de las latencias. Adems estas no nos ofrecen lneas de entrada y/o DID por tanto no podemos adquirir un sistema integral de llamadas tanto de entrada como de salida.

Aquellas empresas que si ofrecen canales de entrada, se aprovechan a un alto coste para la salida. Podemos combinar ambas soluciones, y de hecho, debemos, pero ya en estos casos las lneas de entrada empiezan a compensar cada vez menos. Aun as, para configuraciones de pocas lneas de entrada (menos de 10) y relativamente pocos DID, (menos de 50), siguen siendo soluciones factibles. Por ejemplo una de las soluciones ms ptimas en el mercado espaol, VozTelecom, con lneas de calidad muy muy alta a nivel de latencia, jitter, etc., ofrece por 8 euros, 2 canales de entrada, y 1 DID, 4 euros el DID adicional geogrfico. Encima, los temas tcnicos los libramos, y no tenemos que contratar mantenimientos adicionales para preservar la calidad del servicio Si optamos la opcin de Telefnica, tenemos una lnea RDSI por 29 euros al mes, ms el mantenimiento, habra que sumarle, mnimo, 4 euros para preservar una calidad aceptable de respuesta. Esto hace 33 euros. Luego los DID son relativamente baratos, en torno a los 2 euros. Si no queremos optar por la opcin del primario, 4 RDSI haciendo un grupo ISPBX (para saltos automticos y dems), sumaria un total de 132 euros. En caso de VozTelecom hablaramos de 32 euros. Luego si queremos 30 DID, serian 60 euros ms para Telefnica 192 euros, y 120 euros para Voz Telecom: 152 euros. Solo 45 euros, estamos en el umbral. Aunque obviamente la solucin con lneas RDSI es muy superior a la solucin VOIP, porque adems que podramos aislar el sistema PBX a un nivel puramente local, si requerir de Internet, la calidad siempre suele ser superior a nivel de voz. Solo con un Gateway Epygi como el que vimos antes, tendramos resuelta la papeleta. Vamos a poner el caso concreto, de que elijamos la solucin VoIP. Ah vamos con la configuracin: En caso del Epygi, realmente no necesitamos un comando register en el fichero sip.conf para registrarnos contra el troncal. Pero en caso del operador SIP, si hara falta, como vimos con anterioridad. Esto nos obliga a ir hacia la extensin del Dialplan dentro del contexto que seleccionemos especficamente. Y desde esa extensin, tendremos que realizar la configuracin para seleccionar el DID que recibamos segn los mensajes SIP que se intercambian durante la comunicacin. Esto ocurre con la mayora de los operadores IP, aunque algunos ejercen de troncal de forma equivalente al Epygi, que no necesitaremos realizar seleccin alguna: En el extensions.conf imaginando que si pusimos contexto destino, en la configuracin del operador SIP, pero no pusimos extensin destino en el comando Register (ltimo parmetro /ddi como vimos antes): exten => s,1,NoOp() exten => s,n,Set(cNum=${SIP_HEADER(TO):5:9}) exten => s,n,GotoIf($["${cNum}" = "987654321"]?1,1) exten => s,n,GotoIf($["${cNum}" = "912345678"]?2,1) exten => s,n,GotoIf($["${cNum}" = "988776655"]?3,1) exten => s,n,Hangup()

Con la variable general SIP_HEADER, seleccionamos la cabecera del mensaje SIP, y nos vamos a la posicin 5 longitud 9 (el nmero de telfono) para guardarlo en una variable local que le llamamos cNum. Aqu en 99% de los casos se encuentra el DID. De todas formas haciendo debug en la consola (# asterisk r) podemos ver exactamente qu valor est recibiendo esta variable, cNum Esta sintaxis es nueva para nosotros. La aplicacin GotoIf es condicional. Con el formato GotoIf($[condicin], se cumple, no se cumple), En este caso concreto, si se cumple, saltamos al contexto 1, 2 o 3 segn lo que se cumpla, y si no se cumple, pasamos a la siguiente prioridad. La consulta de variables en Asterisk tiene el formato ${variable} en cambio la escritura de las mismas con la aplicacin Set, se realiza sin nada, variable=. Esto es un poco tcnico, aun con ciertos conocimientos de programacin, esto se aprende en cuestin de segundos. As en vez de ir discriminando con extensiones con el nmero DID como hacamos con el Epygi, lo haremos con este sistema por condicionales. Lo que no tengo muy claro todava es porque algunos operadores mandan bien (y sin entender a qu me refiero con mandar bien el DID para asignarlo directamente como extensin), y para otros, hay que hacer operaciones como estas para salir al paso. Si lo averiguo, actualizare este mensaje. Para finalizar con todo esto, voy a aprovechar, para hacer un apunte fuera del contexto. El tema es que Asterisk, por ventaja, o desgracia, favorece mucho a los informticos, y acerca un mundo anteriormente exclusivo a ciertos tcnicos especializados, o especialistas de las telecomunicaciones, al mundo de los informticos. Por esto si realmente no tenemos nociones extensivas tanto de Linux como de programacin, nos vamos a ver con un sistema bastante simple, (aun aceptable comparativamente con otras soluciones PBX), pero no vamos a poder sacar toda la potencia de su interior al mximo. No voy a pararme demasiado en temas de programacin, variables, condicionales, bucles, aunque si explicando el formato, porque doy por supuesto que ms o menos entendemos de que estoy hablando, y ms considerando que desde hoy, la curva de aprendizaje va mejorando para el pblico entendido en esta materia, pero va a empeorar drsticamente para los que carezcan de estos conocimientos.
tags: asterisk, cheapvoip, dialplan, did, epygi, gateway, ispbx, jitter, netelip, operador ip, operador sip, telefnica, telsome, voip, voztelecom 2 comments! 13:16

Conquistando el Dialplan I. Aplicaciones Asterisk: Voicemail


no comments by SirLouen in Aplicaciones,Asterisk,DialPlan

Como ya sabemos, el Dialplan, plan de marcacin, es el esqueleto en esencia de Asterisk. A partir de este se abre el sin fin de posibilidades que nos ofrece este sistema.

Solo el que conoce lo que ofrece el Dialplan al 100%, es aquel que realmente conoce Asterisk de verdad. Por ello, las series de documentacin sobre Dialplan sern mensajes mas cortitos pero no por ello menos interesantes y que ayudaran a organizar mejor la informacin. Realmente ya vimos parte del potencial del Dialplan, con la creacin de una operadora automtica de coste cero, ahora vamos a ver las funciones de Buzn de Voz para nuestras extensiones. Aqu bsicamente hay dos actores principales. La Aplicacin Voicemail, y el fichero voicemail.conf El fichero voicemail.conf puede llegar a ser todo lo complejo que deseemos en funcin de nuestras necesidades, pero voy a comentar un caso prctico en el que podemos ver diversa funcionalidad que podemos llegar alcanzar. Como la mayora de los ficheros de Asterisk, se divide en contextos, como casi siempre, general, suele ser el genrico que afecta a todos los contextos por igual. [general] format=wav //Formato de las grabaciones para el buzon de voz. Se admiten otros formatos como gsm. serveremail=direccion@queenvia.com //Direccion del remitente de los envios attach=yes // Para enviar el fichero adjunto en los emails con el audio delete=yes // Para permitir la opcin de borrado del mensaje de voz local en el servidor una vez enviado por correo eletronico maxmsg=100 // Maximo numero de mensajes permitidos en la bandeja local por buzon maxsecs=180 // Maximos segundos por mensaje minsecs=2 // Minimos segundos por mensaje para desechar los mensajes vacios o casi vacios skipms=3000 // Opciones del mensaje de audio, para indexarlo cara a desplazamientos X ms adelante o detrs cuando sea reproducido en el pc del destinatario maxsilence=10 // Silencio mximo permitido, esto es importante cara a poder desconectar la llamada en caso de silencio antes de cumplir el mximo posible caso 180 segundos (en nuestro ejemplo) silencethreshold=128 // Este es el umbral de audio para el que consideramos que es un silencio, de aqu podemos ir mas abajo o mas arriba en funcin de nuestra necesidad, no hay un valor ideal maxlogins=3 // Intentos de acceso a voicemail, en caso de sobrepasarlos, Asterisk desconectara al usuario de su cuenta SIP/IAX emailsubject=Nuevo Mensaje de ${VM_CALLERID} emailbody=Buenos das ${VM_NAME},\n\nHemos recibido un mensaje en su buzon

de voz // Esto seria el asunto y el cuerpo del mensaje email. Aqu se pueden aprovechar variables para poder formatear el correo y mostrar datos quiz interesantes para el destinatario. Algunas de estas variables de ejemplo: ${VM_CALLERID}: El numero identificador del llamante (el nmero de telfono) ${VM_NAME}: El nombre del dueo del buzon (lo definiremos ms adelante) ${VM_DUR}: Duracion del mensaje ${VM_DATE}: Fecha y hora de recogida del mensaje Mas variables pueden encontrarse aqu: en su correspondiente seccin (tampoco son muchas ms) emaildateformat=%A, %B %d, %Y at %r // Formato de la fecha para el email. Para la variable VM_DATE. Consultar el manual de date para mas informacin (# man date) Con esto tenemos ms que suficiente para componer mensajes para el buzon de voz y enviarlos por email. Ahora vienen los contextos. Como siempre, si es [default] es el genrico, y luego los contextos especficos. En principio vamos a poner uno genrico y uno especifico. [default] 1234 => 5678,Buzon de Ejemplo,ejemplo@buzones.com - En primer lugar, el nmero del buzn, luego lo utilizaremos en el Dialplan para la aplicacin Voicemail as referirnos a este buzn - En segundo lugar, la contrasea para acceder al buzn. Tendremos que crear una extensin en el Dialplan para que el usuario pueda acceder a su buzn de forma interna. Esto solo es til si no marcamos la opcin de borrado de mensajes del buzn al ser enviados por email - En tercer lugar, nombre del buzn que luego utilizaremos en variables como VM_NAME - En cuarto lugar, Email del destinatario de los mensajes de este buzn Este es un ejemplo muy sencillo, pero a esto podramos aplicarle un poco mas de complejidad al asunto [extensiones] 1000 => 9878,Mr. Lenny, lenny@debian.net,,attach=yes|delete=1 - En quinto lugar, iria la direccin del Pager muy poco utilizado a dia de hoy - En ltimo lugar, iran opciones especiales. En este caso, decimos que adjunto el mensaje, y lo borre a continuacin. Si hemos activado las opciones en el contexto general, ira bien esto. Si queremos hacer broadcasting de mensajes de buzon a varios emails, hay varios mtodos pero el que a mi mejor me ha funcionado es hacerlo en combinacin a aliases del servidor de correo (en nuestro caso al usar Ubuntu, por defecto, Postfix) 1001 => 8765, Dpto. de Botijos, botijos@nuestroservidor,,attach=yes|delete=1 Nos vamos a /etc/aliases y aadimos botijos: sr.sanchez@botijoland.com,sr.perez@botijoland.com,sr.alvarez@botijoland.com

Y refrescamos aliases comando: # newaliases Por ultimo no olvidemos recargar nuestro voicemail.conf #asterisk rx voicemail reload Ahora toca editar nuestro Dialplan para poder utilizar estos buzones recin configurados. Vamos al extensions.conf: Si queremos por ejemplo hacer que los usuarios puedan dejar mensajes a nuestro contestador tenemos que utilizar la aplicacin Voicemail Ejemplo: exten => 1000,1,NoOp() exten => 1000,n,Dial(SIP/1000,30) exten => 1000,n,Voicemail(1000@extensiones,u) // En este caso, ponemos el nmero del buzn que pusimos antes @ el contexto al que perteneca, adicionalmente ponemos una opcin, para que antes de dar el pitido de empezar a grabar diga el mensaje de en estos momentos no nos encontramos, deje su mensaje despus de or la seal. Aqu tenemos varias, opciones, en vez de utilizar los mensajes por defecto que se pueden encontrar en la carpeta de sonidos /var/lib/asterisk/sounds/ todos los que empiezan por vm- tienen algo que ver con el buzn de voz y estas opciones. Las opciones posibles son: sin opciones: se escuchan las instrucciones para dejar el mensaje s: no se escucha nada (til si queremos poner mensajes personalizados para cada usuario) su: mensaje de no disponible u: mensaje de no disponible + instrucciones sb: mensaje de ocupado b: mensaje de ocupado + instrucciones Con esto tambin podemos jugar con las aplicaciones Playback y Record, para con la opcin s crear un buzn acorde a las necesidades de un usuario en concreto Por otro lado vendra la aplicacin destinada a escuchar los mensajes guardados si no pusimos la opcin de borrado automtico: VoicemailMain. Tiene poca historia: exten => 10001,1,VoicemailMain(1000@extensiones) El tema es que a partir de ah vendra un men relativamente complejo, editable, y dems. Yo personalmente no lo utilizo ya que la funcin de envo a correo aparte de que me descarga el disco duro, hoy en da a la mayora del personal le resulta formidable. Aun as, para aquellos que deseen profundizar, les dejo un enlace al manual por si acaso quieren probarlo. Cualquier consulta acerca de esto, no duden en comentrmela! En principio, con todo esto, ya se podran componer sistemas de Buzn de voz bastante interesantes. Como ven no es demasiado complejo y existen muchas alternativas y opciones. Yo personalmente opino que las opciones de envo a correo, todava estn muy poco elaboradas, pese a que se ha profundizado en ellas. Yo personalmente no he encontrado opciones por ejemplo, de envo CC o CCO (BCC) para envos broadcasting (lo cual me resultara muy interesante). Supongo que sera una cuestin de apoyar programando, al proyecto Asterisk. Quien sabe, a lo mejor ms adelante nos animamos a ello.

tags: aliases, asterisk, broadcasting, buzon de voz, dialplan, newaliases, playback, postfix, record, sip, ubuntu, vm_callerid, voicemail, voicemail.conf No comment? 29/01/2011 18:49

Preparando nuestro sistema de FAX en Asterisk: Hylafax + IAXModem


6 comments by SirLouen in Asterisk,Software

Hoy voy a tratar de explicar cmo crear un sistema de faxing a travs de nuestro Gateway (o tarjeta) para poder recibir faxes a email, y poder enviar faxes con un software desde nuestros PCs. He observado mltiples manuales en la web, pero la verdad es que si no tienes suerte encontraras miles de problemas, especialmente en las ltimas versiones de Ubuntu Server. Y la verdad es que cuantos ms problemas mejor, as aprendemos ms sobre el asunto que nos concierne. En primer lugar toca configurar nuestro IAX.conf para aadir una extensin para el FAX [iaxmodem] type=friend username=iaxmodem //secret=contrasea_de_la_extension secret=fax qualify=yes notransfer=yes disallow=all allow=ulaw host=dynamic context=extensions callerid=FAX <100> requirecalltoken=no // esta lnea ultima es muy importante rebaja la seguridad de IAX para esta extensin, pero sino lo ponemos no funcionara IAXmodem en concreto Acto seguido vamos a configurar nuestro Dialplan para a travs de un nmero DID que tenemos disponible o lnea analgica conectada (como hemos visto en anteriores mensajes, configuraciones relacionadas al Gateway RDSI, o relacionadas al mdulo DAHDI desde chan_dahdi.conf), indiquemos a que extensin se deben enviar los FAXes (en este caso IAX2/iaxmodem) que es nuestra extensin IAX para el FAX. Esto

se aadira en el contexto que se envan las llamadas de nuestra PSTN (en nuestro caso desde-isdn) exten => 123123123,1,NoOp() exten => 123123123,n,Answer() exten => 123123123,n,Wait(3) exten => 123123123,n,Dial(IAX2/iaxmodem) Quiero recordar que cuando hagamos modificaciones en los ficheros es necesario Recargar nuestro asterisk para que tome los cambios. No estoy seguro en este punto, si ni siquiera lo comente alguna vez! # asterisk x dialplan reload # asterisk x iax2 reload (Recargamos el extensions .conf modificado y el iax.conf modificado) Ahora toca configurar un modem capaz de reconocer los tonos de los faxes, a travs de nuestra extensin IAX recin creada. Todo a travs de software. La aplicacin en cuestin, se llama IAXmodem Podemos descargarla desde aqu: http://sourceforge.net/projects/iaxmodem/files/iaxmodem/ Ahora la descomprimimos: # tar xvf iaxmodem-versionquesea.tar.gz # cd iaxmodem-versionquesea Necesitamos alguna librera adicional en nuestro sistema para poder compilar: # aptitude install libtiff-dev libtiff-tools # ./configure # make Con esto creamos el binario iaxmodem. Lo copiamos en el path de ejecucin de binarios, generalmente /usr/bin o /usr/local/bin o /usr/local/sbin # cp iaxmodem /usr/local/bin Y ahora nos toca configurar un puerto virtual para que iaxmodem sea capaz de generar la seal, tendriamos que crear el archivo /etc/iaxmodem/ttyIAX con la siguiente informacin: device /dev/ttyIAX owner asterisk:asterisk mode 660 port 4570 refresh 300 server 127.0.0.1 peername iaxmodem

secret fax cidname FAXIAX cidnumber 100 codec ulaw Es muy importante asignar un Puerto diferente al de IAX (4569) para que funcione puesto que esta extensin estar siempre en activo como veremos ahora. Sera necesario configurar un script de arranque event.d para que esto ocurra. Dentro de /etc/init/ #vim /etc/init/iaxmodem.conf start on startup respawn exec /usr/local/bin/iaxmodem ttyIAX Probamos para ver si hemos configurado bien iaxmodem: # iaxmodem ttyIAX Si aparece: Registration completed successfully. Entonces hemos tenido xito en la configuracin. Despus arrancamos el servicio con el comando: # start iaxmodem ATENCION: Este sistema de scripting es el sistema por defecto de las ltimas versiones de Ubuntu, concretamente es Upstart, para ms informacin: http://upstart.ubuntu.com/getting-started.html. Anteriormente esto se hacia dentro /etc/event.d en versiones anteriores a la 9.10 e incluso antes esto se haca en inittab, clsico de sistemas Debian. Parece que se mantendr ahora as, pero como Ubuntu va cambiando constantemente, obliga a tenernos actualizados constantemente, y por tanto esto est sujeto a modificaciones. Si no os arranca automticamente, investigad un poquito, o mandadme un comentario a ver si os pudiera ayudar y/o actualizar este mensaje. Ahora viene la instalacin de Hylafax para manejar los FAXes que entren por este modem. Primero descargamos las fuentes: # wget ftp://ftp.hylafax.org/source/hylafax-6.0.5.tar.gz # tar xvf hylafax-versionquesea.tar.gz # cd hylafax-versionquesea Y compilamos como casi siempre # ./configure Aqu nos muestra los directorios donde se encuentran aplicaciones bsicas, decimos que si a todo si estamos conformes (que creo que lo estaremos casi siempre) # make # make install

Ahora necesitamos que faxgetty (para recibir faxes) funcione automticamente como hicimos antes con iaxmodem. Lo mismo, introducimos el fichero de configuracin en /etc/init: # nano /etc/init/ttyIAX.conf start on startup respawn exec /usr/local/sbin/faxgetty ttyIAX Y arrancamos con start ttyIAX igual que antes. Ahora tocara configurar un poco el sistema de fax con faxsetup. En general todas las opciones por defecto, pero hay ciertas preguntas que debemos responder para mejorar la fiabilidad del sistema: Serial port that modem is connected to []? Ponemos ttyIAX que es nuestro iaxmodem Tambin configuramos parmetros de nmero de fax y dems, no es que sea crucial pero cara al envo es importante puesto que en las cabeceras de los FAX esto es lo que aparece. Otra pregunta importante: Rings to wait before answering [1]? Ponemos 2 para asegurarnos que pasa un poco antes de empezar a recepcionar el FAX. No es fundamental, pero ayuda a que fallen menos Faxes por experiencia. Seguimos adelante hasta que nos pida configurar otro modem y decimos que no para terminar: Do you want to run faxaddmodem to configure another modem [yes]? Ahora vamos a probar que todo quedo bien configurado. Llamemos al telfono que hemos configurado el FAX 123123123. Y si todo fue bien, oiremos los tpicos pitidos de FAX. Por defecto, todos los faxes van a parar a /var/spool/hylafax/recvq en formato TIFF. Si queremos que el FAX recibido se enve automticamente, adjuntando la imagen TIFF en formato PDF, y utilizando una plantilla de envo en Espaol, tenemos que editar un fichero dentro de /var/spool/hylafax/etc/FaxDispatch y aadimos: TEMPLATE=es; FILETYPE=pdf; NOTIFY_FAXMASTER=errors; FROMADDR=email.que@envia.com case $DEVICE in ttyIAX) TOADDR=email.que@recibe.com;SENDTO=email.que@recibe.com;; esac Si fallara por cualquier razn, estara bien que pusiramos un email de administrador. En /etc/aliases hay que incluir la lnea FaxMaster: nuestroemail@de.administrador

Y refrescar los aliases: # newaliases Es importante respetar los ; y sin espacios donde no tiene que haberlos. Considerar que es importante definir un FROMADDR exclusivamente, cuando utilicemos un Smarthost en nuestro servidor de correo que requiera autenticacin, ya que por defecto se enviara el correo con el usuario fax. Todos los parmetros por defecto que no incluyamos en este fichero los recoger de /var/spool/hylafax/bin/faxrcvd Si tenamos la ruta de uuencode en setup.cache funcionara correctamente. Bsicamente las instrucciones estas pueden encontrarse aqu Ahora viene la parte, para enviar un FAX, tenemos mltiples opciones. Vamos a considerar en principio que nos encontramos ante una red comn en Windows, con mquinas Windows XP. Existe un software que carga un puerto de impresin para poder enviar Faxes como si de una impresin se tratase por una impresora virtual sobre este puerto. De este tipo hay varias opciones, pero la que vamos a tratar aqu de ejemplo es Winprint Hylafax. La pgina oficial de descarga es: http://winprinthylafax.sourceforge.net/ ACTUALIZACION: Ya existe version de Winprint Hylafax para Windows 7!: http://sourceforge.net/projects/wphfforwin7/files/ Y sobran las explicaciones de configuracin, ya que en la propia pgina aparece un pequeo manual con capturas de pantalla. Pero este manual solo explica como configurar la interfaz en Windows. Por otro lado tenemos que tomar algunas consideraciones para hacerlo funcionar. Por un lado tenemos el fichero de configuracin de hosts permitidos, usuarios y contraseas. Se encuentra en /var/spool/hylafax/etc/hosts.hfaxd. El formato para registrar nuevos se puede consultar en la pgina de manual de este fichero man hosts.hfaxd Bsicamente se trata de una expresin regular bien explicada, en la que introduciremos la red, para la cual ser permitido enviar FAXes con este software. Ejemplo: localhost 127.0.0.1 fax@10.158.[0-9]+.[0-9]+:: // Con esta lnea sera equivalente a dar permiso a todos los equipos de la subred 192.168.1.0/24, adems en la ltima pantalla de configuracin, estaremos obligados a poner un usuario fax pero no necesariamente una contrasea. Lo ms importante es especificar en la primera lnea de la pantalla de configuracin, el servidor Asterisk. Aparte sera interesante especificar el modem que vamos a utilizar para enviar (en nuestro caso ttyIAX) Tenemos otras opciones como Default Notify, que sera el correo de confirmacin de entrega o error, tambin Address Book Format (dos ficheros o un fichero CSV para almacenar nuestra libreta de direcciones) y la ruta de nuestro ordenador donde queremos

guardar la libreta (ejemplo C:\libreta), y finalmente parmetros de calidad y tipo de papel. Con esto, al imprimir una hoja por esta impresora, nos pedir los datos de envo y procederemos con el mismo Por ltimo, si queremos que las notificaciones lleguen en espaol necesitamos crear un fichero dentro de /var/spool/hylafax/etc/FaxNotify y aadimos: TEMPLATE=es; Muy parecido a lo que hicimos en el FaxDispatch Voy a comentar un aspecto que puede ser interesante para muchos, ya que el envo de FAX y la recepcin suele traer muchos quebraderos de cabeza. Las lneas RDSI, primarios, y lneas analgicas, es decir, el mundo PSTN es realmente la nica va aceptable para poder manejar la seal de FAX sin grandes complejidades. El envo a travs de proveedores SIP, o a travs de enlaces GSM puede dar lugar a problemas y errores que son bastante difciles de solucionar, y yo personalmente an no he conseguido aliviar, aunque la verdad es que resultara bastante interesante profundizar sobre este tema. Concretamente si lesteis mensajes anteriores, veris como todas las salidas de mi central de pruebas son a travs de enlaces GSM. Esto quiere decir, que he tenido que hacer modificaciones especficas en el Gateway Epygi, y en el Dialplan, para poder enviar Faxes especficamente, por las lneas RDSI que a priori, iban a estar exclusivamente dedicadas para la recepcin de llamadas. Para ello aqu van las dos modificaciones de ejemplo que tuve que hacer: 1. Por un lado en el extensions.conf, cree una regla adicional sobre la que ya haba, para salida al exterior: exten => _3[9]ZXXXXXXX,1,NoOp() exten => _3[9]ZXXXXXXX,n,Dial(SIP/${EXTEN}@my-isdn,30) exten => _3[9]ZXXXXXXX,n,Hangup() Con esto estoy diciendo, que para mandar un fax, primero hay que marcar el nmero 3. As le mandaremos al Epygi un nmero del tipo 3987654321 2. Ahora en el Epygi, como vimos, en Call Routing -> Call Routing Table vamos a crear una ruta equivalente a las otras dos que hicimos, pero saliendo por uno de os troncales donde tenamos conectado una lnea ISDN (en nuestro caso por ejemplo, el troncal 2). La nica diferencia es que en la primera parte de la configuracin pondramos: Enable Record activado Tipo de llamada, ISDN Pattern: 3* (para que sean todas las llamadas que empiecen por 3, es decir las que vienen para FAXes) Number of Discarded Symbols: 1 (para que descarte el primer smbolo, el 3, a la

hora de hacer la llamada a travs del ISDN) Description: isdn fax (aqu ponemos lo que queremos, yo pongo isdn 1 para saber que troncal de fax) El resto, todo igual que los otros que ya configuramos. Incluso podramos hacer otra lnea equivalente, con razn de Failover igual, para tener la opcin de ocupar mltiples troncales RDSI en caso que los otros estuvieran ocupados. Si quisiramos enviar un FAX de prueba utilizaramos la herramienta sendfax con el siguiente comando: $ sendfax -n -d 33987654321 /etc/issue.net // Enviaramos la informacin de /etc/issue.net simblicamente Seguramente recibamos un error con la mtrica de fuentes Courier Bold. Necesitamos instalar las fuentes ghostscript para ello podemos descargarlas y descomprimirlas en el directorio /usr/local/lib/ghostscript/fonts que es el que por defecto utiliza Hylafax para estas fuentes (sino existe podemos crearlo) # mkdir /usr/local/lib/ghostscript/ # cd /usr/local/lib/ghostscript/ # wget http://ghostscript.googlecode.com/files/ghostscript-fonts-std-8.11.tar.gz # tar xvf ghostscript-fonts-std-8.11.tar.gz Qu ocurrira si deseramos auto enviarnos faxes con motivo de pruebas? Al enviar a travs de la extensin iaxmodem, dara comunicando. Como es gratis tener mltiples instancias de iaxmodem (aunque no sean gratis los canales subyacentes a estas instancias, damos por supuesto que nos sobran para este supuesto), pues vamos a ello (aunque tambin se podra hacer que la extensin IAX fuese capaz de recibir y enviar mltiples llamadas sin dar comunicando, pero yo no lo he conseguido aun, quiz exista un parmetro para el contexto en el iax.conf que desconozco). En primer lugar debemos crearnos otro modem IAX como vimos antes, otra extensin IAX. De momento para simplificar el iax.conf vamos a crear una mscara basndonos en el contexto [iaxmodem] que creamos antes. Cambiamos [iaxmodem] por [modem] y le aadimos (!) [modem](!) //con los mismos parmetros que antes, sacamos username, secret y callerid [iaxmodem](modems) // y aqu ponemos esos tres parmetros especficos del modem primero que creamos [iaxmodem2](modems) // Lo mismo que para iaxmodem pero nuevos parmetros username=iaxmodem2 secret=fax callerid=Fax 2 <101> Luego copiamos el ttyIAX y lo modificamos el nuevo ttyIAX2 # cd /etc/iaxmodem/ttyIAX # cp ttyIAX ttyIAX2

Ejemplo: device /dev/ttyIAX2 owner asterisk:asterisk mode 660 port 4571 refresh 300 server 127.0.0.1 peername iaxmodem2 secret faxiax cidname iaxFAX 2 cidnumber 101 codec ulaw Y lo probamos # iaxmodem ttyIAX2 y creamos el archivo para autoejecucion en /etc/init y dems: # cp/etc/init/iaxmodem.conf /etc/init/iaxmodem2.conf Editamos el iaxmodem2.conf y cambiamos el final por iaxmodem ttyIAX2 # start iaxmodem2 Necesitamos configurar tambin Hylafax para la gestin de envo de estos faxes, para ello copiamos el archivo de configuracin del otro modem. Realmente no necesitamos editar nada relacionado a faxgetty puesto que no tendramos, al menos en este caso, recibir faxes por este canal de fax. #cd /var/spool/hylafax/etc/ #cp config.ttyIAX config.ttyIAX2 Y finalmente # faxaddmodem ttyIAX2 y dejamos todos los parmetros por defecto tal cual se nos presentan. Para inicializarlo # faxmodem ttyIAX2. Podemos crear un script como el de faxgetty que creamos antes para la recepcin de faxes equivalente. En /etc/init creamos el fichero ttyIAX2.conf con: start on startup respawn exec /usr/local/sbin/faxgetty ttyIAX2 Realmente faxgetty es el nico comando que funciona a modo demonio y sirve tanto para hacer que el modem IAX pueda tanto recibir como enviar. En este caso vamos a usar ttyIAX2 para enviar pero igualmente podra recibir. Si pusiramos en consola #faxmodem ttyIAX2, tambin resultara para enviar, pero este comando no funciona para ser utilizando para dejarlo en background como demonio. Si alguien conoce alguna forma de conseguir este mismo efecto sin ponerlo en escucha con faxgetty actualizara este mensaje con la novedad. Y ahora por fin si: $ sendfax -n -d 3987654321 -h ttyIAX2@localhost /etc/issue.net

Y finalmente recibiremos nuestro propio FAX como corresponde comprobando que todo est correcto y funcionando. Debo decir que realmente esto se podra haber resumido bastante si hubiramos utilizado los paquetes de los repositorios de hylafax y dems, pero la verdad es que hacindolo a mano como comentaba al principio se ve en detalle como operada cada uno de los sistemas involucrados y si tenemos un problema, sabremos donde ir a buscar con ms sencillez. Exactamente lo mismo que ocurre con el propio sistema Asterisk, cuando lo compilamos desde las fuentes al principio de todo. Seguramente salgan 1001 problemas ms que yo no haya contemplado aqu. Si tenis alguna inconveniencia escribidla y trataremos de analizarla en el detalle para perfeccionar este mensaje al mximo. De nuevo, agradezco vuestro inters por Asterisk y por este blog, al igual que vosotros agradeceris el inters aqu mostrado. No nos dejes caer en la tentacin y lbranos del mal. Amn.
tags: asterisk, dahdi, dialplan, epygi, fax, fax asterisk, faxdispatch, faxgetty, faxsetup, hosts.hfaxd, hylafax, iax, iax.conf, iaxmodem, libtiff, modem, ttyIAX, ubuntu, ubuntu server, upstart, winprint, winprint hylafax 6 comments! 16/01/2011 08:35

Combate Analogico: Segundo Asalto


4 comments by SirLouen in Asterisk,Digium,Telefonia Analogica

Han pasado ya varios meses desde aquel mensaje en el que perdia la primera batalla tratando de conectar mi tarjeta Digium TDM410P. Pues bien, tras la tramitacion del RMA de la misma, fue aceptada, y al poco tiempo de ser enviada, recibi una de vuelta, que tristemente ha quedado en la estanteria casi todo este tiempo, hasta que recientemente, he tenido la oportunidad de trastear con ella. Concretamente en estos ultimos dias, he vuelto a montar otra maquina sencilla de pruebas, ya que el servidor anterior ha pasado a un estado de semi-produccion con un total de 10 extensiones en funcionamiento, y una concurrencia de unas 3-4 llamadas en horario laboral. A esta nueva maquina le he conectado la tarjeta digium, y he procedido como vimos en anteriores mensajes a instalarle Asterisk version 1.6.2 (que a fecha es la que mayor estabilidad me reporta). Es curioso como ya paso mucho tiempo desde aquel mensaje en el que planteaba otras versiones y la velocidad a la que va creciendo esto. Ahora empieza el segundo asalto. Lo mas importante como se vio en el primer asalto, es conectar la tarjeta en la ranura PCI y conectarle un molex de la fuente, si vamos a utilizar como es nuestro caso, un modulo FXS. Esto es asi, por el hecho de que debemos

entregarle corriente al telefono analogico conectado a este modulo, si solo tuvieramos modulos FXO en esta tarjeta, no haria falta realmente este conector. En este caso, disponemos de un modulo FXS conectado en el puerto 1 y un modulo FXO en el puerto 4. Si realizamos la instalacion correcta de dahdi-linux-complete, solo necesitariamos tener un modulo activado en el fichero de configuracion /etc/dahdi/modules para que nuestro sistema reconozca esta tarjeta de inmediato: wctdm24xxp Por otro lado como vimos en su dia, lo necesario para configurar el fichero /etc/system.conf ya fue explicado. Solo hay que recordar el inciso que si el modulo es FXS ponemos fxoks y viceversa para el FXO, realmente indicamos lo que va a haber en el otro extremo, a mi personalmente me resulta un poco contra la logica sencilla, pero seguramente a otro nivel de logica, tiene mucho sentido, con el tiempo averiguare esto y si cabe os lo contare. Y tambien recordar que el FXS es el verde y el FXO el rojo. Una vez hechas estas configuraciones, solo quedaria adaptar nuestro fichero chan_dahdi.conf de asterisk para poder trabajar con estos modulos (aparte de la consiguiente configuracion del Plan de Marcacion para dar un uso practico finalmente). El fichero chan_dahdi puede ser tan sencillo o tan complejo como deseemos ya que permite una personalizacion casi milimetrica del sistema con respecto a la red telefonica. El contexto principal en este fichero es [channels] y a partir de ahi surgen varias configuraciones basicas que voy a comentar a continuacion [channels] language=es // Lenguaje que vamos a usar usercallerid=yes // Si queremos usar el identificativo de la llamada cidsignalling=v23 // Sealizacion CID mas comun, tambien esta la opcion bell cidstart=ring // Cual es la seal de inicio de llamada. Aqui en caso de lineas RTB normales, ring es lo mas comun, pero en caso de usar enlaces GSM analogicos, seria una buena idea poner otro sistema como polarity_IN (inversion de polaridad) por el propio funcionamiento de los mismos que no viene al caso ahora, aunque yo los he probado con ring y tambien funciona aun con mas propensidad a fallos. hidecallerid=no // Autoexplicativo, si quieremos ocultar nuestro identificador de llamadas callwaiting=yes // Si podemos poner llamadas en espera, utilizamos el boton Hook Flash (comunmente visto en los telefonos analogicos con una letrita R aunque configurable en la mayoria de los casos) para saltar de una llamada en espera a otra callwaitingcallerid=yes // En el caso de poder tener llamadas en espera, poder ver el Identificativo de llamadas cuando vamos saltando de una a otra llamada threewaycalling=yes

// Llamada a tres activada, hay que considerar especialmente para llamadas a traves de la PSTN, que estos valores deben estar soportados adicionalmente por la misma y la mayoria de los operadores (Telefonica) suelen cobrar por estos servicios adicionales. transfer=yes // Poder transferir llamadas, no tanto por limitaciones de nuestro Dialplan, sino por el de la PSTN como hablamos antes canpark=yes // Poder aparcar llamadas, lo mismo. Diferencia entre poner una llamada en espera y aparcarla, es que en el segundo caso la utilidad es por ejemplo, recuperar la llamada desde otra extension diferente cancallfoward=yes // Para poder reenviar la llamada callreturn=yes // Para poder volver a recibir de vuelta una llamada reenviada sin exito echocancel=yes // Cancelacion de eco activado echocancelwhenbridged=no // En caso que la llamada quede dentro de la red ejemplo, de una extension analogica a un equipo SIP, para que no cancele el eco en vano (ya que la llamada realmente con minimo retardo no lo requiere). Es curioso porque esta opcion viene activada yes por defecto, y tenemos que desactivarla en la mayor parte de las configuraciones chan_dahdi echotraining=800 // Tiempo que tarda en ms para aprender como de retardada viene la llamada y que cancelacion de eco debe aplicar. En el algoritmo intervienen variables como el retardo medio, y el jitter que viene a ser algo asi como la desviacion estandar sobre el retardo medio. relaxdtmf=yes // Ya habiamos visto esto en la parte SIP los dichosos DTMF suelen ser motivo de problemas especialmente partiendo de la base de que no sabemos que sistema lleva el llamante. rxgain=1.0 txgain=2.0 // Ganancias en decibelios de la llamada entrante y saliente respectivamente busydetect=yes busypattern=200,200 // Con estas opciones, simplemente detectamos si el otro lado esta comunicando con un tono de comunicando clasico en nuestro auricular. Ademas podemos especificar la cadencia en ms de el tono de llamada a detectar. Esto es diferente en cada pais y lo suele suministrar una norma de la PSTN que puede ser consultada en las normas del proveedor principal, en caso de Espaa, Telefonica por ejemplo answeronpolarityswitch=yes hanguponpolariryswitch=yes // Esto es fundamental para como comentamos antes, la gestion de las llamadas en funcion si trabajamos directamente sobre una linea RTB, o si utilizamos un enlace GSM. En el primer caso, serian las dos opciones a no, y en el segundo caso, a si (yes) faxdetect=incoming // Para detectar faxes entrantes, es util, si vamos a utilizar ese canal para recibir Faxes. Tambien esta both para ambos sentidos. El hecho de detectar faxes tiene ciertas aplicaciones como IAXmodem, Hylafax como aplicaciones de recepcion de FAX para

Asterisk, o envios automaticos de llamadas, y gestion de las mismas con Autodialers. mohinterpret=default // Musica en espera por defecto mohsuggest=default // Musica en espera sugerida cuando ponemos una llamada en espera para este canal. Para todo esto que he explicado, hay miles de opciones y configuraciones posibles. Aqui he puesto una configuracion valida de ejemplo para funcionar desde 0. Se pueden consultar las opciones directamente en las explicaciones mismas que trae el fichero de ejemplo proporcionado por el propio sistema generado por la opcion del make de Asterisk samples. Finalmente, metemos la configuracion especifica de los canales para luego ser tratada desde nuestro Dialplan. En mi caso, he conectado un telefono Dect en el canal 1 (FXS), y un Enlace GSM en el canal 4 (por eso he puesto las opciones anteriores basadas en este caso en concreto). Asi quedaria: group = 1 // Grupo de llamada, equivalente al fichero SIP context= desde-movil // El contexto al que sera dirigidas las llamadas entrantes por este canal signalling = fxs_ks // Sealizacion del canal, en este caso si es intuitivo callerid=asreceived // No se si recuerdan cuando se configuro el gateway Epygi, una de las opciones que habia que poner en la configuracion de las lineas ISDN es como pasar el Identificador de llamante al sistema. En este caso, tal como viene decimos channel => 1 Asi por un lado quedaria configurado el canal 1, FXS. Por otro lado el canal 4 FXO quedaria asi: group=4 context=extensiones signalling=fxo_ks callerid=Telefono DECT <101> mailbox=101@extensiones channel=>4 En este caso, como puede observarse es exactamente igual que la configuracion del fichero SIP en cuanto a lo que contexto, callerid, mailbox y demas pudiere referirse. Con esto ya quedaria integramente configurado nuestro fichero chan_dahdi.conf. Para recargarlo desde la consola (CLI) Asterisk tenemos que utilizar el comando: module reload chan_dahdi.so Para la configuracion del Dialplan solo tomamos en cuenta una consideracion muy sencilla. Los canales analogicos por tarjetas se representan como DAHDI/X siendo X el canal. Asi que toda la configuracion del extensions.conf es equivalente a si pusieramos SIP/(nombre del contexto sip) pero con DAHDI

Ejemplo, para la extension 101 del telefono Dect exten => 101,1,NoOp() exten => 101,n,Answer exten => 101,n,Dial(DAHDI/4) exten => 101,n,Hangup Asi de sencillo, asi mismo para enviar una llamada a traves del FXS creamos una regla para moviles en mi caso (Enlace GSM conectado al canal 1) exten => _[67]XXXXXXXX,1,NoOp() exten => _[67]XXXXXXXX,n,Dial(DAHDI/1/${EXTEN}) exten => _[67]XXXXXXXX,n,Hangup() Por cierto ya que ha salido el tema, os habeis enterado que como novedad este 2011 empezaran a salir numeros moviles que empiezan por el 7? Finalmente creariamos el contexto [desde-movil] para recepcionar todas las llamadas entrantes, si es que llamasen al numero del movil en cuestion asociado al canal 1. Y con esto ya hemos ganado el segundo Asalto, abordando un poco la cuestion relacionada a las tarjetas de Asterisk y su configuracion despues de lo que se sufrio en dias pasados. De todas formas esto no sera muy frecuente en mis sucesivos mensajes porque como comente, yo no soy nada partidario de utilizar tarjetas por los motivos que explique en su dia. Aunque es curioso que todo aquel que se quiera presentar a un dCAP (logico, porque digium solo fabrica principalmente tarjetas), ha de conocer esto en profundidad. Hay que ademas saber tratar con tarjetas BRI y PRI que tienen ciertas variaciones muy especificas. Pero para eso existe un comando todo poderoso que te hace la mitad del trabajo: dahdi_genconf. Basicamente te configura el fichero system.conf tras chequear que hay disponible entre la tarjeteria cargada en el sistema (Y que puede observarse con el comando dahdi_tools). Quiza vengan en un futuro mas detalles si tengo la oportunidad de trastear con otras tarjetas, sean BRI de otras marcas (Beronet?) o alguna tarjeta Primaria de Digium (creo que es la unica tarjeta que verdaderamente merece la pena en cualquiera de los casos). Para terminar me gustara sugerir a todo aquel seguidor de mi Blog, si tiene inters en que profundice o experimente en algn tema no dude en plantermelo como un comentario y proceder con la cuestin. Todo sea por mejorar la curva de aprendizaje de todos aquellos que me sigan tras el paso por este Blog a travs de mi experiencia.
tags: analogico, asterisk, chan_dahdi, chan_dahdi.conf, dahdi, dahdi_genconf, dahdi_tools, dialplan, digium, enlace gsm, epygi, fax, fxo, fxoks, FXS, fxsks, hook flash, hylafax, iaxmodem, pci, pstn, rma, tdm410p, telefonia analogica, zapata 4 comments! 18/12/2010 22:20

Creando una Operadora Automatica de Coste Cero I


no comments

by SirLouen in Asterisk,Basicos,DialPlan

Es curioso observar que el 99,99% de sistemas de operadoras automaticas de las PBX de marcas reconocidas como Alcatel-Lucent, Panasonic, Siemens, el coste de poseer un sistema de operadora automatica, o IVR (interactive voice response), sea directamente proporcional al numero de canales entrantes de voz. Y la pregunta es, realmente estas operadores ofrecen algo mas que no podamos obtener a traves de nuestro magnifico sistema Asterisk? La respusta no solo es negativa, sino que ademas podemos discriminar que vamos a ser capaces a traves de nuestro plan de marcacion de realizar operaciones totalmente casi inimaginables para estas centralitas de alto nivel, al menos, sin una dificultad de alto standing. Pero no se supone que las PBX de marcas reconocidas poseen interfaces de configuracion ampliamente escalables y de relativa facil configuracion? Solo si queremos hacer funciones, que no sobrepasen el nivel del mar. Y eso es lo que vamos a tratar de hacer hoy, pero sin ir demasiado lejos, solo andando un poco por la arena. Segun veiamos el otro dia con respecto a los Gateways, y la capacidad de recibir llamadas entrantes, vamos a plantear un nuevo contexto dentro del DialPlan en el que manejemos dichas llamadas a nuestra voluntad. Partiendo de la base: [desde-rdsi] exten => 987654321,1,NoOp() exten => 987654321,n,Answer exten => 987654321,n,Goto(operadora,s,1) Tenemos la instruccion Goto, que nos permite desplazarnos a otro contexto (operadora), marcacion de extension (s) y prioridad (1). Ya hemos hablado sobre las prioridades y los contextos. ahora voy a hacer una breve resea sobre las marcaciones de extension. Por un lado existen las marcaciones especiales: s viene de start, suele ser, la marcacion de inicio de todo contexto, una extension comodin para dejar claras las cosas por regla general. i viene de invalid, en caso que marquemos una extension que no pertenezca a un contexto, entonces iremos a esta marcacion de extension t viene de timeout simple, seria el caso de que se acabe el tiempo por una aplicacion que tenga expiracion de tiempo, como WaitExten T viene de timeout absoluta, existe una variable global (ya veremos variables locales y globales en otro momento) llamada TIMEOUT que establece el tiempo total que se permite mantener una llamada en activo, en el momento que expira este tiempo, entonces saltariamos a la T del contexto que nos encontremos Por otro lado existen las extensiones normales, y los patrones

Una extension normal simplemente es un numero cualquiera Un patron viene precedido por un guion bajo _ y permite que se puedan crear patrones de posibles extensiones numericas. Informacion detallada sobre esto, la explico en un post mas antiguo Ahora ya que sabemos lo que necesitamos saber sobre extensiones comenzamos con nuestro contexto de IVR [operadora] exten => s,1,NoOp exten => s,n,Answer() exten => s,n, GotoifTime(8:00-14:00,mon-fri,*,*?abierto,s,1) exten => s,n,GotoifTime(16:00-18:00,mon-fri,*,*?abierto,s,1) exten => s,n,GotoifTime(*,mon-fri,1,jan?festivo) exten => s,n,Playback(fueradehorario) exten => s,n,Voicemail(100@default) exten => s,n,Hangup exten => s,n(festivo),Playback(festivo) exten => s,n,Voicemail(100@default) exten => s,n,Hangup Esto podria ser la estructura de una eficaz introduccion a nuestra operadora automatica. Leyendolo rapidamente, lo que tratamos de hacer es que salte al contexto abierto en caso que la llamada se encuentre en horario lectivo de la empresa, o que salte a la etiqueta festivo en caso que coincida que es dia de fiesta. En otro caso, lanzara un mensaje de estamos cerrados, saltara un buzon de voz para dejar mensajes y colgara, en caso que salte a la etiqueta festivo, algo parecido, un mensaje diciendo que es dia festivo en la empresa, buzon de voz y cuelgue. Realmente esto se podria usar incluso como plantilla para miles de centralitas de PYMES y SOHO y ofreceria una configuracion basica, potente y eficaz, sin tener que andar merodeando en miles de interfaces graficas que pueden dar lugar al error facilmente. Esta claro que este blog esta dedicado a gente especializada en el mundo de la informatica y/o las telecomunicaciones por lo que trabajar sobre una pantalla con fondo negro y letras blancas no deberia ser demasiado drama y mas alla aun, deberia ser una gratificacion excepto en contados casos.

Figura 1: No exige aprender Linux o Scripting Como si fuera algo malo Ahora vamos alla con el detalle. En primer lugar vamos a introducir la aplicacion GotoifTime:

Como vimos con Goto, es equivalente, pero introduciendo una condicion temporal. Para los conocedores de Cron, esto es equivalente. En primera posicion, especificamos hora o rango horario, incluso varios rangos horarios. Por nuestro ejemplo podriamos haberlo resumido con: exten => s,n, GotoifTime(8:00-14:00,mon-fri,*,*?abierto,s,1) exten => s,n,GotoifTime(16:00-18:00,mon-fri,*,*?abierto,s,1) por exten => s,n,GotoifTime(8:00-14:00|16:00-18:00,mon-fri,*,*?abierto,s,1). Dos pajaros de un tiro como quien dice. El segundo parametro, es el dia de la semana, en ingles, los tres primeros caracteres, y ocurre lo mismo que con las horas, rangos, multiples rangos, etc. El tercer parametro, es el dia del mes y el cuarto, el mes en ingles y los tres primeros caracteres igual. El resto es equivalente a a la aplicacion Goto. Ademas aqui hemos introducido las etiquetas aparte de los contextos. Una etiqueta se ubica en una parte de la prioridad, esto es util cuando como ocurre en mis ejemplos en vez de poner prioridades del tipo, 1 2 3, etc pongo siempre n considerando lo de n+1 y queremos saltar a otra prioridad sin tener que saber la posicion relativa (esto nos permite la maxima genericidad en nuestros planes de marcacion y la capacidad de insercion futura en casos complejos). Sobre los ultimos dos parametros, dia del mes y mes, hay que considerar que esto permite mucho poder para crear genericidad a lo largo de los aos, como son el caso de los dias festivos. En nuestro ejemplo decimos: Si es lunes a viernes y ademas cae el 1 de Enero entonces es festivo. Aunque sea lo que sea realmente es festivo este seria un ejemplo especifico de la posibilidad saltar al contexto dia festivo realmente en estos dias, y si fuera un sabado o un domingo, como ya es festivo de por si, que de el otro mensaje (El de cerrado simplemente) . Opciones hay muchas y esto quedaria a nuestra libertad. Mas alla aun, asterisk 1.8 tengo entendido que incluso existe la posibilidad de crear calendarios con Google Calendar y desde ahi especificar los dias festivos y toda la informacion relativa a tiempos. Hay mas informacion aqui, y esto nos ofreceria un nivel de potencia a bajo coste de complejidad para nuestro IVR que ninguna otra central se acercaria lo mas minimo. Ahora ya podemos decir que estamos sobre el nivel del mar, y eso que no hemos empezado siquiera en este mundillo. Por otro lado, tenemos la aplicacion Playback. Simplemente reproduce un archivo de musica que tengamos en la carpeta correspondiente en funcion de nuestro lenguaje definido. Los sonidos se encuentran en /var/lib/asterisk/sounds/ Finalmente esta la aplicacion Voicemail, que basicamente llama a otro archivo de musica (deje su mensaje despues de oir la seal) y guarda el mensaje de voz en el buzon especificado (100) del contexto por defecto (@default). Todo esto podemos verlo y configurarlo en el archivo de configuracion voicemail.conf que seguramente veremos en otro momento.

Y ahora que ocurre con las llamadas que van al contexto abierto? Vamos a hacer algo sencillito en abierto para terminar por hoy, y mas adelante intentaremos profundizar aun mas en todo esto. [abierto] exten => s,1,NoOp exten => s,n,Background(listadistribucion) exten => s,n,WaitExten(20) exten => 1,1,NoOp exten => 1,n,Goto(comercial,s,1) exten => 2,1,NoOp exten => 2,n,Goto(postventa,s,1) exten => t,1,NoOp exten => t,n,Goto(telefonista,s,1) exten => t, n,Goto(s,1) Voy a leerlo: primero, saltaria un mensaje, que diria Bienvenido a nuestra empresa, Marque el 1 para hablar con Comercial o Marque el 2 para hablar con Posventa, en otro caso espere y le pondremos con un Agente. En caso de marcar el 1, le mandaria al contexto comercial, y en caso de marcar el 2, a postventa. En caso de Timeout simple le mandaria al telefonista. Aqui solo tenemos dos aplicaciones que no vimos hasta el momento: Background es equivalente a Playback pero deja a la espera de marcacion de una extension. Podemos interrumpir el background si marcamos teclas en el telefono y saltaria a la extension del contexto marcada (hay mas opciones complejas, como saltar a extensiones de otros contextos pero no voy a entrar en detalles) Por otro lado Waitexten, basicamente establece el tiempo que tenemos para marcar una extension antes de ir a la extension especial t. Parece sencillo, y lo es. Asi que invito a hacer mil combinaciones con toda esta informacin para crear posibles IVR sencillitos que cumplan una funcion que para la mayoria de las PBX del mercado suele ser bastante compleja y obliga a pasar por miles de secciones de la interfaz grafica. Por esto, es suficiente por hoy. Seguiremos informando como suele decirse
tags: alcatel, asterisk, background, buzon de voz, dialplan, extension, gotoiftime, invalid, ivr, operadora automatica, panasonic, playback, shell, siemens, start, timeout, voicemail, waitexten No comment? 12/12/2010 21:32

Conectandonos al mundo Real: El planeta Gateway II


3 comments by SirLouen in Gateways,Introduccion,Telefonia Analogica

Como comentaba en el ultimo mensaje, hoy tenia la intencin de explicar en detalle como se realizara la configuracin en Asterisk, para admitir el Gateway Epygi configurado, y por otro lado, poder presentar la sencillez configuracin y manejo los FXS que proporciona el magnifico Gateway Linksys SPA8000. Por un lado hablando del Epygi, tendramos que conectarlo via SIP como ya sabemos. En el fichero sip.conf que ya conocemos de anteriores configuraciones vamos a crear un apartado para el mismo: [epygi] host=direccin ip de nuestro gateway defaultuser=usuario que pusimos en la configuracin del sip trunk secret= la contrasea correspondiente qualify=yes (para tener monitorizado el elemento) type=friend (para recibir y emitir llamadas a travs del mismo) context=desde-rdsi (este es el contexto en el dialplan donde las llamadas de las RDSI a travs del gateway) Con esto es suficiente, seguramente podramos especificar alguna opcin de seguridad adicional, pero sobre seguridad en Asterisk ya hablaremos otro dia. Ahora toca hablar un poco del dialplan, el fichero extensions.conf. Realmente no he dedicado un mensaje especifico a hablar sobre el Dialplan, porque como es un tema tan extenso, prefiero ir introducindolo segn la necesidad vaya surgiendo, en un mensaje prximo, escribir un pequeo manual para crear un sencillsimo IVR (Contestador Automatico) para manejar las llamadas que nos entren a travs de este Gateway, o cualquier otro operador ip que podamos utilizar. Como dijimos antes, vamos a utilizar el contexto [desde-rdsi] para todas las llamadas que nos entren por nuestro Gateway. [desde-rdsi] exten => 987654321,1,NoOp() exten => 987654321,n,Answer exten => 987654321,n, Muy sencillo Dialplan. Simplemente como vimos en anteriores mensajes, siguiendo la estructura general de todo Dialplan, pasamos la extensin en primer lugar. La extensin que recibimos es justamente la que nos pasa el Gateway, y como configuramos en la seccin ISDN del mismo, enrutaba a la centralita poniendo el telfono del DID como extensin llamante. Esto quiere decir, que si disponemos de varios DID y los configuramos en la seccin que vimos, pues simplemente tendramos poner poner cada DID como extensin y configurar en el dialplan como querramos manejar cada caso (mandndolo a una extensin con el comando Dial, o a un grupo de extensiones, o

activando el IVR en secuencia por comandos, o toda la potencia en general que nos permite el Plan de Marcacion de Asterisk) Si todo esto lo hubiera tenido por escrito en el momento que empece a configurar el Gateway seguramente podra haberlo montado en cuestin de 15 minutos sin problemas, porque como puede verse es realmente sencillo de manejar. Si esto resulto facl, vamos a ver un poco acerca del Linksys, que es todava aun mas sencillo, aunque viene cargado de opciones, que podramos editar al gusto, en este mensaje solo vamos a centrarnos en los primeros pasos, echarlo a funcionar, comprobar que todo esta OK, y configurar Asterisk para que reconozca bien cada puerto a voluntad. En primer lugar, comentar que el aparato tiene 4 modos de uso Usuario Basico Usuario Avanzado Administrador Basico Administrador Avanzado

Todo esto se selecciona desde la interfaz de inicio, arriba a la derecha, Admin, Advanced necesitamos estar para configurar el sistema con lo bsico. En el apartado Router -> WAN Setup configuramos lo bsico acerca del sistema de red del equipo. Direccion IP (Static IP), Mascara de red, y Puerta de Enlace (esto no es muy recomendable usarlo, si no vamos a necesitarlo para nada en particular, ya que podra llegar a exponer nuesto equipo a ataques forneos), aunque sin esto no podremos utilizar opciones para tener actualizada la hora de los telfonos como los NTP Server, aunque podemos configurarlo a mano, no es una utilidad en principio que nos vaya a resolver la vida en Asterisk. En el apartado Voice es donde realizaremos toda la conexin con Asterisk. Uno de los problemas que mas afecto a mi sistema, era el hecho de no poder recibir los DTMF correctamente. Esto se solucion inmediatamente cambiando un parmetro dentro de Regional:

Con respecto a la interconexin SIP con Asterisk se realiza desde cada una de las Lineas del sistema (L1,L2,L3, etc) Entrando por ejemplo en la linea 1, L1, en el apartado siguiente:

Tan simple como configurar eso 4 parametros, el servidor Asterisk, el usuario y la contrasea que tendremos en nuestro servidor Asterisk. Ahora ya solo quedaria registrar esta linea FXS, como una extension (ext10 del ejemplo), en el fichero sip.conf [ext10](extension,codecs) callerid=Extension Analogica defaultuser=ext10 secret=contraseasupersegura mailbox=10@default Tan sencillo como con configurar cualquier extension SIP que podamos usar en un terminar IP puro, o en un softphone como vimos hace tiempo Tras este resumen, tenemos claro, que si manejamos bien todos los mensajes que fuimos recorriendo hasta este, configurar este Gateway no supone ningun inconveniente. De todas formas como siempre podrian surgir inconveniencias, tanto para este como para el Epygi, yo estoy abierto para resolver todos los problemas que pudieran surgiros al respecto, y asi si cabe, engrosar con mas cantidad y calidad, el nivel de informacion que circule en este blog. Nada mas por hoy. Con tanto componente en funcionamiento, ya solo queda empezar a subir el listo un poco, el proximo dia hablaremos sobre un IVR de ejemplo y tambien hare una gran introduccion al mundo de los CDR (Call detail record, o registro del detalle de llamadas) para poder analizar llamadas guardadas en una base de datos del sistema, e introducire el primer software adjunto al sistema que he conseguido poner en funcionamiento y reporta unos excelentes resultados.

tags: analogica, asterisk, dialplan, did, dtmf, epygi, extension, FXS, gateway, linksys, quadro, sip, SPA8000, telefonia 3 comments! 06/09/2010 15:58

Introduciendo un Proveedor SIP: Parte 2


1 comment by SirLouen in Asterisk,Basicos,DialPlan,Introduccion

Tras la migracion, y aun a la espera del retorno de la tarjesta TDM410P enviada en garantia, hoy voy a hacer una pequea explicacion de las ultimas modificaciones introducidas a nuestro sistema Asterisk, concretamente a nivel de DialPlan, para en detalle, el funcionamiento del Proveedor SIP que configuramos el otro dia y por otro lado, algunos retoques para darle un poco mas de nivel a nuestro sistema, como una pequea operadora automatica de pruebas. Realmente aqui se vera gran parte del codigo contenido en nuestro fichero extensions.conf y un poco la explicacion de cada atributo.
[operadorip] exten => 851123456,1,NoOp() exten => 851123456,n,Goto(s,1) exten => sirlouen,1,NoOp() exten => sirlouen,n,Goto(s,1)

Si recuerdan, el otro dia pusimos en el contexto del provedor SIP dentro del sip.conf, llamado operadorip. Este contexto vendra directamente aqui. La primera vez que hable del DialPlan no explique exactamente a que se referia cada argumento de la linea exten=> En primer lugar, exten, se refiere como su nombre indica, a la extension marcada a la que va a hacer referencia como primer argumento. Esto es lo mas extendido y utilizado por defecto. En este caso, la extension, hablamos del numero DDI que nos ofrece el operador IP ya que de alguna forma es como lo reconocera como primera entrada nuestra centralita. En algunos casos, el proveedor IP te ofrece un numero de usuario adicionalmente, y este numero de usuario tambien lo entrega el operador IP sustituyendo al numero DDI, de forma casi aleatoria segun comprobe tras diversas pruebas. Por eso decidi poner las dos posibilidades. Como segundo argumento, es el numero de prioridad en la lista de ejecucion. Lo tipico es poner en la primera linea el 1, en la segunda el 2, etc. Pero si ponemos en la primera el 1 y luego la n, significa que aumentamos el contador de prioridad linealmente, 1, n+1 (2), n+1 (3), etc. Esto es util si por ejemplo en un futuro tenemos intencion de meter

mas lineas intermedias, no tengamos que cambiar el numero de prioridad a toda la secuencia completa, algo engorroso y que puede dar lugar a errores. El tercer argumento hace referencia a la funcion que va a cumplir esa linea. En mi caso, siguiendo un buen consejo que me dieron, lo ideal seria poner NoOp (sin operacion), para poder asi asignarle el elemento 1 por defecto. Esto es una buena practica en general ya que si luego creamos Macros (equivalente a plantillas para secuencias del Plan de Marcacion), esto hace que exista cierta uniformidad y estandarizacion. Tampoco es crucial escribir asi, pero desde que se creo el Copy & Paste tampoco supone una gran inconveniencia y nos aportara mas que nos rebajara. Los siguientes Argumentos en embos casos, son condicionales GO TO, tipicos en programacion. La funcion GoTo recibe 3 parametros siendo como primer parametro, un contexto, si solo se dan dos, se conserva en el contexto en que nos encontremos. El segundo, seria la posicion de marcacion dentro de ese contexto. S viene a ser la posicion de inicio por defecto. Donde suele entrar todo (hace referencia a Start, comienzo) al entrar en un contexto. Finalmente indicamos el lugar de la prioridad donde queremos entrar. Tambien con la funcion Goto podriamos pasar 1 solo argumento, esto es el lugar dentro del a prioridad (y consideraria la posicion de marcacion y el contexto donde actualmente nos encontrasemos), tambien podemos pasar una bandera asociada a un nivel de prioridad como veremos mas adelante. Con esto, de alguna forma, si nos llaman a nuestro numero DDI, ya estariamos dentro de la centralita, ahora tocaria a traves de un Contestador Automatico, manejar esta llamada exten => s,1,NoOp() exten => s,n,Answer exten => s,n,Background(menu) exten => s,n,WaitExten(20)
Esto es bastante sencillo. Igual que vimos con anterioridad, recogemos la llamada con Answer, y con Background ponemos un sonido que tendremos registrado en nuestro directorio /var/lib/asterisk/sounds. Hay dos formas de crear sonidos 1. A traves de una marcacion con la funcion Record, grabariamos nuestros propios sonidos 2. Directamente introduciendo la pista de audio en la carpeta indicada con el nombre en cuestion y segun el formato .gsm, .wav, etc que tengamos especifcado dentro de los codecs soportados en este contexto. Finalmente tenemos la funcion WaitExten que basicamente realiza la operacion de espera a que se marque un digito durante los segundos pasados como parametro. Este digito entra como marcacion DTMF y como comente en otra ocasion, aqui se originaron problemas por parte del operador IP, a raiz de las malas latencias, que al final consegui solucionar en el fichero de configuracion de disposistivos SIP utilizando el modo DTMF inband exten => 1,1,NoOp()

exten => 1,n,Playback(ext1000) exten => 1,n,Goto(extensiones_internas,1000,1) exten => 2,1,NoOp() exten => 2,n,Playback(ext1001) exten => 2,n,Goto(extensiones_internas,1001,1) Una vez marcado el digito por DTMF iriamos a la posicion de marcacion, en este caso pongo dos ejemplos sencillos, lo unico especial, la funcion Playback que a diferencia de Background no espera una marcacion, simplemente reproduce un mensaje y continua hasta la siguiente orden. En este caso, cambiamos de contexto y ya finalmente nos vamos a nuestro contexto privado donde estan ubicadas las extensiones de nuestra oficina tal y como configuramos con anterioridad. Ahora vendria la otra perspectiva, desde dentro hacia el exterior a traves del proveedor SIP. En este caso por motivos logicos de seguridad no nos interesaria que alguien pudiera acceder a traves de las marcaciones DTMF en el mismo contexto operadorip y ser capaz de llamar al exterior. Por esto, la idea es que esto solo pueda marcarse desde el contexto privado donde se encuentran nuestras extensiones. En este caso la marcacion es un tanto especial y tenemos que introducir nuevos conceptos: ;Salida de llamadas Nacionales exten => _[689]XXXXXXXX,1,NoOp() exten => _[689]XXXXXXXX,n,Dial(SIP/${EXTEN}@netelip,30) exten => _[689]XXXXXXXX,n,Hangup() Como podemos ver, aqui aceptamos un total de 9 posiciones. Bueno parecen mas, pero aqui explico el formato especial de marcacion que he tenido en cuenta para este caso: En primer lugar, si vamos a usar caracteres especiales como X,N o Z necesitamos poner delante la barra baja. En segundo lugar, observamos los tres valores 6,8,9 contenidos entre corchetes. Al estar contenidos entre corchetes significa los posibles valores que puede tomar el primer digito, solo el 6 (moviles), 8 (numeros geograficos virtuales) y 9 (numeros geograficos de Espaa). Tambien podriamos tener un guion tipo [67-9] en este caso estariamos considerando los valores 6,7,8 y 9 seria lo mismo que [6-9] En tercer lugar tenemos digitos especiales. X significa cualquier valor entre 0 y 9, Z entre 1 y 9 y N entre 2 y 9. En este caso seguramente seria mas eficaz separar los moviles y los fijos dado que podriamos en un segundo nivel restringir las llamadas a numeros especiales tipo 902, 901, etc eliminando la posibilidad con [89]ZXXXXXXX. Aqui tenemos tantas posibilidades como queramos.

Una vez marcada esta secuencia, nos encontramos con la Funcion Dial, que al igual que utilizado para marcar extensiones en este caso con la variable ${EXTEN} recogemos lo marcado en la posicion de marcacion y lo enrutamos a traves del contexto sip indicado tras la @ en este caso nuestro Proveedor IP. El ultimo parametro 20, es el tiempo que esperara tras marcar para que recoja tono la llamada, en otro caso colgara. Entendido esto podriamos crear sistemas de marcacion todo lo complejo que se nos ocurriesen. Y muy util para la creacion de plantillas, y para la generacion de extensiones de manera semi-automatica puesto que por parte del dialplan no seria necesario apenas escribir codigo si el patron de las extensiones es equivalente. Con esto doy una breve revision de la interrelacion de un proveedor IP y el Plan de Marcacion de nuestro sistema para poder darle uso. Pero el Dial Plan tiene mucha miga por dentro, miles de funciones. Seguire en sucesivos articulos poniendo mas ejemplos sobre posibles opciones que se me ocurran y que mas concretamente sean muy utiles en un entorno de produccion/oficina. tags: asterisk, ddi, dialplan, netelip, operador ip, pbx, voip, waitexten 1 comment... 20/06/2010 02:36

Curso Asterisk de Iniciacion: Dias 2 y 3


no comments by SirLouen in Introduccion

He dejado pasar sin mayor opcion algunos dias tras el ultimo mensaje. Tenia pendiente la escritura de mis impresiones y como fueron los ultimos dos dias del Curso de Asterisk de Iniciacion. La cuestin reporto grandes y mejores resultados en estos dias ya que tras la instalacion y los primeros pasos en el sistema Asterisk empezamos a realizar ciertos ejercicios con nuestra maquina y nuestro telefono. El da 2 fue ntegramente dedicado a la comprensin del sistema de marcacin, Dial Plan de Asterisk. Tras haber visto, como conectar diferentes dispositivos con la Maquina Asterisk, llegaba el momento de interconectar todo entre si a traves de este mecanismo. El Dial Plan queda reflejado principalmente en el fichero extensions.conf del sistema. A lo largo del dia vimos numerosos ejemplos, entre los que se encontraban, llamadas directas a una extension, mascaras, algunas Aplicaciones, entendimiento del concepto secuencial del sistema, prioridades, etiquetas, etc. Tambien vimos un poco de programacin, que contemplaban alternativas condicionales y bucles principalmente. Todo esto si que me resulto verdaderamente util, ya que al final de dia, tenia bastante claro como realizar la primera accin que tena bastante interes y expectacion sacar del curso: Como configurar una Operadora Automatica (IVR/Autoattendant). Jutamente el

ultimo ejercicio del dia fue configurar una operadora muy sencilla, la cual debia poner un mensaje de Contestador Automatico en caso de estar fuera de la Oficina, luego un menu de marcacion, y la aplicacion de saltos condicionales, y de un pequeo bucle para comprobar que la persona no habia introducido por error la marcacion un numero determinado de veces, antes de colgar la llamada. Todo esto lo vamos a ver en profundidad en otro momento ya que constituye bajo la perspectiva del momento, el pilar principal del sistema. Un comentario extra, justamente ese da aprovechamos para ver el partido de EspaaSuiza, una lastima que perdiramos de 1 gol, contra un equipo tan inferior a nuestra Seleccin! Pero definitivamente esto no hizo que variramos nuestra programacin, de hecho dira que fue el da mas productivo de los tres! (Espero que la Seleccin tambin se aplique el cuento en productividad para el futuro) El tercer dia, originalmente trataria sobre la adaptacion del mundo Analogico a nuestro sistema Asterisk. Para ello nos proveian de una Tarjeta Digium 410, con un modulo FXO y otro FXS, uno para conectar en teoria, a un Gateway con varios puertos FXS que haria las veces de enlace directo con otra centralita Asterisk, y el otro para conectar a un telefono analogico. Primero se vieron multiples conceptos basicos de la Telefonia convencional y luego se tantearon todos los ficheros de configuracion que involucraban esta idea. El sistema Analogico, especialmente a nivel interno Linux-Tarjetas lo maneja Dahdi (se ve que antiguamente se llamaba Zaptel). Aparte Dahdi y las tarjetas Digium ofrecen una fuente de reloj de sincronizacion para ciertas aplicaciones avanzadas, como las Salas de Conferencias (aplicacion MeetMe). En caso que necesitemos una alternativa a Dahdi, se podria plantear todo el sistema a traves de Gateways SIP y configurarlos dentro del sistema como interfaces SIP exactamente igual que cualquier otro dispositivo, como los configurados el primer dia del Curso. Luego todos los detalles analogicos de interconexion con Asterisk, y con el operador o telefonos analogicos, se configurarian aparte en el Gateway, a traves una interfaz web propia del Gateway. Pero en el caso de las tarjetas, aparte, en Linux es necesario cargar los modulos de sistema, y luego en el fichero chan_dahdi.conf la necesidad de indicar montones de parametros que detallan toda la configuracion en referencia a como debe tratar Asterisk a los citados Puertos. Tambien se hizo una buena resea al mundo de los Primarios y los Accesos Basicos. El pequeo detalle negativo, fue el hecho de que los equipos que nos fueron proporcionados y hacian de servidor de Asterisk, no poseian puertos PCI libres (y las tarjetas Digium que nos ofrecieron eran PCI 2.2). Esto impidio que pudieramos probar por nuestra cuenta, si la configuracion expuesta funcionaba correctamente, y haber hecho algunas pruebas de integracion, con lo que habiamos realizado en los dias anteriores. Las pruebas se hicieron con un unico equipo que si poseia el citado puerto, manejado por el profesor. Realmente me hubiera gustado probar todo aquello en aquel momento que estaba en mi salsa con todo montado y sin mucho mas que hacer que eso mismo. Pero en los proximos dias, aprovechare para hacer las primeras pruebas con la tarjeta, y algun equipo que trate de configurar.

Por la tarde, se vieron algunas cuestiones mas avanzadas del sistema, como el uso de Macros, las salas de conferencia, y la gestion de Colas y Agentes. Con esto, ya he podido coger un buen espectro del funcionamiento del sistema en lineas generales. Debo decir que he quedado bastante impresionado con las funcionalidades basicas de Asterisk, mas considerando que para mi condicion en relacion a la informatica, todo el tratamiento del sistema me resulta muy cercano, y mucho menos complejo de lo que esperaba (ya que habia que tocar ficheros de configuracion / programar y comparando con ciertas interfaces graficas que proveen otro tipo de PBX, pense que iba a haber una diferencia ignominiable a nivel de complejidad, aunque ahora veo que nada mas lejos de la realidad, es bastante mas sencillo y versatil. Comparativamente esto es como tener que crear una pagina web, con un asistente de creacin de paginas web, o poder crearla a nivel HTML con codigo. Es cierto que hay que aprenderse con cdigo todos los detallitos que conforman el sistema, pero el poder y las combinaciones y opciones que esta opcion otorga, no tiene fin, ni limite, es posible dar alas a la imaginacin, y todo lo imaginable. se puede hacer realidad. Como valoracion general, debo decir que me ha resultado bastante provechoso el curso de Iniciacion, y de hecho se lo recomendaria a cualquiera. El profesor resulto muy flexible en general, y el nivel dentro de lo posible se intento mantener lo suficientemente alto como para no quedarnos estancados sin avanzar. Por contra, principalmente, que fueron demasiados pocos dias, el precio por dia es un poco elevado, y el nivel de organizacin no fue el deseado. Un curso de 4 dias hubiera estado mucho mejor para cubrir algunos aspectos que se quedaron en el tintero, como la integracin con IAX (el protocolo de intercomunicacin entre centralitas Asterisk, con la idea de unir varias centralitas Asterisk y poder compatir ciertas cuestiones, como los Dial Plan), quiza haber tratado un poco mas el mundo RDSI, y poder haber realizado mas practicas para haber dejado todo claro como el agua. Aparte, tambien tuvimos ciertas dificultades desde el inicio, desde que los sistemas no estaban bien instalados, hasta el tema que comente antes de los puertos PCI, un grandisimo error (mas, para aquellos que ni siquiera adquirieron la tarjeta en propiedad para luego hacer sus practicas en casa, y para los que si lo hicieron, que no tuvimos la oportunidad de catarla). Espero poder avanzar ahora despus de esto mucho mas rpido, y poder proveeros de mucha mas informacin para poder Acelerar la curva del Aprendizaje de Asterisk lo mximo posible.
tags: curso, dialplan, introduccion No comment?

Asterisk 1.8: Usando las nuevas funciones de calendario

Otra de las novedades de Asterisk 1.8 que creo ms se puede llegar a utilizar, es la caracterstica de su integracin con calendarios, ya que sin duda, una de las tareas de soporte ms habituales, es habital que sea el cambiar los horarios de atencin de la centralita, que suele requerir de una intervencin en el dialplan. Gracias a esta funcionalidad, se puede crear un interfaz externo, comodo y visualmente atractivo, desde donde efectuar esta operativa, usando las herramientas habitales de una agenda. As, cualquier usuario podra hacer muchsimas cosas de forma sencilla, como por ejemplo, que el horario de fuera de la oficina, se controle desde un calendario externo (por ejemplo, en una agenda en el correo corporativo, en lotus domino, exchange o gmail), que en funcin de tu calendario se te localice en un nmero o otro, se efectue alguna accin especial cuando estes de vacaciones o reunido (que no se te pasen llamadas o vayan a tu backup), se puedan configurar diferentes horarios de atencin, o incluso, que se localice a un tcnico o otro en funcin del horario o guardias especificas. La flexibilidad y rango de opciones que se alcanza, es como veis, muy grande, sobre todo cuando la mayoria de nosotros lllevamos la agenda ya sincronizada con el mvil, por lo que coseguir cambiar un desvio o otro, puede ser tn facil como actualizar, en el mvil, la entrada de la agenda. Incluso usando twittercal, podriamos desde un simple cliente twitter actualizar nuestra calendario google, y actuar sobre nuestra centralita.

Desde el blog de irontec, ya vimos un imaginativo articulo, hace ya varios meses, en los cuales, a travs de un AGI efectuado en Ruby, podian efectuarse caractersticas parecidas en versiones anteriores de Asterisk, pero en la 1.8, esta funcionalidad ya viene nativa y mucho ms facil de integrar. A travs del fichero calendar.conf, podremos definir el calendario a comprobar en internet (podemos definir todos los calendarios que queramos) y enlazarlo en el dialplan. Veamos un ejemplo de dicho fichero: [calendar_andres] type = ical url = http://www.google.com/calendar/ical/andres.gorostidi%40gmail.com/private00f5583d3d387ca8fe92d4cb2d9d0490/basic.ics user = andres.gorostidi@gmail.com secret = miclavegmailsupersecreta refresh = 15 timeframe = 600 autoreminder = 10 channel = SIP/andres context = notificacion_calendario extension = s waittime = 30 Con esta entrada, definimos los parametros de calendario para un usuario, en este caso, usamos mi cuenta en gmail para el horario de la oficina (lo habitual seria crear un usuario genrico para la oficina).

Como sabemos el formato de la url a usar en el calendar.conf?. Aunque esta algo escondido, no es complicado, la url con el fichero ICS que define las entradas de

calendario (puede usarse formatos estandar iCalendar o CalDAV, adems del propio de Microsoft Exchange Server), la habremos sacado previamente de la configuracin del calendario de google..a este respecto hay que recordar que pueden, sobre la misma cuenta, compaginarse varios calendarios (incluso calendarios publicos tipo festivos nacionales, calendarios escolares, calendarios de partidos de futbol, etc), por lo que podemos escoger que calendario(s) utilizar, incluso configurar varias calendarios para difentes acciones, dentro de la misma cuenta google, y usarlos de forma publica, privada o compartida para diferentes acciones.

Una vez obtenidos los datos de los calendarios a usar en el calendar.conf, y introducidos en el formato adecuado (como hemos visto en el ejemplo al principio del artculo), ya solo nos falta definir, en el dialplan, que comportamiento queremos tener dependiendo de nuestro calendario [incoming] exten => 916719179,1,Answer exten => 916719179,n,GotoIf(${CALENDAR_BUSY(andres)}?cerrado:operadora,s,1) exten => 916719179,n(cerrado),Set(id=${CALENDAR_QUERY(andres,${EPOCH},${EPOCH} )}) exten => 916719179,n,Set(mensajehorario=${CALENDAR_QUERY_RESULT(${id},descriptio n)}) exten => 916719179,n,Playback($[${ISNULL(mensajehorario)} ? mensage_estandar :: ${mensajehorario}]) exten => 916719179,n,Hangup En el dialplan, invocamos a mi calendario especifco (la entrada andres del calendar.conf, consultando si en la hora actual, el calendario est marcado como libre o

ocupado. Si est ocupado, CALENDAR_BUSY devolver 1, y iremos entonces a la etiqueta cerrado, sino, seguiremos el flujo normal hacia la operadora. Incluso podemos aadir complejidad dependiendo de si el dia es festivo, se trata de un evento especial, es la hora de comida, o es horario extralaboral solo necesitamos preguntar por los detalles de la entrada del calendario, usando la funcion CALENDAR_QUERY con los parametros inicial de HoraInicio y HoraFin en formato unix time (seconds from unix epoch) Obtenemos asi la variable ID, que a continuacin, usado con la funcion CALENDAR_QUERY_RESULT nos permitira obtener la descripcin de la entrada (podemos actuar sobre los parametros summary, description, organizer, location, calendar, id, start, end, busystate, attendees...) , en la cual, podriamos haber especificado apoyandonos en el campo description el nombre del fichero de sonido que queremos pasar, por ejemplo. Este diaplan puede ser muy facilmente modificado, para coger, por ejemplo, el nmero de telefono de una persona que este de guardia, de forma que tengamos un calendario con todas las guardias horarias y la llamada se pase a la persona que en determinado momento tuviera tal funcin. Las funciones de calendario nos permiten un mucho ms, podriamos por ejemplo, conseguir que Asterisk nos llamara de forma automtica para recordarnos una cita, haciendo uso de la posibilidad que tiene Asterisk para recoger los eventos que los calendarios disparan, y que previamente en el calendar.conf le hemos dicho cada cuanto consultar (refresh), cuanto tiempo almacenar en la consulta (timeframe) y que antelacin usar en el aviso (autoreminder) [notificacion_calendario] exten => s,1,Answer exten => s,n,Playback(recordatorio) exten => s,n,SayUnixTime(${CALENDAR_EVENT(start)}) exten => s,n,Hangup Pero las funciones de Asterisk no estan encaminadas SOLO a leer los datos del mismo, sino tambin nos permiten escribir entradas en la agenda. Esto nos permite tambien nuevas funciones en el dialplan, ya que podriamos, por ejemplo, almacenar en el calendario todas las llamadas recibidas, y saber quien nos ha llamado, a que hora, y durante cuanto tiempo... [incoming] exten => 6000,1,Set(horainicio=${EPOCH}) exten => 6000,n,Dial(SIP/Andres) exten => h,1,Set(horafinal=${EPOCH}) exten => h,n,Set(CALENDAR_WRITE(calendar_andres,summary,horainicio,horafinal)=Llamad a recibida del numero ${CALLERID(all)},${start},${end}) Espero lo disfruteis, yo ya me voy a empezar a olvidar de los GotoIfTime..
Save this on Delicious

Los comentarios son el alma del blog. No quieres decir nada? 11 Responses to Asterisk 1.8: Usando las nuevas funciones de calendario

Yon guillen Estupendo articulo, justo necesitaba montar un servicio de guardas con un calendario que pudieramos ver los miembros del equipo y modificarlo todos de forma sencilla (incluido jefes) y me viene como anillo al dedo. muchas gracias andres por otra partese te ocurre alguna de esas ideas tuyas para que quedara constancia de la llamada de urgencia ? Lo ideal seria que en calendario se registrara la llamada hecha, que tecnico finalmente la atendio, y un sms de aviso al responsable del servicioes posible hacerlo todo desde dialplan sin que tenga que meterme en agis o programacion compleja? Si puedes darme una idea de como hacerlo te lo agradeceria Gracias 31-oct-2010 11:19:00

Elio Rojano Con la aplicacin CALENDAR_WRITE que lo explica al final del artculo, puedes ver como hacerlo. 31-oct-2010 01:04:50

Andrs Gorostidi Yon, como dice Elio, usa calendar_write, practicamente es copiar antes del hangup del primer ejemplo el cdigo que viene ms tarde al final. . Si lo que te preocupa es lo del SMS, en asterisk tambien hay metodos para enviar de forma nativa mensajes por SMS (y recibir), pero requieren que tu operador de linea te de ese servicio por una linea convencional Si no, hay diferentes proveedores de SMS que puedes contratar, y que te daran el AGI / Script que necesites para enviar ese SMS (me temo que este ultimo caso si que necesitaras un pequeo script/agi al que invocar desde el dialplan, pero normalmente seran unas simples lineas en perl o php que te dara el proveedor de sms). . Tambien te recomiendo que mires el truco que se publica aqui, una idea bastante ingeniosa para, usando el api de google calendar, enviar sms de aviso de forma automtica (y gratuita!) 01-nov-2010 12:12:21

FrankEinstain Hola Andrs, me apunto con Yon y opino que estupendo articulo. Sobre todo me ha sorprendido que se pueda integrar con Domino. Estoy buscando la manera de poderlo integrar en mi empresa (que usa Lotus). Me puedes decir o indicarme alguna direccin, donde pueda ver algn ejemplo de integracin Asterisk-Domino. Muchas gracias.02-nov-2010 08:26:16

Andrs Gorostidi

Domino es mucho mas potente, pero a su vez, requiere de un poco mas curro y conocer la plataforma . El problema es que los ficheros .ICS solo los genera automaticamente el cliente Notes (a travs de las opciones export), pero el servidor Domino no los genera. por tanto no se sirven por web . Sin embargo, una de las grandes ventajas de domino es precisamente la personalizacin y es muy facil hacer un agente en domino usando lotusscript, y que genere el ics, para lograr ese efecto. Usa el fichero que puedes generar con lotus notes como modelo de referencia y veras que el formato es sencillo de obtener. . El agente no es dificil de crear (simplemente avanzar atravs de un vista), lo bueno es que despues de un poco de curro con ese agente podrias si lo quisieras preprocesar informacion, incluso de diferentes fuentes, utilizar logicas adicionales, etc . Tambien puedes hacer uso de vistas con codigo html passtru embebido de esa forma en 5 minutos creas el formato requerido. tienes un ejemplo aqui abajo usando pages, es tan facil como cambiarlo para views -> http://www.dominoguru.com/pages/icalendar_domino-outlook.html 02-nov-2010 11:53:44

Santos Me da un error de escritura en el calendario: calendar_write_exec: Calendar Santos has no write function Hay alguna opcin en Google calendar para habilitarlo o es un error mio en la config? 04-nov-2010 03:20:38

Andrs Gorostidi Pues desgraciadamente, la funcion de calendar_write solo es valida para sistemas CalDAV o Exchange. En formato iCAL esta funcion aun no esta soportadaasi que si quieres escribir en el calendario de google (y no solo leer), hay que usar para esa parte, el API de google. Usa este enlace como referencia-> http://lopezivan.blogspot.com/2007/05/usando-el-api-de-google-calendar.html 04-nov-2010 11:31:10

Elio Rojano El calendario de google tambin se puede cargar como CalDAV. 08-nov-2010 01:59:55

Andrs Gorostidi

efectivamente, no lo sabia.. Thks elio !! Prueba entonces a cambiar y acceder por Caldav y no ical (usa el formato de URL https://www.google.com/calendar/dav/YOUREMAIL@DOMAIN.COM/user). Asi las funciones write deberian tambien funcionar. suerte!!! 08-nov-2010 11:45:27

Alex Celi

Me parece que esto funciona con un tipo de calendario tipo Google Calendar o Exchange. La pregunta del millon es como hacer que esto funcione con una red tipo OpenLDAP o Linux 10-nov-2010 07:53:05

Andrs Gorostidi Alex.. no entiendo muy bien a que te refieres Estamos hablando de estandares, y entre ellos estandares de calendario como el iCAL o el CalDav. Se nombran en el articulo servidores Google o Exchange, por ser de los mas conocidos, pero cualquier servidor (o programa) qe tenga un servicio de calendario/agenda que trabaje con estos estandares, seria valido, obviamente. Por otra parte, me hablas del estandar de directorio (LDAP) que tiene otra funcionalidad totalmente distinta, no entiendo como pretendes usar dicha funcionalidad para un servicio de calendario, cuando lo que nos da es un servicio de nombres y/o autenticacion. Ademas, Asterisk tiene cierta integracion con LDAP, pero para lo que LDAP es, o sea, un servicio de directorio. Esos estandar de directorio, calendario, o lo que sea, pueden por supuesto correr en Linux, Windows o lo que sea 16-nov-2010 10:38:56

Andrs Gorostidi

Comprtelo!
inShare A tus amigos tambin lo agradecern

Lee otros artculos sobre: Asterisk asterisk 1.8

Qu es la telefona IP?
La Telefona IP es una tecnologa que permite integrar en una misma red - basada en protocolo IP - las comunicaciones de voz y datos. Muchas veces se utiliza el trmino de redes convergentes o convergencia IP, aludiendo a un concepto un poco ms amplio de integracin en la misma red de todas las comunicaciones (voz, datos, video, etc.). Esta tecnologa hace ya muchos aos que est en el mercado (desde finales de los 90) pero no ha sido hasta hace poco que se ha generalizado gracias, principalmente, a la

mejora y estandarizacin de los sistemas de control de la calidad de la voz (QoS) y a la universalizacin del servicio Internet. Cuando hablamos de un sistema de telefonia IP estamos hablando de un conjunto de elementos que debidamente integrados permiten suministrar un servicio de telefonia (basado en VoIP) a la empresa. Los elementos bsicos que forman este sistema son: la centralita IP, el Gateway IP y los diferentes telfonos IP. Las principales ventajas de la telefona IP son la simplificacin de la infraestructura de comunicaciones en la empresa, la integracin de las diferentes sedes y trabajadores mviles de la organizacin en un sistema unificado de telefona - con gestin centralizada, llamadas internas gratuitas, plan de numeracin integrado y optimizacin de las lineas de comunicacin - la movilidad y el acceso a funcionalidades avanzadas (buzones de voz, IVR, ACD, CTI, etc.) Ms informacin en la Wikipedia: http://es.wikipedia.org/wiki/Voz_sobre_IP

Curso de Asterisk
sbado, 14 de marzo de 2009
DIAL PLAN & FEATURES Dial Plan & Features Dial Plan: Basic DP simple, DP Interactivo Dial Plan: Variables, Funciones, Condicionales Dial Plan: Voicemail, Macros Asterisk: Features COMANDOS BASICOS ASTERISK

Comandos Asterisk: asterisk r: permite reconectarse al servidor asterisk g: permite iniciar el servicio asterisk restart now: permite reiniciar el servicio de asterisk stop now: permite detener el servicio asterisk exit: Cierra la consola de asterisk DIAL PLAN BASICS El plan de marcacin o Dial Plan, es el corazn de toda configuracin en asterisk, y de esta configuracin depender el performace y eficiencia de nuestra central telefnica. Para poder personalizar la central a gusto se deber comprender plenamente el funcionamiento del plan de marcacin de asterisk Sintaxis: El plan de marcacin se configura en el archivo extensions.conf, este archivo reside usualmente en la carpeta /etc/asterisk/ El dial plan esta compuesto de 04 conceptos principalmente: - Contextos - Extensiones - Prioridades - Aplicaciones CONTEXTOS: El dial plan se divide en secciones llamadas contextos, los contextos son nombres para un grupo de extensiones, las cuales pueden tener diferentes propsitos. Los contextos tambin pueden interactuar entre ellos. Los contextos se denotan escribiendo el nombre del contexto entre corchetes *nombre_de_contexto+. Durante la creacin de una extensin (sip.conf, iax.conf, etc) se define a que contexto pertenece. p.e. context=from-internal Todas las instrucciones por debajo del nombre del contexto son asignadas a ese mismo contexto hasta que un nuevo contexto sea declarado. Al inicio del archivo extensions.conf, existen dos contextos especiales -[General] -[Globals]

La seccin general, contiene los parmetros generales del dial plan. La seccin globals, contiene las variables globales del sistema, las cuales irn siendo utilizadas por los contextos siguientes. EXTENSIONES: Normalmente conocemos con el nombre de extensin, al numero que se le asigna a los terminales telefnicos, sin embargo en asterisk una extensin es mucho mas que un nmero _ telefnico, ya que define una serie de pasos (donde cada paso contiene una aplicacin) que asterisk realizara durante una llamada. La sintaxis usada para declarar una extensin es la palabra exten, seguido de una flecha formada por una signo igual y un signo mayor p.e. exten => Esto va seguido por el numero de la extensin. exten => name,priority,application() Una extensin completa esta compuesta de: El nombre (o numero) de la extensin. La prioridad (cada extensin puede incluir mltiples pasos, el numero del paso es llamado prioridad) La aplicacin (o comando) es el que realiza la accin en la llamada. PRIORIDADES: Cada extensin puede tener multiples pasos, llamados prioridades, cada prioridad es numerada secuencialmente, comenzando con 1, y ejecutando una aplicacin especifica. Existe un tipo de prioridad no numerada que se representa con la letra n y permite evitar problemas generados por la numeracin secuencial. Esta prioridad no numerada significa que cada prioridad es igual a la prioridad anterior +1 Por lo tanto: n=n+1 p.e. exten => 123,1,Answer() exten => 123,n,do something exten => 123,n,do something else exten => 123,n,do one last thing exten => 123,n,Hangup()

PRIORIDADES - ETIQUETAS: Desde asterisk 1.2, es muy comn asignar etiquetas de texto (labels), a las prioridades. Esto es para asegurarnos que podremos referirnos a esa prioridad por un valor distinto a su numero, el cual probablemente no se conozca (prioridad n), y dado que actualmente el uso de prioridades no numeradas es muy usual en el diseo de una dial plan. Para asignar una etiqueta de texto a una prioridad, solo basta con agregarla entre parntesis justo despus del numero de la prioridad. p.e. exten => 123,n(label),application() APLICACIONES: Las aplicaciones son el caballito de batalla del dial plan, cada aplicacin realiza una accin especifica sobre el canal actual, como por ejemplo, tocar una meloda, aceptando entradas de tono, marcar un canal, colgar una llamada, y as sucesivamente. Algunas aplicaciones como Answer() o Hangup(), no requieren mayor informacin para hacer su trabajo, sin embargo existen otras aplicaciones que si requieren de cierta informacin adicional para procesarla, a esta informacin adicional se le conoce como parmetros, y para pasarle los parmetros a la aplicacin deben colocarse entre los parntesis. Ocasionalmente podramos ver el pipe entre los parntesis, y es que este signo es utilizado para separar mas de un parmetro. CONSTRUYENDO UN DIAL PLAN SIMPLE: Answer(), Playback(), Hangup() Vamos a construir un dial plan que consista en que , asterisk contesta la llamada, toca una meloda, y luego cuelga. Para este ejemplo vamos a asumir que ya hemos creado la extensin y que tiene como nombre de contexto from-internal Para la construccin de este dial plan utilizaremos las siguientes aplicaciones: Answer() Playback() Hangup() Answer(), es la aplicacin que se utiliza para que la central conteste una llamada que esta timbrando.

Se puede utilizar al inicio de la configuracin del contexto para una extension, pero en algunas ocasiones no es necesario. Como ya mencionamos, Anwser() no tiene argumentos Playback(), es la aplicacin que se utiliza para reproducir un sonido grabado previamente en un archivo o a travs de un canal. Cuando utilizamos playback, las entradas (inputs) del usuario desde la extension son ignoradas. Para utilizar playback() se debe ingresar el nombre del archivo sin la extension (p.e. .wav o .mp3) como argumento entre los parntesis. Por defecto playback buscara el archivo ingresado como argumento en la ruta /var/libs/asterisk/sounds Si se desea hacer referencia a un archivo ubicado en otra ruta, se deber ingresar la ruta completa entre los parntesis Playback(/home/john/sounds/filename) Lo mas comun es crear una carpeta para estos archivos dentro de la ruta por defecto Playback(custom/filename) Ahora si vamos a crear nuestro dial plan [from-internal] exten => 1234,1,Answer() exten => 1234,n,Playback(hello-world) exten => 1234,n,Hangup() CONSTRUYENDO UN DIAL PLAN INTERACTIVO: Background(), WaitExten(), and Goto() La aplicacin background, es la pieza vital para un dial plan interactivo. El background(), al igual que playback() reproduce una grabacin, pero a diferencia de playback(), esta aplicacin si permite al usuario ingresar entradas (inputs) desde el teclado del telfono, estas entradas interrumpen la reproduccin y se dirige a la extensin correspondiente. El uso mas comn que suele drsele a la aplicacin background, se encuentra en la construccin de mens de voz.

exten => 123,1,Answer() exten => 123,n,Background(main-menu) En el ejemplo anterior por defecto se cortara la llamada, pero si lo que queremos es esperar a que el usuario ingrese o marque algun codigo podemos agregarle la aplicacin waitexten() al final. exten => 123,1,Answer() exten => 123,n,Background(main-menu) exten => 123,n,WaitExten() La aplicacin WaitExten(), le indica al sistema que espere por el ingreso de una extensin, la cual deber estar dentro del contexto. exten => 123,1,Answer() exten => 123,n,Background(main-menu) exten => 123,n,WaitExten() exten => 2,1,Playback(digits/2) exten => 3,1,Playback(digits/3) exten => 4,1,Playback(digits/4) Que ocurre cuando, tenemos un duplicado entre los primeros digitos de las extensiones disponibles: p.e. exten => 123,1,Answer() exten => 123,n,Background(main-menu) exten => 123,n,WaitExten() exten => 1,1,Playback(digits/1) exten => 2,1,Playback(digits/2) exten => 3,1,Playback(digits/3) exten => 4,1,Playback(digits/4) Del ejemplo anterior si llamamos al 123, y luego presionamos la opcin 123, volveremos a ir al men, pero que ocurre si solo presionamos 1. Como se puede comprobar en la practica asterisk esperara unos segundos cuando se encuentra con mas de una alternativa posible. Luego de este tiempo ejecutara la extensin segn los dgitos que fueron ingresados. Finalmente vamos a mencionar que la aplicacin WaitExten() soporta como argumento el tiempo en segundos que esperara para que el usuario ingrese una extensin valida, luego de este tiempo terminara esta aplicacin, y pasara a la siguiente prioridad si existiera.

Ahora vamos a utilizar la aplicacin Goto(). La aplicacin Goto(), es utilizada para enviar una llamada a otra parte del dial plan, la sintaxis de la aplicacin Goto(), requiere los argumentos contexto, extensin y prioridad. exten => 123,n,Goto(context,extension,priority) Background(), WaitExten(), and Goto() [from-internal] exten => 123,1,Answer() exten => 123,n,Background(main-menu) exten => 1,1,Playback(digits/1) exten => 1,n,Goto(incoming,123,1) exten => 2,1,Playback(digits/2) exten => 2,n,Goto(incoming,123,1) MANEJANDO INPUTS Y TIMEOUTS [from-internal] exten => 123,1,Answer() exten => 123,n,Background(enter-ext-of-person) exten => 123,n,WaitExten() exten => 1,1,Playback(digits/1) exten => 1,n,Goto(from-internal,123,1) exten => 2,1,Playback(digits/2) exten => 2,n,Goto(from-internal,123,1) exten => 3,1,Playback(digits/3) exten => 3,n,Goto(from-internal,123,1) exten => i,1,Playback(pbx-invalid) exten => i,n,Goto(from-internal,123,1) exten => t,1,Playback(vm-goodbye) exten => t,n,Hangup() MANEJANDO INPUTS Y TIMEOUTS La opcin i, se ejecuta cuando el usuario ingresa una opcin invalida, y cuando se cumple el tiempo mximo disponible para que el usuario marque una extensin, la llamada ser direccionada automticamente hacia la extensin t (el timeout por defecto es de 10 segundos). Utilizando las opciones i y t, obtenemos un dial plan un poco mas robusto y amigable. La extensin S

Cuando una llamada entra en un contexto sin un destino especifico (por ejemplo una llamada en la lnea FXO), se pasa a la extensin s, S significa inicio o start. La extensin S es muy utilizada para generar mens en la central telefnica. El siguiente ejercicio intentara mostrar el funcionamiento de la extensin s, haciendo uso de la aplicacin Goto(). [menu] exten => _98,1,Goto(from-pstn,s,1) [from-pstn] exten => s,1,Answer() exten => s,n,Playback(hello-world) exten => s,n,Hangup() Habiendo definido esto ahora pasaremos a ver otras aplicaciones muy importantes, como la aplicacin DIAL(), que nos permite comunicar a dos anexos (personas) entre si. Usando la aplicacin Dial() La aplicacin Dial(), es una de las aplicaciones mas importantes con las que cuenta asterisk, tiene la capacidad de conectar dos usuarios uno con el otro. Esto resulta muy til sobre todo cuando los usuarios estn utilizando distintos tipos de medio de comunicacin, por ejemplo. Por ejemplo podemos utilizar la aplicacin Dial() para comunicar a un usuario que llama desde un telfono analgico a travs de la rede de telefona tradicional, con otro usuario que se puede encontrar en cualquier parte del mundo conectado a travs de Internet con su telfono IP. La sintaxis de Dial(), es mas compleja que la sintaxis de la funciones anteriores, y puede tener hasta 4 argumentos, el primero el el destino al cual esta intentando conectarte. Dial(type/identifier, timeout, options, URL) p.e. exten => 204,1,Dial(SIP/201) exten => 202,1,Dial(IAX2/202) Tambin se pueden llamar a un conjunto de extensiones p.e. exten => 111,1,Dial(SIP/202&SIP/203&SIP/204)

Usando la aplicacin Dial() El segundo argumento me permite colocar el tiempo mximo que se ejecutara la aplicacin Dial. exten => 123,1,Dial(Zap/1,10) exten => 123,n,Playback(vm-nobodyavail) exten => 123,n,Hangup() El tercer parmetro puede ser una cadena o carcter, la lista de opciones es bastante larga, y pueden encontrarla en el siguiente hipervnculo: http://www.voip-info.org/wiki/view/Asterisk+cmd+Dial Usando la aplicacin Dial() p.e. exten => 123,1,Dial(Zap/1,10,m) exten => 123,n,Playback(vm-nobodyavail) exten => 123,n,Hangup() El carcter m, permite que el usuario que esta llamando escuche la MOH en lugar del tono de ring, hasta que la llamada sea contestada. Cuando recibimos una llamada podemos derivarla a un men como el que hemos creado, pero a su vez podemos formar un men mas completo con el comando Dial(), tal como se aprecia en el siguiente ejemplo: [from-pstn] exten => 123,1,Answer() exten => 123,n,Background(enter-ext-of-person) exten => 123,n,WaitExten() exten => 1,1,Dial(Zap/1,10) exten => 1,n,Playback(vm-nobodyavail) exten => 1,n,Hangup() eten => 2,1,Dial(SIP/Jane,10) exten => 2,n,Playback(vm-nobodyavail) exten => 2,n,Hangup() exten => i,1,Playback(pbx-invalid) exten => i,n,Goto(from-internal,123,1) exten => t,1,Playback(vm-goodbye) exten => t,n,Hangup() DIAL PLAN: VARIABLES, FUNCIONES, CONDICIONALES

Las variables pueden ser de 03 tipos: Variables Globales Variables de Canal Variables de Entorno Las variables ayudan a reducir o simplificar el contenido y la estructura del dial plan optimizando de esta manera el proceso de lectura de los archivos de configuracin de nuestra centralita. Tambin sirven para agregar lgica a nuestro dial plan. Una variable es como un contenedor que puede mantener una valor durante un periodo. Variables Globales, se aplican a todas las extensiones en todos los contextos, esta variables debern ser declaradas debajo del contexto [globals]. Por ejemplo vamos a guardar el valor SIP/201 en la variable JESUS [globals] JESUS=SIP/201 JESSICA=SIP/202 PABLO=SIP/208 exten => 123,1,Dial(${JESUS}&${JESSICA}) Ciertamente el tema de las variables resulta mas interesante cuando las asignamos a las troncales [globals] TELEFONICA=ZAP/1 1977=ZAP/2 BASE CLARO=ZAP/3 JESUS=SIP/201 JUAN=SIP/202 Este tipo de esquema nos permite elaborar un dial plan en funciona a variables y si se produce alguna modificacin en el esquema, solo bastara con cambiar el valor de la variable y no ser necesario modificar todo nuestro dial plan. Variable de canal, esta variable se asocia solamente con una llamada, y a diferencia de las variables globales, las variables de canal se definen solo para la duracin de la llamada actual, y solo estn disponibles para los canales que participan de esa llamada.

Existen varias variables de canal predefinidas y estn disponibles para ser utilizadas durante la marcacin. p.e. exten => 125,1,Set(MAGICNUMBER=42) Las variables de entorno, son una forma de acceder a las variables del entorno unix desde asterisk, podemos hacer referencia a estas variables a travs de la funciona de marcacin env(), la sintaxis de esta variables es: ${ENV(var)} ; donde var es una variable del entorno de linux o unix a la cual queremos referenciar. Este tipo de variables no son de uso comn en el dial plan pero estn disponibles si fuesen necesarias. Patrones de Marcado y Variable ${EXTEN} Los patrones de marcacin son comodines que nos permiten simplificar un grupo de extensiones, con este tipo de comodines podemos crear reglas que agrupen grandes conjuntos de nmeros en unas cuantas lneas. X : equivale a un digito 0 9 Z : equivale a un digito 1 9 N : equivale a un digito 2 9 [15-7] : equivale a los dgitos 1, 5, 6, 7. . : Este comodn equivale a un o mas dgitos sin importar el valor Patrones de Marcado y Variable ${EXTEN} La variable EXTEN, toma el mismo valor que el numero de la extensin. exten => _XXXX,1,SayDigits(${EXTEN}) A partir de esta variable tambin podemos mutilar el numero marcado, por ejemplo si seguimos la siguiente sintaxis conseguiremos recortar los primeros dgitos del numero. $,EXTEN:x:y- ; X es la posicin donde comenzara el numero resultante y Y es la cantidad de dgitos que sern retornados exten => _XXXX,1,SayDigits(${EXTEN:2}) Patrones de Marcado y Variable ${EXTEN}

Los siguientes ejemplos ayudaran a comprender mejor las opciones: exten => _273443,1,SayDigits(${EXTEN:2}); ${EXTEN:2}=3443 exten => _273443,1,SayDigits(${EXTEN:1}); ${EXTEN:1}=73443 exten => _9388211,1,SayDigits(${EXTEN:3}); ${EXTEN:3}=8211 exten => _9388211,1,SayDigits(${EXTEN:3:2}); ${EXTEN:3:2}=82 exten => _9388211,1,SayDigits(${EXTEN:0:1}); ${EXTEN:0:1}=9 exten => _9388211,1,SayDigits(${EXTEN:0:2}); ${EXTEN:0:2}=93 exten => _9388211,1,SayDigits(${EXTEN:-4:2}); ${EXTEN:0:2}=82

exten => _XXXX,1,SayDigits(${EXTEN:2}), devolver los ltimos 3 dgitos que se hallan marcado Patrones de Marcado y Variable ${EXTEN} Un ejemplo mas practico seria el siguiente: Si queremos que los usuarios marquen el nueve antes del numero que van a llamar como en la mayora de las centrales telefnicas el dial plan seria:

exten => _9.,1,SayDigits(${EXTEN:1}), de esa manera se devolver el numero que se halla marcado pero sin el 9, listo para salir a la red publica de telefona. Patrones de Marcado y Variable ${EXTEN} Habilitando una ruta saliente: OUTBOUNDTRUNK=ZAP/1 [outbound-local] exten => _9NXXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN:1}) exten => _9NXXXXX,n,Congestion() exten => _9NXXXXX,n,Hangup() Habilitando una llamada a Numero Fijo Local sin prefijo 9: OUTBOUNDTRUNK=ZAP/1 [fijo-local] exten => _[2-8]XXXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN}) exten => _[2-8]XXXXXX,n,Congestion() exten => _[2-8]XXXXXX,n,Hangup() Patrones de Marcado y Variable ${EXTEN} Habilitando una ruta saliente a nmeros Fijos LDN: OUTBOUNDTRUNK=ZAP/1 [outbound-local]

exten => _0[4-8]X[2-8]XXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN}) exten => _0[4-8]X[2-8]XXXXX,n,Congestion() exten => _0[4-8]X[2-8]XXXXX,n,Hangup() Habilitando una llamada a Numero LDI: OUTBOUNDTRUNK=ZAP/1 [fijo-local] exten => _00.,1,Dial(${OUTBOUNDTRUNK}/${EXTEN}) exten => _00.,n,Congestion() exten => _00.,n,Hangup() Includes Es posible concatenar los contexto mediante el comando include, de echo lo mas comn es disear distintos contextos para diferentes funciones de la central y luego enlazarlos para formar unos pocos para asignar a los diferentes tipos de extensiones segn los privilegios o caractersticas que les queremos asignar a cada uno. Sintaxis: [contextoA] include => contextB Funciones: Las funciones nos premitiran aumentar el potencial de nuestro dial plan, exiten varias funciones disponibles y trataremos de explicar las mas utilizadas. Sintaxis: FUNCTION_NAME(argument) Al igual que muchas funciones podemos referenciar a la funcion tal como esta escrito en la sintaxis, sin embargo tambien podemos hacer referencia del valor de dicha funcion de la siguiente manera: ${FUNCTION_NAME(argument)} Funciones: Una funcin puede encapsular otra funcin: ${FUNCTION_NAME(${FUNCTION_NAME(argument)})} Ejemplo: exten => 123,1,Set(TEST=example)

exten => 123,n,SayNumber(${LEN(${TEST})}) La funcin Set(), asigna un valor a una variable. La funcin SayNumber(), reproduce el valor de un numero La funcin LEN(), devuelve el valor de la longitud de una cadena de letras. Funciones: Otra funcin muy utilizada es la funcin TIMEOUT(), la cual puede recibir tres tipos de argumentos, solo uno a la vez:

Absolute; asigna el tiempo absoluto mximo de duracin de la llamada Digit; asigna el mximo de tiempo entre dgitos que puede tomarse un usuario. Response; es el tiempo mximo de espera cuando el usuario no ingresa ningn digito.

DIAL PLAN CONDICIONALES La aplicacin Gotoif() La clave para lograr una ramificacin condicional entre los contextos de nuestro dial plan es la funcin gotoif(). Gotoif() evala los argumentos ingresados y reenva al llamante a un destino especifico dependiendo si la evaluacin resulto verdadera o falsa. Sintaxis GotoIf(expression?destination1:destination2) Si la expresin resulta verdadera, entonces la llamada saltara hacia el destino 1 si resulta falsa ira hacia el destino 2. El valor verdadero es representado por el numero 1 y el falso por el numero 0 Los destinos posibles pueden ser los siguientes: 1.- Una prioridad etiquetada dentro de la misma extensin. 2.- Un prioridad etiquetada de otra extensin dentro del mismo contexto. 3.- Una prioridad etiquetada de otra extensin en otro contexto. Cualquiera de los dos destinos puede ser omitido pero nunca se puede omitir los dos destinos

al mismo tiempo. En caso de que la condicional resulte hacia uno de los destinos omitidos simplemente se proseguir hacia la siguiente lnea o prioridad. Ejemplo: exten => 345,1,Set(TEST=1) exten => 345,n,GotoIf($[${TEST} = 1]?uno:dos) exten => 345,n(uno),Saydigits(12) exten => 345,n,Hangup() exten => 345,n(dos),Saydigits(34) exten => 345,n,Hangup()

DIAL PLAN VOICEMAIL Una de las caractersticas mas populares de los telfonos modernos es el sistema de buzn de voz, y naturalmente asterisk tenia que contar con un sistema de voz muy flexible, algunas de las principales caractersticas del buzn de voz que nos ofrece asterisk son las siguientes: Contiene distintos flderes para organizar los mensajes en el buzn. Saludos distintos para los estados Ocupado Saludos por defecto, y personalizados Posibilidad de asociar varios telfonos con un buzn y varios buzones con un telfono Indicador de mensaje de espera, visual con luz intermitente, y audible con tren de tonos Directorio de la compaa, basado en el buzn de voz. El archivo de configuracin se llama voicemail.conf Creando un Buzn: Dentro de cada contexto del correo de voz, definiremos distintos buzones de voz, la sintaxis para definir un buzn de voz es la siguiente: mailbox => password,name[,email[,pager_email[,options]]] Pero que funcin cumple cada uno de estos parmetros? Mailbox: es el numero del buzn de voz, usualmente lleva el mismo numero que la extensin a la que esta asociado. Password: es la contrasea numrica que el propietario del buzn de voz utilizara para ingresar a su buzn. Si el propietario cambia su contrasea el sistema la actualizara en este archivo (voicemail.conf)

Name: Es el nombre del propietario del buzn de voz, el directorio de la compaa utiliza este campo para realizar la bsqueda del usuario. Email: Aqu va la direccin de correo electrnico del propietario del buzn de voz, Asterisk puede enviar mensaje al correo, incluyendo el mismo audio del mensaje. Pager email: direccin de correo del localizador o celular del propietario donde se enviara un mensaje corto. Options: en esta campo pueden ir una lista de opciones que permitirn afinar la configuracin del buzn de voz del propietario del buzn y prevalecen sobre la configuracin global. Hay nueve opciones validas: adjuntar, servermail, tz, saycid, review, operator, callback, dialout, y exitcontext. Estas opciones deber ingresarse respetando el formato opcin=valor y separadas por el signo pipe |, la opcin tz permite definir la zona horaria, a las zonas previamente definidas en la seccin [zonemessages] en el mismo archivo (voicemail.conf), Una definicin tpica para un buzn de voz es la siguiente: 101 => 1234,Joe Public,jpublic@somedomain.com,jpublic@pagergateway.net,tz=central|attach=yes El buzn de voz utiliza la aplicacin voicemail(), esta aplicacin enva al llamante a una especifico buzn de voz para que pueda dejar el mensaje, el buzn de voz debe ser especificado como mailbox@context donde context es el nombre del contexto del correo de voz, opcionalmente se puede agregar las letra b y u, para diferencias los tipos de saludo (ocupado y no disponible). Vamos a poner algunos ejemplos de cmo configurar el buzn de voz en nuestro dial plan exten => 201,1,Dial(${JOHN}) ; esta extensin permite llamar a la extensin de Jhon.

exten => 201,1,Dial(${JOHN},10) exten => 201,n,VoiceMail(101@default,u) ; con esta otra podemos hacer que la extensin de jhon timbre durante 10 segundos y si no contesta derivar la llamada al buzn de jhon, y la u indica que Jhon no esta disponible.

Ahora vamos a combinarlo con la aplicacin gotoif()

exten => 201,1,Dial(${JOHN},10) exten => 201,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => 201,n(unavail),Voicemail(101@default,u) exten => 201,n,Hangup() exten => 201,n(busy),VoiceMail(101@default,b) exten => 201,n,Hangup() Ingresando al buzn de voz: Para acceder al buzn de voz utilizaremos la aplicacin, VoiceMailMain() exten => 700,1,VoiceMailMain() ; esto nos preemitir ingresar al buzn de voz por medio de la extensin 700. Otra manera tambin interesante de ingresar al buzn de voz es la siguiente: exten => _*982XX,1,VoiceMailMain(${EXTEN:3}@default) exten => _*982XX,1,Hangup Aplicacin Directorio: directory() Esta aplicacin puede aceptar hasta 3 argumentos, el primero el es contexto dentro del archivo voicemail.conf, donde buscara a los usuarios, el segundo es el contexto en extensions.conf, desde donde intentara llamar a los usuarios, y el tercero (es opcional), puede ser la letra f, por defecto el directorio realiza la bsqueda por el apellido, pero con la letra f se puede configurar el directorio para que realice la bsqueda por nombre. Por ejemplo: exten => 8,1,Directory(default,from-internal,f) exten => 9,1,Directory(default,from-internal)

DIAL PLAN MACROS Las macros resultan de mucha ayuda a la hora de elaborar el dial plan, ya que nos permiten simplificar aun mas la elaboracin de nuestro dial plan, es como crear nuestras propias funciones personalizadas para el dial plan, a continuacin vamos a utilizar como ejemplo la creacin de una macros para el buzn de voz. Observemos el siguiente dial plan: exten => 201,1,Dial(${JOHN},10) exten => 201,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => 201,n(unavail),Voicemail(101@default,u) exten => 201,n,Hangup()

exten => 201,n(busy),VoiceMail(101@default,b) exten => 201,n,Hangup() En el hemos automatizado la forma como las llamadas ingresaran directamente al buzn de voz dependiendo del estado de la extensin utilizando la variable ${STATUS}, sin embargo as como esta tendramos que agregar estas lneas por cada extensin en la central ya que esta extensin estar siempre ligada hacia el usuario Jhon o sea la extensin 201. Utilizaremos las macros para mostrar cual es la mejor manera de configurar una buzn de voz para varias extensiones. Definiendo la macros La macros se definen de una manera muy similar a los contextos, debemos definir una macros entre corchetes y anteponiendo la palabra macro- antes del nombre de la macro que vamos a crear. Ejemplos: [macro-prueba] [macro-voicemail] De esta manera el sistema podr diferenciar una macro de un contexto normal Definiendo la macros Veamos un ejemplo con el buzn de Jhon pero ahora dentro de una macros [macro-voicemail] exten => s,1,Dial(${JOHN},10) exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => s,n(unavail),Voicemail(101@default,u) exten => s,n,Hangup() exten => s,n(busy),VoiceMail(101@default,b) exten => s,n,Hangup() Uno punto importante es mencionar que las macros solo soportan la extensin S Todo va bien solo que aun seguimos amarrados al buzn de Jhon. Definiendo la macros Sin embargo las macros tienen propiedades importantes a comparacin

de un contexto comn corriente. Y es que permiten trabajar con algunas variables adicionales e incluso soportan el envi de argumentos Incorporando una macros al Dial Plan: exten => 201,1,Macro(voicemail) Las aplicacin macro define variables especiales, para su utilizacin: ${MACRO_CONTEXT}, contiene el contexto original desde donde fue ejecutada la macro ${MACRO_EXTEN}, contiene el valor de la extensin original donde fue ejecutada la macro ${MACRO_PRIORITY}, contiene la prioridad original desde donde fue ejecutada la macro $,ARGn-, contiene el n mismo argumento ingresado a travs de la macro, por ejemplo, el primer argumento ser ${ARG1}, el segundo argumento ser {ARG2} y as sucesivamente. En el siguiente ejemplo trataremos de explicar como se pueden utilizar esta variables especiales: [macro-voicemail] exten => s,1,Dial(${JOHN},10) exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u) exten => s,n,Hangup() exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b) exten => s,n,Hangup() Usando argumentos en las macros Ahora vamos a prepara una macros genrica gracias a los argumentos, observemos el siguiente ejemplo donde por fin separamos la macros del numero de la extensin, para poder utilizarla desde cualquier extensin. [macro-voicemail] exten => s,1,Dial(${ARG1},10) exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u) exten => s,n,Hangup() exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b) exten => s,n,Hangup() De esta manera podemos llamar a la macros desde el dial plan

[macro-voicemail] exten => s,1,Dial(${ARG1},10) exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u) exten => s,n,Hangup() exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b) exten => s,n,Hangup() [from-internal] exten => 101,1, Macro(voicemail,${JOHN}) exten => 102,1,Macro(voicemail,${JANE}) exten => 103,1,Macro(voicemail,${JACK}) Incluso podemos simplificar una vez mas utilizando la variable ${EXTEN} [macro-voicemail] exten => s,1,Dial(SIP/${ARG1},10) exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u) exten => s,n,Hangup() exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b) exten => s,n,Hangup() [from-internal] exten => 1XX,1,Macro(voicemail,${EXTEN}) Solo debemos tomar en cuenta que en esta ocasin estamos amarrados al protocolo SIP, en el ej. Anterior no importaba el tipo de canal utilizado ya que este se declaraba como variables globales. Un ejemplo mas avanzado he interesante de analizar es el siguiente: [macro-voicemail] exten => s,1,Dial(${ARG1},20) exten => s,n,Goto(s-${DIALSTATUS},1) exten => s-NOANSWER,1,Voicemail(${MACRO_EXTEN},u) exten => s-NOANSWER,n,Goto(incoming,s,1) exten => s-BUSY,1,Voicemail(${MACRO_EXTEN},b) exten => s-BUSY,n,Goto(incoming,s,1) exten => _s-.,1,Goto(s-NOANSWER,1) En esta ocasin estamos incluyendo el comando Goto y esto nos puede servir para reenviar la llamada hacia un men por ejemplo donde el usuario llamante tenga mas de una opcin. ASTERISK: FEATURES

Podemos configurar algunas caractersticas adicionales en el archivo features.conf. Las caractersticas principales son las siguientes: Transferencia desatendida (blind transfer) Parqueo de llamadas (parking lot) Grupo para jalar llamadas (pickup group) Sala de conferencias (meetme) Para ello ser necesario que editemos el archivo features.conf ubicado en la carpeta de asterisk. TRANSFERENCIAS DESATENDIDA Normalmente por defecto la transferencia desatendida se realiza presionado el boton # Este tipo de transferencia consiste en derivar la llamada hacia otro anexo sin habernos cerciorado antes si la persona en la extensin destino se encuentra disponible para recibir la llamada. Vamos a editar el archivo de la ruta /etc/asterisk/features.conf Donde buscaremos el parmetro blind transfer y cambiaremos el varo # por ##, con esto conseguiremos evitar problemas con las llamadas hacia nmeros que comiencen con la tecla # como los mviles RPM por ejemplo. El siguiente grafico ilustrara mejor el proceso de comunicacin

Realizar una transferencia atendida, consiste en llamar al destino para confirmar la transferencia, antes de realizarla. Este tipo de transferencia suele ser necesario para trabajadores que no acostumbran contestar ni llamar directamente de su extensin, tales como funcionarios, gerentes, ejecutivos, etc. El siguiente grafico nos ilustrara el proceso de comunicacin.

Se puede habilitar una combinacin para la transferencia atendida, por ejemplo *2 para simular la tecla flash

PARQUEO DE LLAMADAS En algunas ocasiones durante una conversacin telefnica es necesario movilizarnos ( para ir a conseguir un archivo, documento, o realizar alguna consulta), pero lamentablemente no es posible ni practico que todos los usuario cuenten con un anexo inalmbrico, en estos casos es ideal contar con la funcin de parqueo de llamadas. Esta funcin consiste en aparcar una llamada en una extensin virtual dentro de nuestra central telefnica, de esta manera podremos recuperar esa llamada simplemente llamando a la extensin virtual creada en el momento que aparcamos la llamada

Esta funcin se habilita en la seccin [general] Y cuenta con los siguientes parmetros: Parkext => 700 donde 700 es el numero de la extensin de entrada al estacionamiento Parkpos => 701-720, aqu definimos el rango de posiciones apra nuestro estacionamiento Context => parkedcalls, aqu definimos el nombre del contexto en para nuestro

estacionamiento, no olvidar que este contexto debe estar incluido (include) en el contexto de las extensiones que queramos que puedan recuperar llamadas desde el estacionamiento. Parkingtime => 180, este ser el tiempo mximo en segundos que una llamada se mantendr en el estacionamiento. PICKUP GROUP Un Pick up group es un grupo conformado por extensiones con autorizacin para jalarse las llamadas, es decir; estas extensiones podrn contestar llamadas dirigidas hacia cualquier anexo de su grupo, pero marcando previamente un cdigo. Por ejemplo si tenemos dos extensiones en un mismo grupo, y llaman a una de ellas pero justo no se encuentra la persona en su extensin, entonces otra persona podr contestar la llamadas desde su extensin (siempre que este dentro del mismo pickup group) con solo presionar: *8

Esta opcin tambin se encuentra en la seccin general y podemos definir o modificar el cdigo por defecto *8 en el parmetro: Pickupexten = *8 Pero ser necesario tambin que asignemos los grupos a cada extensin en el archivo sip.conf. El grupo puede asignarse mediante los parmetros: Callgroup=1, donde 1 es el nmero del grupo de llamada Pickupgroup=1, donde 1 es el nmero del grupo para pickup Publicado por William Valverde en 21:09 Etiquetas: Basic DP simple, Condicionales, Dial Plan, DP Interactivo, Funciones, Macros, Variables, Voicemail