Está en la página 1de 70

Buzones de voz, macros y uso de

variables globales y de contexto


Telecomunicaciones II
Sesión 03
¿Como trabaja Asterisk?
Objetivos
• Repasar como trabaja Asterisk
• Conocer como trabaja las variables en Asterisk
• Conocer los comando avanzados de Asterisk
• Conocer como trabajan las macros en Asterisk
Como Trabaja Asterisk?
Envía usuario [usuario01]
y contraseña type=friend
callerid=“Juan Perez" <1000>
host=dynamic
secret=1234

• El usuario se registra al Srv. Asterisk, enviando usuario y contraseña.


• El servidor valida al usuario, en el archivo sip.conf
• Si es correcto el usuario se registrara en asterisk y se puede
visualizar a través del comando sip show peers
Como Trabaja Asterisk?
Envía marca el [usuario01]
numero 105 type=friend
callerid=“Juan Perez" <1000>
host=dynamic
secret=1234
[Telef-Internos]
context=Telef-Internos
exten => 105,1,Answer
exten => 105,2,dial(sip/usuario02,45)
exten => 105,3,Hangup

• El usuario marca el numero 105


• Asterisk, primero busca el perfil del usuario y busca el valor del parámetro
context y lo relaciona con el contexto de extensions.conf
• Dentro del contexto busca el anexo marcado (105)
• Ejecuta en forma secuencia basado en la prioridad
• Al encontrar la aplicación dial, busca el canal SIP y dentro del canal busca
al usuario, luego direcciona la llamada a la IP del usuario registrado
Manejo de Variables
• En el dialplan de Asterisk existen variables, que pueden ser
modificadas por el propio Asterisk en su ejecución lógica o por
comandos expresos (aplicaciones) del dialplan.
• Las variables reducen la escritura, agregan claridad al
dialplan y le aportan lógica.
• Los tipos de variables son:
– Globales: declaradas en extensions.conf (o por comando).
– Canal: asociadas con un canal particular.
– Entorno: variables de entorno (UNIX Like).
• La sintaxis de una variable es:
${variable}
Manejo de Variables
• Asignación de variables:
– Set(Variable=valor)
– Global(Variable=valor)
• Manejo de cadenas:
– Subcadenas: ${Variable : offset : longitud }
• Devuelve la subcadena de variable que comienza en offset y con la
longitud especificada.
• Ejemplos:
${123456789:2:3} devuelve 345
– Longitud: ${LEN(Variable)}
– Concatenación: ${Variable1}${Variable2}
Manejo de Variables Globales
• Permite que se pueda hacer referencia a ellas en todos los
contextos, en todas las extensiones, a diferencia de las
variables convencionales que sólo tienen validez en el canal
actual.
• Es útil para tener claridad manejabilidad en el dialplan.
• Se pueden definir en el contexto [globals] al inicio de
extensions.conf
– [globals]
– JUAN=Sip/juan
– PEDRO=Iax2/4010
Uso de Variables en el Dial Plan
[globals]
JUAN=Sip/juan ; define la variable JUAN
PEDRO=Iax2/4010
[interno]
exten => 4000,1,Answer( )
exten => 4000,2,Background(enter-ext-of-person)
exten => 4001,1,Dial(${JUAN},10) ; hace referencia a la variable
JUAN
exten => 4001,2,Playback(vm-nobodyavail)
exten => 4001,3,Hangup()
exten => 4001,102,Playback(tt-allbusy)
exten => 4001,103,Hangup()
Uso de Variables en el Dial Plan
exten => 4002,1,Dial(${PEDRO},10)
exten => 4002,2,Playback(vm-nobodyavail)
exten => 4002,3,Hangup()
exten => 4002,102,Playback(tt-allbusy)
exten => 4002,103,Hangup()
exten => i,1,Playback(pbx-invalid)
exten => i,2,Goto(4000,1)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup()
Variables Predefinidas
• Listado de variables más importantes:
– ${CALLERID}: caller ID actual, nombre y número.
– ${CONTEXT}: contexto actual.
– ${EXTEN}: extensión actual.
– ${CHANNEL}: canal actual.
– ${DIALSTATUS}: estado de la llamada: unavailable, congestion, busy,
noanswer, answer, cancel, hangup.
– ${DATETIME}: hora actual.
• Un comando útil para ver el contenido es NoOp:
– NoOp ( ${VARIABLE} )
• Mostrará en el CLI el valor.
Variable ${EXTEN}
• Permite saber cuál es la extensión que fue
marcada.
• Se utiliza comunmente para eliminar dígitos
marcados: ${EXTEN:x}
Si x es positivo, quita los primeros x dígitos
marcados
exten => _XXX,1,SayDigits(${EXTEN:1})
Si x es negativo, devuelve los últimos x dígitos
marcados
exten => _XXX,1,SayDigits(${EXTEN:-1})
Coincidencia de Patrones
• Permite definir una sola extensión que permita
lograr igualar una serie de posibles valores.
• Pueden ser muy específicos o muy generales:
– Todos los números locales
– Todos los números internacionales.
– Todos los números celulares.
– Extensiones en un rango: 300-399
• Se utilizan principalmente para llamadas salientes.
• Comienzan con el signo _
• Le dicen a Asterisk que haga match con un patrón y
no con un número de extensión.
Coincidencia de Patrones (Pruebelos)
– X. Hace match con cualquier dígito de 0 a 9.
– Z Hace match con cualquier dígito de 1 a 9.
– N Hace match con cualquier dígito del 2 al 9.
– _[15-7] Hace match con el rango de dígitos especificados, en este ejemplo
matchea los números 1,5,6,7.
– _[01] 0 o 1
– _[3-7] 3,4,5,6 o 7
– _[237-9] Cual sera??
– Como se puede restringir a los numeros PORTA? A los MOVISTAR?
• exten => _NXX,1,Playback(auth-thankyou)
• Si Asterisk encuentra más de 1 patrón para una extensión marcada, se usa la más
específica:
– exten => _555XXXX,1,Playback(digits/1)
– exten => _55512XX,1,Playback(digits/2)
Aplicación a la salidas de Troncales
• Se generan contextos especificos para llamadas
locales a la PSTN para regular y controlar quiénes
tienen permiso de hacer llamadas y qué tipo de
llamadas pueden hacer:
[globals]
JUAN=Sip/juan
PEDRO=Iax2/4010
TRUNKDESALIDA=Zap/1Dahdi/1
[llamadas-locales]
exten => _9NXXXXXX,1,Dial(${TRUNKDESALIDA}/${EXTEN}:1)
exten => _9NXXXXXX,2,Congestion()
exten => _9NXXXXXX,102,Congestion()
[llamadas-larga-distancia]
exten => _901XXXXXXXXXX,1,Dial(${TRUNKDESALIDA}/${EXTEN}:1)
exten => _901XXXXXXXXXX,2,Congestion()
exten => _901XXXXXXXXXX,102,Congestion()
Include
• Puede utilizarse un contexto dentro de otro contexto a través
de la directiva include
• Permite habilitar derechos de acceso a las diferentes
secciones del dialplan.
• Por ejemplo, que los dispositivo del contexto [internos]
puedan hacer llamadas por la red PSTN
include => context
• Primero trata de encontrar las extensiones en el contexto
actual.
• Si no la encuentra, trata de encontrarla en el primer contexto
incluido, y después en el segundo y así sucesivamente.
Agregando al Plan de Marcado
[internos]
include => llamadas-locales
include => llamadas-larga-distancia
Uso de Variables y Expresiones
• Las expresiones son una combinación de variables,
operadores y valores que arrojan un resultado.
Sintaxis:
$[expr1 operador expr2]
• Operadores lógicos: |(or) , &(AND)
• Operadores de comparación: =, !=, <, >, <=, >=
• Operadores aritméticos: +, -, *, /, %
• [...] , Ejemplo:
exten => 4003,1,Set(COUNT=3)
exten => 4003,2,Set(NEWCOUNT=$[${COUNT} + 1])
exten => 4003,3,SayNumber(${NEWCOUNT})
Condicionales
• Permite tomar desiciones dentro del dialplan.
• Aplicación GotoIf()
– GotoIf(expresion1?destino1:destino2)
• Si la expresión evaluada es verdadera, la llamada es enviada a
destino1, de lo contrario es enviada a destino2.
• Una cadena vacía y el número 0 son evaluados con falso,
cualquier otro valor es verdadero.
• Cualquiera de los destinos puede ser omitido, pero debe estar
alguno de los 2.
• Si el destino omitido es el camino que debe seguir la llamada,
el flujo que se sigue es la siguiente prioridad dentro de la
extensión actual.
Uso de Condicionales
exten => 104,1,Set(TEST=1)
exten => 104,2,GotoIf($[${TEST} = 1]?104,20)
exten => 104,10,Playback(weasels-eaten-phonesys)
exten => 104,20,Playback(office-iguanas)

