Guía de despliegue del servicio de telefonía
Esta documentación esta probada en un servidor Dell Poweredge 860 con una tarjeta RDSI B410P de Digium y QuadBRI de Junghanns
Preparación del servicio de telefonía.
Compilación del software necesario
Se actualiza la máquina
yum update
- Desactivamos selinux
- Reiniciamos
- Instalamos el software necesario para compilar asterisk
yum install make gcc kernel-xen-devel gcc-c++ flex ncurses-devel which bc
- Nos descargamos el software necesario a /usr/src
- links http://downloads.digium.com/pub/libpri/releases/libpri-1.4.7.tar.gz
- links http://downloads.digium.com/pub/zaptel/releases/zaptel-1.4.12.1.tar.gz
- links http://downloads.digium.com/pub/asterisk/releases/asterisk-1.4.22.tar.gz
- links http://downloads.digium.com/pub/asterisk/releases/asterisk-addons-1.4.7.tar.gz
- Desempaquetamos libpri, compilamos e instalamos
make && make install
- Desempaquetamos zaptel, compilamos e instalamos
make && make install
- Dentro de zaptel, compilar soporte tarjeta B410P
make b410p && make install && make config
- Desempaquetamos asterisk, compilamos e instalamos
./configure && make && make install && make samples
- Instalamos script de arranque
cp contrib/init.d/rc.redhat.asterisk /etc/init.d/asterisk
chmod 755 /etc/init.d/asterisk
- Editamos el fichero /etc/init.d/asterisk y los modificamos para que use como usuario a asterisk
- Descomentar la linea:
AST_USER="asterisk"
- Configuramos los niveles de arranque
chkconfig --add asterisk
- Desempaquetamos asterisk-addons y lo mismo:
./configure && make && make install && make samples
- Creamos el usuarios asterisk
useradd -r asterisk
- Creamos los directorios /var/lib/asterisk/sounds/tts, /var/lib/asterisk/sounds/custom y /var/run/asterisk
mkdir -p /var/lib/asterisk/sounds/tts /var/lib/asterisk/sounds/custom /var/run/asterisk
- Ponemos al usuario asterisk como propietario de: /etc/asterisk, /var/lib/asterisk, /var/spool/asterisk, /var/log/asterisk, /var/run/asterisk:
chown -R asterisk /etc/asterisk /var/lib/asterisk /var/spool/asterisk /var/log/asterisk /var/run/asterisk
- Editamos el /etc/asterisk/asterisk.conf para establecer:
astrundir => /var/run/asterisk
Configuracion de tarjeta RDSI con mISDN
- Comprobamos que detecta la tarjeta:
/etc/init.d/misdn-init scan
- Creamos configuración /etc/init.d/misdn-init config
- En el fichero /etc/misdn-init.conf configuramos los puertos y la señalización (punto-punto o punto-multipunto)
te_ptmp=1,2,3,4
- Arrancamos mISDN: /etc/init.d/misdn-init start
- En el /etc/asterisk/misdn.conf configuramos al menos las siguientes entradas:
[general] ... language=es ... [default] nationalprefix= ... echocancel=yes ... [isdn] ; define your ports, e.g. 1,2 (depends on mISDN-driver loading order) ports=1 ; context where to go to when incoming Call on one of the above ports context=external callgroup=1 msns=*
- Con esta configuración las llamadas entraran por el contexto external
- Para las llamadas salientes definimos como TRUNK en el fichero /etc/asterisk/extensions.conf
TRUNK => mISDN/g:isdn
Configuración TTS Festival
Instalamos el paquete festival. Desde hace tiempo el paquete Festival no incluye las voces en Español. Nos bajamos el rpm festival-sounds-es del FTP de ModularIT
yumrepo.canarytek.com:/CTK/centos/4/i386/asterisk-1.2.x/RPMS/festival-sounds-es-1.4.2-1.ctk.1.i386.rpmy lo instalamos.
- Copiamos el script festival.pl de yumrepo.canarytek.com:/CTK/centos/4/i386/asterisk-1.2.x/ a /var/lib/asterisk/agi-bin
- Le damos permisos de ejecucion y ponemos como propietario a asterisk
- Instalamos el paquete perl-Asterisk-AGI (obtener del mismo repositorio)
NOTA: Crearlo para CentOS5, ahora se instala en perl-5.8.0 y no lo encuentra. Por ahora hay que copiarlo a la ubicación adecuada
cp -av /usr/lib/perl5/site_perl/5.8.0/Asterisk* /usr/lib/perl5/site_perl/5.8.8
- Ejecutamos el script festival.pl para asegurarnos que se ejecuta correctamente
- Añadimos las siguientes lineas al fichero /usr/share/festival/init.scm para usar las voces en español por defecto
; Usar voces en español por defecto (set! voice_default voice_el_diphone) (voice_el_diphone)
- Para usar el sistema incluir en el dialplan entradas con la siguiente sintaxis
exten => 1,1,AGI(festival.pl|spanish|'Esta es la cadena que queremos reproducir')
Sonidos en Español
- Descargamos los sonidos en español de:
- Los descomprimimos en /var/lib/asterisk/sounds
Autoprovisión de teléfonos Thomson ST2030
- Instalamos ruby y tftp-server en el servidor de centralita:
yum install ruby tftp-server
- Copiamos los directorios de firmware thomson a /tftpboot
- Copiamos los scripts de autoprovisión a /opt/Asterisk
- Configuramos los teléfonos en /opt/Asterisk/telefonos.txt
- Editar el script phones.rb para establecer los parametros de la configuración (servidor sip, etc)
- Al ejecutar el script phones.rb se generan los ficheros de configuración para cada teléfono y dos ficheros adicionales:
- sip_phones.conf: Configuarión sip que hay que incluir desde el /etc/asterisk/sip.conf con #include "/opt/Asterisk/sip_phones.conf"
- dhcpd_phones.conf: Configuración para el dhcp que hay que incluir desde el /etc/dhcpd.conf con include "/etc/dhcpd_phones.conf";
Para forzar a releer la configuración podemos añadir las lineas siguientes al fichero /etc/asterisk/sip_notify.conf
; CTK: Forzar a leer la configuracion [thomson-check-cfg] Event=>check-sync Content-Length=>0
Y para resetear un teléfono, desde la consola de Asterisk ejecutamos: sip notify thomson-check-cfg EXTENSION
Monitorizacion de Lineas con Thomson ST2030
Podemos usar las teclas programables del teléfono ST2030 para mostrar el estado de determinadas lineas. En primer lugar debemos asociar una extensión con el canal correspondiente mediante la prioridad hint
exten => 100,hint,SIP/100
Asocia el canal SIP/100 a la extensión 100, de forma que cuando un dispositivo consulte el estado de la extensión 100, Asterisk sabe que el estado es el del canal SIP/100. En Asterisk 1.4 y posteriores debemos activar en el sip.conf la opción:
limitonpeers = yes
Y en el canal SIP correspondiente poner el líimite de llamadas que queremos
call-limit = 2
Por ultimo, en la configuración de autoprovisión del teléfono vamos a la sección de las teclas programables:
Current_Max_Multiline=2 FeatureKeyExt01=S/<sip:100> FeatureKeyExt02=S/<sip:101> FeatureKeyExt03=S/<sip:102> FeatureKeyExt04=S/<sip:103> FeatureKeyExt05=S/<sip:104> FeatureKeyExt06=S/<sip:105> FeatureKeyExt07=S/<sip:106> FeatureKeyExt08=S/<sip:107> FeatureKeyExt09=S/<sip:108> FeatureKeyExt10=S/<sip:109>
En cada tecla ponemos la extensión a monitorizar. S/ significa supervised line, o sea que nos envíe el estado de esa extensión. El Current_Max_multiline indica el numero máximo de lineas que queremos tener con el ST2030. Como cada tecla de función se asocia a una linea interna del teléfono, si le ponemos un máximo de 2 líneas (teclas F1 y F2) nos quedarían 8 teclas para monotorizar otras extensiones. Por defecto el Current_Max_Multiline viene a 10, con lo que no quedan teclas libres para extensiones externas
Instalación de pasarela GSM Soundwin V100
El primer paso es configurar la red en la pasarela GSM:
- La pasarela viene configurada con IP estática 192.168.1.1
- Conectar un ordenador directamente a la boca WAN y configurarlo en la red 192.168.1.0/24
- Conectarse con el navegador a 192.168.1.1 (admin/admin)
- Es recomendable configurarlo por DHCP con una IP estática:
- Mirar la MAC del equipo (esta en una pegatina en la parte de abajo del aparato)
- Crear la entrada en el servidor DHCP
## Adaptador GSM
host gsm1 {
hardware ethernet 00:0F:FD:48:03:70;
fixed-address 192.168.1.39;
}
- Reiniciar DHCP
- En la configuración Web del soundwin ir a Advanced Setup -> WAN Settings
- Seleccionar DHCP *y reiniciar el aparato.
- Debería arrancar con la IP que le hemos asignado, conectarnos a esa IP con el navegador
- OJO! Para colocar la tarjeta SIM hacerlo con el equipo apagado
- Si la tarjeta SIM tiene un PIN, se puede programar en GSM Setup -> GSM Parameters
- Para comprobar si esta conectando a la red GSM correctamente ir a System Administration -> System Information
- Vamos a Advanced Setup -> Dialing Plan
- En la segunda tabla (Incoming Dialplan) creamos la siguiente entrada:
6x,9,9,0,,GSM
- Es decir, todo lo que empiece con 6 y tenga 9 dígitos, enrutarlo por la linea GSM
- OJO! Si salen móviles que no empiecen por 6 habrá que añadirlo aquí.
- Por defecto se usa el codec 723.1 para seleccionar aLaw ir a Advanced Settings -> Telephone Advance y seleccionar codec aLaw (Europa)
- Creamos el usuario SIP en la pasarela
- Vamos a Advanced Setup -> VOIP Basic
- Para ambos enlaces (gsm y fxs, aunque el segundo no lo usamos) creamos el usuario gsm/gsm
- Establecemos el SIP Server y Realm y activamos autenticación.
- Grabamos configuracion y reiniciamos la pasarela para asegurarnos que conserva la configuración.
- Creamos el peer SIP en asterisk (/etc/asterisk/sip.conf)
[gsm]
type=peer
host=192.168.1.39
context=external
secret=gsm
callerid=gsm
language=es
dtmfmode=rfc2833
restrictid=no
disallow=all
qualify=yes
allow=ulaw
allow=alaw
progressinband=yes
- A partir de este momento ya podemos enrutar llamadas a través de la pasarela mediante:
exten => _6XXXXXXXX,n,Dial(SIP/gsm/${EXTEN})
- Para las llamadas entrantes, configuramos la opción Hotline Settings. Para cada puerto podemos poner un numero, de forma que cuando se recibe una llamada por ese puerto, se marca dicho numero en el canal VoIP. Si el canal esta en el contexto correcto la llamada se procesara como una llamada entrante por cualquier otra línea
- También hay que configurar correctamente las opciones de SIP proxy y datos de validación
Detección de CallerID con GSM Soundwin V100
- Ir a _GSM Setup -> GSM Parameter_s
- Activar la opción CLI Detection y CLI Presentation
Detección de colgado con con GSM Soundwin V100
Hemos detectado algunos problemas en la detección de cuelgues con los V100. EL comportamiento observado con lineas de Movistar es el siguiente.
NOTA: Si alguno de los casos no funciona, activar la opción progressinband=yes en la configuración SIP de la pasarela
NOTA2: Tambien podemos usar la opcion rtptimeout=120 en la entrada de la pasarela en sip.conf para colgar una sesion SIP si no hay trafico RTP (sonido) durante 120 segundos
- Llamadas salientes:
- Llamada establecida
- Cuelga el receptor: OK
- Cuelga el llamante: No se detecta. La linea permanece ocupada hasta que el receptor cuelga
- Llamada establecida
- Antes de establecer la llamada
- Receptor rechaza la llamada: Se notifica al llamante, cuando este cuelga, se cuelga la línea
- Cuelga el llamante: OK
- Se activa buzon de voz del receptor: Se libera la línea cuando el buzón de voz cuelga la llamada
- Receptor rechaza la llamada: Se notifica al llamante, cuando este cuelga, se cuelga la línea
- Llamadas entrantes
- Llamada establecida
- Cuelga el receptor: OK
- Cuelga el llamante: OK
- Llamada establecida
- Antes de establecer la llamada
- Cuelga el receptor: No se puede rechazar
- Cuelga el llamante: OK
Instalación del enlace con la agenda de eGroupWare
Si tenemos un servidor eGroupWare podemos instalar un script AGI que cuando se recibe una llamada consulta la agenda global del eGW y establece como CALLERID el nombre del contacto. De esta forma tenemos un servicio de identificación de numero llamante global.- Asegurarnos que tenemos instalados los modules perl-DBD:
yum install perl-DBI perl-DBD-PgEn la maquina eGW:
- En /var/lib/pgsql/data/postgresql.conf activar la opcion listen_addresses = '' *
- Asegurarnos que tenemos permitido el acceso desde maquinas de la red. En el fichero /var/lib/pgsql/data/pg_hba.conf añadir lo siguiente y reiniciamos postgresql:
# Permitimos acceso desde la red para el Asterisk host egroupware egroupware 192.168.1.0/24 password
- Instalamos los scripts egwsetcid.agi y egwsetcid.pl en /var/lib/asterisk/agi-bin
- Comprobamos que funciona con: ./egwsetcid.pl un_numero_que_parezca_en_la_agenda
- Si todo va bien podemos activar la identificacion en asterisk con:
exten => s,1,AGI(egwsetcid.agi|${CALLERID(num)})
Detección Fax en canales mISDN
Para detectar llamadas de Fax en canales genericos (mISDN, SIP, IAX, etc) podemos utilizar la aplicacion externa nvfaxdetect.- Copiar el fichero app_nv_faxdetect.c en el asterisk-version/apps (el fichero lo podemos encontrar en el ftp de ModularIT)
- Añadir al Makefile
APP += app_nv_faxdtect
- Recompilar e instalar Asterisk
make && make install
- Para detectar llamadas de fax en el dialplan
exten => s,n,Answer exten => s,n,Playtones(ring) exten => s,n,NVFaxDetect(4,dt)
- Con esto descolgamos, damos el tono de ring para que el usuario no detecte nada extraño e intentamos detectar el fax durante 4 segundos
- Si se detecta que la llamada es un fax se salta a la extensión fax
Despliegue del servicio de telefonía
Preparación del dom0 para exportar el slot PCI a la VM Asterisk
Para que la máquina virtual Asterisk tenga acceso a la tarjeta de telefonía, necesitamos exportar el slot PCI al que esta conectada a la maquina virtual. En el dom0:- Localizar el slot PCI en el que tenemos conectada la tarjeta de telefonía:
lspci
- Suponemos que vemos la tarjeta en el slot 03:02.0
- En el fichero /etc/sysconfig/pciback añadimos el PC ID a la variable SLOTS
# List of PCI slots to assign to pciback # Find them with lspci SLOTS="0000:03:02.0"
- Ejecutamos:
/etc/init.d/pciback start /etc/init.d/pciback status
- Deberiamos ver el slot PCI gestionado por pciback
- Editamos el fichero de configuración de la máquina virtual (p.ej /etc/xen/auto/asterisk) y le exportamos el slot PCI añadiendo la opción:
# Get with lspci pci = ['03:02.0']
- Arrancar la maquina asterisk
Preparacion de la maquina virtual
- Comprobamos que vemos la tarjeta:
lspci
- Comprobamos que misdn detecta la tarjeta:
/etc/init.d/misdn-init scan
- Iniciamos misdn
/etc/init.d/misdn-init start
- Si nos da error de que no encuentra los módulos, necesitamos compilarlos para el núcleo que estamos utilizando. Vamos a /usr/src/zaptel-1.4.*
make b410p
- Y volvemos a ejecutar:
misdn-init start