Informe Final: Configuración de Servicios y Administración del Servidor Asterisk VoIP.
22 /01/2020 1
UNIVERSIDAD SURCOLOMBIANA
INGENIERIA ELECTRÓNICA
CONMUTACIÓN
INFORME FINAL
CONFIGURACIÓN DE SERVICIOS Y ADMINISTRACIÓN DEL SERVIDOR
ASTERISK VoIP
GERMAN ANDRES PULIDO CORTES
CÓDIGO 20152140465
MAIRON STEVEN SANCHEZ PEREZ
CÓDIGO 20152140544
ALEJANDRO MORENO ARTUNDUAGA
CÓDIGO 20152140887
GRUPO 01
type=value. Existen tres roles de usuarios en Asterisk, el rol
Resumen— Con el fin de brindar servicios de telefonía, se usuario permite realizar llamadas desde Asterisk, el rol cliente
implementó un servidor de Voz IP en Asterisk (Software Libre de permite realizar llamadas hacia Asterisk, y el rol amigo es a la
Código Abierto), el cual simula una centralita telefónica privada vez usuario y cliente de Asterisk. (user, peer, friend).
PBX mediante el Protocolo de Iniciación de Sesión (SIP). Dicho
servidor fue instalado en Ubuntu 18.04 LTS, para su configuración
secret=xxxx. Es la contraseña para autenticar la extensión
se modificaron cinco scripts importantes ([Link],
[Link], [Link], [Link], [Link]) en del usuario.
su carpeta raíz /etc/asterisk. Para probar el correcto
funcionamiento de los servicios configurados, se utilizó el callerid=“usuario”. Parámetro que permite definir un
softphone Zoiper en celulares y el Bria Solo en computadores, identificador de llamadas con el nombre asignado, aunque el
además de un teléfono IP (t-20 Yealink). otro usuario no lo tenga agregado.
host=dynamic. El parámetro host permite configurar la
I. PARÁMETROS BÁSICOS DE ASTERISK dirección con la que se conecta la extensión, si esta está
cambiando continuamente su dirección IP su parámetro es
Configuración Canal SIP: [Link]: dynamic.
El canal SIP de Asterisk sigue la misma sintaxis general de los Nat=no. Deshabilita la traducción de direcciones de red o NAT.
archivos de configuración en Asterisk, tiene una parte general
donde se configuran las opciones generales del canal. Así disallow=all. Parámetro que deshabilita todos los códecs.
mismo, permite definir los clientes SIP que tendremos.
allow=ulaw. Parámetro que habilita un códec en específico.
La sección [general] de [Link] en el fichero de ejemplo, puede
agruparse en subsecciones, hay opciones relativas a la context=redesplus. Contexto del dialplan asociado con este
configuración de la red (interfaz, puerto, etc), a cómo gestionar usuario.
los terminales tras la NAT, el jitter-buffer, o al propio
comportamiento de Asterisk como terminal SIP. Tras las Configuración del dialplan: [Link]:
opciones generales vienen los clientes que queramos
especificar, en la configuración del cliente debemos especificar El archivo [Link] es uno de los archivos principales de
al menos, tipo de cliente, campo host, y la contraseña o claves Asterisk, pues en él es donde se configura el dialplan. El
RSA utilizadas; Algunos de los parámetros más usados para dialplan consiste en una serie de contextos, en los cuales existen
los usuarios son: extensiones que tienen varias prioridades.
Las extensiones de Asterisk son diferentes a las extensiones
username=usuario. Parámetro para identificar al usuario tradicionales de una PBX, no solo incluyen números
de la extensión. telefónicos, pueden ser de texto o ser alguna de las extensiones
especiales o por defecto.
El archivo [Link] tiene un contexto [general] y otro
[globals]. Establecen algunas opciones respecto a cómo se
Informe Final: Configuración de Servicios y Administración del Servidor Asterisk VoIP. 22 /01/2020 2
tratará el dialplan (en el primero) y en el segundo como [usuario](!)
variables globales que se quieran definir. type=friend
host=dynamic
Para crear un contexto básico de llamada se tiene lo siguiente: secret=123
transport=udp
context=redesplus
exten => <extensión>,<prioridad>,<aplicación> videosupport=yes
disallow=all
[redesplus] allow=ulaw
1. exten => _xxx,1,Dial(SIP/${EXTEN},15,tT) allow=h264
insecure=invite
_xxx: Capturar las extensiones de 3 dígitos que pueden tomar
valores de 0 al 999; 1 indica la prioridad del proceso; [redesplus]
Dial(SIP/${EXTEN},15,tT): Llamar a la extensión indicada. El exten => _2xx,1,Dial(SIP/${EXTEN},15,tT)
parámetro de la acción Dial() específica a dónde enviar la exten => _2xx,2,Voicemail(${EXTEN}@voicemail)
llamada; “SIP” indica el protocolo; “${EXTEN}” contiene el exten => _2xx,3,Playback(vm_goodbye)
exten => _2xx,4,Hangup
número de extensión marcado por el usuario y 15 hace
referencia al tiempo por el cual recibirá la llamada el servidor.
2. Servicio de Buzón de voz
2. exten => _xxx,2,Voicemail($EXTEN}@voicemail) El buzón de voz es un sistema centralizado de manejo de
mensajes telefónicos para un gran grupo de personas. Permite a
Si el destinatario no contesta la llamada, se direcciona los usuarios recibir, almacenar y gestionar mensajes de voz de
automáticamente al buzón de mensajes. las personas que le llaman cuando se encuentra ausente o con la
línea ocupada.
3. exten => _xxx,3,Playback(vm_goodbye) Para establecer este servicio en necesario modificar dos scripts
en Asterisk, uno de ellos es [Link] el cual remite al
Playback reproduce el audio vm_goodbye. usuario al script [Link] donde se encuentra el contexto
voicemail que es el encargado de almacenar y gestionar los
4. exten => _xxx,4,Hangup mensajes de voz en caso de no ser atendida la llamada, y
también se genera un plan de marcación para acceder al buzón
Hangup: Terminar la llamada. Sólo se ejecuta la acción de voz en este caso de acceder llamando al *123.
Hangup() cuando la llamada no consigue establecer la
[voicemail]
comunicación, bien porque el usuario no está disponible, no 201 => 123, Usuario, Usuario@localhost
descuelga, o rechaza la llamada. En ese caso, Hangup() cuelga 202 => 123, Usuario2, Usuario2@localhost
la llamada al usuario llamante.
[redesplus]
II. CONFIGURACIÓN DE SERVICIOS exten => *123,1,Answer
exten => *123,2,Wait(1)
1. Servicio de llamada de voz exten => *123,3,VoiceMailMain(${CALLERID}@voicemail)
exten => *123,4,Hangup
Una llamada voz es la operación en la que se comunican
generalmente 2 personas, aunque pueden ser varias personas, a
3. Servicio de multiconferencia
ambos extremos de una línea telefónica.
El multiconferencia es un servicio que permite organizar
La comunicación se realiza mediando una petición de un cliente
una conferencia telefónica a un grupo de personas, pudiendo
a un proveedor de servicio (servidor), usando el protocolo de
comunicarse entre sí de forma simultánea.
comunicación UDP, y protocolo de señalización SIP (Session
Para este servicio Asterisk cuenta con el script [Link]
Initiation Protocol), para que se pueda establecer este servicio
en donde se definen los parámetros para el administrador de la
en Asterisk es necesario modificar el script [Link] donde se
conferencia, tales como clave de ingreso (pin), tipo de usuario
crean las etiquetas nombradas anteriormente que identificaran
(type), la etiqueta para establecer si el administrador ya está
a los usuarios con sus respectivas características que
marcado (marker); para los usuarios también se usan las
interconectaran con el Servidor VoIP.
etiquetas pin y tipo de usuario, como también wait marker para
esperar que un administrador entre a la conferencia, al igual que
Del mismo modo se crea un contexto en el script
end marker para eliminar la conferencia en caso que el
[Link] con el cual se habilitará el plan de llamada, en
administrador salga de ella.
este script indicaremos los pasos que seguirá el cliente al
realizar la llamada, como se explicó en el punto anterior.
[admin_user]
En caso de que la llamada no sea atendida, se pasa al remitente type = user
al servicio de buzón de voz que se explicara más adelante. pin = 123
marked = yes
admin = yes
Informe Final: Configuración de Servicios y Administración del Servidor Asterisk VoIP. 22 /01/2020 3
[default_user] MESSAGE(body) – el contenido del mensaje
type = user
pin = 000 Se guarda el contenido de ${EXTEN} en la variable dest y
wait_marked = yes con la aplicación Messagesend se envía el mensaje al
end_marked = yes
destinatario indicando el remitente, luego se genera
${MESSAGE_SEND_STATUS} que es enviada a la consola
Al igual que en los servicios anteriores es necesario realizar un para saber si el mensaje ha sido enviado con éxito, ahora con
plan de marcación para la conferencia en el script de Gotoif se controla el valor de la variable
[Link]. ${MESSAGE_SEND_STATUS}, si es distinto a SUCCESS
es dirigido al contexto failed, extensión s, prioridad 1.
[redesplus]
exten => 2222,1,Progress()
exten => 2222,2,Wait(1) [messages]
exten => 2222,3,ConfBridge(1,default_bridge,default_user) exten => _x.,1,Noop(Mensaje de ${MESSAGE(from)})
same => n,Noop(Mensaje para ${MESSAGE(to)})
exten => 1111,1,Progress() same => n,Noop(Texto = ${MESSAGE(body)})
exten => 1111,2,Wait(1) same => n,Set(dest=${EXTEN})
exten => 1111,3,ConfBridge(1,default_bridge,admin_user) same => n,Messagesend(sip:${EXTEN},${MESSAGE(from)})
same => n,Noop(Estado del mensaje
${MESSAGE_SEND_STATUS})
4. Servicio de mensajes de texto same => n,GotoIf(¡$[“${MESSAGE_SEND_STATUS}” !=
Se basa en un protocolo independiente, aunque no exista un "SUCCESS"]?failed,s,1)
diálogo (una llamada) entre las dos extensiones. Los mensajes same => n,Hangup
enviados se procesan a través del dialplan, donde se usa el
protocolo SIP MESSAGE para enviar mensajes de texto entre
los usuarios de nuestro servidor Asterisk. Para su configuración En el contexto [failed] se asigna a la variable
se deben seguir los siguientes pasos: (MESSAGE(body) el texto que será enviado a la extensión
para comunicarle que el mensaje no se ha podido enviar. En la
1. Modificar el archivo de configuración [Link] tercera y cuarta líneas, se extrae la URI del remitente del
mensaje enviado sin éxito y se asigna a la variable ${remit},
accept_outofcall_message=yes. Permite el envío de mensajes luego se envía el mensaje y como remitente se pone
instantáneos. “CentroMensajes”, finalmente se averigua si el mensaje ha sido
enviado con éxito.
outofcall_message_context=messages. contexto del dialplan
donde se procesarán los mensajes enviados. [failed]
exten => s,1,Set(texto=${MESSAGE(body)})
auth_message_requests=yes. Por cada mensaje enviado, same => n,Set(MESSAGE(body)="El Mensaje - ${texto} - para
Asterisk pedirá a la extensión autenticarse. ${dest} no ha sido enviado")
same => n,Set(remit=${CUT(MESSAGE(from),<,2)})
subscribecontext=subscribe. Contexto donde se same => n,Set(remit=${CUT(remit,@,1)})
configurarán las extensiones hint para permitir a las extensiones same => n,MessageSend(${remit},CentroMensajes)
same => n,Noop(Estado del mensaje
de subscribir el estado de las demás.
${MESSAGE_SEND_STATUS})
same => n,Hangup
2. Modificar el archivo de configuración
[Link] 5. Servicio de Videollamada
videollamada es la comunicación simultánea bidireccional de
Aquí se crean tres contextos. El contexto [subscribe] para el audio y vídeo, que permite mantener reuniones con grupos de
monitoreo de las extensiones registradas en el dialplan personas situadas en lugares alejados entre sí.
mediante comando “hint”. La configuración de la videollamada se realiza de manera
sencilla, ya que reutiliza los mismos usuarios disponibles para
[subscribe]
las llamadas, solo es necesario agregar los códec que soporten
exten => _xxx,hint,SIP/${EXTEN}
exten => _202,hint,SIP/202 video como son h263, h263p, h264 y habilitar la función de
video videosupport=yes, de igual manera se reutiliza el
En el contexto [messages] se procesarán los mensajes enviados. contexto definido para llamada [Link],
La función MESSAGE contiene los siguientes datos del
mensaje enviado, que son las variables que se van a presentar 6. Servicio Backtone
en la consola de Asterisk con las primeras tres líneas: Backtones es un servicio que permite a los usuarios cambiar su
tono de espera, de tal forma que cuando los llamen se escuche
MESSAGE(from) – el destinatario un tono diferente al timbre tradicional. Para habilitar este
MESSAGE(to) – el remitente servicio solo requiere adicionar la m en el contexto de los
Informe Final: Configuración de Servicios y Administración del Servidor Asterisk VoIP. 22 /01/2020 4
usuarios ubicado en el script extensió[Link], como se muestra [general], donde se hará un registro para que un proveedor pueda
en a continuación con el recuadro azul. recibir llamadas de otro proveedor, en este registro se indica el
username del proveedor del que recibiré llamadas, su clave y su
[redesplus] dirección de host, mediante el comando register.
exten => _2xx,1,Dial(SIP/${EXTEN},15,tT m)
exten => _2xx,2,Voicemail(${EXTEN}@voicemail) register => fromuser:passwordsecret@host
exten => _2xx,3,Playback(vm_goodbye)
exten => _2xx,4,Hangup
posteriormente, crear un usuario con los datos que el proveedor
me halla indicado, username, secret (contraseña), los códec que
7. Servicio de identificador de llamada el me indique, type (peers - depende si solo voy a recibir
El servicio de identificación de llamada permite saber quién llamadas o Friends – si también las realizaré) e insecure=invite
llama al teléfono antes de atender la llamada. Este servicio se (realiza la llamada por el Asterisk al proveedor).
puede habilitar adicionando CALLERID= “nombre del
usuario”, en las etiquetas que identifican a cada uno, en el [AsteriskA](usuario)
archivo [Link]. username=AsteriskA
secret=1234
8. Servicio de transferencia de llamada
La transferencia de llamada es un servicio muy útil, cuando se Posteriormente, en el archivo [Link] realizamos un
quiere que alguien más atienda su llamada entrante. Su plan de llamado, con los abonados que voy a recibir del
configuración requiere de agregar a la primera línea del plan de proveedor.
llamada de los usuarios las opciones T y t.
T => permite que el remitente realice transferencia de llamadas. [redesplus]
t => permite que el destinatario realice transferencia de exten => _2xx,1,Dial(SIP/${EXTEN}@AsteriskC,10,tT)
llamadas. exten => _2xx,2,Hangup
9. Servicio de Telefonía IP 11. Servicio Grabación de voz
La telefonía IP o VoIP (Voice over Internet Protocol) es aquella Permite a los usuarios grabar audios para su posterior
telefonía en la que la señal de voz se envía en forma de paquetes utilización como por ejemplo crear menús IVR, además luego
de datos a través de Internet (voz sobre IP) o de una Red Privada de grabarlos permite escucharlos.
Virtual (VPN).
Para hacer una comunicación con un teléfono IP es necesario que Para crear este servicio se debe modificar en el script
este cuente con un usuario registrado en el archivo [Link] [Link] en el contexto “redesplus” se creó una
como los que se han nombrado anteriormente, de igual manera extensión para grabar el audio, el usuario puede llamar a
es necesario que esté conectado a la misma red del servidor, para cualquier número que inicie en 66xx donde las x son el numero
que este le asigne automáticamente una dirección IP o fijarle de la grabación ejemplo 6622, primero Asterisk responde la
una. llamada, luego con Playback reproduce el audio grabvoz,
Para su configuración es necesario hacer dos pasos importantes después con Record graba el mensaje, lo guarda en la ruta
mediante vía web entrando por la dirección IP del teléfono o tmp/prompt y le da por nombre la extensión del cliente y
directamente en el teléfono. El primero es dejarlo en DHCP (Ip formato tipo wav, además le da un segundo de silencio al iniciar
automática) o configurar una IP fija, lo cual necesita lo siguiente la grabación y una duración máxima de 360 segundos, al pulsar
parámetros: Dirección IP, mascara de subred, Default Gateway # se termina la grabación, luego se espera 2 segundos y con
(Ip router) y DNS primario (normalmente Ip router). Playback reproduce el audio grabado, espera otros 2 segundos
y cuelga.
El segundo paso a realizar es configurar la cuenta con la cual el
teléfono Ip se ira a comunicar con los demás usuarios, para esto exten => _66XX,1,Answer()
es necesario tener los parámetros de: username, secret exten => _66XX,n,Playback(/etc/asterisk/grabvoz)
(contraseña), dirección IP servidor, puerto (en caso de haber exten =>
cambia el puerto por defecto 5060), y definir el protocolo de _66XX,n,Record(/tmp/prompt${EXTEN:2}:wav,[1,[360,[t]]])
comunicación UDP. exten => _66XX,n,Wait(2)
exten => _66XX,n,Playback(/tmp/prompt${EXTEN:2})
10. Confianza entre servidores exten => _66XX,n,Wait(2)
exten => _66XX,n,Hangup()
La confianza entre servidores (troncal SIP), permite establecer
un canal de comunicación entre dos o más servidores Asterisk,
para que se puedan realizar llamadas entre los usuarios de cada 12. Servicio IVR - Lista de contactos
servidor. Para implementar esta troncal SIP es necesario Un IVR es un menú de voz que permite interactuar de forma
modificar los dos scripts que se han venido trabajando [Link] automática con el otro extremo de la comunicación con un fin
y [Link]. determinado, siendo un sistema automatizado de respuesta
interactiva, orientado a entregar y/o capturar información
El primer paso para realizar la troncal es enlazar un proveedor automatizada a través del teléfono, permitiendo el acceso a
(servidor), esto se realiza en el archivo [Link], en la opción de
Informe Final: Configuración de Servicios y Administración del Servidor Asterisk VoIP. 22 /01/2020 5
servicios de información y operaciones autorizadas, las 24 exten => 1,1,NoOp()
horas del día. same => n,Playback(/etc/asterisk/electronica)
same => n,Hangup()
Para empezar con la configuración de un IVR se necesita
primero grabar un audio de voz con las opciones que tendrá el [Link] de parqueo de llamada
menú, para ello se utilizó el servicio ya configurado de Consiste en trasladar la llamada a la extensión 700 estando allí
grabación de voz, además dentro del contexto “redesplus” se el usuario queda espera hasta que otro usuario se comunique a
creó la extensión *104, la cual responde la llamada, espera un las líneas desde la 701 a la 799 donde se organizan en orden los
segundo y luego accede al IVR configurado en el contexto usuarios que entran en parqueo, si ningún usuario atiende la
“contactos”. llamada, automáticamente la función remarca a la extensión
que realizo el parqueo.
exten => *104,1,Answer()
exten => *104,2,Wait(1) ;espera un segundo Para hacer esto posible se agrega en el [Link] lo siguiente:
exten => *104,3,Goto(contactos,Inicio,1)
[general]
Se crea el contexto [contactos], donde NoOp muestra lo que parkext => 700
está sucediendo de fondo en el CLI del asterisk, luego parkpos => 701-799
Background reproduce el audio contactos almacenado en la ruta
dada, espera 10 segundos mientras el usuario ingresa alguna Además, en el [Link] lo siguiente:
extensión, si una extensión es ingresada, la llamada será
redirigida a dicha extensión, si el usuario no contesta en 15 include => parkedcalls
segundos, será enviado al buzón de voz, luego Playback
exten => 700,1,Park()
reproduce un adiós y finalmente se cuelga la llamada. exten => 700,2,hangup
[contactos] exten => 7xx,1,Parkedcall(${EXTEN})
exten => Inicio,1,NoOp() exten => 7xx,2,hangup
same => n,Background(/etc/asterisk/contactos)
same => n,WaitExten(10)
exten => 1,1,NoOp() III. PROBLEMAS DE CONFIGURACIÓN
same => n,Dial(SIP/201,15,tT)
same => n,Voicemail(201@voicemail) ➢ Para configurar audios dentro las llamadas bajo la
same => n,Playback(vm_goodbye) función Playback() y Background() de [Link]
same => n,Hangup()
se probó descargando los audios en uno de los formato
soportados por Asterisk (.wav ) con una tasa de 44100,
13. Servicio IVR – Playlist
luego de realizar algunas pruebas se encontró que la
Este servicio contiene una lista de reproducción guardada en el
central no era capaz de reproducir el audio ya que la
proveedor del servicio (servidor), con la cual el cliente puede
frecuencia soportada es 8000, al realizar el cambio en
acceder marcando a la extensión *103, al igual que el servicio
el audio surgió un nuevo inconveniente ya que dichos
nombrado en el punto anterior, este contiene un menú IVR con
audios eran archivos musicales para el servicio IVR-
el cual el usuario podrá interactuar para acceder al contenido.
playlist contenían audio en dos canales que no son
soportados por asterisk, luego de realizar la conversión
Para habilitar este servicio se requiere crear un usuario en el
de los archivos de estéreo a mono se logró solucionar
archivo [Link], únicamente con la etiqueta callerid=”nombre
el problema.
deseado”, de igual manera, se modifica el archivo
➢ Al momento de intentar configurar el teléfono sip se
[Link] en donde se configura el plan de llamada, y el
encontró que este no logra recibir una asignación de
menú IVR con cada una de las opciones, para este caso las
dirección ip por el protocolo DHCP, luego de realizar
extensiones habilitadas fueron, 1 (Playlist electrónica), 2
algunas configuraciones dentro del router que se
(Playlist reguetón), y 3 (Playlist popular), estos playlist se
estaba utilizando de marca HUAWEI no era posible
reproducen con la función playback que tiene como parámetro
que el teléfono se conectara a la red, procediendo a
de entrada la ruta donde se encuentra.
través del manual a realizar una configuración de ip
manual tampoco era posible establecer conexión con
exten => *103,1,Answer()
exten => *103,2,Wait(1) ;espera un segundo el teléfono por último se decidió utilizar uno de los
exten => *103,3,Goto(menu,Start,1) router proporcionados por el docente para esta
actividad, luego de resetearlo y activar el protocolo
[menu] DHCP y configurar la dirección ip del router en la red
exten => Start,1,NoOp()0 por defecto del teléfono ([Link]) además de dejar
same => n,Background(/etc/asterisk/musica) las ips disponibles para host desde [Link] hasta
same => n,WaitExten(10) [Link] se logró que el teléfono lograra
conectarse satisfactoriamente a la red a través de la ip
Informe Final: Configuración de Servicios y Administración del Servidor Asterisk VoIP. 22 /01/2020 6
que el mismo se asigna por defecto ([Link]), ya
con esto es muy sencillo realizar su configuración.
IV. CONCLUSIONES
➢ El teléfono sip t20 no es capaz obtener una dirección
ip mediante el protocolo DHCP con algunos routers,
las pruebas se realizaron con el modelo EchoLife
HG8245H de la marca Huawei, cabe aclarar otros
dispositivos si se conectaban con normalidad a este
dispositivo.
➢ La relación de confianza es permitida solo si se cuenta
con la dirección IP, password y nombre de usuario
suministradas por el proveedor, de igual manera es
necesario habilitar el comando insecure=invite para
que al momento de realizar una comunicación entre
usuarios de distintos servidores no sea necesaria la
autentificación, dentro de los usuarios del servidor
remitente.
➢ Asterisk tiene la posibilidad de albergar distintos
scripts en lenguajes de programación como Python,
javascript entre otros dando posibilidades
prácticamente infinitas en cuanto a planteamiento de
nuevos servicios
V. REFERENCIAS
[1] Asterisk. disponible en la web: [Link]
consultada el 22/01/2020.
[2] Manual de Asterisk y otras hierbas, Instalación y Configuración de
Asterisk, Universidad de Cádiz, Fabián Sellés Rosa.
[3] Brezocnik Z, Vlaovic B. (2001) Packet based telephony. In:
Proceedings of international conference on trends in communications,
vol. 1; p. 210–3.
[4] Asterisk 10 y los mensajes instantáneos (SIP MESSAGE) -
HowTo. disponible en la web:
[Link] consultada el 22/01/2020.