exten => 105,1,Set(COUNT=10)


exten => 105,2,GotoIf($[${COUNT} > 0 ]?:10)
exten => 105,3,SayNumber(${COUNT})
exten => 105,4,Set(COUNT=${COUNT} - 1)
exten => 105,5,Goto(2)
exten => 105,10,Hangup()
Uso de Condicionales

exten => 106,1,GotoIf($[${CALLERIDNUM} =


8842374]?20:10)
exten => 106,10,Dial(Sip/Juan)
exten => 106,20,Playback(abandon-all-hope)
exten => 106,21,Hangup()
While y EndWhile
• Vamos a crear un Loop que se ejecute 3 veces
de manera tradicional antes de introducir el
While
exten => s,1,NoOp(El Loop tradicional)
exten => s,n,Set(COUNT =1)
exten => s,n,(start_loop),SayDigits(${COUNT})
exten => s,n,Set(COUNT=$[${COUNT}+1])
exten => s,n,GotoIf($[${COUNT}>3]?:start_loop)
exten => s,n,Playback(vm-goodbye)
While() y EndWhile()
exten => s,1,NoOp(El Loop con While)
exten => s,n,Set(COUNT =1)
exten => s,n,While($[${COUNT}<4])
exten => s,n,SayDigits(${COUNT})
exten => s,n,Set(COUNT=$[${COUNT}+1])
exten => s,n,EndWhile()
exten => s,n,Playback(vm-goodbye)
• Todo esto debe ser un dolor de cabeza para los
programadores!
• La solucion: AEL haciendo a Asterisk mucho mas
amigable, util y legible.
Correo de Voz (Voicemail)
• Se pueden dejar mensajes de voz a los usuarios.
• Se permite un número ilimitado de buzones.
• Notificación por correo:
– Puede anexar el mensaje de voz (.wav)
– Indicador luminoso o señal de mensaje en espera.
– Indicador auditivo de mensaje en espera al levantar el
teléfono.
– Manejo de mensajes vía telefónica.
• Los contextos de voicemail son definidos de igual manera que
en dialplan.
Correo de Voz
mailbox => password, nombre [,e-mail [, pager-email [, opciones]]]

