Asterisk
Redes Multimedia
Sergio Herrería Alonso
Curso 2019/2020
Departamento de Enxeñaría Telemática
Universidade de Vigo
Contenido
1. Asterisk
2. Configuración básica
3. Configuración de canales
4. Dialplan
5. Funcionalidades avanzadas
1
Asterisk
¿Qué es Asterisk?
Asterisk
Open Source IP PBX (Private Branch Exchange)
• So tware que permite convertir un servidor en una centralita
telefónica
• Solución escalable para el despliegue de sistemas de VoIP (y
videoconferencia) de mediana y gran escala
• So tware multiplataforma
• Linux, FreeBSD, OpenBSD, macOS, Solaris
• Licencia de producto GNU GPLv2
• Permiso para ejecutar, modificar, redistribuir y publicar
mejoras del código fuente
• Base para el desarrollo de productos comerciales
Asterisk 2
IP PBX
Asterisk 3
Un poco de historia…
• Creado originalmente por Mark Spencer en 1999
• Necesitaba una PBX para su empresa pero no disponía del
dinero suficiente…
• En 2002 Mark Spencer funda Digium, empresa encargada
de administrar y mantener el código fuente de Asterisk
• Soporte técnico, certificaciones dCAA y dCAP…
• Digium también vende hardware compatible con Asterisk
• Tarjetas PCI para conectar líneas telefónicas analógicas y
digitales a Asterisk
• Hardphones, VoIP gateways, servicios cloud…
• En la actualidad Asterisk es una solución VoIP robusta,
tanto para empresas como para proveedores
Asterisk 4
Versiones
• 1.0 (Septiembre 2004)
• 1.4 (Diciembre 2006)
• 1.6 (Octubre 2008)
• 1.8 (Octubre 2010)
• …
• 13.0 LTS (Octubre 2014)
• 16.0 LTS (Octubre 2018)
• Última versión: 16.8.0 (Febrero 2020)
• 17.0 Standard (Septiembre 2019)
• Última versión: 17.2.0 (Febrero 2020)
Asterisk 5
Funcionalidades básicas
1. Soporte de protocolos VoIP
• SIP, IAX, SCCP, H.323, Google Talk, MGCP…
2. Soporte de telefonía tradicional
• Líneas analógicas y digitales (acceso BRI y PRI E1/T1)
3. Funciones de centralita
• Buzón de voz
• Desvío de llamadas
• Conferencias
• Colas de llamadas
• Transferencia de llamadas
• Música en espera
• Registro de llamadas
• Envío y recepción de faxes
• …
Asterisk 6
Funcionalidades avanzadas
• IVR (Interactive Voice Response)
• Gestión de llamadas a través de un menú interactivo
• AstDB (Asterisk Database)
• Registro y consulta de datos en tiempo de ejecución
• AGI (Asterisk Gateway Interface)
• Invocación de aplicaciones externas (Python, Ruby, PHP…)
desde Asterisk
• AMI (Asterisk Management Interface)
• Administración y control remoto de un servidor Asterisk
• ARI (Asterisk REST Interface)
• API REST para construir aplicaciones basadas en Asterisk
Asterisk 7
Software relacionado
• Proxy SIP
• Kamailio
• OpenSIPS
• Brekeke SIP Server
• So tswitch
• 3CX Phone System
• Brekeke PBX
• FreeSWITCH
• MediaCore SBC
• Yate
• Distribuciones Linux
• FreePBX Distro
• CentOS + Asterisk + FreePBX (GUI)
• Elastix
Asterisk 8
Requisitos del sistema
• Asterisk es intensivo en CPU
• Instalación sobre plataformas BSD y GNU/Linux
• Configuración server (servidor dedicado o alta prioridad)
• Asterisk en la “nube”
• Factores que afectan al rendimiento
• Número de llamadas simultáneas
• Códecs utilizados (G.711, G.729, GSM…)
• Compromiso entre ancho de banda y uso del procesador
• Provisión de conferencias
• Transcodificación y mezcla de flujos de audio
• Cancelación de eco (PSTN)
• Llamadas a programas externos
• Interrupciones IRQ
Asterisk 9
Referencias
• Libros
• R. Bryant, L. Madsen, J. Van Meggelen. “Asterisk: The
Definitive Guide”, 5/e. O’Reilly, 2019
• F. Goncalves. “Complete Asterisk Training”. 2019
• L. Madsen, R. Bryant. “Asterisk Cookbook”. O’Reilly, 2011
• Recursos electrónicos
• [Link]
• [Link]
• [Link]
• [Link]
Asterisk 10
Instalación
• A partir de paquetes
• Disponibles para Debian, Ubuntu, Fedora, CentOS…
• Ubuntu: > apt-get install asterisk
• A partir del código fuente
• Asterisk
• DAHDI: drivers de control de las tarjetas telefónicas
• libpri: conexión de Asterisk con líneas digitales RDSI
• Instalación previa de varias librerías dependientes
• gcc, ncurses, OpenSSL, newt, libxml2, Kernel headers…
• Conjuntamente con una distribución Linux preparada
• FreePBX Distro, Elastix
Asterisk 11
Arranque y detención
CLI (Command Line Interface)
Consola desde la que controlar y monitorizar la centralita
• Arranque
• > asterisk: ejecución en segundo plano
• > asterisk -c: ejecución en primer plano (inicia la CLI)
• > asterisk -r: conexión a la CLI cuando Asterisk ya se esté
ejecutando en segundo plano
• Detención
• CLI> core stop now: detención inmediata
• CLI> core stop when convenient: detención cuando no
haya llamadas en curso
• CLI> core stop gracefully: detención cuando no haya
llamadas en curso (y no se aceptan nuevas llamadas)
• CLI> Ctrl+C : solo desconexión de la CLI
Asterisk 12
Niveles de verbosidad
• Nivel de verbosidad
• Cuanto mayor sea, más mensajes se mostrarán en la CLI
sobre lo que sucede en la centralita
• > asterisk -vvvc
• CLI> core set verbose 3
• Nivel de depuración
• Cuanto mayor sea, más mensajes de depuración se
mostrarán en la CLI (para desarrolladores)
• > asterisk -dddc
• CLI> core set debug 3
• Trucos CLI
• Tecla <Tab>: completar/mostrar comandos disponibles
• Tecla <Up>: mostrar comandos introducidos anteriormente
• Ejecución de comandos de consola Linux: CLI> !ls
Asterisk 13
Configuración básica
Arquitectura modular
Configuración básica 14
Canales
Una llamada es una concatenación de canales punto a punto
Canal
Toda conexión entre Asterisk y cualquier otro dispositivo
(terminal, centralita, otro servidor)
• Canales VoIP: SIP, IAX, H.323, MGCP…
• Canales hardware: DAHDI (analógicos/digitales)
• Canales de consola: dispositivos OSS/ALSA como so tphones
Asterisk Asterisk
Canal SIP Canal IAX Canal DAHDI
Configuración básica 15
Dialplan
Dialplan
Plan de marcación que define el comportamiento lógico de la
centralita
• Define el itinerario que han de seguir las llamadas desde que
llegan a la centralita hasta que finalizan
• Se compone de varios contextos y extensiones
• Una extensión es la lista de acciones (un programa) que hay
que ejecutar para cada llamada entrante o saliente
• Identificadas mediante cadenas alfanuméricas: 101, luis…
• Un contexto es una colección de extensiones bajo un mismo
identificador
• Aplicación de distintas políticas de seguridad
• Diferenciación de servicios por extensiones
Configuración básica 16
Dialplan
Aplicación
Cada una de las posibles acciones individuales asociadas a
una extensión
• Asterisk ejecuta secuencialmente (dependiendo de su
prioridad) las aplicaciones asociadas a cada extensión
• Ejemplos:
• Dial(): realizar una llamada
• Hangup(): colgar una llamada
• Answer(): contestar a una llamada
• Playback(): reproducir un fichero de audio
• …
Configuración básica 17
Estructura del dialplan
DIALPLAN
Context A Context B
Extension 100 Extension 100
Priority 1: Application 1 Priority 1: Application 1
Priority 2: Application 2 Priority 2: Application 2
Priority 3: Application 3 Priority 3: Application 3
Extension 101 Extension 101
Priority 1: Application 1 Priority 1: Application 1
Priority 2: Application 2 Priority 2: Application 2
Extension 200
Priority 1: Application 1
Priority 2: Application 2
Priority 3: Application 3
Configuración básica 18
Ficheros de configuración
Habitualmente residen en /etc/asterisk
• Configuración general
• [Link]
• [Link]
• Configuración de canales
• [Link]
• [Link]
• chan_dahdi.conf
• Configuración del dialplan
• [Link]
• Configuración de funcionalidades adicionales
• [Link]
• [Link]
• …
Configuración básica 19
[Link]
[transport-udp] [100]
type = transport type = auth
protocol = udp auth_type = userpass
bind = [Link]:5020 username = 100
password = querty
[acl-subnet]
type = acl [100]
deny = [Link]/[Link] type = aor
permit = [Link]/23 max_contacts = 1
qualify_frequency = 30
[100]
type = endpoint
context = phones
acl = acl-subnet
language = es
disallow = all
allow = alaw,gsm
auth = 100
aors = 100
Configuración básica 20
[Link]
El fichero [Link] contiene el dialplan
[general]
[phones]
exten => _10X,1,Dial(PJSIP/${EXTEN})
exten => _10X,2,Hangup
exten => 600,1,Answer
exten => 600,2,Playback(demo-echotest)
exten => 600,3,Echo
exten => 600,4,Playback(demo-echodone)
exten => 600,5,Hangup
Configuración básica 21
Rangos de extensiones
Asterisk permite especificar rangos de extensiones mediante
los patrones de coincidencia
• Los patrones comienzan por el carácter _
• X representa cualquier dígito entre 0 y 9
• Z representa cualquier dígito entre 1 y 9
• N representa cualquier dígito entre 2 y 9
• [ij] representa el dígito i o el dígito j
• [i-j] representa cualquier dígito entre el i y el j
• . representa cualquier cadena no nula de caracteres
• ! representa cualquier cadena de caracteres
• Ejemplos:
• Teléfonos fijos de Galicia: _[89]8[1268]XXXXXX
• Teléfonos móviles: _[67]XXXXXXXX
• Cualquier número: _.!
Configuración básica 22
Control del flujo
Asterisk ejecuta en orden estricto de prioridad las aplicaciones
asociadas a cada extensión
• La prioridad n (next) es equivalente a sumar uno a la
prioridad anterior
• Facilita la escritura e interpretación del dialplan
• Con el prefijo same evitamos repetir la extensión
• Ejemplo:
exten => 600,1,Answer
same => n,Playback(demo-echotest)
same => n,Echo
same => n,Playback(demo-echodone)
same => n,Hangup
Configuración básica 23
Comandos CLI
• CLI> module reload res_pjsip.so
• CLI> pjsip list endpoints|auths|aors|channels
• CLI> pjsip show endpoints|auths|aors|channels
• CLI> pjsip show endpoint|auth|aor name
• CLI> dialplan reload
• CLI> dialplan show context
• CLI> core reload
Configuración básica 24
Configuración de canales
SIP
SIP (Session Initiation Protocol)
Protocolo de señalización genérico diseñado específicamente
para Internet (RFC 3261)
• Gestión de llamadas: inicio, finalización, transferencia…
• Localización y disponibilidad de usuarios
• Protocolo “fuera de banda”
• Señalización: udp/5060 ([Link])
• Audio: udp/10000–20000 ([Link])
• Protocolo textual
• Problemas con NAT
• Cambios en las direcciones IP y/o números de puerto
Configuración de canales 25
Plantillas
Las plantillas permiten definir opciones comunes para varios canales
[codecs](!) [100](softphones)
disallow = all auth = 100
allow = alaw,gsm aors = 100
[softphones](!,codecs) [100](auth-userpass)
type = endpoint username = 100
context = phones password = qwerty
acl = acl-subnet
language = es [100](aor-single-reg)
[auth-userpass](!) [101](softphones)
type = auth auth = 101
auth_type = userpass aors = 101
[aor-single-reg](!) [101](auth-userpass)
type = aor username = 101
max_contacts = 1 password = asdfg
qualify_frequency = 30
[101](aor-single-reg)
Configuración de canales 26
Autenticación MD5
Es más seguro guardar las contraseñas cifradas (hash MD5)
[auth100]
type = auth
auth_type = md5
realm = [Link] ; asterisk by default
username = 100
; echo -n "100:[Link]:qwerty" | md5sum
md5_cred = 90f00e866b7cf724b2be465c63a5ab84
Configuración de canales 27
Conexión a un proveedor SIP
1. Configurar el canal SIP con el proveedor ([Link])
[mytrunk] [mytrunk]
type = registration type = aor
outbound_auth = mytrunk contact = sip:[Link]
server_uri = sip:account@[Link]
client_uri = sip:account@[Link] [mytrunk]
type = endpoint
[mytrunk] context = from-external
type = auth outbound_auth = mytrunk
auth_type = userpass aors = mytrunk
username = account
password = 1234567890 [mytrunk]
type = identify
endpoint = mytrunk
match = [Link]
2. Configurar las extensiones ([Link])
[phones]
exten => _[67]XXXXXXXX,1,Dial(PJSIP/${EXTEN}@mytrunk)
[from-external]
exten => _.!,1,Dial(PJSIP/100)
Configuración de canales 28
IAX
IAX (Inter Asterisk eXchange)
Protocolo de señalización propio de Asterisk utilizado en la
interconexión de centralitas Asterisk
• Protocolo “dentro de banda”
• Audio y señalización a través de un único canal (udp/4569)
• Protocolo binario (no textual)
• Soporta trunking: múltiples llamadas por el mismo flujo
• Ahorro de ancho de banda (sobrecarga de cabeceras)
• Soporta cifrado (AES128) y autenticación (MD5, RSA)
• Transparente a NAT
• So tphones detrás de NAT: Zoiper, KIAX
Configuración de canales 29
IAX
El fichero [Link] contiene una lista con los canales IAX
configurados y una serie de opciones generales
[general]
autokill=yes
jitterbuffer=yes
[centralita]
type=friend
host=[Link]
auth=plaintext
secret=querty
context=entrantes
encryption=yes
Configuración de canales 30
IAX
• Trunking
• trunk=yes
• Requiere temporizador (módulo dahdi_dummy)
• Autenticación
• auth=md5,rsa
• Las claves RSA se generan con el comando astgenkey y
se almacenan en /usr/share/asterisk/keys
• Dialplan
• Dial(IAX2/[user:pass@host]/exten[@context])
• Comandos CLI
• CLI> iax2 reload
• CLI> iax2 show peers
• CLI> iax2 show peer name
• CLI> iax2 show channels
Configuración de canales 31
Dialplan
Elementos
El dialplan está compuesto por:
• Contextos: grupo de extensiones bajo un mismo identificador
• Extensiones: lista de acciones a ejecutar para cada llamada
entrante o saliente
• Identificadas mediante cadena alfanumérica: 101, ana…
• s: para las llamadas sin extensión o para subrutinas
• i: extensión inválida, no definida o desconocida
• t: extensión de temporización en IVRs
• h: extensión de finalización de llamada
• fax: detección de fax en canales DAHDI
• Aplicaciones: cada una de las acciones individuales que es
posible asociar a una extensión
• CLI> core show application appname
Dialplan 32
Aplicaciones: Gestión de llamadas
• Answer([delay])
• Responde a la llamada tras esperar delay milisegundos
• Busy([timeout])
• Envía al llamante la señal de ocupado durante timeout
segundos y finaliza la llamada
• Dial(tech/resource[&...][,timeout[,opt]])
• Realiza una llamada
• Dial(PJSIP/juan)
• Dial(IAX2/luis:qwerty@proveedor/juan,10)
• Dial(PJSIP/juan&PJSIP/pedro&PJSIP/luis)
• Hangup([cause])
• Finaliza la llamada
Dialplan 33
Aplicación Dial()
• Si la llamada se realiza con éxito, finaliza la ejecución del
dialplan (o se salta a la extensión h)
• Si no, se continúa con el dialplan en la siguiente prioridad
• Opciones:
• A(file): reproduce el fichero de audio al llamado antes
de establecer la comunicación
• L(t): limita la duración de la llamada a t milisegundos
• m: reproduce música al llamante mientras no se responde
a la llamada
• t: la llamada puede ser transferida por el llamado
• T: la llamada puede ser transferida por el llamante
• w: el llamado puede grabar la llamada
• W: el llamante puede grabar la llamada
• …
Dialplan 34
Aplicaciones: Reproducción de audio
• PlayBack(filename)
• Reproduce el fichero de audio
• Background(filename)
• Reproduce el fichero de audio mientras espera a que se
intoduzca una extensión
• SayDigits(digits)
• Reproduce los dígitos de uno en uno
• SayNumber(number)
• Reproduce el número
• SayAlpha(string)
• Reproduce los caracteres de la cadena
Dialplan 35
Aplicaciones: Grabación de audio
• Monitor(format,filename)
• Graba la llamada: [Link] (audio de
entrada), [Link] (audio de salida)
• MixMonitor([Link])
• Graba la llamada completa en un único fichero
• StopMonitor(), StopMixMonitor()
• Detiene la grabación iniciada con Monitor, MixMonitor
• Record([Link][,silence[,maxdur]])
• Graba mensajes de voz
• Permite especificar los segundos en silencio antes de que
se detenga la grabación o la duración máxima del mensaje
Dialplan 36
Más aplicaciones…
• Verbose([level,]message)
• Muestra el mensaje en la CLI si el nivel de verbosidad es
igual o superior al indicado (herramienta de depuración)
• Wait(t)
• Espera t segundos
• WaitExten(t)
• Espera t segundos a que se introduzca una extensión
• Authenticate(password)
• Espera a que el usuario introduzca una contraseña para
continuar la ejecución
• System(command)
• Ejecuta un comando del sistema
Dialplan 37
Variables
Asterisk permite el empleo de variables
• Inicialización: Set(VARNAME=value)
• Uso: ${VARNAME}
• Manipulación: ${VARNAME[:skip[:length]]}
• Ejemplo:
exten => 700,1,Set(NUMBER=98765)
same => n,Verbose(${NUMBER:2}) ; 765
same => n,Verbose(${NUMBER:-2}) ; 65
same => n,Verbose(${NUMBER:1:3}) ; 876
Dialplan 38
Variables
• Variables globales
• Válidas en todos los contextos y extensiones
• Se declaran en el [globals] del [Link]
• Set(GLOBAL(VARNAME)=value)
• Variables de canal
• Válidas únicamente durante la llamada
• Variables predefinidas:
• ${CONTEXT}, ${EXTEN}, ${PRIORITY}
• ${UNIQUEID}, ${CHANNEL}
• ${CALLERID(name)}, ${CALLERID(num)}
• ${DIALSTATUS}: CHANUNAVAIL, CONGESTION, BUSY,
NOANSWER, ANSWER, CANCEL
• ${DIALEDTIME}, ${ANSWEREDTIME}
• ${SYSTEMSTATUS}: FAILURE, SUCCESS, APPERROR
• ${EPOCH}
Dialplan 39
Expresiones
Las variables se pueden combinar en expresiones aritméticas
y lógicas
• Operadores lógicos: |, &, =, >, <, >=, <=, !=
• Comparación entre enteros o cadenas de caracteres
• Operadores matemáticos: +, -, *, /, %
• Ejemplo:
exten => 700,1,Set(NUM=10)
same => n,Set(NUM=$[${NUM}*2])
same => n,Set(COND1=$[${NUM}>10])
same => n,Set(COND2=$[${COND1} & (${NUM}<30)])
Dialplan 40
Funciones
Asterisk puede invocar funciones predefinidas sobre las
variables para realizar algunos cálculos útiles
• ${FUNCTION(parameters)}
• Algunas funciones típicas: ISNULL, EXISTS, LEN, CUT,
RAND, INC, MATH, MD5, SHA1…
• Ejemplo:
exten => 700,1,Set(TEXT=Hola mundo)
same => n,Set(L=${LEN(${TEXT})})
same => n,Set(COND=${ISNULL(${TEXT})})
same => n,Set(TEXT=${CUT(TEXT, ,1)})
Dialplan 41
Control del flujo
• Saltos incondicionales
• Goto([[context,]extension,]priority)
• Se pueden asignar etiquetas a las prioridades para facilitar
la programación del dialplan
• Goto(label)
• Ejemplo:
exten => 700,1,Answer(1000)
same => n,Set(COUNT=1)
same => n(repeat),SayNumber(${COUNT})
same => n,Verbose(${INC(COUNT)})
same => n,Goto(repeat)
Dialplan 42
Control del flujo
• Saltos condicionales
• GotoIf(condition?label1:label2)
• Si la condición se cumple, se salta a label1
• Si no se cumple, se salta a label2
• Si se omite alguna de las etiquetas, se continúa con la
ejecución secuencial de prioridades
• Ejemplo:
exten => 700,1,Answer(1000)
same => n,Set(COUNT=1)
same => n(repeat),GotoIf($[${COUNT}<=5]?:bye)
same => n,SayNumber(${COUNT})
same => n,Verbose(${INC(COUNT)})
same => n,Goto(repeat)
same => n(bye),Hangup
Dialplan 43
Control del flujo
• Bucles
• While(condition)
• EndWhile
• ExitWhile, ContinueWhile
• Ejemplo:
exten => 700,1,Answer(1000)
same => n,Set(COUNT=1)
same => n,While($[${COUNT}<=5])
same => n,SayNumber(${COUNT})
same => n,Verbose(${INC(COUNT)})
same => n,EndWhile
same => n,Hangup
Dialplan 44
Control del flujo
GoSub
Asterisk permite definir subrutinas para evitar la repetición
innecesaria de código en el dialplan
• Pueden recibir parámetros: ${ARG1}, ${ARG2}…
• Con la aplicación Return se vuelve al flujo principal
[gosub-test]
exten => s,1,Verbose(Llamada desde ${ARG1})
same => n,Playback(tt-weasels)
same => n,Return(123)
[phones]
exten => 700,1,Gosub(gosub-test,s,1(${EXTEN}))
same => n,Verbose(Devuelve ${GOSUB_RETVAL})
same => n,Hangup
Dialplan 45
AstDB
AstDB
Asterisk incluye una base de datos interna donde se puede
almacenar datos de manera persistente
• Los datos se agrupan formando familias
• Dentro de una familia, a los datos se accede por su clave o
identificador
• Gestión desde la CLI:
• CLI> database put family key value
• CLI> database show [family [key]]
• CLI> database get family key
• CLI> database del family key
• CLI> database deltree family
Dialplan 46
AstDB
Gestión de la AstDB desde el dialplan:
• Guardar: Set(DB(family/key)=value)
• Recuperar: ${DB(family/key)}
• Eliminar: ${DB_DELETE(family/key)}
• Eliminar familia: DBdeltree(family)
• Comprobar existencia: ${DB_EXISTS(family/key)}
• Ejemplo:
exten => 700,1,Answer(1000)
same => n,GotoIf($[${DB_EXISTS(test/num)}]?cont)
same => n,Set(DB(test/num)=1)
same => n(cont),SayNumber(${DB(test/num)})
same => n,Set(DB(test/num)=$[${DB(test/num)}+1])
same => n,Hangup
Dialplan 47
Funcionalidades avanzadas
IVR (Interactive Voice Response)
exten => 800,1,Goto(menu,s,1)
[menu]
exten => s,1,Answer(1000)
same => n(loop),Background(press-1&or&press-2)
same => n,WaitExten(5)
exten => 1,1,SayNumber(${EXTEN})
same => n,Goto(s,loop)
exten => 2,1,SayNumber(${EXTEN})
same => n,Goto(s,loop)
exten => i,1,Playback(invalid)
same => n,Goto(s,loop)
exten => t,1,Playback(vm-goodbye)
same => n,Hangup
Funcionalidades avanzadas 48
Buzón de voz
Voicemail
Asterisk permite la creación de buzones de voz como simples
extensiones individuales
• Asociación de varios buzones a un único teléfono
• Asociación de un único buzón a varios teléfonos
• Acceso a los buzones protegido mediante contraseña
• Alocuciones personalizadas dependiendo del estado
• Notificación a través del correo electrónico
• Posibilidad de enviar el mensaje de voz como adjunto
• Requiere configurar un servidor de correo (postfix…)
• Notificación mediante indicador luminoso o tono especial
Funcionalidades avanzadas 49
Buzón de voz
El fichero [Link] contiene la lista con los buzones
de voz configurados y una serie de opciones generales
[general]
format = alaw ; Formats for writing Voicemail
maxmsg = 100 ; Max number of messages per folder
maxsecs = 180 ; Max length of a voicemail message in seconds
maxsilence = 10 ; Seconds of silence before ending recording
maxlogins = 3 ; Max number of failed login attempts
[zonemessages]
european = Europe/Copenhagen|'vm-received' a d b 'digits/at' HM
[vmphones]
;mailbox => pin,name[,email[,short email[,options]]]
100 => 1234,Aitor Menta,aitor@[Link]
101 => 5678,Elena Nito,nito@[Link],nito@[Link],tz=european
Funcionalidades avanzadas 50
Buzón de voz
• Comandos CLI:
• CLI> voicemail reload
• CLI> voicemail show users
• CLI> voicemail show zones
• Asociación de los buzones de voz a las extensiones
correspondientes en el fichero [Link]
[100]
type = endpoint
context = phones
aors = 100
auth = auth100
mailboxes = 100@vmphones
Funcionalidades avanzadas 51
Buzón de voz
• VoiceMail(mailbox[@context][&...][,opt])
• Reenvía la llamada al buzón de voz
• VoiceMailMain(mailbox[@context][,opt])
• Acceso y configuración del buzón de voz
exten => _1XX,1,Dial(PJSIP/${EXTEN},20)
same => n,GotoIf($[${DIALSTATUS}=BUSY]?busy)
same => n,VoiceMail(${EXTEN}@vmphones,u)
same => n,Hangup
same => n(busy),VoiceMail(${EXTEN}@vmphones,b)
same => n,Hangup
exten => 800,1,Answer(1000)
same => n,VoiceMailMain(${CALLERID(num)}@vmphones)
same => n,Hangup
Funcionalidades avanzadas 52
Música en espera
Asterisk puede amenizar (o torturar) la espera del llamante
con una agradable música de fondo
• Conviene evitar códecs complejos para no sobrecargar el
procesador (MP3, Opus…)
• Se recomienda utilizar formatos nativos de Asterisk para evitar
transcodificaciones durante la reproducción
• SoX (Sound eXchange)
> sox file.mp3 -r 8000 -c 1 -e a-law [Link]
• Fichero de configuración: [Link]
[default]
mode = files
directory = moh
sort = random
• CLI> moh reload
Funcionalidades avanzadas 53