Diferència entre revisions de la pàgina «Manual Técnico EcoPhone»

De Wiket
Salta a la navegació Salta a la cerca
Línia 242: Línia 242:
 
===Explicación del código===
 
===Explicación del código===
 
Éste script genera un fichero de audio con el comando que hay dentro de cada case, éste comprueba por '''nombre de engine''', por lo que dándole el mismo nombre como engine, seguidamente '''crea un archivo de audio con el idioma seleccionado'''. En el repositiorio de Github del Engine TTS de Google se pueden ver listados todos los idiomas soportados.<br>
 
Éste script genera un fichero de audio con el comando que hay dentro de cada case, éste comprueba por '''nombre de engine''', por lo que dándole el mismo nombre como engine, seguidamente '''crea un archivo de audio con el idioma seleccionado'''. En el repositiorio de Github del Engine TTS de Google se pueden ver listados todos los idiomas soportados.<br>
Internamente va a buscar el .agi de la engine donde contiene todo el proceso de creación del archivo wav.
+
Internamente va a buscar el '''.agi''' de la engine donde contiene todo el proceso de creación del archivo wav.
  
 
Por último usamos este comando:
 
Por último usamos este comando:
Línia 252: Línia 252:
 
¡Al realizar los cambios, FreePBX nos avisará de que se ha modificado un fichero del módulo!
 
¡Al realizar los cambios, FreePBX nos avisará de que se ha modificado un fichero del módulo!
 
No pasa nada por haberlo modificado. Hay que ignorar ese error.
 
No pasa nada por haberlo modificado. Hay que ignorar ese error.
 +
 +
==Conectividad del sistema VoIP==
 +
 +
Para que toda la infraestructura pueda comunicarse se necesitan establecer rutas estáticas tanto de salida como de entrada. Las rutas salientes necesitan un trunk para autenticar a los usuarios salientes por la ruta de salida.
 +
 +
El direccionamiento es el siguiente:
 +
 +
Raspberry – FreePBX: 10.27.3.110/16
 +
Elastix : 10.27.100.9/16
 +
Yeastar – Gateway: 10.27.3.165/16
 +
Linksys SPA3000: 10.27.3.118/16
 +
 +
Una vez configurados todos los elementos, ya podemos empezar. Para editar la configuración LAN del Yeastar y Linksys, se puede ver mas abajo, en la sección de configuración de Yeastar TP100

Revisió del 14:34, 28 maig 2017

Requisitos y Material

1 x Raspberry Pi Modelo B
2 x Tarjeta Micro SDHC 16GB o más
Conexión a Internet
1 x Yeastar TG100
N x Teléfono SIP
1 x Teléfono analógico
1 x Linksys SPA3000

Instalación de RasPBX

Nosotros usaremos una distro de Raspbian para Raspberry preparada con FreePBX, también podemos instalar Raspbian y seguir el siguiente manual.

https://wiket.esteveterradas.cat/index.php/FreePBX_en_Raspberry_Pi_3

Descargar las herramientas necesarias

Imagen RasPBX

RasPBX es una distro especializada en FreePBX para raspberry optimizado para mejorar su funcionalidad. Para obtener RasPBX debemos acceder al siguiente enlace.
Habrá que descomprimir el zip una vez descargado para poder usar el archivo con extensión .img

http://www.raspberry-asterisk.org/downloads/

SD Formatter

Una vez descargado necesitamos los programas adecuados para insertar la imagen en la MicroSD. El primer paso es formatear la MicroSD con SD Formatter descargándolo desde el siguiente enlace:

https://www.sdcard.org/downloads/formatter_4/

Win32DiskImager

Y por último para poder insertar la imagen en la MicroSD descargamos el programa Win32DiskImager desde el siguiente enlace:

https://sourceforge.net/projects/win32diskimager/


Aplicando las herramientas

SD Formatter

Escogemos cuidadosamente la unidad que queremos formatear, y sin tocar ninguna opción Format, esto nos preparará la SD para escribir la imagen:

Ecophone tecnic 1.png

Win32DiskImager

Cuando ejecutamos el programa nos deja escoger una unidad en la que marcaremos la MicroSD y debemos especificar la ruta donde se encuentra la imagen de RasPBX con extensión .img. Clic en Write y empezará a volcar la imagen en la tarjeta.

Ecophone tecnic 2.png

Una vez terminado el proceso, sacamos la MicroSD con seguridad y la insertamos en la raspberry.  

Configuración Inicial RaspPBX

Opción A - Para acceder a la raspberry debemos usar teclado y monitor.
Opción B - Acceder por Putty es posible ya que RasPBX viene con el puerto 22 abierto, la IP llegará por DHCP, se recomienda un sniffer para ver que IP tiene, por ejemplo Advanced IP Scanner.

Usuario y contraseña por defecto son:

User: root
Pw: raspberry

Si queremos seguir usando SSH de forma segura con nuestra raspberry lo mejor es crear un nuevo usuario con derechos de administrador y deshabilitar el usuario root del login en SSH.