• mailbox: número de mailbox, generalmente asociado al número de


extensión.
• password: clave numérica del buzón.
• nombre: nombre del propietario del buzón. Se utiliza para permitir
incorporar en el directorio de Asterisk.
• e-mail: correo electrónico adonde se envía la notificación.
• pager-email: correo electrónico para enviar la notificación.
• Opciones: hay varias como attach=yes
• Voicemail() envía al emisor al buzón especificado para dejar un mensaje.
• El número de buzón puede ser proseguido por la letra b o u. Con la letra b,
se le informa al emisor que el usuario está ocupado. Con u que no esta
disponible.
La aplicación Voicemail
• En Voicemail.conf se encuentra la configuracion de las casillas
individuales de voicemail.
• La aplicación Voicemail() dirige la llamada al voicemail y
reproduce el mensaje de bienvenida.
• Aplicación VoicemailMain() autentica a los usuariosy les da
opciones para que puedan escuchar sus mensajes, configurar
su correo de voz y enviar directamente un voicemail a otros
usuarios
Configuracion de Voicemail
• Voicemail.conf
– [default]
– 4001 => 1234,Juan Perez,juan@dominio.com,
• Extensions.conf
– exten => 4001,1,Dial(${JUAN},10) ; hace referencia a la variable JUAN
– exten => 4001, 2,voicemail(4001@default,u)
– exten => 4001,102,voicemail(4001@default,b)
• Acceso al buzón de voz
– Exten => *98, 1, voicemailMain()
Ejemplo de Voicemail
[stations]
Exten => _NXX,1,Dial(SIP/${EXTEN},20)
Exten => _NXX,n,Voicemail(${EXTEN},u)
[voicemail]
Exten => 700,1,1VoicemailMain(${CALLERID(num)})

