Es la sigla para “Private Branch eXchange”. Es el sistema que

Anuncio
¿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.
Descargar