Crear un usuario con permisos de administrador:

~# adduser super									

Le ponemos la contraseña, nombres y lo que queramos. Al terminar nos dirigimos al archivo /etc/sudoers y añadimos esta linea para que nuestro nuevo usuario también tenga permisos root.

Ecophone tecnic 3.png

Para denegar al usuario root de SSH modificamos el archivo /etc/ssh/sshd_config:

- En la línea que especifica si root puede hacer login ponemos que no, al terminar de editar el fichero lo guardamos y salimos. Paso seguido reiniciamos.

Ecophone tecnic 4.png

Tras terminar esta configuración y haber reiniciado, iniciamos sesión con el usuario creado anteriormente, y cambiamos de usuario a root con el comando su tras pasar el login para modificar archivos y evitar errores de configuración ya que todos los archivos pertenecen a root.

Tras hacer dichos cambios, FreePBX será accesible desde nuestra IP

Configuración del mail transfer agent (MTA)

En EcoPhone nos solicitaron poder conectarse a su servicio de correo externo y que el buzón de voz estuviese relacionado con ése correo. En ese caso configuramos Exim4 para nuestra FreePBX.

En primer lugar, como usamos Exim4, deberemos especificar que queremos reconfigurar el paquete con el comando:

~# dpkg-reconfigure exim4-config

Teniendo los datos de nuestro dominio necesitamos el nombre de dominio y el nombre del dominio de correo, en nuestro caso los datos son estos:

Nombre de dominio: miquelsis2.ml
Nombre del dominio de correo: mail.miquelsis2.ml

Y seguir los siguientes pasos:
- Paso 1, escoger la siguiente opción:

El correo se envía mediante un <<smarthost>>; Se recibe a través de SMTP o fetchmail.
- Paso 2, rellenamos con el nombre de dominio:
Introducimos miquelsis2.ml > Siguiente

Ecophone tecnic 5.png

- Paso 3, seguimos y nos preguntara que direcciones provenientes de conexiones SMTP va a escuchar, dejamos puesta la dirección loopback:

127.0.0.1

- Paso 4, en la sección que pregunta en qué otros destinos es aceptado el mail dejamos en blanco y seguimos adelante.
- Paso 5, en la siguiente sección nos pregunta si queremos seleccionar alguna maquina para replicar el mail, vamos a dejar en blanco esta sección.
- Paso 6, ponemos el nombre o IP de nuestro smarthost, y vamos a usar el puerto 587, en este caso es:

mail.miquelsis2.ml::587

- Paso 7, seleccionamos “No” en la sección de ocultar el local mail name.
- Paso 8, seleccionamos “No” en la sección Dial-on-demand.
- Paso 9, seleccionamos la opción “mbox format in /var/mail”
- Paso 10, seleccionamos “Si” en la sección de partir los archivos de correo en pequeños archivos.

Añadir Módulos a FreePBX

Entramos en FreePBX a través del navegador poniendo la dirección de nuestra RasPBX, y vamos a la sección de Module Admin, para agregar y gestionar los módulos de FreePBX.

Existen los módulos no comerciales y los que sí que son comerciales, para usar los módulos comerciales se debe tener una licencia de FreePBX, podemos ver las siguientes ofertas desde la página oficial de FreePBX.

https://www.freepbx.org/store/commercial-modules/

Gestor de modulos: Admin > Module Admin
Ecophone tecnic 6.png

Instalar módulos

Una vez dentro del module admin podemos ver todos los módulos de los que dispone FreePBX actualmente, para añadir nuevos módulos, vamos a la sección [Check Online] .Seleccionamos los módulos que queramos instalar.

Ecophone tecnic 7.png

Buscando el módulo que queramos, hacemos clic encima, y si es compatible nos dejará descargar el módulo e instalarlo haciendo clic en [Download and Install], cuando hayamos seleccionado los módulos que queramos instalar.

Ecophone tecnic 8.png

Seleccionamos [Process] para efectuar todos los cambios.

Actualizar módulos a su última versión

Para actualizar los módulos necesitamos ir a la sección de [Check Online] y seleccionar la opción [upgrade all] y seguidamente, [Process] , se actualizarán todos los módulos con actualizaciones pendientes.  

Lista de módulos necesarios

Ecophone tecnic 9.png


TTS Engines

Configuración del TTS Engine

TTS Engine, es un módulo de FreePBX que nos permite crear archivos de audio a partir de un fichero de texto, trabaja conjuntamente con el módulo Text To Speech.

Éste módulo viene con las siguientes TTS Engine funcionales:

- Flite (Festival)
- Texto To Wave
- Swift
- Pico

Nosotros vamos a usar GoogleTTS, una engine creada para que genere archivos de audio con la voz de google para Asterisk, ya que no nos gustan mucho las opciones que nos proporcionan.
Normalmente, el módulo de TTS Engine no fue diseñado para aceptar más que los engines que lleva por defecto. Pero se puede añadir por métodos convencionales, aquí la explicación.