• El codigo anterior se ha definido en el


extensions.conf, Alguien puede explicarlo?
La aplicación Record
• Hace unos dias surgió esta duda en el curso y siempre es
mas facil grabar con esta aplicación que usar otra y buscar
convertir el archivo y copiarlo para Asterisk.
• Podemos grabar nuestros mensajes (voces) a nuestro gusto.
• Si utilizamos el %d en el nombre del fichero no se
sobreescribira el mismo sino que se grabaran con un indice
numerico identificador autoincremental.
• El nombre del archivo grabado en el momento queda en la
variable ${RECORDED_FILE}
• Pruebe:
• exten => 123,n,Record(migrabacion%d.wav)
Sala de Conferencias
• Alguien ha trabajado con Salas de
Conferencias?
• Permite crear conferencias protegidas por clave.
• Administrar conferencias.
• Callar o expulsar a un miembro de la conferencia.
• Crear conferencias estáticas (en el meetme.conf).
• Crear conferencias dinámicas (utilizando el plan de marcación).
• Meetme.conf
– [rooms]
– Conf => 600
Sala de Conferencias
• extensions.conf
– exten => 600,1,meetme(600, i, 54321)
– Se anuncia cuando alguien entra o sale de la conferencia.
– exten => 601,1,playBack(conf-thereare)
– exten => 601,2,meetmeCount(600)
– exten => 601,3, playBack(conf-peopleinconf
Discado automático
• Archivos .call

– Se utilizan para iniciar llamadas desde una aplicación


externa.
– Son archivos de texto que al copiarse en el directorio
/var/spool/asterisk/outgoing, Asterisk notará su presencia
e inmediatamente activará la extensión en la prioridad
especificada en el archivo .call.
– Generalmente, se combinan con el programador de tareas
de Linux: el cron.
– Algunos ejemplos de uso son: soluciones de callback,
despertador telefónico, anuncios automáticos.
Discado automático: ejemplo
• En el siguiente ejemplo: se llama al 43424444 en el canal Zap/1Dahdi/1 y envía la
llamada al contexto [mensajes-salida], extensión 84, Prioridad 1:
– Archivo mensaje.call
Channel: Zap/1Dahdi/1/43424444
MaxRetries: 2
RetryTime: 60
WaitTime: 30
Context: mensajes-salida
Extension: 84
Priority: 1
– extensions.conf
[mensajes-salida]
exten => 84,1,Playback(anuncio)
exten => 84,2,Playback(vm-goodbye)
exten => 84,3,Hangup
Manejo de colas
• El sistema de colas en Asterisk se compone de:

– Llamadas entrantes que son ubicadas en una cola.


– Miembros que contestan las llamadas en la cola
(extensiones o bien usuarios que se loguean como
agentes).
– Una estrategia sobre cómo manejar la cola y repartir las
llamadas entre los miembros
– Música que se reproduce durante la espera en la cola.
– Anuncios para miembros y emisores de llamadas.
Manejo de colas: Config
• La configuración de las colas se define:

– Estáticamente: en el archivo queues.conf


– Dinámicamente: la configuración se almacena en
una BD, “disponibilizando” los cambios sin
necesidad de realizar un reload.

• La configuración de los agentes se define en el


archivo agents.conf.
Manejo de colas: agentes
• Los agentes atienden las llamadas de una cola específica.

• Un agente debe realizar un login (llamando a una extensión


especial que contiene la aplicación AgentLogin) indicando que
está listo para tomar llamadas.

• Los miembros son aquellos canales disponibles que están


activamente atendiendo la cola. Pueden ser tanto agentes
como también canales regulares (sip/juan).
Manejo de colas: estrategias
• Las llamadas son distribuidas entre los miembros de una cola
siguiendo alguna de las siguientes estrategias:

– ringall: hace sonar todos los canales disponibles hasta que alguno
responda (configuración por defecto).
– roundrobin: hace sonar cada interfaz disponible por turnos.
– leastrecent: hace sonar la interfaz que fue menos recientemente
llamada por esta cola.
– fewestcalls: hace sonar la interfaz con la menor cantidad de llamadas
completas.
– random: hace sonar una interfaz al azar.
– rrmemory: igual que el round robin pero recuerda cual fue el último
teléfono que atendió una llamada y continúa con el siguiente.
Manejo de colas: penalties y priorities
• Penalty: se le asigna una penalidad a cada agente, de manera
tal que primero se derivan las llamadas (vía la estrategia
definida) a los agentes con el menor valor de penalidad. En el
caso de estar todos ocupados, se continúa con la siguiente
penalty y así sucesivamente.
– Ejemplo: sólo si la telefonista está ocupada, se deriva el llamado a la
oficina.

• Priority: se le asigna una prioridad a cada llamada entrante,


permitiendo situarla en un lugar más adelante de la cola (no
siempre al final).
– Ejemplo: las llamadas al nro. 110 tienen más prioridad que las del 111.
Manejo de colas: aplicaciones
• Aplicaciones principales, utilizadas en
extensions.conf:

– Queue: aplicación utilizada para encolar una llamada


(toma como parámetro las colas definidas en queue.conf).
– AddQueueMember: agrega dinámicamente un miembro a
la cola.
– RemoveQueueMember: remueve dinámicamente un
miembro de la cola.
– AgentLogin: login de un agente a una cola.
Manejo de colas: ejemplo
• queue.conf

[MyQueue] ; nombre de la cola


music=default ; musica que coloca antes que lo atiendan
strategy=ringall ; estrategia de ring
timeout=15 ; tiempo maximo de ring a un miembro
retry=5 ; tiempo de espera hasta reintentar con otro miembro
wrapuptime=0 ; tiempo de espera luego de intentar con todos los miembros
maxlen = 0 ;
announce-frequency = 0 ; cantidad de veces que sale el anuncio
announce-holdtime = no ; si dice el tpo de espera aproximado
member => Agent/1001,1
member => Agent/1002,1
member => Agent/1003,1
Manejo de colas: ejemplo
• agents.conf

[agents]
agent => 1001,1111,Juan
agent => 1002,2222,Pedro
agent => 1003,3333,Pablo

• extensions.conf

exten => 2020,1,Answer


exten => 2020,3,Wait(2)
exten => 2020,4,SetMusicOnHold(default)
exten => 2020,5,Queue(MyQueue|r)
exten => 2020,6,Hangup

a
Registro de llamadas
• Asterisk permite llevar un control exhaustivo de
todas las llamadas que se han realizado o
recibido.
• Es interesante para control propio de facturación,
independiente del proveedor (si no se es uno de
ellos).
• Permite realizar estadísticas.
• Este control se denomina CDR: Call Detail Record.

a
Registro de llamadas

• El registro del CDR se escribe por defecto en el archivo


/var/log/asterisk/cdr-csv/Master.csv
• Existen extensiones al cdr: cdr_mysql por ejemplo, que
permiten almacenar los registros en una base de datos.
• cdr_mysql está disponible en asterisk-addons
• El CDR se configura en el archivo cdr.conf, para el módulo de
MySQL, se utiliza cdr_mysql.conf
• Para confirmar el estado del CDR desde el CLI, se puede
ejecutar:
CLI> cdr status

a
Registro de llamadas

• Asterisk genera un CDR (registro) para cada llamada.


• Algunos de los campos más importantes son:
– accountcode: código de la cuenta a utilizar.
– src: número del caller ID.
– dst: extensión destino.
– dcontext: contexto destino.
– start: comienzo de la llamada (fecha/hora).
– answer: respuesta de la llamada (fecha/hora).
– end: fin de la llamada (fecha/hora).
– duration: duración de la llamada en segundos, desde que fue discada hasta el
corte.
– billsec: duración de la llamada en segundos, desde que fue atendida hasta el
corte.
– disposition: estado de la llamada (atendida, no atentendida, ocupado, fallida).

a
Registro de llamadas
• Existen muchas aplicaciones que permite
gestionar el CDR. Desarrollar una propia no es
realmente muy complejo.
• Algunas aplicaciones open source son:
– Astbill: es una de las mejores aplicaciones opensource
para tarificación, control de cuentas y llamadas.
– Areski Stat v2: se trata de una aplicación para listar y
realizar estadísticas de las llamadas realizas o
enviadas.
– A2Billing

a
Sistema de logs

• En el archivo /etc/asterisk/logger.conf se encuentra la


configuración del sistema de logging de Asterisk.

• Los distintos niveles de información a capturar en los logs son:

– Verbose: mensajes generales sobre lo que está ocurriendo en el


sistema (por ej, si el valor de verbosity es mayor a 3, muestra las
instrucciones del plan de marcación).
– Debug: mensajes con información extendida, en general utilizados por
programadores.
– Notice: notificaciones no críticas.
– Warning: mensajes de alerta posiblemente críticos.
– Error: mensajes indicando que ocurrió algo grave.

a
Sistema de logs

• En el contexto [logfiles] del archivo logger.conf se indican


los archivos y mensajes a loguear en c/u, la sintaxis es:
archivo => nivel1,...,niveln
• Los archivos de log se crean por defecto en
/var/log/asterisk/ (esto se puede cambiar
/etc/asterisk/asterisk.conf).
• Ejemplos:
debug => debug
full => notice,warning,error,debug,verbose

a
Sistema de logs

• Para enviar a la consola, hay que definir el archivo especial


console:
console => notice,warning,error,debug

• También se pueden enviar al syslog:


syslog.local0 => debug, warning, error, notice, verbose
Configurando además en /etc/syslog.conf:
local0.* @ip_servidor

a
Sistema de logs: CLI
• Los comandos relacionados con el manejo del
log del CLI son:
– logger reload: reabre los archivos de log del
Asterisk y recarga la configuración del logger .
– logger rotate: rota los archivos de log y luego hace
un logger reload.
– core set verbose: cambia el nivel de información a
mostrar en la consola. Por ej:
set verbose 999.

a
CDR
Para muchas compañías es necesario contabilizar las
llamadas y generar reportes de trafico por extensiones,
líneas, teléfonos, áreas, etc. Para esto necesitan contar
con un mecanismo de almacenamiento de información
de cada llamada y una aplicación que genere los
reportes.

Asterisk al igual que otras centrales telefónicas permite el


almacenamiento de llamadas a través del CDR (Call Detail
record).
Formato de almacenamiento
Las llamadas son registradas por asterisk en formato
csv (Valores separados por comas) es decir en un
archivo plano que almacena cada valor del registro
de llamadas separándolos por comas.

Este archivo se almacena en la siguiente ubicación:


/var/log/asterisk/cdr-csv/
Formato de almacenamiento
Los campos que utiliza el CDR para almacenar la
información son los siguientes:

accountcode: Numero de cuenta. (string, 20 characters)


src: Caller*ID (string, 80 characters)
dst: Extensión destino (string, 80 characters)
dcontext: Contexto destino (string, 80 characters)
clid: Texto de identificación. (80 characters)
channel: Canal ustilizado (80 characters)
Formato de almacenamiento
dstchannel: canal destino (80 characters)
lastapp: Ultima aplicación ejecutada (80 characters)
lastdata: Parámetros de la aplicación, argumentos. (80
characters)
start: Inicio de llamada (date/time)
answer: Llamada contestada (date/time)
end: Llamada finalizada (date/time)
duration: Duración total en segundos desde el discado
hasta que es colgada. (integer)
Formato de almacenamiento
billsec: Tiempo total de llamada contestada desde que
responde hasta que cuelga en segundos (integer)
disposition: Que ocurrió con la llamada: ANSWERED, NO
ANSWER, BUSY, FAILED
amaflags: Indicadores: DOCUMENTATION, BILLING, IGNORE
user field: Un campo definido por el usuario. Maximo 255
caracteres.
Cambiar el formato del CDR
Si consideramos necesario es posible cambiar el formato en
el que se almacena el CDR modificando el archivo:

/etc/asterisk/cdr_custom.conf
Métodos de almacenamiento
El almacenamiento de registros de llamadas puede ser
hecho de diversas formas. Por defecto asterisk
almacena los registros de llamadas utilizando
archivos CSV como se menciono anteriormente.

Otras alternativas de almacenamiento son:


- Mysql
- PostgreSQL
- ODBC
Utilizando MySQL
Debido al tipo de licenciamiento de las librerías clientes
de MySQL, la aplicación CDR con MySQL ya no viene
por defecto integrada en la distribución de asterisk.

Pero la podemos encontrar en asterisk-addons, para


instalar MySQL CDR deberemos compilar e instalar
asterisk-addons.
Instalando MySQL CDR
Para instalar asterisk-addons:
1) Descargar el archivo de la pagina de asterisk.
2) Guardar el archivo en /usr/src/ y desempaquetarlo.
3) Compilar asterisk-addons
# cd asterisk-addons-x.x
# make clean
# make
# make install
Instalando MySQL CDR
Crearemos la base de datos y un usuario con los permisos
necesarios para guardar información en la base de datos.
#mysql -u root –p

