View
44
Download
0
Embed Size (px)
Citation preview
ASTERISK: INSTALACIÓN Y
CONCEPTOS BÁSICOS
Ing. Gabriel Astudillo FIEC-ESPOL 2011
Qué es asterisk?
Asterisk es una central telefónica IP (IPBX) de código abierto que corre sobre linux y que es compatible con la mayoría de tecnologías de VoIP (SiP, H323, MGCP, IAX, ) y de telefonía tradicional Análoga y Digital (TDM, ISDN, BRI, PRI)
Brinda todos los servicios de una PBX propietaria tradicional tales como: llamadas en espera, transferencia de llamadas, buzones de voz, directorio, conferencias, grabación de llamada, etc.
Qué es asterisk?
Mark Spencer, de Digium, inicialmente creó Asterisk y actualmente es su principal desarrollador, junto con otros programadores que han contribuido.
Originalmente desarrollado para el sistema operativo GNU/Linux, actualmente: BSD, Mac OS X, Solaris y Microsoft Windows.
Para conectar teléfonos estándar analógicos son necesarias tarjetas electrónicas telefónicas FXS o FXO fabricadas por Digium u otros proveedores.
Preparando un sistema para asterisk
Selección de Hardware para el Servidor En términos de requerimientos asterisk es
similar a aquellas aplicaciones embebidas y de tiempo real.
En diseños de grandes aplicaciones es común observar una distribución de funcionalidades entre múltiples servidores.
La flexibilidad es una de las razones de peso por las cuales los negocios de rápido crecimiento toman la decisión de implementarlo.
Preparando un sistema para asterisk
Selección de Hardware para el Servidor
Preparando un sistema para asteriskSelección de Hardware para el Servidor La selección del hardware puede ser muy
sencilla, como muy complicada: Sencilla porque cualquier plataforma x86 puede
servir. Complicada porque el rendimiento del sistema
dependerá del cuidado que se tenga al momento de seleccionar el hardware.
Si estamos implementando un sistema de hobbie o de aprendizaje podemos obviar este diseño, pero si se trata de una solución corporativa es importante tener en cuenta las siguientes diapositivas.
Preparando un sistema para asteriskConsideraciones respecto a rendimiento El máximo numero de conexiones simultaneas:
Cada conexión incrementa carga al sistema. El porcentaje del trafico que requiere un
intensivo procesamiento DSP cuando se usa códecs de compresión.
El procesamiento DSP que asterisk hace por software tiene un impacto directo en el numero de llamadas concurrentes que se pueden soportar. Ejemplo: 50 G.711 vs. 10 G.729.
Que nivel de conferencia va a brindar el sistema y con que frecuencia se hará.
Preparando un sistema para asteriskConsideraciones respecto a rendimiento Cancelación de Eco :
Se utiliza cuando se utilizan redes PSTN, es una función matemática por lo tanto aumenta los recursos de procesamiento
Como alternativa existen las tarjetas para cancelación de ECO y traducción de códecs que ofrece digium.
Uso de scripts en el plan de marcado: Cada vez que se pasa el control de una llamada a
un script externo hay un penalización en el rendimiento.
http://www.voip-info.org/wiki/view/Asterisk+dimensioning
Preparando un sistema para asteriskSelección de la tarjeta madre: Considerar: numero de procesadores, slots
de memoria y slots PCI:
Se debe procurar un BIOS que permita administrar los IRQs
Preparando un sistema para asteriskConsideraciones adicionales: Fuentes de poder Switches PoE (teléfonos IP) Medio Ambiente:
Humedad Temperatura
Puesta a Tierra Seguridad:
Física Lógica
Requerimientos de HardwareNo indispensable: Tarjeta de telefonía analógica TDM400p (4
FXS & FXO), TDM2400p (24 FXS & FXO) Tarjeta de telefonía Digital TE205p (2 E1) Rhino http://www.channelbanks.com Sangoma http://www.sangoma.com Voicetronix http://www.voicetronix.com Pika Technologies
http://www.pikatechnologies.comEn un ambiente IP solo se necesita cargar el
modulo ztdummy (USB timing)
Requerimientos de Hardware
Requerimientos de software Primero debemos averiguar la versión
exacta de nuestro kernel con el comando: uname –a:[root@asterisk ~]# uname -aLinux asterisk.fiec.espol.edu.ec 2.6.18-8.el5 #1 SMP Thu Mar 15 19:57:35 EDT 2007 i686 i686 i386 GNU/Linux
[root@asterisk ~]# rpm – q kernel
[root@asterisk ~]# rpm – q kernel-devel
Es importante verificar que tenemos instalada la misma versión de kernel y de las fuentes del kernel, sin ellas no se podrá compilar el código fuente.
Requerimientos de software Luego debemos asegurarnos que tenemos
instalados los siguientes paquetes: bison bison-devel ncurses ncurses-devel libtermcap libtermcap-devel zlib zlib-devel openssl openssl-devel gnutls-devel gcc gcc-c++ newtnewt-devel libtool
Para verificar que tenemos el paquete e instalar:#rpm –q “paquete” # yum install – y “paquete”
Es posible verificar e instalar todos en una sola línea
Requerimientos de software
Requerimientos de software Servidor de tiempo: Debido a que
asterisk graba un CDR (call detail report) es importante que nuestro reloj este sincronizado con un servidor externo de tiempo para asegurar uniformidad.
#yum install -y ntp && ntpdate br.pool.ntp.org && chkconfig ntpd on && service ntpd start
Versiones: Release vs Trunk
Los desarrolladores utilizan el software subversion (SVN) para administrar el código fuente.
Asterisk es desarrollado en 2 aéreas: trunk y branches
En el trunk se desarrollan y prueban nuevas características y cambios en la arquitectura, orientado para beta testers y desarrolladores.
Los branches son versiones estables donde no se hacen cambios mayores y solo se corrigen errores y huecos de seguridad, recomendado para ambientes en producción.
Aproximadamente cada 14 meses se lanza una nueva rama (1.2, 1.4, 1.6, 1.8…)
https://wiki.asterisk.org/wiki/display/AST/Asterisk+Versions
Obtener el código fuente
Siguiendo el Linux Standar Base(LSB) todos los paquetes requeridos para la instalación de asterisk deben ser descargados y desempaquetados en el directorio /usr/src/
Durante el curso debemos mantener este estándar pues asumiremos de ahora en adelante que todos los comandos en el proceso de instalación son ejecutados desde este directorio.
Obtener el código fuente
Dos formas de obtener el código: SVN o wget SVN:#cd /usr/src/
#svn co http://svn.asterisk.org/svn/asterisk/branches/1.8
wget: (asterisk, asterisk-addons, dahdi complete, libpri)
#cd /usr/src/
#wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8.3.2.tar.gz
#wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-addons-1.6.2.3.tar.gz
#wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/dahdi-linux-complete-2.4.1.2+2.4.1.tar.gz
#wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.11.5.tar.gz
Otra forma de obtenerlos es navegando en la página web:
http://www.asterisk.org/downloads
Obtener el código fuente
Desempaquetamos:#cd /usr/src/
#tar zxvf asterisk-1.8.3.2.tar.gz
#tar zxvf asterisk-addons-1.6.2.3.tar.gz
#tar zxvf dahdi-linux-complete-2.4.1.2+2.4.1.tar.gz
#tar zxvf libpri-1.4.11.5.tar.gz
Las versiones de cada uno de los paquetes no necesariamente tienen que ser las mismas, pues cada uno de ellas se manejan como un proyecto diferente.
Proceso de Instalación
Desempaquetamos:#cd /usr/src/
#tar zxvf asterisk-1.8.3.2.tar.gz
#tar zxvf asterisk-addons-1.6.2.3.tar.gz
#tar zxvf dahdi-linux-complete-2.4.1.2+2.4.1.tar.gz
#tar zxvf libpri-1.4.11.5.tar.gz
Las versiones de cada uno de los paquetes no necesariamente tienen que ser las mismas, pues cada uno de ellas se manejan como un proyecto diferente.
Proceso de Instalación
Desinstalamos cualquier versión previa de asterisk:
# cd /usr/src/asterisk-1.”version anterior”
# make uninstall
# make uninstall-all
Desinstalamos cualquier versión previa de dahdi:
# cd /usr/src/dahdi-linux-1.”version anterior”
# make uninstall
Finalmente borramos los directorios de las versiones anteriores.
Proceso de Instalación: orden El orden de instalación es el siguiente:
1. libpri2. dadhi3. asterisk4. asterisk-addons
Este orden asegura que cualquier dependencia para libpri, dadhi o asterisk fueron instaladas antes de correr los scripts de configuración
Proceso de Instalación: libpri LibPRI es una librería que agrega soporte
para ISDN (PRI y BRI), su uso es opcional.
# cd /usr/src/libpri-version
# make clean
# make
# make install
Proceso de Instalación: dahdi Digium Asterisk Hardware Device Interface, o DAHDI
(anteriormente Zaptel), es el software que Asterisk usa para interactuar con hardware de telefonía(A & D).
Se recomienda su instalación así no se tenga instalada tarjetas telefónicas porque DAHDI es una dependencia requerida para construir el modulo de tiempo res_timing_dahdi y es usado por aplicaciones del plan de marcado como MeetMe().
DAHDI actualmente es una combinación de 2 componentes: DAHDI-tools, que provee herramientas de administración
como: dahdi_cfg, dahdi_scan, etc.; y DAHDI-linux, que provee los driver para el kernel.
DAHDI-linux-complete contiene los 2 componentes
Proceso de Instalación: dahdicd /usr/src/dahdi-linux-complete-version
# make clean
# make
# make install
# make config
Proceso de Instalación: Asterisk Asterisk es compilado con gcc a través del uso
del programa GNU “make”:
# cd /usr/src/asterisk-version
# make clean
# ./configure
# make menuselect
# make install
# make samples
# make config
Proceso de Instalación: asterisk-addons# cd /usr/src/asterisk-addons-version
# make clean
# ./configure
# make menuselect
# make install
# make samples
Directorios usados por Asterisk/etc/asterisk/ Contiene los archivos de configuración de
Asterisk archivos.conf Sin embargo el archivo system.conf se
encuentra ubicado en el directorio /etc/dahdi/
Cualquier otro software puede usar el hardware y el driver de dahdi, por lo tanto el archivo system.conf no esta ubicado directamente en el directorio /etc/asterisk
Directorios usados por Asterisk/usr/lib/asterisk/modules/ Este directorio contiene todos los módulos que
asterisk puede llegar a cargar , dentro de este directorio se encuentran varias aplicaciones, codecs, formatos y canales usados por Asterisk.
Por defecto Asterisk carga todos estos módulos al inicio. (modules.conf).
/var/lib/asterisk/ Este directorio contiene el archivo astdb y una
serie de subdirectorios. astdb contiene la información de la base de
datos local de Asterisk, una especie de registro de windows.
Directorios usados por AsteriskLos subdirectorios dentro de /var/lib/asterisk
son:agi-bin/ Contiene scripts personalesfirmware/ Contiene imágenes binarias de firmware de
varios dispositivos compatibles con asteriskimages/ Las aplicaciones que se comunican con
canales que soportar imágenes, buscan en este directorio
Directorios usados por AsteriskLos subdirectorios dentro de /var/lib/asterisk son:keys/ Aquí se guardan las llaves RSA que se utilizaran
en las comunicaciones peer to peer (IAX2)mohmp3/ Las aplicaciones que usan music on hold
buscaran por defecto los archivos de audio en este directorio
sounds/ Aquí se buscan por defecto los sonidos básicos de
asterisk reproducios por playback( ) y background( )
Directorios usados por Asterisk/var/log/asterisk Como el nombre lo indica en esta carpeta
asterisk guarda los logs o archivos de eventos./var/log/asterisk/cdr-csv Este directorio es usado para guardar los CDRs
en un formato CSV o comma-separated value./var/spool/asterisk/ Este directorio contiene algunos subdirectorios,
incluyendo outgoing/, qcall/, tmp/, y voicemail/. Asterisk monitorea estos directorios en busca de
archivos de texto que contienen información respecto a requerimiento de llamadas.
Opciones de inicio en asterisk -c nos permite conectarnos a la consola de asterisk o
CLI. -v Verbosity. Es usada para indicar el numero de líneas
que queremos mostrar en el debug . -g Core dump. Si asterisk termina inesperadamente,
crea un archivo de core en el que se puede determinar las causas de la falla
-r Remote. Esto es usado para reconectarnos remotamente a un proceso de Asterisk que este corriendo con anterioridad
-h Help. Muestra la ayuda. Verificamos si asterisk esta corriendo con: # asterisk –r
Si no esta corriendo entonces ejecutamos:# asterisk -cgvvv
Configuración de canales
Asterisk y el protocolo SIP El protocolo SIP es nativamente peer-to-peer por lo
tanto un teléfono IP espera comunicarse con otro directamente sin una PBX en medio del camino.
Cuando una llamada SIP se realiza a través de asterisk en realidad hay 2 llamadas una del origen hacia asterisk y otra desde asterisk al destino.
Internamente asterisk “puentea” estas llamadas. Asterisk implementa un back-to-back user agent.
Configuración de canales
Extensiones en asterisk El concepto de extensión en asterisk es crucial En las demás PBXs una extensión es un numero
que se marca para que un teléfono timbre o para acceder a un servicio.
En asterisk, una extensión es el nombre de una agrupación de instrucciones en el plan de marcado.
En asterisk una extensión es el nombre de un script (formado por letras, números o combinado)
Configuración de canales
En asterisk, un canal es una conexión que conduce una llamada entrante o saliente al sistema (PBX)
Esta conexión puede venir de ó salir hacia la red de telefonía tradicional (analógica o digital) o un dispositivo de voz sobre IP.
Por defecto asterisk soporta una serie de canales: VoIP: SIP, IAX, H.323, MGCP… PSTN: Analógico o digital a través de DAHDI
Configuración de canales
IMPORTANTE: Al momento de instalar asterisk
ejecutamos make samples con la finalidad de generar archivos de ejemplo que nos sirvan como referencia, por lo tanto vamos a respaldarlos:# cd /etc/asterisk/
# cp extensions.conf extensions.bkp
# cp sip.conf sip.bkp
# cp iax.conf iax.bkp
Configuración de dispositivosImportante: Asterisk aplica las configuraciones
especificadas en los archivos de configuración en el siguiente orden:
1) Las especificadas en una seccion que define un canal.
2) Las especificadas en un template.3) Las especificadas en la sección general4) Las definidas por defecto
Configuración de canales
ALGO MAS… Los archivos de configuración están divididos en
secciones de código llamados “contextos” Los nombres de los contextos se escriben entre [ ]
y pueden ser definidos a gusto, exceptuando ciertos nombres reservados como: [general], [globals], entre otros.
Cada contexto tiene uno o mas parámetros. Los parámetros se escriben de la siguiente manera:
parámetro=valor Los comentarios inician con ;
Configuración de canales: SIP Editaremos el archivo /etc/asterisk/sip.conf El archivo sip.conf empieza con la sección
[general] que contiene las opciones por defecto y configuraciones de canal para todos usuario/peers definidos dentro del archivo.
Podemos sobrescribir estas configuraciones para un usuario/peer especifico haciendo los cambios en la configuración de cada usuario/peer.
Configuración de canales: SIP
[general]context=noautenticadasallowguest=nosrvlookup=yesudpbindaddr=0.0.0.0tcpenable=noqualify=yeslanguage=es
[gastudillo]type=friend context=internoshost=dynamicnat=yessecret=ClAvEsEgUrAdtmfmode=autodisallow=allallow=ulaw
Configuración de canales: SIP Hemos definido dos secciones, la primera
llamada [general] contiene las configuraciones generales inherentes al protocolo y también se la usa para definir parámetros por defecto.
context=noautenticadas contexto por defecto que se aplicará a todos los canales que no logren autenticarse. Implica que debe definirse el contexto [noautenticadas] en el plan de marcado donde se definirá el procedimiento a seguir para estos canales.
Configuración de canales: SIP allowguest=no Hemos deshabilitado las llamadas no
auntenticadas, si queremos permitir este tipo de llamadas deberiamos habilitarla y manejarlas a traves del contexto noautenticadas definido en el paso anterior.
srvlookup=yes Permite que asterisk use los registro DNS SRV para reenviar llamadas usando nombres de dominio
udpbindaddr=0.0.0.0 Indica la direccion IP de la interface a traves de la cual asterisk escuchara peticiones udp (señalizacion y trafico) la direcion 0.0.0.0 implica todas las interfaces disponibles.
Configuración de canales: SIP qualify=yes Esta línea le permite a asterisk
monitorear la latencia entre el terminal y el servidor por defecto hasta 2000 ms
[gastudillo] Los usuarios se definen entre [ ] y puede ser cualquier combinación alfanumérica.
type=friend Los usuarios pueden ser tipo user, peer o friend, user se utiliza para permitir que el usuario solo pueda recibir llamadas, peer para hacer llamadas salientes y friend ambas.
context=internos Cuando un requerimiento originado por un teléfono es recibido y autenticado por asterisk, el numero de extensión marcado es manejado por el plan de marcado en el contexto definido en la configuración del terminal, en este caso “internos”.
Configuración de canales: SIP host=dynamic Requerirá que el terminal se registre
para que asterisk sepa como alcanzar el teléfono. Para limitar el registro desde una sola dirección IP , colocamos esta en lugar de dynamic, en cambio si se setea host=static, no se requiere que el dispositivo se registre.
nat=yes La opción de nat es usada para indicarle a asterisk que habilite ciertos “trucos” que permitan que las llamadas SIP puedan llevarse a cabo a traves de NAT.
secret=clavesegura Secret es el password usado para la autenticación.
Configuración de canales: SIPIPv6 en sip.conf Desde la version 1.8, Asterisk soporta IPv6 para
trafico SIP y RTP:
udpbindaddr value Description
192.168.100.50 Bind to a specific IPv4 address.
2001:db8::1Bind to a specific IPv6 address
0.0.0.0 Bind to all IPv4 addresses on the system.
: : Bind to all IPv4 and IPv6 addresses.
Configuración de canales: SIP Para aplicar todos estos cambios debemos guardar
y cerrar el archivo sip.conf y luego ingresar a la consola:
# asterisk -r Para verificar que no se han cargado las
configuraciones aun:
CLI>sip show peers Para cargar los cambios:
CLI>module reload chan_sip.so Para verificar que los cambios se aplicaron
CLI>sip show peers
Configuración de canales: SIP Configuración de los teléfonos GXP-2000: Laboratorio en clases Una vez que los teléfonos estén configurados
corremos el comando: CLI>sip show peers
Que cambios nota? Para hacer una prueba de eco ejecute: CLI>channel originate SIP/gastudillo application echo
Configuración de canales: SIP
Configuración de canales: SIP En este curso utilizaremos como softphone SIP
e IAX a Zoiper, que podemos descargar de: http://www.zoiper.com/download.php?os=Win
dows&ap=zc&location=zoiper_communicator_free_installer_exe_win
Verificar que no exista una version previa, caso contrario desinstalamos la versión antigua.
Realizar una instalación en windows con todos los parámetros por defecto.
Configuración de canales: SIP
Configuración de canales: SIP
Configuración de canales: SIP
Configuración de canales: IAX IAX2 (Inter-Asterisk eXchange protocol,
versión 2) Fue originalmente diseñado para
conectar PBX Asterisk a través de diferentes redes físicas y especialmente para sobrellevar el problema de NAT observado en SIP.
Fue estandarizado con un RFC en 2009,[50
] pero no se ha popularizado entre los fabricantes de hardware aun.
Configuración de canales: IAX Principal ventaja: uso de un solo puerto para
transmision de voz y señalizacion: UDP 4569 Otra ventaja: IAX2 trunking: encapsula los
packetes de varias tramas de voz en el mismo datagrama usando un solo header IAX2
Beneficio: reduccion de la sobrecarga. Para un par de llamadas no es muy notorio
pero cuando transportamos mas de una docena de ellas la reduccion es significativa.
Configuración de canales: IAX
[general]autokill=yessrvlookup=yescalltokenoptional = 0.0.0.0/0.0.0.0 requirecalltoken = auto maxcallnumbers = 512 ; http://tinyurl.com/iax2seg
[gastudillo]type=friendhost=dynamicsecret=my5UP3rp@s5!context=internosdisallow=allallow=ulawallow=alaw
Configuración de canales: IAX Para aplicar todos estos cambios debemos guardar
y cerrar el archivo iax.conf y luego ingresar a la consola:
# asterisk -r Para verificar que no se han cargado las
configuraciones aun:
CLI>iax2 show peers Para cargar los cambios:
CLI>module reload chan_iax2.so Para verificar que los cambios se aplicaron
CLI>iax2 show peers
Configuración de canales: IAX Configuración del softphone Zopier para IAX: Laboratorio en clases Una vez que los softphones estén configurados
corremos el comando:CLI>iax2 show peers
Que cambios nota? Para hacer una prueba de eco ejecute:CLI>channel originate IAX2/gastudillo application echo
Acerca del registro
Es un error común suponer que el registro es la forma en la que un dispositivo se autentica con el fin de obtener permiso para hace una llamada.
El propósito del registro es que el dispositivo notifique de su ubicación en la red, de tal forma que asterisk sepa donde enviar las llamadas dirigidas a él.
La autenticación para llamadas salientes es un proceso totalmente separado y siempre ocurre en base a cada llamada.
Por esto es posible que el peer pueda hacer llamadas pero no pueda recibirlas (porque falló el registro).
Dialplan básico para probar disp. En el archivo /etc/asterisk/extensions.conf
incluir:[internos]exten => 100,1,Dial(SIP/gastudillo)
exten => 101,1,Dial(SIP/usuario2)
exten => 200,1,Answer() exten => 200,2,Playback(hello-world) exten => 200,3,Hangup()
Para aplicar los cambios ejecutamos en la CLI:
CLI> dialplan reload
El plan de marcado (dialplan) Es el corazón de un sistema asterisk donde
reside la lógica (comportamiento) de la central telefónica.
El plan de marcado es único y se configura en /etc/asterisk/extensions.conf
Es una lista de instrucciones que asterisk debe seguir como respuesta estímulos externos.
El plan de marcado tiene 4 definiciones fundamentales: contexto, extensiones, prioridades y aplicaciones.
El plan de marcado: contextos Son secciones del plan de marcado,
también se suele decir que son grupos de extensiones “nombradas”.
Permite la interacción de diferentes partes del plan de marcado.
Una extensión definida en un contexto esta totalmente aislada de otra en otro contexto, a menos que se especifique explícitamente la interacción.
El plan de marcado: contextos En programación es lo que se llaman
“subrutinas”. Se definen así: [micontexto001] [general]
[globals] Podemos usar: 0-9, A-Z, - , _ máximo 79
caracteres. “El contexto es el punto en el plan de
marcado donde las conexiones de un canal comenzarán”
La definición del contexto en el canal es como se conectará el canal al plan de marcado.
El plan de marcado: contextos
El plan de marcado: extensiones Es una instrucción o grupo de ellas y que
asterisk seguirá como consecuencia de una llamada entrante o por dígitos marcados en un canal activo(estímulo ext.)
exten => nombre, prioridad, aplicación(p,q,r)
exten => 101,1, Answer( )
En el ejemplo el nombre(numero) es 101, la prioridad es 1 y la aplicación es Answer.
El nombre puede ser cualquier combinación alfanumérica: Juan, 101Juan, 101.
El plan de marcado: extensiones Cada extensión tiene un nombre, puede
tener uno o más pasos, cada paso es una prioridad.
La aplicación es el comando que ejecuta una acción en la llamada.
Cada uno de estos componentes van separados por comas:
exten => 101,1,Answer( )exten => 101,2,Playback(hello-world)exten => 101,3,Hangup( )
El plan de marcado: prioridades Cada prioridad esta numerada
secuencialmente empezando en 1, si se salta una prioridad asterisk no continuará.
Prioridades no numeradas:
exten => 101,1, Answer()exten => 101,n, Hacer_algo()exten => 101,n, Hacer_algo_mas() exten => 101,n, Hacer_ultimo_paso() exten => 101,n, Hangup()
El plan de marcado: prioridades El operador “same” o “lo mismo”:
exten => 123,1,Answer() same => n,do somethingsame => n,do something else
same => n,do one last thingsame => n,Hangup()
Uso de etiquetas (labels):
exten => 101,1(contestar),Answer()
El plan de marcado: aplicaciones Cada aplicación realiza una acción especifica en
el canal activo: reproducir un sonido, aceptar una entrada desde el teclado , buscar algo en una DB, colgar una llamada, marcar un canal, etc.
Algunas aplicaciones como: Answer() y Hangup(), no requieren instrucciones para hacer su trabajo, sin embargo la mayoría si lo requieren.
Estos elementos adicionales llamados argumentos son pasado a la aplicación para afectar como estas ejecutan la acción.
aplicación(arg1,arg2,arg3,…)
Answer(), Playback() y Hangup()
La aplicación Answer() es usada para contestar una canal que esta “timbrando”
Esta aplicación realiza la configuración inicial para el canal que recibe una llamada entrante.
No requiere argumentos No siempre es necesario su uso, sin
embargo es una forma efectiva de asegurar que una canal esta conectado antes de realizar cualquier acción posteriorr.
Answer(), Playback() y Hangup() La aplicacion Playback() es unsada para
reproducir un archivo de sonido previamente grabado sobre una canal.
Los ingresos por teclado efectuados por el usario son ignorados.
Ruta por defecto: /var/lib/asterisk/sounds/ Para usar Playback() hay que especificar el
nombre de un archivo(sin la extension) como argumento.
Ej: Playback(filename) reproduce filename.wav
[general ] y [globals]
[general]
autofallthrough=yes
clearglobalvars=no
El parámetro autofallthrough es útil en los
casos en los que durante la ejecución del
dialplan no hay nada más que hacer, entonces
asterisk terminará la llamada de la mejor
manera posible
http://tinyurl.com/autofall
Variables globales
Como su nombre lo indica son variables que se aplican a todos las extensiones y en todos los contextos.
Pueden ser definidas de 2 formas:[globals]
GABRIEL=SIP/201
[internos]
exten => 123,1,SetGlobalVar(JOHN=SIP/john)
Variables de canal
Son variables que están asociadas únicamente a una llamada en particular.
A diferencia de las variables globales solo tienen vigencia durante la duración de la llamada y en el canal activo únicamente.
Para definirlas se hace uso de la aplicación Set()exten => 123,1,Set(CONTADOR=4)
exten => 123,2,Playback(digits/${CONTADOR})
Un ejemplo de una variable de canal es el callerID
Apps: Goto(), Background, WaitExten()
Como su nombre lo implica la aplicación Goto() se usa para enviar una llamada a otra parte del plan de marcado
La sintaxis de la aplicación requiere que pasemos como parámetros el contexto, extensión y prioridad destino. Ej:
exten => 400,1,Goto(context,extension,priority)
Apps: Goto(), Background, WaitExten()
Ejemplo: Agreguemos la siguiente línea al final del contexto internos:exten => 777,1,Goto(MenuPrueba,start,1)
Y luego agregamos el contexto MenuPrueba:[MenuPrueba]exten => start,1,Answer()exten => start,n,Playback(hello-world)
Entonces, cada vez que un dispositivo ingrese al contexto internos y marque 777, asterisk pasará al control de la llamada a la “primera” prioridad de la extensión “start” del contexto “MenuPrueba”
Apps: Goto(), Background, WaitExten()
La aplicación Background al igual que Playback(), reproduce un archivo de audio pre-grabado, pero a diferencia de Playback() cuando el llamante presiona una tecla o serie de teclas en el teclado telefónico, esta función interrumpe la reproducción del archivo y pasa la llamada a la primera prioridad de la extensión que corresponda al digito(s) presionado(s) dentro del mismo contexto.
Background() tiene la misma sintaxis de Playback():
[MenuPrueba] exten => start,1,Answer()
same => n,Background(welcome)
Apps: Goto(), Background, WaitExten()
Si queremos que asterisk espere por una entrada luego de que la reproducción del archivo ha finalizado podemos usar WaitExten().
Esta aplicación espera que el llamante ingrese dígitos DTMF y siempre se usa a continuación de la aplicación Background()
[MenuPrueba] exten => start,1,Answer()
same => n,Background(main-menu) same => n,WaitExten()
Apps: Goto(), Background, WaitExten()
Si queremos que WaitExten() espere por una respuesta durante un numero especifico de segundos simplemente debemos pasar como parámetro el numero de segundos:
same => n,WaitExten(5)
Amabas funciones Background() y WaitExten() permiten al usuario ingresar tonos DTMF, luego asterisk intentará encontrar una extensión en el mismo contexto que coincida con los dígitos que el llamante ingreso
Apps: Goto(), Background, WaitExten()
Ejemplo:
[MenuPrueba] exten => start,1,Answer()
same => n,Background(main-menu) same => n,WaitExten(5)
exten => 1,1,Playback(digits/1)
same => n,Goto(MenuPrueba,start,1) exten => 2,1,Playback(digits/2)
same => n,Goto(MenuPrueba,start,1)
Luego de hacer los cambios, guardamos y recargamos el plan de marcado.
Validando opciones invalidas y timeout
[MenuPrueba] exten => start,1,Answer()
same => n,Background(main-menu) same => n,WaitExten(5)
exten => 1,1,Playback(digits/1) same => n,Goto(MenuPrueba,start,1)
exten => 2,1,Playback(digits/2) same => n,Goto(MenuPrueba,start,1)
exten => i,1,Playback(pbx-invalid) same => n,Goto(MenuPrueba,start,1)
exten => t,1,Playback(vm-goodbye)
same => n,Hangup()
La aplicación Dial()
Sintaxis: Dial(tech/user, timeout, option, uri) El primer parámetro es el destino al cual
queremos llamar conformado por la tecnología (SIP,DAHDI,IAX), un slash (/) y la fuente remota (típicamente un numero o un usuario)
exten => 123,1,Dial(DAHDI/1)exten => 123,1,Dial(SIP/201)exten => 123,1,Dial(SIP/gastudil&SIP/anyuser)
La aplicación Dial()
Sintaxis: Dial(tech/user, timeout, option, uri) El segundo parámetro es el timeout especificado en
segundos y es el tiempo que asterisk intentara establecer una conexión con el canal definido.
exten => 101,1,Dial(SIP/gastudillo,10)
Si el canal es contestado antes del timeout asterisk puentea ambos canales y el plan de marcado termina.
Si el destino no contesta, está ocupado o no está disponible, asterisk setea un variable llamada DIALSTATUS y continua con la siguiente prioridad en la extensión.
La aplicación Dial()
Sintaxis: Dial(tech/user, timeout, option, uri) El tercer argumento en un carácter de
opción, puede contener mas de uno y su función es modificar el comportamiento de la función Dial ( ). Ej: rm (concatenar si es mas de una).
La letra r hará que el llamante escuche un tono de timbrado mientras el canal de destino es notificado de una llamada entrante, m en cambio reproducirá música en espera al llamante en lugar del típico timbre.
La aplicación Dial()
Sintaxis: Dial(tech/user, timeout, option, uri) Si el canal de destino soporta la recepción de una uri al
momento de la llamada, la uri especificada es enviada. Por ejemplo si el teléfono ip soporta esta característica,
la uri aparecerá en el display del teléfono, si usamos un softphone en cambio probablemente se abrirá un pop-up con la uri. Esta opción es raramente usada.
Cualquiera de estos argumentos puede no ser usado. Por ejemplo si queremos especificar una opción pero no un timeout, simplemente dejamos el argumento en blanco así:
exten => 123,1,Dial(SIP/101, ,r)
La aplicación Dial()
[MenuPrueba] exten => start,1,Answer()
same => n,Background(main-menu) same => n,WaitExten(5)
exten => 1,1,Dial(SIP/gastudillo,20,m) same => n,Goto(MenuPrueba,start,1)
exten => 2,1,Dial(SIP/anyuser,20,m) same => n,Goto(MenuPrueba,start,1)
exten => i,1,Playback(pbx-invalid) same => n,Goto(MenuPrueba,start,1)
exten => t,1,Playback(vm-goodbye)
same => n,Hangup()
Grabación de audio con Record()Record(filename.format, silence, maxduration, options)
Dentro de [internos] :
exten => 401,1,Playback(vm-intro)
exten => 401,n,Record(intro.gsm)
exten => 401,n,Wait(5)
exten => 401,n,Playback(intro)
exten => 401,n,Hangup
Grabación de audio con Record()
http://tinyurl.com/asteriskREC
“Usted se ha comunicado con la
compañía “ ”, si conoce el numero de la
extensión digítelo ahora, caso contrario
presione 1 para comunicarse con
ventas, 2 para soporte técnico, 3 para
contabilidad; o manténgase en la línea
que una operadora le atenderá”
Agregando variables al dialplan Revisemos el archivo de ejemplo que se
encuentra disponible en:
http://tinyurl.com/dialplan1
Expresiones y manejo de variables Se definen como un conjunto de variables,
operadores y valores que se colocan juntas para obtener un resultado.
$[expresion]
Ejemplos:$[${CONT} + 1]$[${CONT} / 2]
Cuando Asterisk encuentra una expresión, reemplaza toda la expresión por el valor resultante.
Es importante notar que antes de hacer esto primero evalúa el valor de las variables .
Expresiones y manejo de variablesexten => 321,1,Set(CONT=3)
exten => 321,2,Set(NEWCONT=$[${CONT} + 1])
exten => 321,3,SayNumber(${NEWCONT})
Reemplazando:exten => 321,2,Set(NEWCONT=$[3 + 1])
exten => 321,2,Set(NEWCONT=4)
Finalmente el valor de 4 es asignado a la variables NEWCONT a través de la función Set( )
Expresiones y manejo de variables Es importante resaltar que para indicar
que queremos realizar una operación es necesario dejar un espacio en blanco entre operador y los operandos.
exten => 123,1,Set(TEST=$[2+1])
No es lo mismo que :
exten => 234,1,Set(TEST=$[2 + 1])
Expresiones y manejo de variablesOperadores Boleanos.- Evalúan la verdad de una
sentencia or : expr1 | expr2
and:expr1 & expr2 Comparación: expr1 {=, >, >=, <, <=, !=} expr2
Matemáticos: expr1 {+, -} expr2 expr1 {*, /, %} expr2
Ramificación condicional
Aplicación GotoIf() Esta aplicación es la clave para la ramificación
condicional, tiene una sintaxis especial llamada la sintaxis condicional:GotoIf(expression?destination1:destination2)
Si la expresión es verdadera salta al destino uno, si es falsa salta al destino 2 pero…
Que es verdadero y que es falso ? Un carácter en blanco o el numero cero (0)
significan falso, cualquier otra cosa es verdadero.
Ramificación condicional
El destino puede ser: Una prioridad dentro de la misma
extensión. Ej: 3 Una extensión y prioridad dentro del
mismo contexto. Ej: 123,10. Un contexto, extensión y prioridad Ej:
internos,123,10. Una prioridad nombrada dentro de la
misma extensión.
Ramificación condicional
Ejemplos:
exten => 345,1,Set(TEST=1)exten => 345,2,GotoIf($[${TEST} = 1]?10:20)exten => 345,10,Playback(weasels-eaten-phonesys)exten => 345,20,Playback(office-iguanas)
exten => 123,1,Set(COUNT=10)exten => 123,2,GotoIf($[${COUNT} > 0]?3:10)exten => 123,3,SayNumber(${COUNT})exten => 123,4,Set(COUNT=$[${COUNT} - 1])exten => 123,5,Goto(2)exten => 123,10,Hangup( )
Ramificación condicional
La variable CALLERID Es una variable de canal que como su nombre lo
indica contiene información que identifica al llamante.
Es una variable especial que esta compuesta por sub-variables:
name: o nombre del llamante “Gabriel Astudillo” num: o numero del llamante <084519952> all: Ambos, el numero del llamante y su nombre:
“Gabriel Astudillo” <084519952>
Ramificación condicional
El caso de la Ex-enamorada
exten => 202,1,GotoIf($[${CALLERID(num)} = 201]?20:10)
exten => 202,10,Dial(SIP/gastudillo,30,r)
exten => 202,20,Playback(olvidame)
exten => 202,21,Hangup( )
Agregar en la definición de cada peer sip en sip.conf la linea: callerid="Tuomas Tammisalo" <1000>
Buzones de voz (voicemail)
Es una de las características mas populares de los sistemas de telefonía actual. En este sentido asterisk es muy flexible, para ello se edita el archivo: /etc/asterisk/voicemail.conf
Voicemail ilimitados con protección de password y con carpetas para organizar los voicemail.
Saludos diferentes para estados “ocupado” y “no disponible”.
Saludos por defecto y personalizados.
Buzones de voz (voicemail)
Habilidad para relacionar un teléfono con mas de un voicemail y voicemalis con mas de un usuario.
Notificación al correo electrónico de la llegada de un voicemail y posibilidad de adjuntar el archivo de audio.
Voicemail forwarding y broadcasts. Creación de Directorio de la empresa
basado en la información de los voicemail.
Buzones de voz (voicemail)
Contexto [general][general] format=wav49|wav|gsm ;ahorro transcoding [email protected]=yesskipms=3000 ; fwd o rew n milisegundosmaxsilence=10 ; silencio para cortarsilencethreshold=128 ; silence sensitivitymaxlogins=3 emaildateformat=%A, %B %d, %Y at %r pagerdateformat=%A, %B %d, %Y at %r;en el formato de la funcion STRFTIME de C
Buzones de voz (voicemail)
Contexto [zonemessages] El propósito de esta sección es permitir
el manejo de zona horaria específica para los mensajes con el fin de entregar los mensajes de los usuarios con las marcas de tiempo correcto:
[zonemessages]eastern=America/New_York|'vm-received' Q 'digits/at' IMp central=America/Chicago|'vm-received' Q 'digits/at' Imp ecuador=America/Guayaquil|'vm-received' Q 'digits/at' IMp
Buzones de voz (voicemail)
Sintaxis:mailbox => password, name, email, pager_email, options
options: Este campo permite ingresar opciones que se sobreponen a las configuraciones globales del mailbox.
Se escriben de la forma option=value separados por el carácter pipe (|).
[default]
201 => 201,Gabriel Astudillo, [email protected],
[email protected], tz=central|attach=yes
Buzones de voz (voicemail)
Dentro de [internos]:
exten => 101,1,Dial(${USER1},30,m)
same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
same => n(unavail),VoiceMail(101@default,u)
same => n,Hangup()
same => n(busy),VoiceMail(101@default,b)
same => n,Hangup()
;Acceso al voicemail:
exten => *282,1,VoiceMailMain()
Directorio Telefónico
Directory( ) necesita de 3 argumentos: el contexto del voicemail desde donde se leerán los nombres, el contexto del dialplan (extensions.conf) donde se puede ubicar al usuario y un carácter de opción.
Por defecto Directory() busca en el directorio por el apellido , pero si le pasamos la opción f, buscará por nombres. Por ejemplo:
exten => 8,1,Directory(default,internos,f)
exten => 9,1,Directory(default,internos)
Si el llamante presiona 8 obtendrá un directorio ordenado por nombres y si presiona 9 el llamante obtendrá un directorio ordenado por apellidos.
Ramificación condicional basada en fechas
Aplicación GotoIfTime() Similar a GotoIf() pero se diferencian en que GotoIfTime()
toma la decisión de pasarle el control de la llamada basado en la consulta al reloj del sistema.
GotoIfTime(times,days_of_week,days_of_month,months?label) times: rangos de horas del día en formato 24h, el día
comienza a las 00:00 y termina a las 23:59. Ej: 09:00-17:59 days_of_week: días de la semana mon, tus, thu… Ej: mon-fri days_of_month: 7-12 (del 7 al 12) o 15,30 (15 y 30) months: jan, feb, mar, apr… Para hacer coincidir todos los valores hay que poner un * en
el lugar del parámetro.
Ramificación condicional basada en fechas
Aplicación GotoIfTime()
GotoIfTime(times,days_of_week,days_of_month,months?label)
El argumento label puede ser cualquiera de los siguientes:
Una prioridad dentro de la misma extensión Ej: 3 Una extensión y prioridad dentro del mismo
contexto (123,10) Un contexto, extensión y prioridad Ej:
internos,123,10 Una prioridad nombrada dentro de la misma
extensión
Ramificación condicional basada en fechas
Aplicación GotoIfTime(); Si es cualquier hora del dia, en cualquier dia de la
semana,
; durante el noveno dia del mes de octubre nuestra empresa esta ;cerrada
exten => 777,1,GotoIfTime(*,*,9,oct?cerrado,start,1)
; durante las horas de trabajo envie las llamadas al contexto MenuPrueba
exten => 777,2,GotoIfTime(09:00-17:59|mon-fri|*|*?MenuPrueba,start,1)
exten => 777,3,GotoIfTime(09:00-11:59|sat|*|*?MenuPrueba,start,1)
; en cualquier otro caso estamos cerrados
exten => 777,4,Goto(cerrado,start,1)
Macros
Las Macros son construcciones muy útiles, diseñadas para evitar repeticiones en el plan de marcado.
También permiten hacer cambios a grandes grupos de extensiones en una manera, rápida, ágil y ordenada, recordemos:exten => 101,1,Dial(${USER1},30,m)same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)same => n(unavail),VoiceMail(101@default,u)same => n,Hangup() same => n(busy),VoiceMail(101@default,b)
same => n,Hangup()
Imaginen tener que hacer esto para una organización de 100 usuarios !!!!! O tener que agregar una nueva característica a todos los usuarios
Como definir una macro
La definición de una macro es similar a la de un contexto (de hecho es un contexto “limitado”).
[macro-extensiones]
exten => s,1,Dial(${USER1},30,m)same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)same => n(unavail),VoiceMail(101@default,u)same => n,Hangup() same => n(busy),VoiceMail(101@default,b)same => n,Hangup()
Noten que esta definición aun no es practica pues solo define al usuario 1 y nos direccionaría a todos los usuario a su voicemail
En la definición de una macro siempre debemos utilizar la extensión especial s
Como llamar a una macro
Macro(nombre,arg1,arg2...)
[internos]
exten => 201,1,Macro(extensiones,arg1, arg2)
Al momento de llamar a la función Macro se definen al menos 4 variables de canal que nos van a permitir generalizar su uso:
${MACRO_CONTEXT} (internos) ${MACRO_EXTEN} (201) ${MACRO_PRIORITY} (1) ${ARGn} (arg1,arg2)
Como llamar a una macro
[macro-extensiones]
exten => s,1,Dial(${USER1},30,m)same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)same => n(unavail),VoiceMail(${MACRO_EXTEN}@default,u)same => n,Hangup() same => n(busy),VoiceMail(${MACRO_EXTEN}@default,b)same => n,Hangup()
[internos]exten => 201,1,Macro(extensiones,arg1)
Nótese que ahora ya podemos pasar al voicemail de cada una de las extensiones, pero aun esta fijo el canal con el cual se establecerá la comunicación. Alguna idea ?
Como llamar a una macro
[macro-extensiones]
exten => s,1,Dial(${ARG1},30,m)same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)same => n(unavail),VoiceMail(${MACRO_EXTEN}@default,u)same => n,Hangup() same => n(busy),VoiceMail(${MACRO_EXTEN}@default,b)same => n,Hangup()
[internos]exten => 201,1,Macro(extensiones,SIP/gastudillo)
exten => 202,1,Macro(extensiones,SIP/anyuser)
exten => 203,1,Macro(extensiones,${USER1})
Conferencias con Meetme()
Ventajas: Posibilidad de crear conferencias con protección de
password. Administración de conferencias (silenciar, bloquear, kick). La opción de silenciar a todos los participantes, menos a
uno. Creación estática o dinámica de conferencias.
En /etc/asterisk/meetme.conf editar:
[rooms]
conf => 600
Conferencias con Meetme()
Para hacerlo disponible desde el dialplan usamos la funcion MeetMe( ), la cual recibe 3 parametros: el nombre del cuarto de conferencias tal como fue definido en
meetme.conf una o mas opciones el password para acceder a la conferencia
exten => 600,1,MeetMe(600,iMp,)
i información de quien entra y quien sale.
M música en espera si solo hay una persona en la conferencia.
p opción de presionar # para salir de la conferencia.
Coincidencia de patrones
Es útil para tener que evitar escribir una extensión
para cada uno de los números a los que tenemos
que marcar (sobretodo los números externos a la
organización).
Sintaxis
Siempre empiezan con el underscore ( _ )
Luego podemos usar uno o varios de los siguientes
caracteres:
Coincidencia de patrones
X Representa cualquier digito del 0 al 9
Z Representa cualquier digito del 1 al 9
N Representa cualquier digito del 2 al 9
[15-7] Representa cualquier digito o rango de
digitos en este caso representa al 1,5,6 o 7.
El punto (.) representa uno o mas caracteres,
es conocido como el wilcard.
Coincidencia de patrones
• Para hacer uso del pattern matching
simplemente lo colocamos en el lugar del
nombre de una extensión. Ejemplo:
exten => _NXX,1,Playback(auth-thankyou))
Coincidencia de patrones
Sintaxis
Si asterisk encuentra que los digitos coiciden con mas de un
patron dentro del contexto, seleccionará al mas especifico:
exten => _555XXXX,1,Playback(digits/1)
exten => _55512XX,1,Playback(digits/2)
Local:
exten => _NXXXXXX,1, AcciónNacional:
exten => _0[2-7]XXXXXXX,1, AcciónMovistar:
exten => _08[45]XXXXXX,1,Accion
Coincidencia de patrones
Porta:
exten => _09[732]XXXXXX,1, Acción
exten => _08[567]XXXXXX,1, Acción
Internacional:
exten => _00. ,1, Acción
La pregunta es como asterisk se entera de cual es el número
que he marcado y que deberá pasar a la función dial ?
Uso de la variable ${EXTEN} Siempre que digitemos una extensión, Asterisk guardará
en la variable de canal EXTEN los dígitos que hemos
marcado.
exten => _7XX,1,Playback(digits/${EXTEN})
exten => _8XX,1,Playback(digits/${EXTEN:1})
exten => _9XX,1,Playback(digits/${EXTEN:-1})
Presionemos en el teclado: 723, 823, 923 y notemos la
diferencia.
Telefonía Analógica: FXS & FXO Para los circuitos de telefonía analógica existen
2 tipos de terminales: La oficina(la central telefónica de la PSTN) y la estación (típicamente un teléfono, modem o una tarjeta en la PBX).
La oficina central es responsable de: Suministrar energía a la línea (48 VDC) Proveer voltaje para timbrar (90 VAC) Proveer tono de marcado Detectar el estado del colgado (off-hook and on-
hook) Enviar señalización complementaria (caller ID)
Telefonía Analógica: FXS & FXO La estación es responsable de: Proveer timbrado o al menos tener la
capacidad de recibir el voltaje de timbrado de alguna manera.
Proveer un teclado numérico o alguna manera de enviar tonos DTMF
Proveer un hook switch para indicar el estado de la línea.
Telefonía Analógica: FXS & FXO A un puerto FX (Foreign eXchange) se lo
nombra por la entidad que a la que se conecta, no por lo que hace el puerto.
Un puerto FXO (Foreign eXchange Office) actua como una estacion pero se lo conecta a la oficina central de la PSTN.
Un puerto FXS(Foreign eXchange Station) actua como un puerto que provve servicios de oficina central pero se conecta una estacion (se le conecta un telefono).
Telefonía Analógica: FXS & FXO Es por esta razon que las configuraciones
de señalizacion en los archivos de asterisk aparentemente se hacen “al reves”:
Los puertos FXO usan señalizacion FXS y Los puertos FXS usan señalizacion FXO. Si un puerto FXO se conecta a una oficina
central necesita comportarse como una estacion por lo tanto necesita señalizacion FXS.
Telefonía Analógica: FXS & FXO En tarjetas Digium y en general el
modulo FXS es verde, el FXO es rojo IMPORTANTE: Conectar la PSTN en un
modulo verde puede destruir el modulo y hasta la tarjeta !!
TDM410P
PCI 2.2
Fuente de Voltaje
FXO PortsFXS Ports
Entradas RJ-11
Configuración de un canal FXO Configuración del hardware en
/etc/dahdi/system.conf La siguiente configuración mínima define un canal
fxo con señalización fxs:
fxsks=4echocanceller=mg2,4loadzone=usdefaultzone=us
La primera línea define el tipo de señalización y el protocolo para el canal 4:
Loopstart (ls) Groundstart (gs) Kewlstart (ks)
Configuración de un canal FXO La diferencia está en la forma como el equipo
remoto solicita el tono de marcado, en groundstart lo hace mandando momentáneamente a tierra la línea, loopstart lo hace en cambio usando un corto momentáneo para pedir tono de marcado. Kewlstart es lo mismo que loopstart pero es un poco mas eficiente en cuanto permite detectar desconexiones remotas.
Kewlstart es el mas usado en las implementaciones de asterisk y funciona bien con las líneas de nuestra localidad.
Configuración de un canal FXO loadzone configura un grupo de indicaciones
(determinadas en zonedata.c) relativas a los sonidos de la línea en determinada región o país, tales como tono de marcado, ciclos de timbrado, tono de ocupado, etc.
defaultzone es usada si ninguna zona se ha especificado para un canal en particular
Para cargar los cambios ejecutamos en el shell
# dahdi_cfg -vvv
Configuración automática
A partir de la implementación de dahdi no es necesario escribir en el archivo system.conf podemos hacer uso de tools de deteccion y configuracion automatica (si la tarjeta esta certificada)
Deteccion:# lsdahdi
# dahdi_scan
# dahdi_hardware Auto configuración:# dahdi_genconf & dahdi_genconf modules
Configuración de un canal FXOConfiguración del hardware en chan_dahdi Asterisk usa la información en
/etc/asterisk/chan_dahdi.conf para determinar las configuraciones del hardware de telefonía instalado en el sistema.
El archivo chan_dahdi.conf también controla las características y funcionalidades asociadas con los canales físicos: caller id, llamada en espera, cancelación de eco y muchas mas.
Configuración de un canal FXO[channels]
; canales físicos:; opciones por defecto para todos los canalesusecallerid=yeshidecallerid=nocallwaiting=nothreewaycalling=yestransfer=yesechocancel=yesechotraining=yes; definicion de canales:context=entrantes signalling=fxs_ks ; señalizacion FXS para canal FXOchannel => 4 ; PSTN se conecta al puerto 4
Configuración de un canal FXO La sección [channels] determina el método de
señalización para los canales físicos y sus opciones.
Cuando una opción es definida esta es heredada hacia abajo al resto del archivo.
Un canal se define usando channel => , y cada definición del canal hereda todas las opciones definidas por encima de esa línea. usecallerid=yes habilita el caller ID hidecallerid=no No se ocultará el caller ID para
las llamadas salientes.
Configuración de un canal FXO callwaiting=no
La llamada en espera es desactivada para una linea FXO
threewaycalling=yesPermite que una llamada activa pueda ser puesta en espera con un hook flash luego podemos llamar a un tercero e invitarlo a la conversación con otro hook flash.
transfer=yesPermite transferir llamadas con un hook flash; requiere que three-way calling este activada
Configuración de un canal FXO echocancel=yes
Habilita la cancelación de eco, se requiere siempre que usemos líneas análogas.
echotraining=yesLe indica a asterisk que envíe un tono a través de la línea al inicio de la llamada para medir el eco y luego aprender de el mas rápidamente.
Cuando una llamada ingresa a una interfaz FXO, usted desearía que la llamada apunte a un contexto en el plan de marcado verdad ?
Configuración de un canal FXO La acción a realizar es configurada dentro de un
bloque de instrucciones llamado contexto el mismo que se configura en el extensions.conf.
Las llamadas entrantes en la interfaz FXO son direccionadas al contexto entrantes con la línea context=entrantes.
Finalmente como un canal FXO usa señalización FXS, la definimos en la linea signalling=fxs_ks
module reload chan_dahdi.so
dahdi show channels
Configuración de un canal FXO[entrantes]exten => s,1,aplicacion( )exten => s,2,aplicacion( )exten => s,3,aplicacion( )
La extensión s Cuando una llamada entra a un contexto
sin una extensión especifica de destino (por ejemplo una llamada a un puerto fxo) deben ser recibidas por la extensión s “start”
Configuración de un canal FXO CONFIGURACION DEL DIALPLAN
[entrantes];las llamadas que provienen del puerto FXO son ;direccionadas a este contexto en chan_dahdi.confexten => s,1,Answer()exten => s,2,Echo()
Lab: Probar que al llamar al 2269261 contesta la PBX y se reproduce tu propia voz