¿Qué es un PBX? Es la sigla para “Private Branch eXchange”. Es el sistema que conecta llamadas dentro de la misma compañía. Comúnmente puede tener desde dos a diez mil extensiones y una conexión al sistema telefónico tradicional (PSTN) para llamadas hacia y desde el exterior de la compañía. Canal: Es una conexion que conduce una llamada entrante o saliente en el sistema asterisk. La conexion puede venir o salir hacia telefonia tradicional analogica o digital, o VoIP. Dialplan: Se trata de la configuracion de la central de asterisk que indica el itinerario que sigue una llamada desde que entra o sale del sistema hasta que llega a su punto final. Se trata en lineas generales del comportamiento logico de la central. Extension: En telefonia tradicional, las extensiones se asocian con telefonos, interfaces o menues. En asterisk, una extension es una lista de comandos a ejecutar. Las extensiones se acceden cuando: – Se recibe una llamada entrante por un canal dado. – El usuario que ha llamado marca la extension – Se ejecuta un salto de extensiones desde el dialplan de asterisk. Contexto: El dialplan o logica de comportamiento de asterisk se divide en uno o varios contextos. Un contexto es una coleccion de extensiones. Los contextos existen para poder diferenciar el lugar donde se encuentra una llamada. Aplicacion: Asterisk ejecuta secuencialmente los comandos asociados a cada extension. Esos comandos son realmente aplicaciones que controlan el comportamiento de la llamada y del sistema en si. Ejemplos: – Hangup: Colgar la llamada – Dial: Realiza una llamada saliente – Playback: Reproduce un archivo de sonido Mas adelante hablaremos mas a fondo de aplicaciones. Voicemail Es la capacidad de dejar mensajes de voz para ser recogidos mas tarde en caso de que el usuario a quien se llama no este disponible. voicemail.conf [buzon] 101 => 1234,Cristhian,cristhian@codigolibre.org 102 => 5678,Elvyn,elvyn@codigolibre.org Asterisk CommandLine Interface Para acceder a asterisk commandline interface(CLI) desde al shell ejecute el comando asterisk pasandole las siguiente opciones r que provee una conexión a la consola de asterisk si el proseso de asterisk ya esta corriendo te provee una interface para controlar la consola de asterisk. [root@srvasterisk ~]# asterisk rvv srvasterisk*CLI> la opcion v proporciona mas informacion de asterisk entre mas v agregamos mas informacion nos mostrara. ! Es para poder ejecutar comandos de el shell sobre el CLI de asterisk. srvasterisk*CLI> !ifconfig eth0 dialplan add extension contiene unos cuantos subcomandos que le permite agregar algunas funcionalidades a tu PBX sin editar directamente los archivos de configuracion. srvasterisk*CLI> dialplan add extension 112,1,Dial,SIP/112/|20|Tt into phone dialplan show muestra el dialplan para un contexto en especifico. srvasterisk*CLI> dialplan show phone dialplan add include incluye un contexto en otro contexto. srvasterisk*CLI> dialplan add include salida into entrada dialplan reload recarga solo el archivo extensions.conf. srvasterisk*CLI> dialplan reload dialplan remove extension remueve una extension. srvasterisk*CLI> dialplan remove extension 101@phone Whole extension 101@phone removed abort shutdown Cancela un shutdown corriendo srvasterisk*CLI> abort shutdown agent logoff configura una agente offline srvasterisk*CLI> agent logoff sip/112 agent show muestra los agentes configurados. srvasterisk*CLI> agent show agent show online muestra los agentes online srvasterisk*CLI> agent show online cdr mysql status muestra el status de la conexion de cdr_mysql srvasterisk*CLI> cdr mysql status cdr status muestra el status de los CDR. srvasterisk*CLI> cdr status console active configura el display en la console activa srvasterisk*CLI> console active console answer responde a una entrada de una llama en la console. srvasterisk*CLI> console answer core show applications muestra las aplicaciones registradas para el dialplan. srvasterisk*CLI> core show applications core show application muestra una descripcion de la aplicacion. srvasterisk*CLI> core show application dial core show channels muestra la informacion en los canales. srvasterisk*CLI> core show channels core show channeltypes muestra la informacion de tipo de canal. srvasterisk*CLI> core show channeltypes core show codecs muestra las lista de todos los codecs. srvasterisk*CLI> core show codecs core show codec muestra un codec en especifico. srvasterisk*CLI> core show codec 2 features show muestra los features configurados. srvasterisk*CLI> features show http show status muestra el status del server HTTP srvasterisk*CLI> http show status iax2 reload recarga la configuracion del iax2 file. srvasterisk*CLI> iax2 reload iax2 set debug habilita el debug para iax2. srvasterisk*CLI> iax2 set debug iax2 set debug off deshabilita el debug para iax2. srvasterisk*CLI> iax2 set debug off iax set debug jb habilita el debug para el jitterbuffer srvasterisk*CLI> iax2 set debug jb iax2 set debug jb off deshabilita el debug para el jitterbuffer. srvasterisk*CLI> iax2 set debug jb off iax2 set debug trunk habilita el debug para el troncal. srvasterisk*CLI> iax2 set debug trunk iax2 set debug trunk off deshabilita el debug para el troncal. srvasterisk*CLI> iax2 set debug trunk off iax2 show cache muestra el cache del dialplan. srvasterisk*CLI> iax2 show cache iax2 show channels muestra todos los canales activos. srvasterisk*CLI> iax2 show channels iax2 show firmware muestra el firmware disponible. srvasterisk*CLI> iax2 show firmware iax2 show netstats muestra los canales activos de iax2 netstats. srvasterisk*CLI> iax2 show netstats iax2 show peers muestra todos los peers definidos en iax2.conf. srvasterisk*CLI> iax2 show peers iax2 show peer muestra un peer en especifico. srvasterisk*CLI> iax2 show peer srvasterisk iax2 show provisioning muestra iax provisioning srvasterisk*CLI> iax2 show provisioning iax2 show registry muestra el status de los registros. srvasterisk*CLI> iax2 show registry iax2 show stats muestra las estadisticas. srvasterisk*CLI> iax2 show stats iax2 show users muestra informacion sobre los usuarios. srvasterisk*CLI> iax2 show users module load carga un modulo para asterisk. srvasterisk*CLI> module load cdr_addon_mysql.so module unload descarga un modulo para asterisk. srvasterisk*CLI> module unload cdr_addon_mysql.so module reload recarga un modulo para asterisk. srvasterisk*CLI> module reload cdr_csv.so module show muestra todos lo modulos que contiene asterisk. srvasterisk*CLI> show modules sip reload recarga la configuracion del archivo sip.conf srvasterisk*CLI> sip reload sip set debug ajusta el debug para el canal sip. srvasterisk*CLI> sip set debug sip set debug off dehsabilita el debug para el canal sip. srvasterisk*CLI> sip set debug off sip set debug peer configura el debug para un peer. srvasterisk*CLI> sip set debug peer 101 sip show channels muestra todo los canales activos. srvasterisk*CLI> sip show channels sip show peers muestra todo los peers agregados en el sip.conf. srvasterisk*CLI> sip show peers sip show registry muestra el status de los registros. srvasterisk*CLI> sip show registry sip show settings muestra la configuracion global de sip. srvasterisk*CLI> sip show settings sip show subscriptions muestra la cantidad de subscriptions. srvasterisk*CLI> sip show subscriptions sip show users muestra todo los usuarios de sip srvasterisk*CLI> sip show users voicemail show users muestra la cantidad de usuarios con voicemail srvasterisk*CLI> voicemail show users voicemail show zone muestra la zona para el formato del mensaje. srvasterisk*CLI> voicemail show zones dahdi destroy channel destruye un canal. srvasterisk*CLI> dahdi destroy channel 1 dahdi restart completamente reinicia el todos los canales. srvasterisk*CLI> dahdi restart dahdi show cadences muestra los cadences. srvasterisk*CLI> dahdi show cadences dahdi show channels muestra todos los canales activos. srvasterisk*CLI> dahdi show channels dahdi show status muestra el status de la tarjeta. srvasterisk*CLI> dahdi show status restart gracefully reinicia asterisk con cortesia. srvasterisk*CLI> restart gracefully srvasterisk*CLI> restart now reinicia inmediatamente a asterisk. ackangel*CLI> restart now restart when convenient reinicia asterisk cuando se limpien el volumen de llamadas. srvasterisk*CLI> restart when convenient parkedcalls show muestra todas las llamdas parqueadas. srvasterisk*CLI> parkedcalls show moh reload reinicia music hold. srvasterisk*CLI> moh reload moh show classes muestra el listado de MOH Classes. srvasterisk*CLI> moh show classes moh show files muestra el listado de los archivos de music hold. srvasterisk*CLI> moh show files. 1. a. b. c. d. e. f. Repaso asterisk II extensions.conf Ejemplo de una entradas invalidas y timeouts Algunas variables definidas automáticamente por asterisk Aplicación GotoIf() Aplicación GotoifTime() Macros y Plantillas Sip (Sip Templates) MixMonitor 2. 3. 4. 5. 6. 7. 8. 9. 10. Asterisk manager interface (AMI) Asterisk gateway interface (AGI) Asterisk extension language (AEL) Integracion con festival Seguridad en asterisk Asterisk real time (estatico) Call detail record (CDR) en mysql Asterisk disa Asterisk IVR en AEL Asterisk Realtime Architecture (ARA) En capítulos anteriores observamos que asterisk carga la configuración desde varios archivos de el directorio /etc/asterisk/. A pesar de la facilidad que nos proporciona por la simplicidad de los archivos en texto simple, esto presenta muchas desventajas: Cuando creamos grande volúmenes de usuarios Tener que recargar el sistema cada vez que realizamos cambios Dificultad al momento de integrar interfaces de aprovisionamiento Dificultar en la integración con las bases de datos mas comunes del mercado. Asterisk Gateway Interfaces (AGI) AGI (Asterisk Gateway Interface) Es una interfaz que permite extender la funcionalidad de asterisk mediante el uso de lenguajes de programación tales como PHP o PERL, Bash, Java, C, C++, entre otros. El AGI sirve de enlace entre las aplicaciones externas y el núcleo de Asterisk. cuando ejecutamos una aplicación, escrita en PHP por ejemplo, el resultado de la misma tiene como destino la salida estándar (stdout) y/o la salida de error estándar (stderr), el AGI toma ese resultado y lo pasa a Asterisk para que este actúe en consecuencia. El diagrama seria: Servidor PBX Asterisk <------- ejecuta la aplicación -------> AGI <------- salida o entrada estándar -------> Aplicación o Script en Bash, PHP, ETC La carpeta /var/lib/asterisk/agi-bin/ Por defecto si no especificamos la ruta absoluta, asterisk busca los archivo en el directorio agi-bin/ Asterisk Extension Language (AEL) AEL: Es un lenguaje especializado destinado únicamente para la escritura de los dial plan de asterisk. La versión actual fue escrito por Steve Murphy. AEL es en realidad la fusión de cuatro sintaxis: Es la mas obvia es la misma sintaxis AEL la sintaxis de expresión, que normalmente es manejado por el motor de la extensión asterisk, como expresión encerrada entre $[.] la sintaxis de referencia variable, ${..} la sintaxis del lenguaje de extensión, es lo que vemos en el archivo extensions.conf Los Macros Son un tipo de contexto especial identificado por un nombre definido por nosotros el cual tiene como prefijo la palabra macro, esto son patrones reutilizables de ejecución, podemos comprarlo con procedimientos en un lenguaje de programación. Un ej. de macro es std-exten macro std-exten( ext , dev ) { Dial(${dev}/${ext},20); switch(${DIALSTATUS) { case BUSY: Voicemail(${ext},b); break; default: Voicemail(${ext},u); } catch a { VoiceMailMain(${ext}); return; } Para crear las extensiones 6001,6002,6003 utilizando el macro std-exten dentro del contexto ejemplo, no te el signo de & context ejemplo { 6001 => &std-exten(6001, "Sip"); 6002 => &std-exten(6002, "IAX2"); 6003 => &std-exten(${EXTEN}, "Sip"); } Sintaxis general if(${x}=1) { if(${x}=1) NoOp(hello!); { goto s,3; NoOp(hello!); } else { goto s,3; NoOp(Goodbye!); } goto s,12; else Obtenemos el mismo } { NoOp(Goodbye!); resultado con: goto s,12; } if (${x}=1) { if(${x}=1) { NoOp(hello!); goto s,3; } else { NoOp(Goodbye!); goto s,12; } NoOp(hello!); goto s,3; } else { NoOp(Goodbye!); goto s,12; } Ejemplo en AEL Usuarios 1234 en el contexto estudiantes context prueba { context default { 1234 => { 1235 => Playback(tt-monkeys); Dial(SIP/1234,45); 1236 => { switch (${DIALSTATUS}) { NoOp(one); case BUSY: NoOp(two); Voicemail(b200); NoOp(three); break; }; case NOANSWER: _124X => NoOp(it's a pattern!); Voicemail(u200); } break; default: Noop(Esto no tenia que pasar corgamos); Hangup; } } } context default { context default { includes { includes { local; local; longdistance; longdistance|16:00-23:59|mon-fri|*|*; international; international; } } } } Configurando Call Detail Records (CDR) Call Detail Records El Asterisk como en otras plataformas de telefonía, permite la contabilidad de las llamadas telefónicas. Existen diversos programas en el mercado que importan la contabilidad de llamadas generados por las centrales telefónicas y tratan estos con fines de correlacionarlos con la cuenta telefónica, controles internos y estadísticas entre otros cosas. Estructura del CDR El Asterisk genera los informes de contabilidad de llamadas, también conocidos como CDR (Call Detail Records, o, registro detallado de llamadas), para cada llamada. Los registros son almacenados en un archivo de texto separado por comas, también conocido como CSV (comma separated value), en el directorio /var/log/asterisk/cdr-csv. departamento por ejemplo: ventas, producción, asistencia técnica. Ejemplo: (sip.conf) [8576] amaflags=default accountcode=Soporte type=friend username=8576 13.5 Cambiando el formato del CDR Usted puede cambiar el formato de lo CDR, editando el archivo cdr_custom.conf. Mappings for custom config file [mappings] Master.csv => "${CDR(clid)}","${CDR(src)}","${CDR(dst)}","${CDR(dcontext)}","${CDR(channel)}","${CDR(dstchannel)}","${CDR(lastapp)}","${CDR(lastdata)}","$ {CDR(start)}","$ {CDR(answer)}","${CDR(end)}","${CDR(duration)}","${CDR(billsec)}","${CDR(disposition)}","${CDR(amaflags)}","${CDR(accountcode)}","$ {CDR(uniqueid)}","${CDR(userfield)}" Los principales campos CDR son: CDR Descripción Tipo de campo Longitud del campo accountcode Número de la cuenta usado Varchar 20 src Identificador de origen (Quien realiza la llamada) varchar 80 dst Identificador de destino (Destino de la llamada) varchar 80 dcontext Contexto de destino varchar 80 clid Texto de identificador de llamada varchar 80 channel Canal usado varchar 80 dstchannel Canal de destino varchar 80 lastapp Última aplicación varchar 80 lastdata Últimos parámetros de la aplicación varchar 80 start Tiempo total desde que marcado la llamada, en segundos date/time 0000-00-00 00:00:00 answer Fecha y hora del momento que la llamada fue respondida date/time Date/time 0000-00-00 00:00:00 end Fecha y hora en que finaliza la llamada date/time Date/tiime 0000-00-00 00:00:00 billsec Tiempo total desde que la llamada fue respondida y finaliza (Tiempo contabilizado) Int 20 disposition Lo que sucedió con la llamada: ANSWERED (atendida), NO ANSWER (no atendida), BUSY (ocupada), FAILED (falló) Int 20 amaflags Indicador, DOCUMENTATION (documentar), BILLING (Contabilizar), OMMIT (omitir), IGNORE (ignorar). Int 11 userfield Campo definido por el usuario varchar 255 Asterisk manager interface (AMI) AMI (Asterisk Manager Interface o Interfase de Administración Asterisk) es una interfaz que permite que una aplicación externa tome el control del PBX Asterisk y ejecute ciertas tareas. Esta característica es la que emplean paquetes como Trixbox o Elastix para desarrollar sus plataformas basadas en una Web/GUI que facilita todas las operaciones de configuración, operación y monitoreo de nuestro PBX. Qué es AMI La Interfase de Administración de Asterisk, cuando se encuentra habilitada, abre un socket TCP/IP (utiliza como puerto por defecto el 5038), AMI o Asterisk Manager Interface permite la conexión de un cliente a una instancia de Asterisk para ejecutar comandos o leer eventos sobre TCP/IP . Para poder utilizar esta característica es necesario establecer una sesión de administrador (Manager Session) y autenticarse como tal. El archivo manager.conf: Creamos los usuarios que tendrán permiso para acceder mediantes una sesión AMI a la consola del asterisk Los Eventos y Acciones (facilidades) en AMI Acciones. Asterisk Manager Interface provee dos facilidades principales de comunicación, Eventos y Los Eventos son invocados por varias partes de Asterisk, pueden ser drivers de canal, aplicaciones, recursos o cualquier otro componente conectado directamente al core de Asterisk. El propósito de un evento es permitir a un sistema externo, obtener información de Asterisk a partir de la recolección, análisis y correlación de dichos eventos, y la inicialización de acciones de acuerdo con la información obtenida. Las Acciones proveen un método que permite a un sistema externo, enviar comandos operacionales a Asterisk pidiéndole que desempeñe una tarea específica. Mientras una acción puede resultar en efectos operacionales verdaderos, tales como originar una llamada, también sucede que nuevos eventos empiezan a ser enviados por Asterisk Manager con nueva información.