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
    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.rpm
y 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

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
El siguiente paso es comprobar que la pasarela conecta correctamente a la red GSM
  • 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
Una vez que la pasarela esta en red y conectada a la red GSM, debemos configurar las llamadas salientes de la pasarela. La pasarela tiene un pequeño dialplan para determinar por donde enrutar las llamadas salientes, vamos a configurarlo para que los numeros que empiecen por 6 se enruten por la pasarela.
  • 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)
Por ultimo tenemos que configurar la conexión SIP entre el asterisk y la pasarela:
  • 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
  • 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
  • Llamadas entrantes
    • Llamada establecida
      • Cuelga el receptor: OK
      • Cuelga el llamante: OK
  • 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-Pg
En 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

Also available in: HTML TXT