Instalación e Configuración dun PBX Asterisk en Debian Lenny
Introducción
O obxectivo principal é a instalación dun PBX funcional mediante Asterisk nun equipo informático con Debian Lenny, actualmente en estado "testing". O Equipo dispon do seguinte hardware:
- CPU: Pentium III (Coppermine) 1Ghz
- RAM: 512Mb SDRAM
- Disco Duro: IDE 40Gb
- Tarxeta Rede: 100M Realtek RTL8139
- Tarxetas de Telefonía:
- Cologne Chip Designs GmbH ISDN (HFC-PCI) rev 02 (Beronet Billion BN250 1 porto BRI)
- Tiger Jet Network Inc. Tiger 3XX (OpenVox A400P)
O kernel actual é o 2.6.26-1-686, e ten incorporados os drivers para RDSI de isdn4linux, que cargan o módulo hisax para as dúas tarxetas. En futuras versións do kernel, o sistema a empregar será o máis moderno mISDN que incorpora o driver misdn útil para a tarxeta Cologne Chip Designs. Para a tarxeta OpenVox A400P se emprega habitualmente o driver zaptel.
O módulo hisax está soportado por asterisk para tarxetas BRI, aínda que parece que é necesario un parche
A tarxeta RDSI Cologne Chip Design e soportada normalmente polo driver bristuff de junghanns, que parece ser o de máis calidade, pero que precisa de parchear o Asterisk (existen scripts automatizados). Neste caso (Beronet Billion BN250) parece que o driver ideal e o misdn coa ventaxa de pasar a formar parte do próximo kernel Linux. A partir do kernel 2.6.27 ven incluido mISDN 2.0, non dispoñible en Debian neste momento, o instalaremos para probalo con Asterisk. A versión 1.x de misdn pode instalarse perfectamente no kernel de Lenny, mentras que a versión 2.x é necesario utilizala mediante chan_lcr, proporcionada pola aplicación Linux Call Router.
Mais drivers que poden soportar a tarxeta RDSI son:
A versión de Asterisk que imos empregar é a última Asterisk 1.6, e o faremos dende 0, xa que non está dispoñible ningún tipo de paquete Debian para esta versión. A versión 1.6 presenta notables cambios na súa arquitectura que iremos abordando a medida que avancemos na instalación. Un dos máis importantes é o abandono dos drivers zaptel en favor de DAHDI (Digium Asterisk Hardware Device Interface) que consta de dúas partes, os módulos para o kernel (dahdi-linux) e as utilidades de configuración (dahdi-tools), reemplazando /etc/asterisk/zapata.conf por /etc/asterisk/chan_dahdi.conf e /etc/zaptel.conf por /etc/dahdi/system.conf. Ainda que este cambio parece moi drástico, a rama 1.4 tamén vai abandonar o driver zaptel.
Esquema de Rede
O PBX Asterisk estará situado no aula IF3 de Informática, conectada a Rede Telefónica mediante unha liña RDSI por medio do interface BRI, e tendo doble acceso a Internet, un directo a través da ADSL sobre RDSI da propia IF3 e outro a través da liña ADSL dos ciclos utilando Gandalf como pasarela e router. O acceso principal a Internet e o acceso dende fora do centro o PBX Asterisk se fará a través da liña ADSL dos ciclos e de Gandalf. En caso de fallo da ADSL dos ciclos, o PBX empregaría a ADSL de IF3.
Unha posibilidade a estudiar sería tamén o balanceo das chamadas VoIP sobre as dúas liñas ADSL, de xeito que se utilicen simultáneamente si se atopan dispoñibles e ademáis contemplar a posibilidade de un servidor Asterisk de seguridade que tomaría o relevo en caso de caída do principal. Electrónica dispón tamén doutra liña ADSL que sería perfectamente posible utilizar do mesmo xeito.
Será posible conectar e utilizar o servidor PBX Asterisk:
- Dende IF3, IF4 e o Departamento de Informática
- Dende as aulas de Administrativo, Electrónica e Telecomunicacións, aula de Informática da ESO e Aula Mentor.
- Dende Internet, tanto a través da liña ADSL de IF3 como a liña ADSL dos ciclos. Tamén podería utilizar a ADSL de Electrónica
O acceso principal será a través do ADSL dos Ciclos, para o que Gandalf terá que facer o rutado necesario.
Os casos de uso poderían ser os seguintes:
Chamada dende a Rede Telefónica o número da liña RDSI de IF3
- Dependendo do marcado podemos encamiñala hacia: Telefono analóxico conectado o PBX-Asterisk, Teléfono IP conectado en calquera punto da rede, Softphone de calquera punto da rede, Teléfono IP ou softphone conectado a Internet fora do centro e rexistrado no noso PBX-Asterisk, chamada mediante un proveedor VoIP externo a outro número conectado a rede telefónica dentro ou fora de España ou a un softphone ou teléfono IP rexistrado con ese proveedor.
Chamada dende Internet (externa mediante VoIP) a través do PBX-Asterisk.
- Igual que o punto Anterior
Chamada dende un teléfono interior (Softphone, teléfono IP ou teléfono de liña telefónica)
- Igual que o primeiro punto
Como en realidade dispoñemos de dúas liñas telefónicas (a da IF3 e a de Electrónica) a configuración poderá ser máis adiante moito máis completa, pero este traballo deberá estudiarse con posteridade a instalación, xa que a liña de Electrónica será xestionada por outro PBX con Trixbox.
Servicios Planeados
- Contestador Automático
- Permitirá a cada extensión utilizar un contestador automático.
- Recepción de Correos
- Permitirá que se poda escoitar o correo electrónico de cada usuario vía telefónica.
- Chamadas dende telefonía fixa
- As chamadas recibidas a través de liña telefonica conmutada se poderán redirixir a través de varios proveedores de VoIP, a liñas de teléfono VoIP directamente rexistradas co servidor Asterisk, ou co servidor Trixbox, a outras liñas telefónicas fixas ou os teléfonos conectados o servidor Asterisk ou Trixbox.
- Chamadas a través de VoIP
- Os encaminamentos serán similares o punto anterior.
- Avisos
- Poderanse programar avisos telefónicos que se produciran no momento indicado. Por exemplo, sms para aviso de claustros ou reunións de departamentos.
- Chamadas entre proveedores VoIP
- As chamadas entre os clientes dun mismo proveedor IP son normalmente gratuitas, o Asterisk será capaz de encamiñar as chamadas dun proveedor IP a outro co que as chamadas entre varios proveedores IP serán posibles e gratuitas. Para instalar este servicio se terá que abrir contas en varios proveedores IP xa sexan gratuitas ou de pago.
Servicios Suxeridos
- Salas de reunións
- Para realizar charlas entre varias persoas, restrinxido a un grupos de extensións por departamentos. ¿Reunión de Departamento telefónica?, ¿Clases vía telefónica? ¿Clases con voz sintetizada programadas vía telefónica?.
- Encamiñamento de teléfonos móbiles
- Dispoñendo de tarxetas GSM sería posible facer chamadas fixo<->móbil<->VoIP o precio da chamada máis barata posible entre dous números do proveedor de telefonía móbil elexido. Incluso e posible que existan ofertas de chamadas gratuitas móbil->móbil que poderías aproveitarse para facer chamadas gratuitas móbil<->fixo e móbil<->VoIP.
- Consultas de calificacións vía telefónica
- De notas ou outro tipo de información persoal. A resposta pode ser vía voz ou vía sms.
- Consultas da Wikipedia ou apuntes
- Permitirá realizar consultas que se responderán via voz, por exemplo termos dun diccionario ou da wikipedia. A dificultade maior e atopar un sistema de recoñecimento de voz libre e de calidade.
- Integración de Asterisk nunha plataforma de e-learning
- Permitirá utilizar os servicios de asterisk integrados nunha plataforma e-learning como Dokeos ou Moodle.
- Solicitude de documentación vía telefónica
- Será posible solicitar documentación vía telefónica que será enviada a unha conta de correo electrónico (por exemplo apuntes ou pdf's coas notas).
- Interface Web de Configuración
- Creación dunha interface que permita os usuarios configurar os distintos servicios os que teñan acceso.
Instalación de Debian
A instalación será a habitual dunha Debian Lenny, para elo baixamos o CD de instalación por rede da páxina oficial de Debian e instalaremos so o sistema base.
O primeiro que temos que facer unha vez actualizado o sistema base é actualizar o sistema completo e instalar aplicacións adicionais, para facer esto iniciamos a sesión como root e modificamos o ficheiro /etc/apt/sources.list para incluir:
deb http://www.debian-multimedia.org lenny main
Posteriormente actualizamos o sistema:
apt-get update apt-get dist-upgrade
O sistema base lle engadiremos os seguintes paquetes:
- ssh
- Para acceder e configurar remotamente o equipo Asterisk.
- iptraf
- Ferramenta de supervisión de rede.
- nmap
- Aplicación de revisión de portos.
- rcconf
- Ferramenta de configuración de servicios.
- vim
- Editor de texto de consola
- wireless-tools
- Ferramentas de configuración de tarxetas wireless.
- gnome
- Entorno gráfico de usuario, por si queremos utilizar ferramentas gráficas (consultar a web, descargar co navegador ...). En principio non estará activo.
- apache
- Para as ferramentas de configuración web de asterisk.
- bridge-utils
- Ferramentas de configuración de rede, particularmente para facer pontes de rede.
- ebtables
- Ferramenta de firewall e rutado para pontes de rede.
Executamos:
apt-get install ssh iptraf rcconf vim gnome apache2 wireless-tools gnome bridge-utils ebtables
Configuración Inicial do Sistema Operativo
En primeiro lugar, desactivaremos o inicio automático do xestor gráfico de entrada de usuario (gdm) mediante a ferramente rcconf, e posteriormente facemos uns pequenos axustes ó editor vim editando /etc/vim/vimrc:
- Descomentamos syntax on (Os comentarios comezan con " )
- Engadimos set noai
Agora poñemos un nome o host, editando /etc/hostname. Neste caso ASTERISK-RODEIRA
Instalación de Asterisk
Asterisk 1.4.21 está dispoñible para Debian lenny, polo que a súa instalación é tan sencilla como facer:
apt-get install asterisk
Sen embargo imos instalar Asterisk 1.6 e configuralo para o noso hardware.
Descarga de Software
apt-get install ntp
--- NO --- apt-get install ntpdate crontab -e 1 5 * * * /usr/sbin/ntpdate-debian ----------
En primeiro lugar descargaremos a última versión de Asterisk 1.6 e paquetes relacionados:
wget http://downloads.digium.com/pub/asterisk/releases/asterisk-1.6.0.5.tar.gz wget http://downloads.digium.com/pub/asterisk/asterisk-addons-1.6.0.1.tar.gz wget http://downloads.digium.com/pub/telephony/dahdi-linux/dahdi-linux-2.1.0.4.tar.gz wget http://downloads.digium.com/pub/telephony/dahdi-tools/dahdi-tools-2.1.0.2.tar.gz wget http://downloads.digium.com/pub/libpri/libpri-1.4.9.tar.gz wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-alaw-current.tar.gz wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-g722-current.tar.gz wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-g729-current.tar.gz wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-gsm-current.tar.gz wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-sln16-current.tar.gz wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-ulaw-current.tar.gz wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-es-wav-current.tar.gz
De aquí se poden descargar os drivers mISDN versión 1 e 2:
wget http://www.misdn.org/downloads/releases/mISDN-1_1_9.1.tar.gz wget http://www.misdn.org/downloads/releases/mISDNuser-1_1_9.1.tar.gz
wget http://www.colognechip.com/download/mISDN/socket/mISDN.tar.gz wget http://www.colognechip.com/download/mISDN/socket/mISDNuser.tar.gz
A versións do kernel a partir do 2.6.27 xa inclúen os drivers mISDN v2, de modo que é a que utilizaremos. Este kernel non está dispoñible en Debian, de modo que baixamos o kernel vanilla máis actual (vanilla quere decir que é o kernel orixinal, sin parches de ningunha distribución) que xa os inclúe. O descargamos no directorio /usr/src.
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.5.tar.gz
Instalamos o software necesario para compilar o kernel, os módulos e Asterisk:
apt-get install kernel-package libncurses5-dev zlib1g-dev linux-headers-2.6-686 automake
Descomprimimos e configuramos o kernel. Pode facerse dende un terminal en gnome ou dende a consola (texto). No primeiro caso faremos a configuración do kernel con make gconfig, no segundo caso con make menuconfig.
cd /usr/src tar -xvzf linux-2.6.28.5.tar.gz cd linux-2.6.28.5 make menuconfig
Poñemos as seguintes opcións:
Enable The Block Layer -> I/O Schedulers -> Default I/O Scheduler: Deadline Processor Type And Features -> Preemption Model - Low Latency Desktop Processor Type And Features -> Timer Frecuency: 1000Hz Networking Support -> Phonet Protocols Family: M Device Drivers -> ISDN Support -> Modular ISDN Driver: * Device Drivers -> ISDN Support -> CAPI 2.0 subsystem -> (Todo seleccionado) Device Drivers -> Telephony Support: (Todo M)
Creamos o paquete co núcleo e o instalamos, reiniciando co novo núcleo:
make-kpkg --initrd --rootcmd fakeroot kernel-image kernel-headers cd .. dpkg -i linux-image-2.6.28.3_2.6.28.3-10.00.Custom_i386.deb ln -s linux-2.6.28.3 linux shutdown -r now
Instalación dos módulos hardware de telefonía
Imos utilizar mISDNv2 para o módulo RDSI e dahdi 2.1 para o módulo RTB.
mISDNv2
probamos o módulo mISDN
modprobe hfcpci modprobe mISDN_dsp
A saída en /var/log/kern.log debería ser algo similar a esto:
hfcpci 0000:00:09.0: PCI INT A -> Link[LNKB] -> GSI 11 (level, low) -> IRQ 11 mISDN_hfcpci: found adapter CCD/Billion/Asuscom 2BD0 at 0000:00:09.0 mISDN: HFC-PCI driver 2.0 HFC-PCI: defined at mem 0xe1b2c000 fifo 0xdf558000(0x1f558000) IRQ 11 HZ 1000 HFC 1 cards installed DSP modul 2.0 mISDN_dsp: DSP clocks every 64 samples. This equals 8 jiffies. mISDN_dsp_element_register: hwec registered
A continuación instalaremos o paquete mISDN_utils versión 2
mkidr mISDNuser cd mISDNuser tar -xvzf mISDNuser.tar.gz make make install
Desgraciadamente Asterisk non soporta a versión 2 de mISDN incluída no kernel mediante chan_misdn (so mISDN v1), nin parece que teña plans de facelo. A solución é ou ben utilizar mISDN v1, sobreescribindo as versións que traerán os kernel, ou utilizar chan_lcr...
DAHDI
O driver dahdi e o sustituto de zaptel nas últimas versións de asterisk. O ficheiro equivalente a /etc/zaptel.conf vai ser /etc/dahdi/system.conf e o sustituto de /etc/asterisk/zapata.conf e /etc/asterisk/chan_dahdi.conf.
O compilamos para soportar a tarxeta cos módulos FXO e FXS.
tar -xvzf dahdi-linux-2.1.0.4.tar.gz cd dahdi-linux-2.1.0.4 make make install
Agora necesitaremos compilar as utilidades de manexo do driver dahdi.
tar -xvzf dahdi-tools-2.1.0.2.tar.gz cd dahdi-tools-2.1.0.2 ./configure make menuconfig make make install
No momento de facer o ./configure, o sistema e posible que visualice a seguinte mensaxe:
checking for GENERIC_HDLC_VERSION in linux/hdlc.h... no configure: GENERIC_HDLC_VERSION version 4 not found, disabling sethdlc.
Esto é debido a un bug no configure que podemos solucionar do seguinte xeito:
- Editamos configure.ac e buscamos a liña que pon AST_C_DEFINE_CHECK([HDLC], [GENERIC_HDLC_VERSION], [linux/hdlc.h], [4]) e a cambiamos por AST_C_DEFINE_CHECK([HDLC], [GENERIC_HDLC_VERSION], [linux/hdlc/ioctl.h], [4])
- Executamos autoconf
- Editamos configure e buscamos a liña que pon #include <linux/hdlc/ioctl.h> e lle poñemos diante ##include <net/if.h>
- Executamos: ./configure, make menuconfig e make install
Insertamos o novo módulo con modprobe dahdi e a saída no /var/log/kern.log debera ser similar a esta:
dahdi: Telephony Interface Registered on major 196 dahdi: Version: 2.1.0.4 Freshmaker version: 71 Freshmaker passed register test Module 0: Installed -- AUTO FXS/DPO Module 1: Installed -- AUTO FXO (FCC mode) Module 2: Not installed Module 3: Not installed Found a Wildcard TDM: Wildcard TDM400P REV E/F (2 modules) dahdi: Registered tone zone 6 (Spain)
Debemos editar /etc/dahdi/system.conf e cambiar loadzone e defaultzone a es ...
LCR
LCR (Linux Call Router) e un pequeno PBX que imos utilizar únicamente para que Asterisk poda acceder a tarxeta RDSI. En primeiro lugar o descargamos e o descomprimimos.
wget http://www.linux-call-router.de/download/lcr-1.3/lcr_20090107.tar.gz tar -xvzf lcr_20090107.tar.gz cd lcr
E necesario parchear o arquivo /usr/include/mISDNuser/mbuffer.h, xa que os includes están mal postos, deben ser:
#include <mISDNuser/mISDNif.h> #include <mISDNuser/mlayer3.h>
Compilamos e instalamos LCR
./configure --with-asterisk --with-ssl make make install ln -s /usr/local/lcr /etc/lcr
Comprobamos as chamadas:
lcr fork lcradmin status
Facemos unha chamada o número da RDSI vía telefono PSTN, comprobando a recepción no terminal.
Editamos /etc/lcr/routing.conf e rediriximos TODO a Asterisk
[main] : remote application=asterisk
Nota para Asterisk 1.6.1.0
A versión de LCR que estou a probar non compila correctamente contra Asterisk 1.6.1.0, dando os seguintes erros:
make all-am make[1]: Entrando no directorio `/root/lcr' gcc -I/usr/include/mISDNuser -DCONFIG_DATA="\"/usr/local/lcr\"" -DSHARE_DATA="\"/usr/local/lcr\"" -DLOG_DIR="\"/usr/local/lcr\"" -DEXTENSION_DATA="\"/usr/local/lcr/extensions\"" -D_GNU_SOURCE -fPIC -c chan_lcr.c -o chan_lcr.po chan_lcr.c: In function \u2018lcr_write\u2019: chan_lcr.c:1998: error: incompatible type for argument 2 of \u2018bchannel_transmit\u2019 chan_lcr.c: In function \u2018lcr_read\u2019: chan_lcr.c:2038: error: incompatible types in assignment chan_lcr.c: In function \u2018load_module\u2019: chan_lcr.c:2535: warning: passing argument 2 of \u2018ast_register_application2\u2019 from incompatible pointer type make[1]: *** [chan_lcr.po] Erro 1 make[1]: Saíndo do directorio `/root/lcr' make: *** [all] Erro 2
O problema e o cambio no campo data da estructura ast_frame en /usr/include/asterisk/frame.h, que agora é:
union { void *ptr; uint32_t uint32; char pad[8]; } data;
A solución consiste en poñer na liña 1998 de chan_lcr.c:
bchannel_transmit(call->bchannel, f->data.ptr, f->samples);
E na liña 2038:
call->read_fr.data.ptr = call->read_buff;
Asterisk
Descargamos libresample e nbs do árbol de proxectos de asterisk, e os compilamos e instalamos:
svn co http://svn.digium.com/svn/thirdparty/libresample/trunk svn co http://svn.digium.com/svn/nbs/trunk/ cd nbs make&&make install cd ../libresample make&&make install
Descomprimimos o tar.gz do asterisk:
tar -xvzf asterisk-1.6.0.5.tar.gz cd asterisk-1.6.0.5
Descargamos e instalamos o codec ilbc (low bit rate codec) en codecs/ilbc dentro da carpeta de asterisk
wget http://www.ietf.org/rfc/rfc3951.txt wget http://www.ilbcfreeware.org/documentation/extract-cfile.awk awk -f extract-cfile.awk rfc3951.txt > codecs/ilbc
Tamén se pode facer co script situado en contrib/scripts/get_ilbc_source.sh dentro do directorio de instalación de Asterisk
Instalamos as dependencias de Asterisk e FreePBX:
apt-get install libasound2-dev festival-dev speech-tools festvox-ellpc11k ffmpeg libavcodec-dev libspandsp-dev apt-get install libjack-dev libsamplerate0-dev libosptk3-dev libssl-dev libtonezone-dev unixodbc-dev libmysqlclient15-dev apt-get install libltdl3-dev libsqlite0-dev freetds-dev portaudio19-dev libiksemel-dev libopenh323-dev libusb-dev libspeex-dev libspeexdsp-dev apt-get install libogg-dev libvorbis-dev libcurl4-gnutls-dev libcurl4-openssl-dev libgtk2.0-dev liblua5.1-0-dev libgmime-2.0-2-dev apt-get install libfreeradius-dev libglade2.0-dev libgmime-2.0-2-dev libfreeradius-dev libsqlite3-dev apt-get install libmysqlclient15-dev libbluetooth-dev apt-get install cvs libssl-dev apt-get install doxygen doxygen-gui doxygen-doc wget http://forja.guadalinex.org/repositorio/frs/download.php/153/festvox-palpc16k_1.0-1_all.deb dpkg -i festvox-palpc16k_1.0-1_all.deb
Configuramos e compilamos Asterisk:
./configure make menuconfig make make install make samples make progdocs
Non configurar "module embedding" (enlazados estáticamente), xa que a compilación falla nesta versión de Asterisk, de todos os xeitos non se obtén ningunha ventaxa práctica sobre os módulos dinámicos.
Actualización de Asterisk 1.6.0.5 a Asterisk 1.6.0.6
Para compilar Asterisk 1.6.0.6 se sigue o mesmo procedimento descrito anteriormente, pero presentanse dous problemas:
In file included from app_dahdiras.c:50: /usr/include/dahdi/user.h:736: error: expected specifier-qualifier-list before __s32 /usr/include/dahdi/user.h:939: error: expected specifier-qualifier-list before __s32
Que se soluciona editando app_dahdiras.c e engadíndolle
#include <asm/types.h>
Outro erro posible e por non instalar ilbc e seleccionar a construcción do codec:
codec_ilbc.c:40:30: error: ilbc/iLBC_encode.h: Non hai tal ficheiro ou directorio codec_ilbc.c:41:30: error: ilbc/iLBC_decode.h: Non hai tal ficheiro ou directorio
E se soluciona colocando o codec en codecs/ilbc do xeito indicado no apartado anterior.
Unha vez compilado Asterisk (ou antes si se quere) se fai unha copia de seguridade da configuración anterior (/etc/asterisk) e se desinstala dende o directorio da versión anterior (make uninstall). Logo podemos instalar a nova versión do modo habitual e recuperar a configuración.
E importante tamén recordar copiar chan_lcr.so e chan_lcr.po a /usr/lib/asterisk/modules.
Envío e recepción de Fax
NVFaxdetect
AsterFax
apt-get install iaxmodem hylafax-server hylafax-client
Conexión con Google Talk (Gtalk)
Google Talk utiliza o protocolo Jabber, e Jingle para transportar voz e vídeo. A partir da versión 1.4 Asterisk da soporte a estes dous protocolos, polo que é posible integrar telefonía de este servicio. A configuración realízase mediante os seguintes ficheiros:
- gtalk.conf
[general] context=GtalkLine ;;Context to dump call into bindaddr=172.20.100.100 ;;Address to bind to allowguest=yes ;;Allow calls from people not in list of peers [guest] ;;special account for options on guest account disallow=all allow=ulaw allow=alaw context=GtalkLine connection=gtalk_asterisk
- jabber.conf
[general] debug=no ;;Turn on debugging by default. autoprune=no ;;Auto remove users from buddy list. autoregister=no ;;Auto register users from buddy list. [gtalk_asterisk] ;;label type=client ;;Client or Component connection serverhost=talk.google.com ;;Route to server for example, talk.google.com username=rodeiravoip@gmail.com/Talk ;;Username with optional resource. secret=******** ;;Password ;priority=1 ;;Resource priority port=5222 ;;Port to use defaults to 5222 usetls=yes ;;Use tls or not usesasl=yes ;;Use sasl or not statusmessage="Asterisk IESRODEIRA VoIP Server" ;;Have custom status message for Asterisk. timeout=100 ;;Timeout on the message stack.
- extensions.conf
.... [GtalkLine] exten => s,1,NoOp(Call from Gtalk) ....
Para chamar a un contacto de Gtalk dende, por exemplo, a extensión 300 empregaríamos:
.... exten => 300,1,Dial(gtalk/gtalk_asterisk/contacto_a_chamar@gmail.com) ....
Festival
Configuramos festival para Asterisk:
- En /usr/share/doc/examples/festival.scm, engadimos o final:
(set! voice_default 'voice_JuntaDeAndalucia_es_pa_diphone)
(define (tts_textasterisk string mode) "(tts_textasterisk STRING MODE) Apply tts to STRING. This function is specifically designed for use in server mode so a single function call may synthesize the string. This function name may be added to the server safe functions." (let ((wholeutt (utt.synth (eval (list 'Utterance 'Text string))))) (utt.wave.resample wholeutt 8000) (utt.wave.rescale wholeutt 5) (utt.send.wave.client wholeutt)))
- Copiamos /usr/share/doc/examples/festival.scm a /etc
- Copiamos /usr/share/doc/examples/festival.init /etc/init.d/festival
- chmod 744 /etc/init.d/festival
- Creamos /etc/default/festival con RUN_FESTIVAL=yes
- Habilitamos o inicio do servicio con rcconf
FreePBX [Sen Rematar]
wget http://puzzle.dl.sourceforge.net/sourceforge/amportal/freepbx-2.5.1.tar.gz
adduser asterisk --home /dev/null --shell /bin/false --gecos "asterisk PBX" --disable-password adduser www-data asterisk
Poñemos
export APACHE_RUN_USER=asterisk export APACHE_RUN_GROUP=asterisk
en /etc/apache2 envvars
Flash Operator Panel [ Sen Rematar ]
Asterisk-GUI [Sen Rematar]
Consideracións de Seguridade
Seguridade da Rede
- Asterisk abre alguns portos para chamadas VoIP entrantes. Debemos verificar os portos e as direccións IP nos ficheiros de configuración do canal.
- Si se habilita o interface manager en manager.conf debemos asegurarnos que so se pode acceder de modo seguro, a través dunha VPN ou dun túnel SSH.
- Para todas as conexións TCP/IP de Asterisk se poden deseñar listas ACL (Access Control Lists) que permitan ou deneguen o acceso os servicios Asterisk. Debemos verificar as opcións de configuración "permit" e "deny" en manager.conf e nas configuracións dos canais VoIP, como iax.conf e sip.conf.
- O protocolo IAX2 soporta autenticación RSA e encriptación AES para voz e sinalización. SIP non, para as versións actuais de Asterisk.
Seguridade do dialplan
- Debemos utilizar contextos de extensión para aillar a saida ou os servicios de pago de calqueira conexión entrante
- Deberíamos considerar que si calqueira canal, liña de entrada, etc. pode acceder a un contexto de extensión, terá a capacidade de acceder a calquera extensión dentro de ese contexto. Polo tanto, NON se debería permitir o acceso a servicios saíntes ou de pago en contextos que son accesibles (sobre todo si non é necesaria unha password) dende os canais de entrada, xa sexan IAX, FX ou outros trunks, ou incluso dende estacións da propia rede nas que non teñamos plena confianza. En particular nunca debemos poñer servicios de saída de pago no contexto default. E posible incluir o contexto por defecto en outros contextos mediante include => default na sección apropiada.
- Non debemos olvidarnos de colocar o contexto de demostración (demo) fora do contexto por defecto (default).
Seguridade dos Logs
Os ficheiros de log de Asterisk poden ter información confidencial, como passwords, polo que os debemos protexer axeitadamente.
Configuración da Rede Local
Mapa Telefónico
Nesta sección se expoñerá cal é o esquema da rede onde se vai a implementar o servicio de VoIP, os problemas surxidos e as solucións aportadas. O mapa telefónico será o seguinte:
NAT
O protocolo SIP é especialmente problemático co NAT, e a configuración na que estamos a traballar é complicada, xa que temos un doble NAT: No router que da acceso a Internet (69.55.97.254) e no router Linux (gandalf) que da acceso as redes 172.20.0.0 e 172.16.0.0. O router que da acceso a a Internet (69.55.97.254) pola rede 69.55.97.0 ten todos os portos de entrada mapeados a gandalf (69.55.97.40).
gandalf(69.55.97.40) ten habilitado o forwarding e mapeados os portos RTP, SIP e IAX o servidor Asterisk mediante DNAT para posibilitar a recepción de chamadas.
Regras iptables
No servidor gandalf (69.55.97.40) e necesario configurar as seguines reglas iptables para que Asterisk teña acceso a internet e tamén para ser accesible:
- SNAT para a saída a Internet do servidor Asterisk
iptables -t nat -A POSTROUTING -o $INTERNET_ETHERNET -j SNAT --to-source 69.55.97.40
- Servicio STUN
iptables -A FORWARD -p tcp --dport 3478 -j ACCEPT iptables -A FORWARD -p udp -m udp --dport 3478 -j ACCEPT
- Sinalización SIP. Alguns servidores utilizan tamén o porto TCP 5060
iptables -A FORWARD -p udp -m udp --dport 5060 -j ACCEPT iptables -A FORWARD -p udp -m udp --dport 5060 -j ACCEPT
- RTP
iptables -A FORWARD -p udp -m udp --dport 10000:20000 -j ACCEPT
- Sinalización IAX2
iptables -A FORWARD -p udp -m udp --dport 4569 -j ACCEPT
- Sinalización IAX
iptables -A FORWARD -p udp -m udp --dport 5036 -j ACCEPT
- MGCP: media gateway control protocol
iptables -A FORWARD -p udp -m udp --dport 2727 -j ACCEPT
Alternativamente tamén podemos abrir completamente o acceso o servidor Asterisk (mellor así para o soporte de GTalk):
iptables -A FORWARD -d 172.20.100.100 -j ACCEPT iptables -A FORWARD -s 172.20.100.100 -j ACCEPT
- DNAT
iptables -t nat -A PREROUTING -i $INTERNET_ETHERNET -p udp -m udp --dport 5060 -j DNAT --to-destination 172.20.100.100 iptables -t nat -A PREROUTING -i $INTERNET_ETHERNET -p udp -m udp --dport 10000:20000 -j DNAT --to-destination 172.20.100.100 iptables -t nat -A PREROUTING -i $INTERNETETH -p udp -m udp --dport 4569 -j DNAT --to-destination 172.20.100.100 iptables -t nat -A PREROUTING -i $INTERNETETH -p udp -m udp --dport 5036 -j DNAT --to-destination 172.20.100.100 iptables -t nat -A PREROUTING -i $INTERNETETH -p udp -m udp --dport 2727 -j DNAT --to-destination 172.20.100.100
Configuración Inicial
En primeiro lugar imos crear os trunk principais (salvo o IAX2, que veremos máis adiante) e crear un dialplan básico. Comenzaremos polo trunk para a liña RDSI que manexará LCR mediante chan_lcr. Precisamos editar o ficheiro /usr/local/lcr/routing.conf e facer que o seu contido sexa: <c>
- Linux-Call-Router routing configuration "routing.conf"
- Ruleset: MAIN
- Calls with different origins will be processed in different rulesets.
[main]
: remote application=asterisk
</c> Por último editamos /usr/local/lcr/interface.conf e facemos que teña: <c> [RDSILine] portnum 0 </c> Con esto conseguiremos un contexto RDSILine para utilizar no dialplan que se referirá as chamadas que cheguen por este trunk.
- /etc/asterisk/modules.conf. Cargamos todos os módulos e seleccionamos o sistema de son alsa
<c>
- Asterisk configuration file
- Module Loader configuration file
[modules] autoload=yes
- Any modules that need to be loaded before the Asterisk core has been
- initialized (just after the logger has been initialized) can be loaded
- using 'preload'. This will frequently be needed if you wish to map all
- module configuration files into Realtime storage, since the Realtime
- driver will need to be loaded before the modules using those configuration
- files are initialized.
- An example of loading ODBC support would be
- preload => res_odbc.so
- preload => res_config_odbc.so
- res_phoneprov requires func_strings.so to be loaded
preload => func_strings.so
- Uncomment the following if you wish to use the Speech Recognition API
- preload => res_speech.so
- If you want, load the GTK console right away.
noload => pbx_gtkconsole.so
- load => pbx_gtkconsole.so
load => res_musiconhold.so
- Load one of
- chan_oss, alsa, or console (portaudio).
- By default, load chan_oss only (automatically).
- noload => chan_alsa.so
noload => chan_oss.so noload => chan_console.so </c>
- /etc/asterisk/rtp.conf. Seleccionamos os portos RTP dende 10000 a 20000.
<c>
- RTP Configuration
[general]
- RTP start and RTP end configure start and end addresses
- Defaults are rtpstart=5000 and rtpend=31000
rtpstart=10000 rtpend=20000 </c>
- /etc/asterisk/sip.conf. Trunks sip para a conexión dos teléfonos IP e os softphones. Definimos o seguinte:
- PhoneIP
- Teléfono IP/Softphone de probas. Utilizará o contexto PhoneIP no dialplan.
- PhoneA4
- Teléfono IP/Softphone situado no Aula IF-3. Utilizará o contexto PhoneA4 no dialplan.
- Departamento
- Teléfono IP/Softphone situado no Departamento de Informática. Utilizará o contexto Departamento no dialplan.
- rodeirapbx
- Enlace SIP con ekiga.net. O contexto a utilizar no dialplan será EkigaLine, e a extensión ekiga.
- xavi
- Entrada para un softphone que poderá estar situado en calqueira lugar. O contexto para o dialplan a utiliza\u0155 será xavi.
- Probas
- Igual que a entrada anterior, pero co contexto do dialplan Probas.
<c> [general] context=default srvlookup=yes videosupport=no nat=yes localnet=172.16.0.0/255.255.0.0 externip=69.55.97.40 fromdomain=iesrodeira.com qualify=yes realm=asterix.iesrodeira.com
disallow=all allow=alaw allow=ulaw allow=speex allow=ilbc allow=gsm allow=h261
register => rodeirapbx:**********@ekiga.net/ekiga
[xavi] type=friend defaultuser=xavi context=xavi secret=xxxxxxxxx
- canreinvite=yes
canreinvite=nonat
- canreinvite=no
host=dynamic dtmfmode=rfc2833 qualify=3000
[Probas] type=friend defaultuser=Probas context=Probas secret=xxxxxxxxx
- canreinvite=yes
canreinvite=nonat
- canreinvite=no
host=dynamic dtmfmode=rfc2833 qualify=3000
[PhoneIP] type=friend defaultuser=PhoneIp context=PhoneIP secret=xxxxxxxxx
- canreinvite=yes
canreinvite=nonat
- canreinvite=no
host=dynamic dtmfmode=rfc2833 qualify=3000
[PhoneA4] type=friend defaultuser=PhoneA4 context=PhoneA4 secret=xxxxxxxxx
- canreinvite=yes
canreinvite=nonat
- canreinvite=no
host=dynamic dtmfmode=rfc2833 qualify=3000
[Departamento] type=friend defaultuser=Departamento context=Departamento secret=xxxxxxxxx
- canreinvite=yes
canreinvite=nonat
- canreinvite=no
host=dynamic dtmfmode=rfc2833 qualify=3000
[rodeirapbx] type=peer context=EkigaLine defaultuser=rodeirapbx secret=xxxxxxxxxx host=ekiga.net canreinvite=no qualify=300 insecure=invite,port </c>
Tests a realizar
O plan de marcado para realizar os test será a base de un IVR coas seguintes extensións:
- 500 - Servicio ECO de ekiga.net
- 600 - Servicio ECO de Asterisk
Rexistramos Asterisk nun proveedor VoIP
Coa configuración anterior, Asterisk se rexistra correctamente en ekiga.net.
Rexistramos un cliente Teléfono IP no Asterisk dende a rede local
Rexistramos un cliente softphone no Asterisk dende a rede local
Se rexistran sin problemas os softphones ekiga utilizando a conta Probas. A configuración SIP non utiliza nin servidor STUN nin proxy SIP.
Rexistramos un cliente Teléfono IP no Asterisk dende Internet
Rexistramos un Teléfono IP na conta PhoneIP sen maiores problemas, utilizando o servidor STUN stun.ekiga.net, e activando Enable Strict Proxy, Auto Detect Server e Enable Via rport.
Rexistramos un cliente softphone IP no Asterisk dende Internet
Se rexistran sin problemas os softphones ekiga utilizando a conta Probas. A configuración SIP non utiliza como servidor STUN stun.ekiga.net.
Chamadas dende liña telefónica convencional (PSTN)
- O servicio de ECO de Asterisk
- A chamada se realiza correctamente coa configuración inicial.
- O servicio de ECO de ekiga.net a través do Asterisk
- A chamada se realiza correctamente coa configuración inicial.
- A un softphone/Teléfono IP rexistrado en Asterisk situado en Internet
- A chamada se realiza correctamente coa configuración inicial.
- A un softphone/Teléfono IP rexistrado en Asterisk situado na rede local
- A chamada se realiza correctamente coa configuración inicial.
- A un softphone rexistrado en ekiga.net
- A chamada se realiza correctamente coa configuración inicial.
Chamadas dende un softphone/Teléfono IP situado en Internet
- Sin rexistrar o Asterisk (contexto default)
- As chamadas funcionan correctamente (do mesmo xeito que os softphones rexistrados) e se dirixen o contexto default do dialplan.
- O servicio de ECO de Asterisk
- A chamada funciona correctamente coa configuración inicial.
- O servicio de ECO de ekiga.net a través do Asterisk
- E posible realizar a chamada mediante packet2packet bridge ou sin bridge (t no Dial) e os dous casos funcionan dun xeito similar. Se reciben interrupcións intermitentes debido a problemas de rede.
- A un softphone/Teléfono IP rexistrado en Asterisk situado en Internet
- En principio debería funcionar o modo native bridge, pero o test realizado e cos dous softphones na mesma rede externa a da Asterisk, o que imposibilita (polo menos en principio) o native bridge. Nos outros dous modos (packet2packet bridge e sen bridge) funciona correctamente cos problemas de saturación de rede xa comentados.
- A un softphone/Teléfono IP rexistrado en Asterisk situado na rede local
- A chamada se procesa en modo native bridge. Si a chamada é dende un softphone (ekiga) a chamada se interrumpe e se recupera continuamente, pero o colgar tamén o fai o softphone local. Si a chamada é dende un teléfono IP a chamada se establece correctamente, pero o colgar o teléfono IP, o softphone local non colga. Outros softphones probados (X-Lite e twinkle) tamén se comportan do mesmo modo que o teléfono IP, a chamada se realiza correctamente, pero o colgar o softphone a parte remota non colga. Si colgamos o softphone da rede local o lado remoto remata correctamente. Si o softphone local está dentro do firewall (mesma rede que o servidor Asterisk) é necesario utilizar packet2packet bridge.
- A un softphone rexistrado en ekiga.net
- A chamada funciona correctamente (bridge packet2packet), pero presenta os problemas descritos con anterioridade en este tipo de bridge. O softphone X-Lite funciona con menos interrupcións que ekiga ou o teléfono IP. Si utilizamos o modo a través do Asterisk sen bridge ('t' no Dial) funciona de maneira similar.
- A un teléfono da liña telefónica convencional (PSTN)
- A chamada funciona correctamente coa configuración inicial.
Chamadas dende un softphone/Teléfono IP situado na rede local
- O servicio de ECO de Asterisk
- Funciona correctamente coa configuración inicial.
- O servicio de ECO de ekiga.net a través do Asterisk
- Funciona correctamente co packet2packet bridge, pero cos problemas de rede descritos.
- A un softphone/Teléfono IP rexistrado en Asterisk situado en Internet
- A chamada se efectua correctamente en modo native bridge coa configuración inicial dende a rede 69.55.97.x e con packet2packet bridge dende 172.20.x.x e 172.16.x.x.
- A un softphone/Teléfono IP rexistrado en Asterisk situado na rede local
- A chamada se efectua correctamente en modo native bridge. Si forzamos o packet2packet bridge os problemas son os mesmos descritos con anterioridade.
- A un softphone rexistrado en ekiga.net
- Funciona correctamente co packet2packet bridge, pero cos problemas de rede descritos.
- A un teléfono da liña telefónica convencional (PSTN)
- Funciona correctamente coa configuración inicial.
Chamadas dende un softphone rexistrado no proveedor ekiga.net
- O servicio de eco de Asterisk
- A chamada funciona correctamente coa configuración inicial.
- A un softphone/Teléfono IP rexistrado en Asterisk dende Internet
- A chamada funciona correctamente coa configuración inicial mediante packet2packet bridge cos problemas xa indicados.
- A un softphone/Teléfono IP rexistrado en Asterisk dende a rede local
- A chamada funciona correctamente coa configuración inicial mediante packet2packet bridge cos problemas xa indicados.
- A un teléfono da rede telefónica convencional (PSTN)
- A chamada funciona correctamente coa configuración inicial
Conclusións e Problemas
O modo native bridge parece funcionar correctamente nos casos nos que se pode empregar, os modos packet2packet e sen bridge parecen producir problemas intermitentes de conectividade na rede, con tempos de ping a intervalos aleatorios que poden chegar a 6 ou 7 segundos. As posibilidades a explorar son as seguintes:
- Problema de configuración do kernel do sistema Asterisk.
- Problema de parámetros de rede no sistema Asterisk.
- Trafico UDP en xeral na rede local.
- Problemas cos switches e os segmentos de rede a Gigabit Ethernet e de 100Mbits.
NOTA 1: De momento inclínome a considerar a última posibilidade, xa que parece que o segmento de rede que se satura e o comprendido entre o firewall (172.20.2.1) e o equipo Asterisk (172.20.100.100), que consta dun segmento de rede a Gigabit Ethernet e outro a 100 Mbits e dous switches intermedios.
NOTA 2: Probando con dous softphones locais no mesmo segmento de rede (switch común) os problemas co packet2packet bridge continúan, o que me leva a pensar que o problema está no propio switch.
NOTA 3: Fago un test con un softphone en 172.20.3.100 e outro en 172.20.3.6 forzando packet2packet bridge. O servidor asterisk esta en 172.20.100.100 e todos conectados o mesmo switch. A porta de saída da rede é 172.20.2.1 (dirección "externa" 69.55.97.40) e se atopa dous switches por debaixo. Un tramo 100Mb (dos ordenadores o switch) e dous tramos 1Gb de switch a switch e de switch o servidor. O retraso (intermitentes entre 2 e 12 segundos) detéctase curiosamente nos ping entre 172.20.3.100 e 172.20.2.1 (onde teóricamente non temos circulación UDP, e con iptraf non se observa) mentras que os ping entre 172.20.3.100 e 172.20.3.6 son normais, e entre 172.20.3.100 e 172.20.100.100 (O servidor Asterisk) tamén. Curiosamente os pings dende 172.20.2.1 os outros equipos da rede tamén son normais.
NOTA 4: Os paróns no ping (2 a 8 segundos) danse entre 172.20.2.1 e as partes que interveñen na comunicación: 172.20.3.100, 172.20.3.6 e 172.20.100.100, coincidindo cos cortes de voz. O resto de pings é normal.
Integración do Asterisk Debian con Asterisk Trixbox
DUNDI
O servicio "DUNDI" permite a un servidor Asterisk facer públicas e accesibles certas extensións propias a outros servidores mediante varios protocolos. No noso caso empregaremos IAX para enlazar este servidor Asterisk con outro servidor (obelix.iesrodeira.com) con Trixbox. En primeiro lugar é necesario crear o Trunk IAX para enlazar os dous servidores, no servidor que estamos a instalar (asterix.iesrodeira.com) editamos /etc/asterisk/iax.conf", e no servidor Trixbox (obelix.iesrodeira.com) /etc/asterisk/iax_custom.conf:
;asterix.iesrodeira.com ;obelix.iesrodeira.com [general] language=es language=es jitterbuffer=no [dundi] forcejitterbuffer=no type=user autokill=yes dbsecret=dundi/secret context=DUNDI-calls [dundi] disallow=all type=user allow=alaw dbsecret=dundi/secret allow=ulaw context=DUNDI-calls allow=speex disallow=all allow=ilbc allow=alaw allow=gsm allow=ulaw allow=h261 allow=speex allow=ilbc allow=gsm allow=h261
Como se pode observar, o contexto do dialplan o que se vai a acceder a través deste trunk chámase DUNDI-calls. Agora modificamos o dialplan, en asterix editamos /etc/asterisk/extensions.conf e en obelix /etc/asterisk/extensions_custom.conf para engadir o contexto [DUNDI-calls] coas extensións que desexemos facer públicas. No noso caso, dividiremos as extensións a facer públicas en tres categorías:
- [DUNDI-voip] - Incorpora as extensións dos teléfonos IP rexistrados permanentemente (Departamentos, Aulas ... etc)
- [DUNDI-dinamico] - Incorpora as extensións dos teléfonos IP rexistrados de cando en vez dende sitios distintos (Profesores, alumnos ... etc)
- [DUNDI-pstn] - Incorpora as extensións para facer chamadas a través da PSTN.
Deste xeito quedaría logo o contexto [DUNDI-calls]:
[DUNDI-calls] include => DUNDI-voip include => DUNDI-dinamico include => DUNDI-PSTN
Tamén creamos un contexto [DUNDI-switch] que permite facer as consultas DUNDi o outro servidor. Para eso bastará cun include => DUNDI-switch nos contextos nos que queiramos ter acceso os números importados a través de DUNDi:
[DUNDI-switch] switch => DUNDI/dundi-trunk
dundi-trunk fai referencia o mapeo de extensións que se realiza en /etc/asterisk/dundi.conf en ambos servidores:
- asterix.iesrodeira.com
<c>
[general] department=Departamento de Informática organization=IES de Rodeira locality=Cangas do Morrazo stateprov=GZ country=ES email=xavi@iesrodeira.com phone=986304750 ttl=32 autokill=yes
; Contextos exportados [mappings] dundi-trunk => DUNDI-voip,0,IAX2,dundi:${SECRET}@${IPADDR}/${NUMBER},nopartial dundi-trunk => DUNDI-dinamico,100,IAX2,dundi:${SECRET}@${IPADDR}/${NUMBER},nopartial dundi-trunk => DUNDI-PSTN,400,IAX2,dundi:${SECRET}@${IPADDR}/${NUMBER},nopartial
; Servidor o que podemos consultar (obelix.iesrodeira.com) ; O número de abaixo é a MAC do primeiro interface de rede, pero pode cambiarse en dundi.conf [00:80:5A:4A:88:3D] model = symmetric host = obelix.iesrodeira.com inkey = obelix.iesrodeira.com outkey = asterix.iesrodeira.com include = dundi-trunk permit = dundi-trunk qualify = yes
</c>
- obelix.iesrodeira.com
<c> [general] department=Departamento de Electrónica organization=IES de Rodeira locality=Cangas do Morrazo stateprov=GZ country=ES email=voip@iesrodeira.com phone=986304750 ttl=32 autokill=yes
[mappings] dundi-trunk => DUNDI-voip,0,IAX2,dundi:${SECRET}@172.16.23.99/${NUMBER},nopartial dundi-trunk => DUNDI-dinamico,100,IAX2,dundi:${SECRET}@172.16.23.99/${NUMBER},nopartial dundi-trunk => DUNDI-PSTN,400,IAX2,dundi:${SECRET}@172.16.23.99/${NUMBER},nopartial
- asterix.iesrodeira.com
[00:05:1c:00:b6:ae] model = symmetric host = asterix.iesrodeira.com inkey = asterix.iesrodeira.com outkey = obelix.iesrodeira.com include = dundi-trunk permit = dundi-trunk qualify = yes </c> Neste caso colocamos a IP nos mappings porque a variable ${IPADDR} ten a outra IP do servidor (a pública), que non me sirve para enlazar con asterix.
Por último so e necesario crear as chaves de encriptación e poñelas na outra máquina. Estas chaves se crean en ambos servidores en /var/lib/asterisk/keys executando astgenkey -n asterix.iesrodeira.com no servidor asterix e astgenkey -n obelix.iesrodeira.com' en obelix, a continuación é preciso copiar a chave obelix.iesrodeira.com.pub a carpeta /var/lib/asterisk/keys de asterix, e a chave asterix.iesrodeira.com.pub a carpeta /var/lib/asterisk/keys de obelix.
Podemos comprobar a información dende a consola Asterisk cos comandos dundi query e dundi lookup
Síntesis de voz: Festival
Unha vez configurado Festival como indica o apartado anterior, para utilizalo bastará con utilizar a función do dialplan Festival pasandolle como argumento a cadea de texto que se quere leer. Ollo, non se deben pasar acentos, xa que Festival non os procesa:
exten => menu,n,Festival(Para chamar o departamento de informatica pulsa uno)
Recoñecimento de Voz
Sphinx,
Buzón de Voz
Para activar o buzón de voz e necesario utilizar o arquivo /etc/asterisk/voicemail.conf, e necesario ter cuidado en ter o parámetro delete=no si non queremos perder as mensaxes que se envíen por correo. Na configuración inicial deste Asterisk (configuración estática por medio de ficheiros) e necesario que o módulo app_voicemail esté compilado sen opción ODBC nin IMAP. Un erro no buzon de voz fai que se busque a voz y na carpeta de digits en lugar de letters, para solucionalo establecemos un enlace simbólico dende letters a digits.
ln -s /var/lib/asterisk/sounds/es/letters/y.alaw /var/lib/asterisk/sounds/es/digits/y.alaw
E o mesmo cos codecs que se estime necesario.
Configuración Real Time
Plan de Marcado
DISA
Extensións a Configurar e Id's
- Chamadas "Internas" (teléfonos rexistrados)
- 1: Menú IVR do IES de Rodeira
- 500: Test de ECO
- 600: Buzon de Voz
- 1000: Departamento Informática
- 2000: Aula 3
- 3000: Aula 4
- 3100: Softphone/IP Phone de Xavi
- 5xxx: Chamadas a usuarios Ekiga.net
- 6xxx: Chamadas a usuarios de Gtalk
- Extensións recollidas por DUNDI de obelix.iesrodeira.com
- Chamadas "Restrinxidas" (so teléfonos rexistrados, e non todos)
- inclúe as chamadas "Internas"
- _0X.: Chamada a un número da PSTN
- Chamadas "Públicas" (Chamadas dende calqueira teléfono VoIP non rexistrado, dende a PSTN, dende ekiga.net ou dende Gtalk
- Menu IVR do IES de Rodeira, permitindo teclear un número de extensión das chamadas "Internas"
- Chamadas "Especiais" (so algúns teléfonos rexistrados)
- 6666: Gravador de voz, a voz queda gravada en /tmp/prompt%d.wav
Todos os teléfonos rexistrados (que poden recibir chamadas) terán buzón de voz.
Plan de Marcado
Batería de Probas
- Chamada PSTN (RDSI-IF3)<->IF-3 (Softphone, Teléfono IP, Teléfono convencional)
- Chamada VoIP<->IF-3 (Softphone, Teléfono IP, Teléfono convencional) vía Asterisk IF-3
- Chamada VoIP<->VoIP (distinto proveedor) vía Asterisk IF-3
- Chamada IF-3<->PSTN via servicio VoIP co Asterisk IF-3
- Chamada PSTN (RDSI IF-3)<->Electrónica
- Chamada PSTN (Liña Electrónica)<->IF-3 (Softphone, Teléfono IP, Teléfono convencional)
- Chamada IF-3<->Teléfonos Electrónica
- Chamada IF-3<->PSTN via servicio VoIP en Trixbox Electrónica
- Chamada Servicio VoIP<->Servicio VoIP (distinto proveedor) pasando por Trixbox Electrónica