Академический Документы
Профессиональный Документы
Культура Документы
(Laboratorio)
2
INDICE
Presentación 5
Red de Contenidos 7
UNIDAD 1: Introducción a Asterisk 9
1.1. Introducción a Asterisk 10
1.1.1. Origen y Evolución de Asterisk. 12
1.1.2. Capacidades 15
1.1.3. Instalación Pre compilada de Asterisk 20
1.2. Instalación Manual de Asterisk 36
1.2.1. Librerías Necesarias 37
1.2.2. Configuración y Compilación del Código Fuente. 38
1.2.3. Instalación y arranque de Asterisk 49
1.3. Arquitectura de Asterisk 55
1.3.1. Arquitectura de Funcionamiento. 56
1.3.2. Sistema Operativo 56
1.3.3. Interfaces de Comunicación 57
1.3.4. Directorios y Archivos de Configuración. 63
1.3.5. Comandos y Control de Procesos 64
PRESENTACIÓN
El curso está elaborado para proporcionar al alumno una base general en las clases
teóricas, y casos prácticos e implementaciones que se desarrollarán en las clases de
laboratorio, cuyos temas tratan sobre los fundamentos y las buenas prácticas en las
Redes de Voz. El curso da inicio con una introducción general sobre telefonía
convencional, posteriormente se aborda la teoría necesaria sobre arquitectura y
protocolos para dar soporte a la implementación de casos prácticos sobre VoIP,
requisitos de red para la calidad de voz y finalmente, recomendaciones de seguridad
en las redes de voz
RED DE CONTENIDOS
Redes de Voz
Tema 4 Tema 5
Configuración Configuración
de entidades del Plan de
SIP Marcación
Tema 10
Interconexión
SIP
Unidad de
Aprendizaje
INTRODUCCIÓN A ASTERISK
TEMARIO
• Introducción a Asterisk
• Instalación Manual de Asterisk
• Arquitectura de Asterisk
ACTIVIDADES PROPUESTAS
Asterisk es una PBX (Private Branch Exchange) de código abierto, creado por Digium,
Inc. y posee un número de usuarios y desarrolladores que crece constantemente.
Digium invierte en el desarrollo del código fuente de Asterisk así como hardware de
telefonía de bajo costo que funciona con Asterisk.
Asterisk funciona en Linux y otras plataformas Unix con o sin hardware que se conecta
el servidor a la red PSTN. Asterisk representa una pieza muy valiosa de software por
una serie de razones:
En combinación con hardware de bajo costo de telefonía, Asterisk puede ser utiliza
para crear un PBX a una fracción del precio de PBX tradicionales, mientras que
proporciona un nivel de funcionalidad superior a la de muchos de los sistemas más
caros disponibles.
b) Control
Asterisk permite al usuario tomar el control de su sistema telefónico. Una vez que una
llamada está en una Máquina Linux con Asterisk, se puede hacer cualquier cosa con
ella. De la misma manera que Apache ofrece al usuario un control más preciso sobre
prácticamente todos los aspectos de su operación (la naturaleza de su código abierto
le da una flexibilidad aún mayor), lo mismo ocurre con Asterisk
d) Personalización
De la misma manera que los servidores web como Apache permite que un usuario
desplegar contenido dinámico, como la información de la cuenta, horarios de películas,
etc, en la web, Asterisk le permite desplegar contenido dinámico a través del teléfono,
con la misma facilidad como CGI.
Mark Spencer empezó en el mundo Linux con Slackware en 1994 (kernel versión
1.09). Uno de los pocos en Auburn, Alabama por aquellos tiempos que conocía
cualquier cosa sobre Linux. Después de una temporada con Adtran (un proveedor
global de equipos de telecomunicaciones) creó su propia compañía.
Asterisk, la aplicación de centralita telefónica PBX bajo licencia GPL, fue desarrollada
por Mark Spencer, entonces estudiante de ingeniería informática en la Universidad de
Auburn, Alabama. Mark había creado en 1999 la empresa "Linux Support Services"
con el objetivo de dar soporte a usuarios de Linux. Para ello necesitaba una centralita
telefónica, pero ante la imposibilidad de adquirirla dados sus elevados precios, decidió
construir una con un PC bajo Linux, utilizando lenguaje C.
El dinero era escaso en Digium hasta que un día un vendedor de DeltaCom (una
competitiva compañía de comercio local) entró para venderles a Mark y a Jim una T1.
Después de entender lo que Mark y Jim habían hecho el vendedor se ofreció a
Cuando Mark empezó con Asterisk hizo una cosa muy inteligente. Se le requería
firmar un acuerdo a cada desarrollador que contribuía en el código para que el
copyright se asignara a Asterisk y el compromiso que no hay encumbramientos en el
código contribuido. Esto le permitió sentirse confortable con su proyecto que era
completamente open source y que su compañía podría relicenciar el código a
vendedores OEM como 3COM y NTT. Digium también ha hecho las cosas bien al
mantener la versión de la comunidad con la funcionalidad completa y no crear una
escisión entre ellos y los que los apoyan.
La primera entrega fue Asterisk 0.1 (Diciembre de 1999), y el tarball ocupaba tan sólo
124.3K que una vez descomprimido venían a ser unos 506 KB en 96 archivos. Para
correr Asterisk necesitábamos básicamente Linux y libaudiofile:
Esta primera entrega fue liberada en 1999 bajo licencia GPL2 pero tenía clausulas
adicionales que indicaban que en todos los productos derivados debía constar el
nombre de Linux Support Services, LLC o Adtran Inc., también advertían sobre códecs
cubiertos por patentes de software, y la más curiosa es que si emprendíamos acciones
legales por infringir patentes en referencia a algún software Open Source nuestro
derecho a usar o distribuir el software se terminaba de inmediato:
=================================================================
Please note that Asterisk is distributed under the GNU General
Public License, with the following additional notices (some of
these notices may be revised or relaxed in future releases):
a) All distributions or derivative works MUST not remove
the name of Linux Support Services, LLC or Adtran, Inc. from
the product.
b) Some codecs included in the full Asterisk distribution
*may* be covered by software patents.
c) If You bring legal action against an organization or
individual for patent infringement regarding any Open Source
software (as defined by the Open Source Definition available at
http://www.opensource.org/osd.html) then your right to use and/or
distribute this software is immediately terminated.
=================================================================
De todos modos estas clausulas duraron bien poco, ya que de los primeros cambios
que se hicieron para la release 0.1.1 fue aparte de arreglar numerosos bugs revisar la
licencia que pasó a ser pura GPL, y nada más.
* Asterisk 0.1.1
-- Revised translator, fixed some general race conditions throughout *
-- Made dialer somewhat more aware of incompatible voice channels
-- Added Voice Modem driver and A/Open Modem Driver stub
-- Added MP3 decoder channel
-- Added Microsoft WAV49 support
-- Revised License -- Pure GPL, nothing else
-- Modified Copyright statement since code is still currently owned by author
-- Added RAW GSM headerless data format
-- Innumerable bug fixes
1.1.2. Capacidades
Asterisk por definición es una PBX, por lo que en general su definición indica que es
una rama privada de conmutación, por lo que se supone que esta rama habrá de
unirse de alguna manera al tronco principal de conmutación por algún medio.
Asterisk posee una gran variedad de capacidades y cada vez aparecen más, sin
embargo el poseer tantos aportes pueden llegar a desvirtuar su eficiencia dado que
existe más procesos tomando carga del servidor.
Es por esto que es importante el tener clara la funcionalidad que se desea obtener de
asterisk desde un inicio a fin de poder dimensionar sus capacidades y requerimientos
de carga. Desde este punto de vista podemos clasificar a asterisk como 3 tipos de
entidades SIP las cuales se describen a continuación:
• Central de telefonía
• Callcenter
• Inbound
• Out Bound
• Blending
• Buzón de voz
• DISA
• CTI
• Tarificador
• Servidor de FAX
1.1.2.2. Proxy
Asterisk funciona como proxy cuando se encarga de redireccionar las llamadas hacia
distintos puntos, si bien la funcionalidad de redirección está siempre presente, incluso
en el aplicaction server.
Se puede diferenciar un proxy de una central común debido a que cumple las
siguientes características:
• Debido a la carga que soportará un SIP proxy no suele estar diseñado para
brindar servicios de valor añadido dado que esto resta calidad al funcionamiento
base de la comunicación.
Un Media Gateway se define como un equipo que permite ser la interface entre 2
medios de comunicación implicando siempre que el contenido mismo de la información
transita por dicho equipo.
• Grabación de llamadas
• Trasncoding
• Interfase a la PSTN
• Traduccion de Protocolos
• IVR
• Servidor de conferencias
Así también podemos notar que todo el flujo de comunicación es controlado desde el
servidor Proxy, siendo este el que hace la redirección del tráfico entrante hacia los
servidores de aplicaciones adecuados.
Dado que asterisk ha llegado a ser una aplicación bastante utilizada, existe en la
actualidad varias versiones pre compiladas de asterisk para distintos sistemas
operativos. En general la instalación de asterisk de modo pre compilado es una
decisión de compromiso dado que así como brinda beneficios también trae ciertas
limitaciones brinda ciertos beneficios:
• Rápido despliegue
• Variedad de aplicaciones
• Fácil administración
• Orientado a Servidores de Aplicaciones
Sin embargo la decisión de utilizar esta forma de Asterisk también trae ciertas
desventajas:
• Limitada personalización
• Más carga de lo necesario
• Limitado Soporte
• Pocas opciones de Soporte
Es por esto que la forma de implementar asterisk deberá implicar un proceso de toma
de decisión a fin de poder encontrar la opción más acorde a las solución que
deseemos implementar tomando en cuenta factores como uso, tiempo de
implementación y nivel de personalización.
Se verifica que se tiene acceso a internet en caso de estar conectado a la red con un
servidor de DHCP presente.
Dado que se seleccionó el ingreso automático está será la pantalla que se mostrará
luego del inicio
1.1.3.2. Configuración IP
Se debe acceder al símbolo de red en la parte superior izquierda, haciendo clic (este
símbolo varía de icono según él estado de la red)
Una vez cerrada la interface puede ser necesario que se reinice la interface para lo
cual es necesario regresar al menú desplegable de la red y hacer clic en la interface
recién configurada
• Copiar archivos
• Crear directorios
• Probar conectividad IP
• Editar archivos de configuración
• Iniciar procesos
• Detener procesos
• Instalar aplicaciones
• Compilar código fuente
En Ubuntu para el manejo de repositorios es apt-get, siendo con este comando que se
podrá ejecutar:
• La actualización de repositorios
• Actualización de paquetes
• Instalación de paquetes pre-compilados
• Desinstalación de paquetes
Dado que este comando requiere autorización, se deberá anteponer el comando sudo
cada vez que se ejecute, así también es importante recalcar que solo se podrá
ejecutar un proceso de apt-get a la vez. En caso de que el administrador de paquetes
del entorno gráfico se encuentra abierto no se podrá ejecutar el comando apt-get. Por
lo que se deberá cerrar antes de ejecutar un proceso que implique cambios en la lista
de los paquetes instalados.
Como se puede ver es una instrucción bastante sencilla, sin embargo el ver la lista de
paquetes adicionales que requiere nos puede hacer comprender la magnitud de lo
amplio que es asterisk.
• Nombre de usuario
• Dominio
• Contraseña
• Identificador de llamante
Dado que asterisk será instalado a partir de código fuente es necesario realizar
algunas preparaciones para poder copilar las fuentes a fin de convertirlo en código
binario y finalmente ejecutar la instalación. Los procedimientos a ejecutar para la
instalación de asterisk son los siguientes:
• Instalación de librerías
• Adecuación del código fuente
• Compilación de binarios
• Instalación de binarios
• Instalación de archivos de muestra
• Build-essentials
• Libncurses5-dev
rvoz@asterisk-rvoz:~$ sudo apt-get install libncurses5-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libiksemel3 debhelper module-assistant dahdi freetds-common
libradiusclient-ng2 libopenais3 libtonezone2.0 po-debconf libsqlite0
libss7-1 libcorosync4 libresample1 odbcinst libopenr2-3
asterisk-core-sounds-en-gsm libmail-sendmail-perl unixodbc dahdi-dkms
vpb-driver-source libvpb0 libcurl3 odbcinst1debian2 mlock dkms
libspandsp2 dahdi-linux libc-client2007e libgsm1 libsox-fmt-base sox
libsybdb5 libsox-fmt-alsa asterisk-config libpq5 html2text libpri1.4
libopencore-amrnb0 libsox1b fxload libsys-hostname-long-perl
libopencore-amrwb0
Use 'apt-get autoremove' to remove them.
Suggested packages:
ncurses-doc
The following NEW packages will be installed:
libncurses5-dev
0 upgraded, 1 newly installed, 0 to remove and 214 not upgraded.
Need to get 0 B/290 kB of archives.
Copia del archivo comprimido a la carpeta estándar para el código fuente: /usr/src
rvoz@asterisk-rvoz:~$ pwd
/home/rvoz
rvoz@asterisk-rvoz:~$ sudo cp Downloads/asterisk-1.4-current.tar.gz /usr/src/
rvoz@asterisk-rvoz:~$ cd /usr/src/
Una vez copiado el código fuente se debe descomprimir y verificar que se tienen los
archivos necesarios.
Una vez descompreso el codigo fuente se debe validar que se tienen todas las
librerías necesarias para lo cual se utiliza el aplicativo “configure” el cual debe
ejecutarse como super usuario. Es importante verificar la salida de este comando y
comprobar que no presenta ningún error dado que esto valida que se tienen todas las
librerías necesarias.
rvoz@asterisk-rvoz:/usr/src/asterisk-1.4.36$
rvoz@asterisk-rvoz:/usr/src/asterisk-1.4.36$ sudo ./configure
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking whether it is safe to define __EXTENSIONS__... yes
checking for uname... /bin/uname
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ISO C89... (cached) none needed
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking how to run the C preprocessor... gcc -E
checking how to run the C++ preprocessor... g++ -E
checking for a sed that does not truncate output... /bin/sed
checking for egrep... grep -E
.$$$$$$$$$$$$$$$=..
.$7$7.. .7$$7:.
.$$:. ,$7.7
.$7. 7$$$$ .$$77
..$$. $$$$$ .$$$7
..7$ .?. $$$$$ .?. 7$$$.
$.$. .$$$7. $$$$7 .7$$$. .$$$.
.777. .$$$$$$77$$$77$$$$$7. $$$,
$$$~ .7$$$$$$$$$$$$$7. .$$$.
.$$7 .7$$$$$$$7: ?$$$.
$$$ ?7$$$$$$$$$$I .$$$7
$$$ .7$$$$$$$$$$$$$$$$ :$$$.
$$$ $$$$$$7$$$$$$$$$$$$ .$$$.
$$$ $$$ 7$$$7 .$$$ .$$$.
$$$$ $$$$7 .$$$.
7$$$7 7$$$$ 7$$$
$$$$$ $$$
$$$$7. $$ (TM)
$$$$$$$. .7$$$$$$ $$
$$$$$$$$$$$$7$$$$$$$$$.$$$$$$
$$$$$$$$$$$$$$$$.
NOTA: el símbolo que aparece en la parte superior indica que se han revisado
todas las dependencias y de que se puede continuar con la compilación
**************************************************
Asterisk Module and Build Option Selection
**************************************************
---> Applications
Call Detail Recording
Channel Drivers
Codec Translators
Format Interpreters
Dialplan Functions
PBX Modules
Resource Modules
Test Modules
Voicemail Build Options
Compiler Flags
Module Embedding
Core Sound Packages
Music On Hold File Packages
Extras Sound Packages
**************************************************
Asterisk Module and Build Option Selection
**************************************************
[*] app_directed_pickup
[*] app_directory
[*] app_disa
[*] app_dumpchan
[*] app_echo
[*] app_exec
[*] app_externalivr
[*] app_festival
XXX app_flash
[*] app_followme
[*] app_forkcdr
[*] app_getcpeid
[*] app_hasnewvoicemail
[*] app_ices
[*] app_image
[ ] app_ivrdemo
[*] app_lookupblacklist
[*] app_lookupcidname
[*] app_macro
XXX app_meetme
[*] app_milliwatt
[*] app_mixmonitor
[*] app_morsecode
[*] app_mp3
[*] app_nbscat
XXX app_osplookup
XXX app_page
[*] app_parkandannounce
[*] app_playback
... More ...
Es importante que se exploren todas las opciones que se pueden utilizar entre las más
importantes se encuentran la elección de que codecs podrán ser utilizados asi como
de que tipos de audios se utilizarán para los mensajes de ivr.
**************************************************
Asterisk Module and Build Option Selection
**************************************************
Applications
Call Detail Recording
Channel Drivers
Codec Translators
Format Interpreters
Dialplan Functions
PBX Modules
Resource Modules
Test Modules
Voicemail Build Options
Compiler Flags
Module Embedding
---> Core Sound Packages
Music On Hold File Packages
Extras Sound Packages
**************************************************
Asterisk Module and Build Option Selection
**************************************************
[ ] CORE-SOUNDS-EN-WAV
[ ] CORE-SOUNDS-EN-ULAW
[ ] CORE-SOUNDS-EN-ALAW
[*] CORE-SOUNDS-EN-GSM
[ ] CORE-SOUNDS-EN-G729
[ ] CORE-SOUNDS-EN-G722
[ ] CORE-SOUNDS-ES-WAV
[ ] CORE-SOUNDS-ES-ULAW
[ ] CORE-SOUNDS-ES-ALAW
[ ] CORE-SOUNDS-ES-GSM
[ ] CORE-SOUNDS-ES-G729
[ ] CORE-SOUNDS-ES-G722
[ ] CORE-SOUNDS-FR-WAV
[ ] CORE-SOUNDS-FR-ULAW
[ ] CORE-SOUNDS-FR-ALAW
[ ] CORE-SOUNDS-FR-GSM
[ ] CORE-SOUNDS-FR-G729
[ ] CORE-SOUNDS-FR-G722
Una vez configurado el código fuente de debe proceder a compilarlo e instalar los
binarios en las carpetas correspondientes. Salvo que se desee una configuración en
particular para la ubicación de estos binarios se puede realizar ambos procesos con la
información que se recopilo cuando se ejecutó el comando “configure”
La compilación del código fuente se realiza con el comando make sin argumentos:
Una vez compilado asterisk se debe instalar distribuyendo los archivos binarios a los
directorios adecuados, para tal fin se debe utilizar el comando make con el argumento
“install”
Una vez instalado asterisk tenemos que iniciar su ejecución. Dado que asterisk es un
demonio de Linux es necesario primero iniciar el proceso y luego conectarse al mismo
NOTA: Como vemos a la salida del comando ps, el número 24897 es el PID del
proceso que inició Asterisk
Una vez iniciado asterisk nos podemos conectar al mismo utilizando el comando
asterisk con parámetros –rvvvv siendo la cantidad de “v” el indicador del nivel de
verbosidad que se tendrá en la consola de Asterix.
Debido a las distintas interfaces que posee asterisk es fácil comprender que esta
solución está integrada por distintos módulos, controlando cada uno de estos módulos
una funcionalidad o interface de comunicación.
Asterisk ha sido desarrollado para el sistema operativo Linux con kernel 2.4 y 2.6, sin
embargo existen muchos grupos que han transportado esta solución a otros sistemas
operativos como Windows, Solaris y BSD.
Asterisk posee como solución principal para la conexión a la telefonía analógica el uso
de tarjetas que pueden poseer tanto interfaces para recibir líneas analógicas (FXO)
como interfaces para entregar líneas analógicas (FXS).
Entre los modelos más conocidos se encuentran AEX2400, AEX800; AEX410, etc.
La telefonía Digital fue uno de los primeros intentos para la consolidación de interfaces
de distribución de las líneas analógicas, siendo así que de desarrollaron interfaces que
permitían la entrega de varios canales de voz digitalizados utilizando para este fin un
solo medio full dúplex siendo TDM el método utilizado para compartir este medio entre
varios canales.
Un tipo de canal digital bastante común de canal digital es el llamado primarios, dado
que la interface que llega a cliente no distribuye las llamadas a equipos individuales,
sino que mantiene el comportamiento primario desde que salió del operador. En el
Perú el canal primario utiliza el estándar E1, el cual posee 32 canales de los cuales 2
de ellos son usados para sincronismo y control, quedando 30 canales de voz libres.
Dado que en la actualidad los canales primarios aun son de mucha utilidad para
interconectarse a la red PSTN Asterisk posee interfaces que le permiten conectarse a
redes con señalización Digital. Como es de suponer el principal fabricante de estas
interfaces es Digium siendo sus modelos principales los siguientes:
• TE120
• TE200
• TE400
• B410
Es interesante mencionar que si bien cada uno de estas conexiones tiene un par de
canales para el control y sincronismo, cada canal de voz posee un control
independiente uno del otro.
Asterisk es conocido principalmente por sus capacidades de central de voz sobre IP,
entre los principales protocolos que maneja están:
• SIP
• H323
• H248
• IAX2
• SIGTRAN
1.3.3.4. Elementos
Asterisk está formado por varias unidades funcionales que se comunican entre sí para
hacer la entrega de los servicios que presta. En el gráfico a continuación se muestra la
organización de los elementos de la arquitectura de asterisk:
a) Canales
Los canales son los procesos de asterisk encargados de crear las sesiones de
comunicación de acuerdo a cada protocolo de comunicación utilizado
b) Interfaces de control
Las interfaces de control son los medios estándares por los que podemos integrar
asterisk con otras aplicaciones que requieran controlar las funcionalidades de asterisk.
d) Códecs de Audio
Son los encargados de codificar y traducir distintos tipos de multimedia entre dos flujos
de comunicación.
e) Formatos de Audio
f) Logs y Registros
1.3.4.1. /etc/asterisk
1.3.4.2. /usr/lib/Asterisk/modules
1.3.4.3. /var/lib/Asterisk
1.3.4.4. /var/lib/astereisk/agi-bin
1.3.4.5. /var/spool/Asterisk
1.3.4.6. /var/log/Asterisk
1.3.4.7. /var/lib/asterisk/sounds/
Es en este directorio donde se guardan los audios que se ejecutaran por los comandos
en el plan de marcación.
Así también se revisan distintos comandos utilizados para el control de los procesos
de asterisk en Linux.
Una vez dentro del entorno de texto de asterisk se tiene un conjunto de instrucciones
nuevas, dado que la función de autocompletar está implementada, es fácil poder ver
que opciones se tiene disponible.
asterisk-rvoz*CLI> reload
== Parsing '/etc/asterisk/cdr.conf': Found
[Aug 21 17:30:25] NOTICE[24993]: cdr.c:1449 do_reload: CDR simple logging
enabled.
== Parsing '/etc/asterisk/dnsmgr.conf': Found
== Parsing '/etc/asterisk/extconfig.conf': Found
== Parsing '/etc/asterisk/enum.conf': Found
== Parsing '/etc/asterisk/manager.conf': Found
…
…
…
-- Added extension '_X.' priority 1 to page
-- Registered extension context 'default'
-- Including context 'demo' in context 'default'
== Parsing '/etc/asterisk/users.conf': Found
-- Reloading module 'cdr_custom.so' (Customizable Comma Separated Values
CDR Backend)
== Parsing '/etc/asterisk/cdr_custom.conf': Found
b) Detener Asterisk
El problema de iniciar asterisk en primer plano es que tan pronto nos desconectamos
de asterisk el proceso se detiene.
d) Salir de asterisk
El control de procesos es importante dado que nos permite validar que aplicaciones se
encuentran en ejecución asi como que puertos estás siendo ocupado por un programa
en particular.
RESUMEN
Unidad de
Aprendizaje
TEMARIO
ACTIVIDADES PROPUESTAS
El archivo sip.conf se lee de arriba hacia abajo. La primera sección es para las
opciones de servidores generales, tales como la dirección IP y el puerto para unirse.
Las siguientes secciones definen los parámetros del cliente, tales como el nombre de
usuario, contraseña y dirección IP por defecto para los clientes registrados. Las
secciones están delimitadas por un nombre entre paréntesis. La primera sección se
llama general (que no se puede utilizar como un nombre de cliente.)
[general]
atributo1=valor1
atributo2=valor2
atributo3=valor3
[usuario1]
atributo1=valor1 ;comentario 3, el atributo1, sobre escribe el
;valor1 del area general
atributo2=valor2
atributo3=valor3
[usuario2]
atributo1=valor1 ;comentario 4, el atributo1, sobre escribe el
;valor1 del area general
;en este caso el atributo1 no tiene injerencia
;con el atributo1 modificado en el usuario1
atributo2=valor2
atributo3=valor3
En las siguientes secciones comienzan con el nombre del cliente entre paréntesis,
seguido por las opciones del cliente.
a) Port
El puerto de Asterisk debe escuchar para las conexiones SIP. El valor por defecto es
el 5060, de acuerdo con las normas. Toma como argumento un número de puerto (que
no debe ser usado por ningún otro servicio.)
b) bindaddr
La dirección IP Asterisk debe escuchar para las conexiones SIP. Si la máquina tiene
múltiples direcciones IP real o alias, esta opción se puede utilizar para seleccionar las
direcciones IP Asterisk escucha. El comportamiento por defecto es escuchar en todas
las interfaces disponibles y los alias. Toma como argumento una dirección IP (que
debe ser una interfaz disponible en el sistema.)
c) context
Establece un contexto por defecto a todos los clientes que aparezcan, a menos que se
sustituya en su definición del cliente.
[general]
a) Type
La opción de tipo de juegos de la clase de conexión para el cliente. Las opciones son:
b) secret
c) host
d) defualtip
Esta opción se puede utilizar cuando la palabra clave de host está en dinámica.
Cuando se establece, el servidor Asterisk intentará enviar las llamadas a esta
dirección IP cuando se recibe una llamada de un cliente SIP que aún no se ha
registrado en el servidor.
e) Username
Esta opción establece el nombre de usuario del servidor Asterisk intenta conectarse
cuando se recibe una llamada. Se utiliza cuando por alguna razón, el valor no es el
mismo que el de nombre de usuario registrado.
f) Canreinvite
Esta opción se utiliza para indicar al servidor que nunca volver a invitar a un problema
al cliente. Esto se utiliza para interactuar con un poco de hardware (buggy) que los
accidentes si volver a invitar, como el común de Cisco ATA 186.
g) context
Cuando aparece en una definición de cliente, esta palabra clave define el contexto por
defecto para este único cliente.
[sedenorte]
type=friend
host=dynamic
context=sedenorte_incoming
secret=12345
disallow=all
allow=gsm
allow=ulaw
[cisco1]
type=friend
secret=blah
qualify=200 ; Qualify peer is no more than 200ms away
nat=yes ; This phone may be natted
; Send SIP and RTP to the IP address that packet is
; received from instead of trusting SIP headers
host=dynamic ; This device registers with us
canreinvite=no ; Asterisk by default tries to redirect the
; RTP media stream (audio) to go directly from
; the caller to the callee. Some devices do not
; support this (especially if one of them is
; behind a NAT).
defaultip=192.168.0.4 ; IP address to use until registration
username=goran ; Username to use when calling this device before
; registration
; Normally you do NOT need to set this parameter
setvar=CUSTID=5678 ; Channel variable to be set for all calls from this
device
* Name : cisco1
Secret : <Set>
MD5Secret : <Not set>
Context : default
Language :
AMA flags : Unknown
Transfer mode: open
MaxCallBR : 384 kbps
CallingPres : Presentation Allowed, Not Screened
Call limit : 0
Callgroup :
Pickupgroup :
Callerid : "" <>
ACL : No
Codec Order : (none)
Auto-Framing: No
Variables :
CUSTID = 5678
* Name : cisco1
Secret : <Set>
MD5Secret : <Not set>
Context : default
Subscr.Cont. : <Not set>
Language :
AMA flags : Unknown
Transfer mode: open
CallingPres : Presentation Allowed, Not Screened
Callgroup :
Pickupgroup :
Mailbox :
VM Extension : asterisk
LastMsgsSent : 32767/65535
Call limit : 0
Dynamic : Yes
Callerid : "" <>
MaxCallBR : 384 kbps
Expire : -1
Insecure : no
Nat : Always
ACL : No
T38 pt UDPTL : No
CanReinvite : No
PromiscRedir : No
User=Phone : No
Video Support: No
Trust RPID : No
Send RPID : No
Subscriptions: Yes
Overlap dial : No
Forward Loop : Yes
DTMFmode : rfc2833
LastMsg : 0
ToHost :
Addr->IP : (Unspecified) Port 0
Defaddr->IP : 192.168.0.4 Port 5060
Def. Username: goran
SIP Options : (none)
Codecs : 0x8000e (gsm|ulaw|alaw|h263)
Codec Order : (none)
Auto-Framing: No
Status : UNKNOWN
Useragent :
Reg. Contact :
Un plan de marcación define el conjunto de reglas que serán utilizadas para atender
las llamadas que lleguen a una central de conmutación. Este conjunto de reglas son
ejecutadas en función a distintos factores entre los factores más comunes se
encuentran:
• Numero marcado
• Numero de Origen
• Fecha y hora
• Interface de entrada de la central por donde llegó la llamada
• Opción de Menú marcada
[general]
--> some settings go here
[globals]
--> definition of some global variables go here
[context1]
-->extension 1, priority 1, application
-->extension 1, priority 2, application
...
[context2]
--> extension 999, priority 1, application
--> extension 999, priority 1, application
2.2.1.1. General
c) Autofallthrough: Si está activada esta opción, cuando una extensión haya acabado
de ejecutar sus prioridades o la lógica salte a una prioridad inexistente hará que la
llamada se cuelgue, señalizándola como BUSY (ocupada), CONGESTION o
HANGUP dependiendo de que sea esta la mejor opción para Asterisk.
[general]
;
; If static is set to no, or omitted, then the pbx_config will rewrite
; this file when extensions are modified. Remember that all comments
; made in the file will be lost when that happens.
;
; XXX Not yet implemented XXX
;
static=yes
;
; if static=yes and writeprotect=no, you can save dialplan by
; CLI command "dialplan save" too
;
writeprotect=no
;
; If autofallthrough is set, then if an extension runs out of
; things to do, it will terminate the call with BUSY, CONGESTION
; or HANGUP depending on Asterisk's best guess. This is the default.
;
; If autofallthrough is not set, then if an extension runs out of
; things to do, Asterisk will wait for a new extension to be dialed
; (this is the original behavior of Asterisk 1.0 and earlier).
;
;autofallthrough=no
;
; If clearglobalvars is set, global variables will be cleared
; and reparsed on an extensions reload, or Asterisk reload.
;
; If clearglobalvars is not set, then global variables will persist
; through reloads, and even if deleted from the extensions.conf or
; one of its included files, will remain set to the previous value.
;
; NOTE: A complication sets in, if you put your global variables into
; the AEL file, instead of the extensions.conf file. With clearglobalvars
; set, a "reload" will often leave the globals vars cleared, because it
; is not unusual to have extensions.conf (which will have no globals)
; load after the extensions.ael file (where the global vars are stored).
; So, with "reload" in this particular situation, first the AEL file will
; clear and then set all the global vars, then, later, when the
extensions.conf
; file is loaded, the global vars are all cleared, and then not set, because
; they are not stored in the extensions.conf file.
;
clearglobalvars=no
;
; If priorityjumping is set to 'yes', then applications that support
; 'jumping' to a different priority based on the result of their operations
; will do so (this is backwards compatible behavior with pre-1.2 releases
; of Asterisk). Individual applications can also be requested to do this
; by passing a 'j' option in their arguments.
;
;priorityjumping=yes
;
; User context is where entries from users.conf are registered. The
; default value is 'default'
;
;userscontext=default
;
; You can include other config files, use the #include command
; (without the ';'). Note that this is different from the "include" command
; that includes contexts within other contexts. The #include command works
; in all asterisk configuration files.
;#include "filename.conf"
;#include <filename.conf>
;#include filename.conf
;
; You can execute a program or script that produces config files, and they
; will be inserted where you insert the #exec command. The #exec command
; works on all asterisk configuration files. However, you will need to
; activate them within asterisk.conf with the "execincludes" option. They
; are otherwise considered a security risk.
;#exec /opt/bin/build-extra-contexts.sh
;#exec /opt/bin/build-extra-contexts.sh --foo="bar"
;#exec </opt/bin/build-extra-contexts.sh --foo="bar">
;#exec "/opt/bin/build-extra-contexts.sh --foo=\"bar\""
;
2.2.1.2. Globals
En esta sección se definen variables que será factibles de leer desde las otras reglas
en distintos contextos. Siendo la forma para referenciarlos el uso de la palabra globals
En esta sección se guardan las reglas y parámetros que se aplicaran a todos los
usuarios que lleguen a la central sin tener un contexto por defecto.
[default]
;
; By default we include the demo. In a production system, you
; probably don't want to have the demo there.
;
include => demo
;
; An extension like the one below can be used for FWD, Nikotel, sipgate etc.
; Note that you must have a [sipprovider] section in sip.conf
;
;exten => _41X.,1,Dial(SIP/${FILTER(0123456789,${EXTEN:2})}@sipprovider,,r)
Las reglas de los contextos tienen el siguiente formato separado por comas donde en
cada línea se tienen los siguientes elementos
someexten : Extension
{priority|label{+|-}offset}[(alias)] : Prioridad
application(arg1,arg2,...) : Aplicación
El texto inicial “exten=>” es el inidicador de que la linea que sigue es una extensión y
debe ser interpretada como tal por el servidor
2.2.2.2. Extensión
La extensión es propiamente el valor que la central espera recibir por las entidades
que generen llamadas hacia este contexto. Por ejemplo a continuación se muestra el
contexto prueba con 5 extensiones y cada una de estas ejecuta 5 acciones distintas
según se marque una opción en particular
[prueba]
exten =>100,1,aplicacion1()
exten =>200,1,aplicacion2()
exten =>300,1,aplicacion3()
exten =>400,1,aplicacion4()
exten =>500,1,aplicacion5()
Las extensiones así como números también pueden ser texto alfa numérico, sin
emabargo es importante resaltar que será necesario el utilizar un dispositivo que esté
en capacidad de realizar llamadas a estos destinos.
[prueba]
exten =>recepcion,1,aplicacion1()
exten =>ventas,1,aplicacion2()
exten =>verano,1,aplicacion3()
exten =>emergencia,1,aplicacion5()
• s
Define cómo encaminar una llamada cuando no se ha recibido ninguna otra
información de enrutamiento. En una línea de PRI o FXS locales, vamos a
recibir una serie de números para dirigir la llamada. Al recibir una llamada
desde una entrada analógica (FXO), no vamos a obtener toda la información
de enrutamiento. En este caso, la extensión de la 's' se utilizará.
• t
Define lo que debe hacer cuando una llamada ha agotado el tiempo
esperando información de enrutamiento. Si Asterisk está a la espera de cifras
para encaminar una llamada (por ejemplo, cuando la extensión de la 's' ofrece
un menú de extensiones y de entrada no se ha recibido).
• i
Define cómo manejar una extensión no válida o enrutar, como los casos en
que se marca una extensión que no existe en el contexto, o cuando la
extensión es parcialmente marcada, pero el tiempo de espera sin información
suficiente para completar la llamada
• o
Define cómo manejar una petición de asistencia de un operador. Esta
extensión se utiliza cuando una persona que llama pulsa cero durante la
aplicación de correo de voz.
2.2.2.3. Prioridades
Cada extensión se compone de una o varias prioridades. Las prioridades son pasos en
la extensión. Por lo general se ejecutan en orden numérico, aunque las aplicaciones
pueden cambiar esto.
Las prioridades también ofrecen la posibilidad de manejar una llamada de otra manera
si la aplicación 'Dial' devuelve ocupado cuando se trata de un anillo de canales. Si el
canal está ocupado, Asterisk, en vez de ir a la siguiente prioridad, intentará ir a la
siguiente prioridad más 100. Si la prioridad 1 es un 'Dial' y el canal está ocupado,
Asterisk se mueve a la prioridad 102 de la extensión, si es que existe. Si la ruta
ocupado no se puede encontrar, el Asterisk recurrirá a la prioridad más uno.
[supervisores]
exten => 701,1,Dial(SIP/supervisores1)
exten => 701,2,Dial(SIP/supervisores2)
exten => 701,3,Dial(SIP/supervisores3)
2.2.2.4. Aplicación
Dial,{technology}/{phone_id}[|timeout][|options][|URL]
Con cualquier comando DIAL, como mínimo es necesario identificar a donde se desea
marca. Por ende, la tecnología y el phone_id siempre se deberán dar en el comando.
“Tecnología” es la tecnología de canal que desea utilizar para llamar. Tales como:
• IAX
• ZAP
• SIP
• MGCP
• OH323
• DSP
[general]
context=default
allowoverlap=no
bindport=5060
bindaddr=0.0.0.0
[207]
type = friend
host = dynamic
secret = 12348
context = ventas
[208]
type = friend
host = dynamic
secret = 12349
context = ventas
[209]
type = friend
host = dynamic
secret = 12349
context = ventas
[210]
type = friend
host = dynamic
secret = 12350
context = ventas
[211]
type = friend
host = dynamic
secret = 12350
context = ventas
[212]
type = friend
host = dynamic
secret = 12351
context = ventas
[301]
type = friend
host = dynamic
secret = 12345
context = soporte
[302]
type = friend
host = dynamic
secret = 12346
context = soporte
[303]
type = friend
host = dynamic
secret = 12347
context = soporte
[304]
type = friend
host = dynamic
secret = 12348
context = soporte
[305]
type = friend
host = dynamic
secret = 12349
context = soporte
[306]
type = friend
host = dynamic
secret = 12350
context = soporte
[307]
type = friend
host = dynamic
secret = 12351
context = soporte
[308]
type = friend
host = dynamic
secret = 12352
context = soporte
[309]
type = friend
host = dynamic
secret = 12353
context = soporte
[310]
type = friend
host = dynamic
secret = 12354
context = soporte
[311]
type = friend
host = dynamic
secret = 12355
context = soporte
[312]
type = friend
host = dynamic
secret = 12356
context = soporte
[313]
type = friend
host = dynamic
secret = 12357
context = soporte
[314]
type = friend
host = dynamic
secret = 12358
context = soporte
[315]
type = friend
host = dynamic
secret = 12359
context = soporte
[316]
type = friend
host = dynamic
secret = 12360
context = soporte
[317]
type = friend
host = dynamic
secret = 12361
context = soporte
[318]
type = friend
host = dynamic
secret = 12362
context = soporte
[319]
type = friend
host = dynamic
secret = 12363
context = soporte
[320]
type = friend
host = dynamic
secret = 12364
context = soporte
[321]
type = friend
host = dynamic
secret = 12365
context = soporte
[322]
type = friend
host = dynamic
secret = 12366
context = soporte
[323]
type = friend
host = dynamic
secret = 12367
context = soporte
[324]
type = friend
host = dynamic
secret = 12368
context = soporte
[325]
type = friend
host = dynamic
secret = 12369
context = soporte
[326]
type = friend
host = dynamic
secret = 12370
context = soporte
[327]
type = friend
host = dynamic
secret = 12371
context = soporte
[328]
type = friend
host = dynamic
secret = 12372
context = soporte
[329]
type = friend
host = dynamic
secret = 12373
context = soporte
[330]
type = friend
host = dynamic
secret = 12374
context = soporte
asterisk-rvoz*CLI>
asterisk-rvoz*CLI> sip show users
Username Secret Accountcode Def.Context ACL NAT
330 12374 soporte No RFC3581
329 12373 soporte No RFC3581
328 12372 soporte No RFC3581
327 12371 soporte No RFC3581
326 12370 soporte No RFC3581
325 12369 soporte No RFC3581
324 12368 soporte No RFC3581
323 12367 soporte No RFC3581
322 12366 soporte No RFC3581
321 12365 soporte No RFC3581
320 12364 soporte No RFC3581
319 12363 soporte No RFC3581
318 12362 soporte No RFC3581
317 12361 soporte No RFC3581
316 12360 soporte No RFC3581
315 12359 soporte No RFC3581
314 12358 soporte No RFC3581
[general]
static=yes
writeprotect=no
clearglobalvars=no
[globals]
[soporte]
exten => 301,1,dial(SIP/301)
exten => 302,1,dial(SIP/302)
exten => 303,1,dial(SIP/303)
exten => 304,1,dial(SIP/304)
exten => 305,1,dial(SIP/305)
exten => 306,1,dial(SIP/306)
exten => 307,1,dial(SIP/307)
exten => 308,1,dial(SIP/308)
exten => 309,1,dial(SIP/309)
exten => 310,1,dial(SIP/310)
exten => 311,1,dial(SIP/311)
exten => 312,1,dial(SIP/312)
exten => 313,1,dial(SIP/313)
exten => 314,1,dial(SIP/314)
exten => 315,1,dial(SIP/315)
exten => 316,1,dial(SIP/316)
exten => 317,1,dial(SIP/317)
exten => 318,1,dial(SIP/318)
exten => 319,1,dial(SIP/319)
exten => 320,1,dial(SIP/320)
exten => 321,1,dial(SIP/321)
exten => 322,1,dial(SIP/322)
exten => 323,1,dial(SIP/323)
exten => 324,1,dial(SIP/324)
exten => 325,1,dial(SIP/325)
exten => 326,1,dial(SIP/326)
exten => 327,1,dial(SIP/327)
exten => 328,1,dial(SIP/328)
exten => 329,1,dial(SIP/329)
exten => 330,1,dial(SIP/330)
[ventas]
RESUMEN
FLAVIO E. GONCALVES Configuration Guide for Asterisk PBX: How to Build and
Configure a Pbx With Asterisk
Unidad de
Aprendizaje
CONFIGURACIÓN DE APLICACIONES
TELEFÓNICAS EN ASTERISK
TEMARIO
ACTIVIDADES PROPUESTAS
• Definición de Servicios
• Restricciones de los servicios
• Selección de interacciones
3.1.2.1. Playback
3.1.2.2. Background
3.1.2.3. SayDigits()
Lee las cifras que se pasan como argumento. Ej: SayDigits(1234) lee "1","2". . .
3.1.2.4. SayNumber()
Lee el número que conforman todas las cifras del argumento. Ej: SayNumber(1234)
leerá mil doscientos treinta y cuatro.
3.1.2.5. SayAlpha()
3.1.3.1. Record()
Graba el audio del canal actual en un archivo de sonido y lo guarda con el nombre de
archivo dado. El parámetro de formato especifica el formato de sonido y la extensión
del archivo. Si no se especifica la ruta completa, el archivo se almacena en la ruta
/var/lib/asterisk/sounds. Si un archivo con el mismo nombre y extensión que ya existe,
será sobrescrito.
Los formatos de sonido admitidos son: sln, G723, G729, GSM, h263, ulaw, alaw, VOX,
WAV, WAV (WAV es el formato GSM de archivos wav
[ivr]
exten=>800,1,playaback(bienvenida)
exten=>800,2,backgroudn(opciones)
exten=>1,1,dial(SIP/100)
exten=>2,1,dial(SIP/200)
exten=>3,1,dial(SIP/300)
exten=>0,1,dial(SIP/operadora)
[admin]
Include => IVR
exten=>100,1,record(bienvenida.wav)
exten=>200,1,record(opciones.wav)
Las expresiones regulares son utilizadas para poder abarcar un gran número de
posibles combinaciones de números con una simple combinación de caracteres.
Básicamente consiste en que el servidor toma como equivalente a un carácter por
cualquiera de un rango específico. Siendo los siguientes caracteres los utilizados:
X: Remplaza caracteres de 0 a 9
Z: Remplaza caracteres de 1 a 9
N: Remplaza caracteres de 2 a 9
Para hacer uso de las expresiones regulares se debe iniciar el valor de la extensión
con un sub-guión “_” a continuación cada vez que se introduzca un carácter especial
este será comparado con todo un rango
3.2.2. Variables
Asterisk puede hacer uso de variables como los argumentos a los comandos. Estas
variables de entorno pueden ser globales, compartidas, y específicas del canal. Las
variables son referidas en el dialplan (extensions.conf) utilizando la sintaxis
Un nombre de variable puede ser cualquier cadena alfanumérica comienzo con una
letra. Las variables definidas por el usuario no son sensibles a mayúsculas o
minúsculas, es decir que $ {FOO} y $ {foo} se refieren a la misma variable. Pero las
variables definidas por Asterisk si distinguen entre mayúsculas y minúsculas.
Por ejemplo la variable ${EXTEN} es una variable estándar y especial en Asterisk que
almacena la extensión que se marco. Si se utiliza $ {EXTEN} la variable funciona pero
$ {exten} no.
Hay tres tipos de variables: las variables globales, las variables compartidas, las
variables del canal, y las variables de entorno.
3.2.3.1. Noop()
Este comando funciona con cualquier variable, por lo que NoOp ($ { any_var_name})
imprimirá el valor de la variable nombrada en la consola cuando se alcance el paso del
comando en la extensión. Uno de sus principales usos es el depurar el funcionamiento
de un plan de marcación.
3.2.3.2. Goto()
Goto(context,extension,priority)
Goto(extension,priority)
Goto(priority)
Goto(context,extension,label)
Goto(extension,label)
Goto(label)
3.2.3.3. gotoIf()
GotoIf(condition?[label1]:label2)
Gotoif funciona de manera similar a Goto, con la diferencia de que para ejecutarse se
evalúa la veracidad de una condición.
3.2.3.4. while()
Ejecuta lazos entre un las sentencias “While" y "EndWhile", hasta que la condición
especificada se evalúe como falsa. La condición se evalúa una vez por ciclo, desde el
principio.
• expr1 + expr2
• expr1 - expr2
• - expr
• expr1 * expr2
• expr1 / expr2
• expr1 % expr2
[general]
;
; Global settings for call queues
;
; Persistent Members
; Store each dynamic member in each queue in the astdb so that
; when asterisk is restarted, each member will be automatically
; read into their recorded queues. Default is 'yes'.
;
persistentmembers = yes
;
; AutoFill Behavior
; The old/current behavior of the queue has a serial type behavior
; in that the queue will make all waiting callers wait in the queue
; even if there is more than one available member ready to take
; calls until the head caller is connected with the member they
; were trying to get to. The next waiting caller in line then
; becomes the head caller, and they are then connected with the
; next available member and all available members and waiting callers
; waits while this happens. The new behavior, enabled by setting
; autofill=yes makes sure that when the waiting callers are connecting
; with available members in a parallel fashion until there are
; no more available members or no more waiting callers. This is
; probably more along the lines of how a queue should work and
; in most cases, you will want to enable this behavior. If you
; do not specify or comment out this option, it will default to no
; to keep backward compatibility with the old behavior.
;
autofill = yes
;
; Monitor Type
; By setting monitor-type = MixMonitor, when specifying monitor-format
; to enable recording of queue member conversations, app_queue will
; now use the new MixMonitor application instead of Monitor so
; the concept of "joining/mixing" the in/out files now goes away
; when this is enabled. You can set the default type for all queues
; here, and then also change monitor-type for individual queues within
; queue by using the same configuration parameter within a queue
; configuration block. If you do not specify or comment out this option,
; it will default to the old 'Monitor' behavior to keep backward
; compatibility.
;
monitor-type = MixMonitor
;
; Note that a timeout to fail out of a queue may be passed as part of
; an application call from extensions.conf:
; Queue(queuename|[options]|[optionalurl]|[announceoverride]|[timeout])
; example: Queue(dave|t|||45)
;[markq]
;
; A sample call queue
;
; Musicclass sets which music applies for this particular call queue.
; The only class which can override this one is if the MOH class is set
; directly on the channel using Set(CHANNEL(musicclass)=whatever) in the
; dialplan.
;
;musicclass = default
;
; An announcement may be specified which is played for the member as
; soon as they answer a call, typically to indicate to them which queue
; this call should be answered as, so that agents or members who are
; listening to more than one queue can differentiated how they should
; engage the customer
;
;announce = queue-markq
;
; A strategy may be specified. Valid strategies include:
;
; ringall - ring all available channels until one answers (default)
; roundrobin - take turns ringing each available interface
; leastrecent - ring interface which was least recently called by this queue
; fewestcalls - ring the one with fewest completed calls from this queue
; random - ring random interface
; rrmemory - round robin with memory, remember where we left off last ring
pass
;
;strategy = ringall
;
; Second settings for service level (default 0)
; Used for service level statistics (calls answered within service level time
; frame)
;servicelevel = 60
;
; A context may be specified, in which if the user types a SINGLE
; digit extension while they are in the queue, they will be taken out
; of the queue and sent to that extension in this context.
;
;context = qoutcon
;
; How long do we let the phone ring before we consider this a timeout...
;
;timeout = 15
;
; How long do we wait before trying all the members again?
;
;retry = 5
;
; Weight of queue - when compared to other queues, higher weights get
; first shot at available channels when the same channel is included in
;
; What's the rounding time for the seconds?
; If this is non-zero, then we announce the seconds as well as the minutes
; rounded to this value.
;
; announce-round-seconds = 10
;
; Use these sound files in making position/holdtime announcements. The
; defaults are as listed below -- change only if you need to.
;
; Keep in mind that you may also prevent a sound from being played if you
; explicitly set a sound to be an empty string. For example, if you want to
; prevent the queue from playing queue-thankyou, you may set the sound using
; the following line:
;
; queue-thankyou=
;
; ("You are now first in line.")
;queue-youarenext = queue-youarenext
; ("There are")
;queue-thereare = queue-thereare
; ("calls waiting.")
;queue-callswaiting = queue-callswaiting
; ("The current est. holdtime is")
;queue-holdtime = queue-holdtime
; ("minutes.")
;queue-minutes = queue-minutes
; ("seconds.")
;queue-seconds = queue-seconds
; ("Thank you for your patience.")
;queue-thankyou = queue-thankyou
; ("less than")
;queue-lessthan = queue-less-than
; ("Hold time")
;queue-reporthold = queue-reporthold
; ("All reps busy / wait for next")
;periodic-announce = queue-periodic-announce
;
; Calls may be recorded using Asterisk's monitor/MixMonitor resource
; This can be enabled from within the Queue application, starting recording
; when the call is actually picked up; thus, only successful calls are
; recorded, and you are not recording while people are listening to MOH.
; To enable monitoring, simply specify "monitor-format"; it will be disabled
; otherwise.
;
; You can specify the monitor filename with by calling
; Set(MONITOR_FILENAME=foo)
; Otherwise it will use MONITOR_FILENAME=${UNIQUEID}
;
; Pick any one valid extension for monitor format recording. If you leave
; monitor-format commented out, it will not record calls.
;
; monitor-format = gsm|wav|wav49
;
; Monitor Type
; By setting monitor-type = MixMonitor, when specifying monitor-format
; to enable recording of queue member conversations, app_queue will
; now use the new MixMonitor application instead of Monitor so
; the concept of "joining/mixing" the in/out files now goes away
; when this is enabled. If you do not specify or comment out this option,
; it will default to the old 'Monitor' behavior to keep backward
; compatibility.
;
; monitor-type = MixMonitor
;
; ----------------------- TYPE MIXMONITOR OPTIONS ---------------------------
--
;
;
; You can specify the options supplied to MixMonitor by calling (from the
dialplan)
; Set(MONITOR_OPTIONS=av(<x>)V(<x>)W(<x>))
; The 'b' option for MixMonitor (only save audio to the file while bridged)
is
; implied.
;
; You can specify a post recording command to be executed after the end of
; recording by calling (from the dialplan)
; Set(MONITOR_EXEC=mv /var/spool/asterisk/monitor/^{MONITOR_FILENAME}
/tmp/^{MONITOR_FILENAME})
;
; The command specified within the contents of MONITOR_EXEC will be executed
when
; the recording is over. Any strings matching ^{X} will be unescaped to ${X}
and
; all variables will be evaluated just prior to recording being started.
;
; The contents of MONITOR_FILENAME will also be unescaped from ^{X} to ${X}
and
; all variables will be evaluated just prior to recording being started.
;
;
; This setting controls whether callers can join a queue with no members.
There
; are three choices:
;
; yes - callers can join a queue with no members or only unavailable
members
; no - callers cannot join a queue with no members
; strict - callers cannot join a queue with no members or only unavailable
; members
;
; joinempty = yes
;
;
; If you wish to remove callers from the queue when new callers cannot join,
; set this setting to one of the same choices for 'joinempty'
;
; leavewhenempty = yes
;
;
; If this is set to yes, the following manager events will be generated:
; AgentCalled, AgentDump, AgentConnect, AgentComplete; setting this to
; vars also sends all channel variables with the event.
; (may generate some extra manager events, but probably ones you want)
;
; eventwhencalled = yes|no|vars
;
; If this is set to yes, the following manager events will be generated:
; QueueMemberStatus
; (may generate a WHOLE LOT of extra manager events)
;
; eventmemberstatus = no
;
; If you wish to report the caller's hold time to the member before they are
; connected to the caller, set this to yes.
;
; reportholdtime = no
;
; If you want the queue to avoid sending calls to members whose devices are
; known to be 'in use' (via the channel driver supporting that device state)
; uncomment this option. (Note: only the SIP channel driver currently is able
; to report 'in use'.)
;
; ringinuse = no
;
; If you wish to have a delay before the member is connected to the caller
(or
; before the member hears any announcement messages), set this to the number
of
; seconds to delay.
;
; memberdelay = 0
;
; If timeoutrestart is set to yes, then the timeout for an agent to answer is
; reset if a BUSY or CONGESTION is received. This can be useful if agents
; are able to cancel a call with reject or similar.
;
; timeoutrestart = no
;
; Each member of this call queue is listed on a separate line in
; the form technology/dialstring. "member" means a normal member of a
; queue. An optional penalty may be specified after a comma, such that
; entries with higher penalties are considered last. An optional member
; name may also be specified after a second comma, which is used in log
; messages as a "friendly name". Multiple interfaces may share a single
; member name. An optional state interface may be specified after a third
; comma. This interface will be the one for which app_queue receives device
; state notifications, even though the first interface specified is the one
; that is actually called.
;
;member => Zap/1
;member => Zap/2,10
;member => Zap/3,10,Bob Johnson
;member => Agent/1001
;member => Agent/1002
;member => Local/1000@default,0,John Smith,SIP/1000
;
; Note that using agent groups is probably not what you want. Strategies do
; not propagate down to the Agent system so if you want round robin, least
; recent, etc, you should list all the agents in this file individually and
not
; use agent groups.
;
;member => Agent/@1 ; Any agent in group 1
;member => Agent/:1,1 ; Any agent in group 1, wait for first
; available, but consider with penalty
• Ringall: Timbra todos los canales disponibles hasta que uno conteste. Esta es la
opción.
• Roundrobin: Se turna cada interfaz de sonido disponibles (se remplazó en 1.4, por
el uso de el uso rrmemory)
• Leastrecent: Interfaz de anillo que se lo ha llamado por esta cola
• Fewestcalls: El anillo del uno con menor cantidad de llamadas realizadas desde
esta cola
• Random: La interfaz timbra al azar
• Rrmemory: Round robin con memoria, recuerda dónde se timbró por última vez
• Linear: Las interfaces de los anillos en el orden en que aparecen en el archivo de
configuración. Miembros dinámicos se peldaño en el orden en que se han
añadido.
• Wrandom: Timbra al azar, pero utiliza la penalización de agente como un valor de
elección
En este archivo se definen la lista de los agentes que se conectarán para recibir
llamadas entrantes:
;
; Agent configuration
[general]
persistentagents=yes
[agents]
asterisk-rvoz*CLI>
Para poder tener acceso a la cola de atención será necesario el utilizar el comando
queues().
Para poder tener acceso a la cola de atención como agente será necesario el utilizar el
comando agentlogin()
AgentLogin(AgentNo[|options])
RESUMEN
• Un IVR es una herramienta que nos permite atender de manera eficiente las
llamdas entrantes de los clientes
FLAVIO E. GONCALVES Configuration Guide for Asterisk PBX: How to Build and
Configure a Pbx With Asterisk
Unidad de
Aprendizaje
INTERCONEXIÓN DE ASTERISK
TEMARIO
• Interconexión de asterisk
ACTIVIDADES PROPUESTAS
Para nuestro análisis utilizaremos dos locales A y B cada uno con un plan de
numeración distinto. Buscaremos poder llamar directamente a los anexos remostos así
como a una solución de IVR
4.1.1.1. Local A
[general]
[localB]
type=user
host=dynamic
context=Entrante
secret=12345
[101]
type= friend
host= dynamic
secret= 12345
context= interno
[102]
type= friend
host= dynamic
secret= 12345
context= interno
[103]
type= friend
host= dynamic
secret= 12345
context=interno
4.1.1.1. Local B
[general]
[localA]
type=user
host=dynamic
context=Entrante
secret=12345
[201]
type= friend
host= dynamic
secret= 12345
context= interno
[202]
type= friend
host= dynamic
secret= 12345
context= interno
[203]
type= friend
host= dynamic
secret= 12345
context=interno
4.1.2.1. Local A
[interno]
exten=>1xx,1,dial(sip/${EXTEN})
exten=>2xx,1,dial(sip/localB/${EXTEN})
exten=>2700,1,dial(sip/localB/${EXTEN:1})
[entrante]
Include=>interno
exten=>800,1,playaback(bienvenida)
exten=>800,2,backgroudn(opciones)
exten=>1,1,dial(SIP/100)
exten=>2,1,dial(SIP/200)
exten=>3,1,dial(SIP/300)
exten=>0,1,dial(SIP/operadora)
4.1.2.2. Local B
[interno]
exten=>1xx,1,dial(sip/${EXTEN})
exten=>2xx,1,dial(sip/localA/${EXTEN})
exten=>2800,1,dial(sip/localA/${EXTEN:1})
[entrante]
Include=>interno
exten=>700,1,playaback(bienvenida)
exten=>700,2,backgroudn(opciones)
exten=>1,1,dial(SIP/100)
exten=>2,1,dial(SIP/200)
exten=>3,1,dial(SIP/300)
exten=>0,1,dial(SIP/operadora)
RESUMEN
FLAVIO E. GONCALVES Configuration Guide for Asterisk PBX: How to Build and
Configure a Pbx With Asterisk