mysql>CREATE DATABASE asterisk;
mysql>GRANT INSERT ON asterisk.* TO asterisk@localhost
IDENTIFIED BY 'yourpassword';

Luego creamos la base de datos según los campos requeridos


para el CDR.
Instalando MySQL CDR
Configuramos el acceso a la base de datos en el archivo:
/ect/asterisk/cdr_mysql.conf

Modificamos las siguientes líneas:


[global]
hostname=localhost
dbname=asteriskcdr
table=cdr
password=123456
user=root
Instalando MySQL CDR
Finalmente necesitamos cargar el modulo cdr_mysql, esto se
hace desde el archivo:
/etc/asterisk/modules.conf

Agregar la siguiente línea:


load => cdr_addon_mysql.so

Luego reiniciar asterisk:


#service asterisk restart
Probando MySQL CDR
Para realizar pruebas es suficiente con realizar alguna llamada
entre las extensiones y verificar que se graben en la base de
datos ingresando a leer los registros.

Es posible y mucho mas cómodo utilizar alguna herramienta


grafica que nos permita administrar la base de datos:
- phpMyAdmin – (es una herramienta web y requiere instalar
Apache y PHP)
- MySQl administrator (es una herramienta de escritorio hay
versiones para windows y linux)
Creacion de Macros
• Macros son una secuencia de aplicacion que deberan ser ejecutadas in orden