- Primero debemos descargar el paquete de su repositorio en Github.

https://github.com/zaf/asterisk-googletts

Para que funcione correctamente necesitamos instalar las siguientes dependencias, vamos a instalarlas.

~# apt-get install libwww-perl libcrypt-ssleay-perl

- Una vez descargado deberemos poner los archivos googletts.agi y googletts-tiny.agi en la carpeta /var/lib/asterisk/agi-bin/

Y ponemos el archivo googletts-cli-tiny.pl y el googletts-cli.pl en directorio /usr/bin/googleTTS/, si no existe lo creamos manualmente. Dentro ubicamos los dos archivos, que a continuación utilizaremos.

Creación de las TTS Engines

Dentro del FreePBX seleccionamos la pestaña Settings > Text To Speech Engines

Ecophone tecnic 10.png

En la sección del módulo podemos ver todas las engines que tenemos activas, deberemos añadirla como una nueva engine.

Ecophone tecnic 11.png

Una vez dentro, en Engine Name colocamos la opción custom y le indicamos un nombre, en el Engine Path indicamos la ruta del los archivos google-tts.

/usr/bin/googleTTS/googletts-cli-tiny.pl 

Utilizaremos el tiny porque Raspberry tiene un espacio de almacenamiento muy limitado y no puede aguantar demasiada carga por lo que esta opción más ligera es mucho más recomendada.

Ecophone tecnic 12.png

Una vez creada la Engine no va a funcionar de primeras, deberemos editar el script que genera los TTS, para ello vamos a añadir un case por cada Engine custom de Google que hagamos, las siguientes líneas son las que vienen por defecto en el script. Pero añadimos dos case tras las engines que vienen por defecto.
Creamos dos TTS Engine, una llamada googleTTS que nos generará audios en español, y otra llamada googleTTSen que será en inglés.

Modificación del script

Editamos el fichero /var/www/html/admin/modules/tts/agi-bin/propolys-tts.agi

Las líneas en negrita son las añadidas en el fichero. Incluyo el resto de líneas para ubicar las líneas del script que tenemos que modificar.

if ( !file_exists($wavefile) ) {
       debug("Text to speech wave file doesnt exist, lets create it.", 1);
       if ( false === ($fh = fopen($textfile, "w")) ) {
               debug("ERROR: Cannot open the file: $textfile", 1);
               return 1;
       }
       if ( false === fwrite($fh, $text) ) {
               debug("ERROR: Cannot write to file: $textfile", 1);
               return 1;
       }
       fclose($fh);
       debug("Executing $engine", 1);
       switch ($engine) {
               case 'text2wave':
                       exec($enginebin." -f ".$format['rate']." -o $tmpwavefile $textfile");
               break;
               case 'flite':
                       exec($enginebin." -f $textfile -o $tmpwavefile");
               break;
               case 'swift':
                       exec($enginebin." -p audio/channels=1,audio/sampling-rate=".$format['rate']." -o $tmpwavefile -f $textfile");
               break;
               case 'pico':
                       exec($enginebin." -o $tmpwavefile ".escapeshellarg(file_get_contents($textfile)));
               break;
               case 'googleTTS':									                
                       exec($enginebin." -l es -f $textfile -r 8000 -o $wavefile");			
               break;										
               case 'googleTTSen':									
                       exec($enginebin." -l en -f $textfile -r 8000 -o $wavefile");			
               break;										
               default:											
                       debug("$engine is not a valid engine!", 1);							
               break;											
       }
}

Explicación del código

Éste script genera un fichero de audio con el comando que hay dentro de cada case, éste comprueba por nombre de engine, por lo que dándole el mismo nombre como engine, seguidamente crea un archivo de audio con el idioma seleccionado. En el repositiorio de Github del Engine TTS de Google se pueden ver listados todos los idiomas soportados.
Internamente va a buscar el .agi de la engine donde contiene todo el proceso de creación del archivo wav.

Por último usamos este comando:

chmod 550 /var/www/html/admin/modules/tts/agi-bin/propolys-tts.agi 

Ya que no queremos que cambie el contenido del fichero, nos ahorramos de que cambien las líneas en el script de arriba.

¡Al realizar los cambios, FreePBX nos avisará de que se ha modificado un fichero del módulo! No pasa nada por haberlo modificado. Hay que ignorar ese error.

Conectividad del sistema VoIP

Para que toda la infraestructura pueda comunicarse se necesitan establecer rutas estáticas tanto de salida como de entrada. Las rutas salientes necesitan un trunk para autenticar a los usuarios salientes por la ruta de salida.

El direccionamiento es el siguiente:

Raspberry – FreePBX: 10.27.3.110/16
Elastix : 10.27.100.9/16
Yeastar – Gateway: 10.27.3.165/16
Linksys SPA3000: 10.27.3.118/16

Una vez configurados todos los elementos, ya podemos empezar. Para editar la configuración LAN del Yeastar y Linksys, se puede ver mas abajo, en la sección de configuración de Yeastar TP100