– Must begin in extension s and priority 1.


• Las Macros son muy utilizadas en el plan de marcado para evitar la repeticion
de codigo.
– They also make modifications to the dialplan easier and simpler to manage.
• Las definiciones de macros se parecen mucho a los contextos.
– You define a macro by placing macro- and the name of your macro in square brackets,
like this:
[macro-voicemail]

• Macro names must start with macro-


– This distinguishes them from regular contexts.
Asterisk Variables – Macros
• There are a defined set of variables that are defined and populated when a
macro is called
[outgoing]
exten => 1001,1,Macro(macro-test,${EXTEN},25)
${ARG1}: The first argument passed to the macro.
${ARG2}: The second argument passed to the macro.

• ${MACRO_CONTEXT}: The context of the extension that triggered this macro.


• ${MACRO_EXTEN}: The extension that triggered this macro.
• ${MACRO_PRIORITY}: The priority in the extension where this macro was
triggered.

• We’ll come back to the actual function of macros


Dial Plan Before Macros
[internal]
exten=> 1001,1,Dial(SIP/1001,20)
exten=> 1001,n,Goto(${DIALSTATUS})
exten=> 1001,n(NOANSWER),Voicemail (1001,u)
exten=> 1001,n,Goto(default,s,1)
exten=> 1001,n(BUSY),Voicemail(1001,b)
exten=> 1001,n,Goto(default,s,1)

exten=> 1002,1,Dial(SIP/1002,20)
exten=> 1002,n,Goto(${DIALSTATUS})
exten=> 1002,n(NOANSWER),Voicemail (1002,u)
exten=> 1002,n,Goto(default,s,1)
exten=> 1002,n(BUSY),Voicemail(1002,b)
exten=> 1002,n,Goto(default,s,1)
Dial Plan After Macros
[internal]
exten => 1001,1,Macro(test,SIP/1001,25)
exten => 1002,1,Macro(test,IAX2/1002,30)
exten => 1003,1,Macro(text,SIP/1003,20)
[macro-test]
exten => s,1,Dial(${ARG1},20)
exten => s,n,Goto(s-${DIALSTATUS},1) 
exten => s,n(NOANSWER),Voicemail(u${ARG1})
exten => s,n,Goto(default,s,1)
exten => s,n(BUSY),Voicemail(b${ARG1}) 
exten => s,n,Goto(default,s,1)
exten => s,n,Goto(s(NOANSWER),1)
Macros cont.
• Calling the macro test from the dial plan:
exten => 1001,1,Macro(test,SIP/1001,25)

• The arguments are:


${ARG1} =
${ARG2} =
Gracias !!
Preguntas??
Entonces yo pregunto

También podría gustarte