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

De Wiket
Salta a la navegació Salta a la cerca
 
(Hi ha 28 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
 
==Requisitos y Material==
 
==Requisitos y Material==
  
1 x Raspberry Pi Modelo B<br>
+
1 x Raspberry Pi Modelo B
2 x Tarjeta Micro SDHC 16GB o más<br>
+
1 x Tarjeta Micro SDHC 16GB o más
Conexión a Internet<br>
+
Conexión a Internet
1 x Yeastar TG100<br>
+
1 x Yeastar TG100
N x Teléfono SIP<br>
+
N x Teléfono SIP
1 x Teléfono analógico<br>
+
1 x Teléfono analógico
1 x Linksys SPA3000<br>
+
1 x Linksys SPA3000
  
 
==Instalación de RasPBX==
 
==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===
 
===Descargar las herramientas necesarias===
Línia 15: Línia 19:
 
====Imagen RasPBX====
 
====Imagen RasPBX====
  
RasPBX es una distro especializada en FreePBX para raspberry optimizado para mejorar su funcionalidad. Para obtener RasPBX debemos acceder al siguiente enlace.<br> Habrá que descomprimir el zip una vez descargado para poder usar el archivo con extensión .img
+
RasPBX es una distro especializada en FreePBX para raspberry optimizada para mejorar su funcionalidad. Para obtener RasPBX debemos acceder al siguiente enlace.<br> Habrá que descomprimir el zip una vez descargado para poder usar el archivo con extensión .img
  
 
http://www.raspberry-asterisk.org/downloads/
 
http://www.raspberry-asterisk.org/downloads/
Línia 32: Línia 36:
  
  
Aplicando las herramientas
+
===Aplicando las herramientas===
  
  SD Formatter:
+
====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:
 
Escogemos cuidadosamente la unidad que queremos formatear, y sin tocar ninguna opción Format, esto nos preparará la SD para escribir la imagen:
  
 +
[[Fitxer: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.
 +
 +
[[Fitxer:ecophone_tecnic_2.png]]
 +
 +
Una vez terminado el proceso, sacamos la MicroSD con seguridad y la insertamos en la raspberry.
 +
 +
==Configuración Inicial RaspPBX==
 +
 +
<u>Opción A</u> - Para acceder a la raspberry debemos usar teclado y monitor. <br>
 +
<u>Opción B</u> - 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.<br>
 +
 +
Usuario y contraseña por defecto son:
 +
 +
'''User''': root<br>
 +
'''Pw''': raspberry<br>
 +
 +
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
  
Win32DiskImager:
+
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.
  
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.
+
[[Fitxer: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.
 +
 
 +
[[Fitxer: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<br>
 +
'''Nombre del dominio de correo''': mail.miquelsis2.ml<br>
 +
 
 +
Y seguir los siguientes pasos:<br>
 +
- '''Paso 1''', escoger la siguiente opción:
 +
 
 +
El correo se envía mediante un <<smarthost>>; Se recibe a través de SMTP o fetchmail.<br>
 +
- '''Paso 2''', rellenamos con el nombre de dominio:<br>
 +
Introducimos miquelsis2.ml > Siguiente
 +
 
 +
[[Fitxer: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.<br>
 +
- '''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.<br>
 +
- '''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.<br>
 +
- '''Paso 8''', seleccionamos “No” en la sección Dial-on-demand.<br>
 +
- '''Paso 9''', seleccionamos la opción “mbox format in /var/mail”<br>
 +
- '''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.
 +
 
 +
<pre style="color: red">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.</pre>
 +
 
 +
https://www.freepbx.org/store/commercial-modules/
 +
 
 +
'''Gestor de modulos''': Admin > Module Admin<br>
 +
[[Fitxer: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.
 +
 
 +
[[Fitxer: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.
 +
 
 +
[[Fitxer: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===
 +
 +
[[Fitxer:ecophone_tecnic_9.png|frameless]]
 +
  
Una vez terminado el proceso, sacamos la MicroSD con seguridad y la insertamos en la raspberry.
+
==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)<br>
 +
- Texto To Wave<br>
 +
- Swift<br>
 +
- Pico<br>
 +
 
 +
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.<br>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 del IVR==
 +
 
 +
El IVR es un terminal que indica opciones al usuario y le permite ir por diferentes caminos y ser redirigido a diferentes lugares de la centralita.
 +
Para crear uno nuevo vamos a '''Applications''' -> '''IVR''' y creamos los siguientes. Con esto lograremos un menú bilingue, pero aún faltan los TTS para poder ser terminados.
 +
Esperar a ver la siguiente seccioón para terminar de configurar estos IVR.
 +
 
 +
IVR Name: IVRbase
 +
IVR Description:
 +
Announcement:
 +
Enable Direct Dial: Yes '''No'''
 +
Timeout: 5
 +
Alert Info:
 +
Ringer Volume Override:
 +
Invalid Retries: 1
 +
Invalid Retry Recording:
 +
Append Announcement to Invalid: Yes '''No'''
 +
Return on Invalid: Yes '''No'''
 +
Invalid Recording: 
 +
Invalid Destination: 
 +
Timeout Retries: 0
 +
Append Announcement on Timeout: Yes '''No'''
 +
Return on Timeout: Yes '''No'''
 +
Timeout Recording: 
 +
Timeout Destination: Terminate call -> Busy 
 +
Return to IVR after VM Yes '''No'''
 +
-----
 +
IVR Entries
 +
Digits   Destination
 +
1      Text To Speech -> welcome
 +
2      Text To Speech -> Buenos Días
 +
 
 +
IVR Name: IVRcastellano
 +
IVR Description: 
 +
IVR DTMF Options:
 +
Announcement: 
 +
Enable Direct Dial: Yes '''No'''
 +
Timeout: 10
 +
Alert Info: 
 +
Ringer Volume Override: 
 +
Invalid Retries: 3
 +
Invalid Retry Recording: 
 +
Append Announcement to Invalid: Yes '''No'''
 +
Return on Invalid: Yes '''No'''
 +
Invalid Recording: 
 +
Invalid Destination: Terminate Call -> Hangup 
 +
Timeout Retries: 0
 +
Append Announcement on Timeout: Yes '''No'''
 +
Return on Timeout: Yes '''No'''
 +
Timeout Recording: 
 +
Timeout Destination: Extensions -> 103 Conserjería
 +
Return to IVR after VM: Yes '''No'''
 +
-----
 +
IVR Entries
 +
Digits Destination
 +
1      Extensions -> 102 Administración
 +
2      Extensions -> 103 Conserjería
 +
3      Voicemail -> 103 Conserjería (Busy Message)
 +
 
 +
IVR Name: IVRenglish
 +
IVR Description: 
 +
IVR DTMF Options:
 +
Announcement: 
 +
Enable Direct Dial: Yes '''No'''
 +
Timeout: 10
 +
Alert Info: 
 +
Ringer Volume Override: 
 +
Invalid Retries: 3
 +
Invalid Retry Recording: 
 +
Append Announcement to Invalid: Yes '''No'''
 +
Return on Invalid: Yes '''No'''
 +
Invalid Recording: 
 +
Invalid Destination: Terminate Call -> Hangup 
 +
Timeout Retries: 0
 +
Append Announcement on Timeout: Yes '''No'''
 +
Return on Timeout: Yes '''No'''
 +
Timeout Recording: 
 +
Timeout Destination: Extensions -> 103 Conserjería
 +
Return to IVR after VM: Yes '''No'''
 +
-----
 +
IVR Entries
 +
Digits Destination
 +
1      Extensions -> 102 Administración
 +
2      Extensions -> 103 Conserjería
 +
3      Voicemail -> 103 Conserjería (Busy Message)
 +
 
 +
==Creación de las TTS Engines==
 +
 
 +
Dentro del FreePBX seleccionamos la pestaña '''Settings''' > '''Text To Speech Engines'''
 +
 
 +
[[Fitxer: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.
 +
 
 +
[[Fitxer: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'''.
 +
 
 +
[[Fitxer: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.<br>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.<br>
 +
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.
 +
 
 +
==Creacion de Text To Speech==
 +
 
 +
Una vez hemos agregado la engine y está disponible para su uso, para crear un archivo de sonido y poder usarlo vamos a: <br>'''Applications''' -> '''Text To Speech'''
 +
 
 +
Name: Home-Idioma
 +
Text: Hello, if you want to be attended in English, press 1
 +
Choose an Engine: googleTTSen
 +
Destintation: Text To Speech -> Home-Idioma2
 +
 
 +
Name: Home-Idioma2
 +
Text: Para seguir hablando castellano pulse 2.
 +
Choose an Engine: googleTTS
 +
Destintation: IVR -> IVR base
 +
 
 +
Name: buenos dias
 +
Text: Buenos días, estás llamando a la red telefónica del Instituto Asteve Tarradas. Si quieres hablar con administración. Marque 1. Para hablar con conserjería. Marque 2. Para dejar un mensaje de voz marque 3 o espere.
 +
Choose an Engine: googleTTS
 +
Destintation: IVR -> IVRcastellano
 +
 
 +
Name: welcome
 +
Text: Good morning, you're calling the Asteve Tarradas Institute telephone network. If you want to talk to management. Mark 1. To talk to a concierge. Mark  2. To leave a voice message. Mark 3 or just wait.
 +
Choose an Engine: googleTTS
 +
Destintation: IVR -> IVRenglish
 +
 
 +
==Configuración de Time Conditions y Time Groups==
 +
 
 +
Usando la guía a continuación podemos ver cómo funciona el módulo:
 +
 
 +
https://wiket.esteveterradas.cat/index.php/Time_Conditions_FreePBX
 +
 
 +
===Configuración del Time Group===
 +
 
 +
Con ésta configuración obtendremos un horario de las 8 de la mañana hasta las 21 de la tarde, todos los dias del mes, todos los meses y de lunes a viernes.
 +
'''Time to Start''': 8:00
 +
'''Time to finish''': 21:00
 +
'''Week Day Start''': Monday
 +
'''Week Day finish''': Friday
 +
'''Month Day start''': 1
 +
'''Month Day finish''': 31
 +
'''Month start''': January
 +
'''Month finish''': December
 +
 
 +
===Configuración del Time Conditions===
 +
 
 +
'''Time Condition name''': Horario trabajo
 +
'''Override Code Pin''':
 +
'''Invert BLF Hint''' Yes '''No'''
 +
'''Change Override''': Unchanged
 +
'''Current''': No Override
 +
'''Time Zone''': Europe/Madrid
 +
'''Time Group''': Horario Trabajo
 +
'''Destination matches''': Announcements -> Home
 +
'''Destination non-matches''': Voicemail -> Vozdesatan
 +
 
 +
==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.
 +
 
 +
==Inbound Routes==
 +
 
 +
Creamos una Inbound Route de la siguiente manera:
 +
 
 +
https://wiket.esteveterradas.cat/index.php/Inbound_Routes_FreePBX
 +
 
 +
Y la hacemos de la siguiente manera:
 +
 
 +
'''Description''': Operadora
 +
'''DID Number''': ANY
 +
'''CallerID Number''': ANY
 +
'''CID Priority Route''' (Yes|No): Yes
 +
'''Ringer Volume Override''': None
 +
'''CID name prefix''':
 +
'''Music On Hold''': Default
 +
'''Set Destination''': Time Conditions -> Horario Trabajo
 +
 
 +
==Trunks en FreePBX==
 +
 
 +
A continuación muestro en una guía comos se crean trunks en FreePBX:
 +
 
 +
https://wiket.esteveterradas.cat/index.php/Trunks_VoIP
 +
 
 +
Creamos los siguientes trunks en nuestro FreePBX:
 +
 
 +
===Trunk IAX hacia Elastix===
 +
 
 +
'''General'''
 +
Opción Descripción
 +
Disable Trunk: No
 +
Hide CallerID: No
 +
Trunk name: pbxlink
 +
CID Options: Allow any CID
 +
Maximum Channels:
 +
'''IAX Settings[Outgoing]'''
 +
Opción Descripción
 +
Trunk name: pbxlink
 +
Peer Details
 +
host=10.27.3.110
 +
user=pbx2
 +
secret=password
 +
type=peer
 +
qualify: yes
 +
'''IAX Settings[Incoming]'''
 +
Opción Descripción
 +
User context: pbx1
 +
Peer Details
 +
secret=password
 +
type=user
 +
context=from-trunk
 +
 
 +
===Trunk SIP hacia Yealink===
 +
 
 +
'''General'''
 +
Opción Descripción
 +
Disable Trunk: No
 +
Hide CallerID: No
 +
Trunk name: Yealink
 +
CID Options: Allow any CID
 +
Maximum Channels:  1
 +
sip Settings[Outgoing]
 +
Opción Descripción
 +
Trunk name: Yealink
 +
Peer Details
 +
host=10.27.3.165
 +
type=peer
 +
qualify=yes
 +
disallow=all
 +
allow=gsm,ulaw,alaw
 +
Host: IP de nuestra gateway VoIP
 +
qualify: yes
 +
 
 +
===Trunk hacia Linksys SPA3000===
 +
 
 +
Ahora con todos los datos añadidos en nuestro FXO necesitamos que conecte con FreePBX, para ello añadimos un nuevo trunk, le daremos el nombre “To_Linksys” y en sip Settings le damos la siguiente configuración:
 +
 
 +
'''General'''
 +
Disable Trunk: No
 +
Hide CallerID: No
 +
Trunk name: To_Linksys
 +
CID Options: Allow any CID
 +
Maximum Channels:
 +
'''sip Settings[Outgoing]'''
 +
Trunk name: To_Linksys
 +
Peer Details
 +
host=10.27.3.118
 +
type=friend
 +
user=Linksys
 +
secret=1
 +
port=5060
 +
qualify=yes
 +
context=from-pstn
 +
disallow=all
 +
allow=gsm,ulaw,alaw
 +
 
 +
==Outbound Routes FreePBX==
 +
 
 +
Con la finalidad de que  nuestro FreePBX deje salir las llamadas hacia fuera, le indicaremos en los siguientes parámetros quienes si y quienes no pueden salir y con que trunk conectará.
 +
Ruta hacia Yeastar TG100
 +
 
 +
Entramos a la sección '''Connectivity''' → '''Outbound Routes'''
 +
 
 +
===Ruta hacia Yeastar TG100===
 +
[[Fitxer:ecophone_tecnico_17.png]]
 +
 
 +
Y configuramos la ruta de la siguiente manera:
 +
 
 +
[[Fitxer:ecophone_tecnico_19.png]]
 +
 
 +
====Dial patterns====
 +
 
 +
[[Fitxer:ecophone_tecnico_20.png]]
 +
 
 +
===Ruta hacia Elastix===
 +
 
 +
Creamos una nueva Outbound Route llamada '''PBX1_to_PBX2'''
 +
 
 +
[[Fitxer:ecophone_tecnico_21.png]]
 +
 
 +
====Dial patterns====
 +
 
 +
[[Fitxer:ecophone_tecnico_22.png]]
 +
 
 +
===Ruta hacia Linksys SPA3000===
 +
 
 +
Podemos utilizar la misma ruta de salida “'''PBX1_to_PBX2'''” ya que los usuarios conectados a través de Linksys SPA3000 son los usuarios de FreePBX. Colocaremos el trunk “'''To_Linksys'''” seguido del trunk “'''pbxlink'''”
 +
 
 +
[[Fitxer:ecophone_tecnico_23.png]]
 +
 
 +
==Configuración de Elastix==
 +
===Inbound Routes===
 +
 
 +
Para acceder a las rutas de entrada debemos ir por el menú a la sección PBX
 +
 
 +
[[Fitxer:ecophone_tecnico_24.png]]
 +
 
 +
Seguidamente encontramos la sección en el menú lateral:
 +
 
 +
[[Fitxer:ecophone_tecnico_25.png]]
 +
 
 +
Con esta configuración decimos que cualquier CID pueda pasar por la ruta entrante.
 +
 
 +
[[Fitxer:ecophone_tecnico_26.png|frameless]]
 +
 
 +
Y especificamos que queremos que acceda al grupo de extensiones 1100.
 +
 
 +
[[Fitxer:ecophone_tecnico_27.png|frameless]]
 +
 
 +
===Trunks de Elastix===
 +
 
 +
Para crear líneas troncales en elastix, debemos dirigirnos al menú lateral de PBX y entramos en troncales.
 +
 
 +
[[Fitxer:ecophone_tecnico_29.png|frameless]]
 +
 
 +
====Elastix hacia FreePBX====
 +
 
 +
Creamos una línea troncal IAX hacia FreePBX relacionando el contexto de usuario y la contraseña.
 +
 
 +
'''General'''
 +
Disable Trunk: No
 +
Hide CallerID: No
 +
Trunk name: pbxlink
 +
CID Options: Allow any CID
 +
Maximum Channels:
 +
'''Opciones salientes'''
 +
Trunk name: pbxlink
 +
host=10.27.3.110
 +
user=pbx1
 +
secret=password
 +
context=from-trunk
 +
disallow=all
 +
allow=gsm,ulaw,alaw
 +
'''Opciones entrantes'''
 +
User context: pbx1
 +
Peer Details
 +
secret=password
 +
type=user
 +
context=from-trunk
 +
 
 +
====Trunk hacia Yeastar TG100====
 +
 
 +
Para que los usuarios de elastix también puedan salir, haremos también un trunk SIP, de esta forma no tienen que hacer dos saltos, además de que hacer más de un salto en la configuración interna siempre trae confusiones.
 +
 
 +
'''General'''
 +
Disable Trunk: No
 +
Hide CallerID: No
 +
Trunk name: Yealink
 +
CID Options: Allow any CID
 +
Maximum Channels:  1
 +
'''sip Settings[Outgoing]'''
 +
Opción Descripción
 +
Trunk name: Yealink
 +
Peer Details
 +
host=10.27.3.165
 +
type=peer
 +
qualify=yes
 +
disallow=all
 +
allow=gsm,ulaw,alaw
 +
 
 +
===Outbound Routes Elastix===
 +
 
 +
Para crear rutas salientes nos dirijimos al menú lateral de PBX y seleccionamos rutas salientes:
 +
 
 +
[[Fitxer:ecophone_tecnico_33.png|frameless]]
 +
 
 +
====Ruta hacia Yeastar TG100====
 +
Vamos a crear una ruta saliente para todo el trafico que vaya al exterior, y que para ello se conecte al Yeastar.
 +
 
 +
Añadimos el trunk “Yealink” previamente creado:
 +
 
 +
[[Fitxer:ecophone_tecnico_49.png|frameless]]
 
 
 +
====Ruta hacia FreePBX====
 +
 +
Ahora toca crear la ruta que queda para interconectar FreePBX con Elastix y que sus usuarios puedan acceder al trunk y verse entre ellos.
 +
Copiar esta configuración.
 +
 +
[[Fitxer:ecophone_tecnico_34.png|frameless]]
 +
 +
==Configuración de Yeastar TG100==
 +
 +
[[Fitxer:ecophone_tecnico_35.png]]
 +
 +
Éste aparato nos permitirá acceder a las redes móviles desde la red interna  para poder realizar llamadas al exterior. Necesita de una tarjeta SIM para conectarse a red PSTN, un cable de alimentación i conexión a la red de nuestro FreePBX.
 +
 +
La IP por defecto y credenciales para acceder a la configuración web son:
 +
IP :192.168.5.150
 +
 +
Credenciales por defecto:
 +
'''User''': admin
 +
'''Pw''': password
 +
 +
Para modificar la IP es en la sección '''System → LAN Settings'''<br>
 +
Para modificar la password en '''System → System settings → Change password'''
 +
 +
Vamos a la sección '''System -> LAN Settings''' y modificamos los parámetros:
 +
 +
[[Fitxer:ecophone_tecnico_50.png]]
 +
 +
===Configuración Trunk Yeastar TG100===
 +
 +
Para que nuestro FreePBX se conecte a la red GSM  traves de nuestra Gateway VoIP, hay que configurar un trunk de entrada de FreePBX.
 +
 +
En la sección '''Gateway → VoIP Settings → VoIP Trunk'''
 +
Seleccionamos '''Add VoIP Trunk''' y la siguiente ventana la configuramos de la siguiente manera:
 +
 +
[[Fitxer:ecophone_tecnico_36.png]]
 +
 +
'''Trunk Type''': Service Provider
 +
'''Type''': SIP
 +
'''Provider name''': Asterisk
 +
'''IP''': 10.27.3.110:5060 (Nuestro FreePBX)
 +
 +
Creamos un Segundo trunk del tipo '''Service Provider''', que es por el que se conectara nuestro segundo cliente, Elastix.
 +
 +
[[Fitxer:ecophone_tecnico_37.png]]
 +
 +
'''Trunk Type''': Service Provider
 +
'''Type''': SIP
 +
'''Provider name''': Elastix
 +
'''IP''': 10.27.100.9:5060 (Nuestro Elastix)
 +
 +
====Credenciales SIM====
 +
 +
Después de configurar el trunk, deberemos proporcionar las '''credenciales básicas de nuestra tarjeta SIM''', se pueden configurar varias cosas pero para que funcione solo se le tiene que especificar el numero PIN para que pueda acceder y autenticarse a la red externa.
 +
 +
[[Fitxer:ecophone_tecnico_39.png]]
 +
 +
Debemos ir a la sección Mobile list y pulsar el botón del lápiz de nuestra tarjeta SIM:
 +
 +
[[Fitxer:ecophone_tecnico_40.png]]
 +
 +
Una vez finalizado en '''status-->Trunk Status''' nos mostrará si funciona o no.
 +
 +
[[Fitxer:ecophone_tecnico_41.png]]
 +
 +
==Configuración IP to Mobile y Mobile to IP==
 +
 +
[[Fitxer:ecophone_tecnico_42.png]]
 +
 +
En la sección Gateway → VoIP Settings → IP to Mobile
 +
Seleccionamos  y la siguiente ventana la configuramos de la siguiente manera:
 +
 +
'''Nota''': Para que se muestren todas las opciones necesitamos marcar la opción Simple mode: No.
 +
 +
[[Fitxer:ecophone_tecnico_44.png|frameless]]
 +
 +
En la sección '''Gateway → VoIP Settings → Mobile to IP'''
 +
Seleccionamos Add Mobile to IP Route y la siguiente ventana la configuramos de la siguiente manera:
 +
 +
[[Fitxer:ecophone_tecnico_45.png|frameless]]
 +
 +
==Configuración FXO==
 +
 +
Descripción FXO: '''F'''oreign e'''X'''change '''O'''ffice (Interfaz de central externa), es un aparato que se utiliza para conectar ordenadores a la RTC, lo que hace posible interconectar una red telefónica analógica con una red telefónica VoIP.
 +
 +
Utilización de nuestro dispositivo FXS to FXO, llamado SPA-3000 de Linksys.
 +
 +
[[Fitxer:ecophone_tecnico_52.png|frameless]]
 +
 +
Para poder acceder a su configuración primero debemos saber su dirección IP, para ello conectamos en
 +
la ranura Internet el cable de red a nuestro switch, y en la entrada phone conectamos un teléfono analógico.
 +
 +
Una vez encendido nuestro FXO, deberemos introducir lo siguiente en el teléfono analógico:
 +
****
 +
(Cuatro asteriscos)
 +
 +
Al oír la operadora de la máquina nos ofrecerá introducir una opción, marcamos lo siguiente:
 +
110#
 +
 +
Y seguidamente nos irá diciendo digito por digito, la dirección IP para poder acceder.
 +
 +
En nuestro caso nos dio la IP 10.27.3.113, lo siguiente que nos toca hacer es entrar en la configuración.
 +
 +
[[Fitxer:ecophone_tecnico_46.png]]
 +
 +
Entramos en la pestaña System y seleccionamos la opción Admin login, tras loguear seleccionamos advanced.
 +
La configuración es la siguiente:
 +
'''DCHP''': No
 +
'''Static IP''': 10.27.3.118
 +
'''Netmask''': 255.255.0.0
 +
'''Gateway''': 10.27.255.254
 +
[[Fitxer:ecophone_tecnico_47.png]]
 +
 +
Entramos en la sección PSTN Line y la configuramos de la siguiente manera:
 +
 +
'''SIP Settings'''
 +
SIP Port: 5060
 +
 +
'''Proxy and registration'''
 +
Proxy: 10.27.3.110 (La ip de nuestro FreePBX)
 +
 +
'''Subscriber information'''
 +
User ID: Linksys (Usuario determinado en el trunk de FreePBX)
 +
Password: 1(Secret definida en el trunk de FreePBX)
 +
[[Fitxer:ecophone_tecnico_48.png]]

Revisió de 09:01, 29 maig 2017

Requisitos y Material

1 x Raspberry Pi Modelo B
1 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 optimizada 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 del IVR

El IVR es un terminal que indica opciones al usuario y le permite ir por diferentes caminos y ser redirigido a diferentes lugares de la centralita. Para crear uno nuevo vamos a Applications -> IVR y creamos los siguientes. Con esto lograremos un menú bilingue, pero aún faltan los TTS para poder ser terminados. Esperar a ver la siguiente seccioón para terminar de configurar estos IVR.

IVR Name: IVRbase
IVR Description:
Announcement: 
Enable Direct Dial: Yes No
Timeout: 5
Alert Info: 
Ringer Volume Override: 
Invalid Retries: 1
Invalid Retry Recording: 
Append Announcement to Invalid: Yes No
Return on Invalid: Yes No
Invalid Recording:  
Invalid Destination:  
Timeout Retries: 0
Append Announcement on Timeout: Yes No
Return on Timeout: Yes No
Timeout Recording:  
Timeout Destination: Terminate call -> Busy  
Return to IVR after VM Yes No
-----
IVR Entries
Digits	  Destination
1       Text To Speech -> welcome
2       Text To Speech -> Buenos Días
IVR Name: IVRcastellano
IVR Description:  
IVR DTMF Options:
Announcement:  
Enable Direct Dial: Yes No
Timeout: 10
Alert Info:  
Ringer Volume Override:  
Invalid Retries: 3
Invalid Retry Recording:  
Append Announcement to Invalid: Yes No
Return on Invalid: Yes No
Invalid Recording:  
Invalid Destination: Terminate Call -> Hangup  
Timeout Retries: 0
Append Announcement on Timeout: Yes No
Return on Timeout: Yes No
Timeout Recording:  
Timeout Destination: Extensions -> 103 Conserjería
Return to IVR after VM: Yes No
-----
IVR Entries
Digits	Destination
1       Extensions -> 102 Administración
2       Extensions -> 103 Conserjería
3       Voicemail -> 103 Conserjería (Busy Message)
IVR Name: IVRenglish
IVR Description:  
IVR DTMF Options:
Announcement:  
Enable Direct Dial: Yes No
Timeout: 10
Alert Info:  
Ringer Volume Override:  
Invalid Retries: 3
Invalid Retry Recording:  
Append Announcement to Invalid: Yes No
Return on Invalid: Yes No
Invalid Recording:  
Invalid Destination: Terminate Call -> Hangup  
Timeout Retries: 0
Append Announcement on Timeout: Yes No
Return on Timeout: Yes No
Timeout Recording:  
Timeout Destination: Extensions -> 103 Conserjería
Return to IVR after VM: Yes No
-----
IVR Entries
Digits	Destination
1       Extensions -> 102 Administración
2       Extensions -> 103 Conserjería
3       Voicemail -> 103 Conserjería (Busy Message)

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.

Creacion de Text To Speech

Una vez hemos agregado la engine y está disponible para su uso, para crear un archivo de sonido y poder usarlo vamos a:
Applications -> Text To Speech

Name: Home-Idioma
Text: Hello, if you want to be attended in English, press 1
Choose an Engine: googleTTSen
Destintation: Text To Speech -> Home-Idioma2 
Name: Home-Idioma2
Text: Para seguir hablando castellano pulse 2.
Choose an Engine: googleTTS
Destintation: IVR -> IVR base
Name: buenos dias
Text: Buenos días, estás llamando a la red telefónica del Instituto Asteve Tarradas. Si quieres hablar con administración. Marque 1. Para hablar con conserjería. Marque 2. Para dejar un mensaje de voz marque 3 o espere.
Choose an Engine: googleTTS
Destintation: IVR -> IVRcastellano
Name: welcome
Text: Good morning, you're calling the Asteve Tarradas Institute telephone network. If you want to talk to management. Mark 1. To talk to a concierge. Mark  2. To leave a voice message. Mark 3 or just wait.
Choose an Engine: googleTTS
Destintation: IVR -> IVRenglish

Configuración de Time Conditions y Time Groups

Usando la guía a continuación podemos ver cómo funciona el módulo:

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

Configuración del Time Group

Con ésta configuración obtendremos un horario de las 8 de la mañana hasta las 21 de la tarde, todos los dias del mes, todos los meses y de lunes a viernes.

Time to Start: 8:00
Time to finish: 21:00
Week Day Start: Monday
Week Day finish: Friday
Month Day start: 1
Month Day finish: 31
Month start: January
Month finish: December

Configuración del Time Conditions

Time Condition name: Horario trabajo 
Override Code Pin: 
Invert BLF Hint Yes No
Change Override: Unchanged
Current: No Override
Time Zone: Europe/Madrid
Time Group: Horario Trabajo
Destination matches: Announcements -> Home
Destination non-matches: Voicemail -> Vozdesatan

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.

Inbound Routes

Creamos una Inbound Route de la siguiente manera:

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

Y la hacemos de la siguiente manera:

Description: Operadora
DID Number: ANY
CallerID Number: ANY
CID Priority Route (Yes|No): Yes
Ringer Volume Override: None
CID name prefix:
Music On Hold: Default
Set Destination: Time Conditions -> Horario Trabajo

Trunks en FreePBX

A continuación muestro en una guía comos se crean trunks en FreePBX:

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

Creamos los siguientes trunks en nuestro FreePBX:

Trunk IAX hacia Elastix

General
Opción	Descripción
Disable Trunk: No	
Hide CallerID: No	
Trunk name: pbxlink	
CID Options: Allow any CID	
Maximum Channels:	
IAX Settings[Outgoing]
Opción	Descripción
Trunk name: pbxlink	
Peer Details
host=10.27.3.110
user=pbx2
secret=password
type=peer	
qualify: yes
IAX Settings[Incoming]
Opción	Descripción
User context: pbx1
Peer Details
secret=password
type=user
context=from-trunk

Trunk SIP hacia Yealink

General
Opción	Descripción
Disable Trunk: No
Hide CallerID: No	
Trunk name: Yealink	
CID Options: Allow any CID	
Maximum Channels:  1	
sip Settings[Outgoing]
Opción	Descripción
Trunk name: Yealink	
Peer Details
host=10.27.3.165
type=peer
qualify=yes
disallow=all
allow=gsm,ulaw,alaw	
Host: IP de nuestra gateway VoIP
qualify: yes

Trunk hacia Linksys SPA3000

Ahora con todos los datos añadidos en nuestro FXO necesitamos que conecte con FreePBX, para ello añadimos un nuevo trunk, le daremos el nombre “To_Linksys” y en sip Settings le damos la siguiente configuración:

General
Disable Trunk: No	
Hide CallerID: No	
Trunk name: To_Linksys
CID Options: Allow any CID
Maximum Channels:
sip Settings[Outgoing]
Trunk name: To_Linksys
Peer Details
host=10.27.3.118
type=friend
user=Linksys
secret=1
port=5060
qualify=yes
context=from-pstn
disallow=all
allow=gsm,ulaw,alaw

Outbound Routes FreePBX

Con la finalidad de que nuestro FreePBX deje salir las llamadas hacia fuera, le indicaremos en los siguientes parámetros quienes si y quienes no pueden salir y con que trunk conectará. Ruta hacia Yeastar TG100

Entramos a la sección ConnectivityOutbound Routes

Ruta hacia Yeastar TG100

Ecophone tecnico 17.png

Y configuramos la ruta de la siguiente manera:

Ecophone tecnico 19.png

Dial patterns

Ecophone tecnico 20.png

Ruta hacia Elastix

Creamos una nueva Outbound Route llamada PBX1_to_PBX2

Ecophone tecnico 21.png

Dial patterns

Ecophone tecnico 22.png

Ruta hacia Linksys SPA3000

Podemos utilizar la misma ruta de salida “PBX1_to_PBX2” ya que los usuarios conectados a través de Linksys SPA3000 son los usuarios de FreePBX. Colocaremos el trunk “To_Linksys” seguido del trunk “pbxlink

Ecophone tecnico 23.png

Configuración de Elastix

Inbound Routes

Para acceder a las rutas de entrada debemos ir por el menú a la sección PBX

Ecophone tecnico 24.png

Seguidamente encontramos la sección en el menú lateral:

Ecophone tecnico 25.png

Con esta configuración decimos que cualquier CID pueda pasar por la ruta entrante.

Ecophone tecnico 26.png

Y especificamos que queremos que acceda al grupo de extensiones 1100.

Ecophone tecnico 27.png

Trunks de Elastix

Para crear líneas troncales en elastix, debemos dirigirnos al menú lateral de PBX y entramos en troncales.

Ecophone tecnico 29.png

Elastix hacia FreePBX

Creamos una línea troncal IAX hacia FreePBX relacionando el contexto de usuario y la contraseña.

General
Disable Trunk: No	
Hide CallerID: No	
Trunk name: pbxlink	
CID Options: Allow any CID	
Maximum Channels:	
Opciones salientes
Trunk name: pbxlink	
host=10.27.3.110
user=pbx1
secret=password
context=from-trunk
disallow=all
allow=gsm,ulaw,alaw
Opciones entrantes
User context: pbx1
Peer Details
secret=password
type=user
context=from-trunk

Trunk hacia Yeastar TG100

Para que los usuarios de elastix también puedan salir, haremos también un trunk SIP, de esta forma no tienen que hacer dos saltos, además de que hacer más de un salto en la configuración interna siempre trae confusiones.

General
Disable Trunk: No	
Hide CallerID: No	
Trunk name: Yealink	
CID Options: Allow any CID	
Maximum Channels:  1	
sip Settings[Outgoing]
Opción	Descripción
Trunk name: Yealink	
Peer Details
host=10.27.3.165
type=peer
qualify=yes
disallow=all
allow=gsm,ulaw,alaw	

Outbound Routes Elastix

Para crear rutas salientes nos dirijimos al menú lateral de PBX y seleccionamos rutas salientes:

Ecophone tecnico 33.png

Ruta hacia Yeastar TG100

Vamos a crear una ruta saliente para todo el trafico que vaya al exterior, y que para ello se conecte al Yeastar.

Añadimos el trunk “Yealink” previamente creado:

Ecophone tecnico 49.png

Ruta hacia FreePBX

Ahora toca crear la ruta que queda para interconectar FreePBX con Elastix y que sus usuarios puedan acceder al trunk y verse entre ellos. Copiar esta configuración.

Ecophone tecnico 34.png

Configuración de Yeastar TG100

Ecophone tecnico 35.png

Éste aparato nos permitirá acceder a las redes móviles desde la red interna para poder realizar llamadas al exterior. Necesita de una tarjeta SIM para conectarse a red PSTN, un cable de alimentación i conexión a la red de nuestro FreePBX.

La IP por defecto y credenciales para acceder a la configuración web son:

IP :192.168.5.150

Credenciales por defecto:

User: admin
Pw: password

Para modificar la IP es en la sección System → LAN Settings
Para modificar la password en System → System settings → Change password

Vamos a la sección System -> LAN Settings y modificamos los parámetros:

Ecophone tecnico 50.png

Configuración Trunk Yeastar TG100

Para que nuestro FreePBX se conecte a la red GSM traves de nuestra Gateway VoIP, hay que configurar un trunk de entrada de FreePBX.

En la sección Gateway → VoIP Settings → VoIP Trunk Seleccionamos Add VoIP Trunk y la siguiente ventana la configuramos de la siguiente manera:

Ecophone tecnico 36.png

Trunk Type: Service Provider
Type: SIP
Provider name: Asterisk
IP: 10.27.3.110:5060 (Nuestro FreePBX)

Creamos un Segundo trunk del tipo Service Provider, que es por el que se conectara nuestro segundo cliente, Elastix.

Ecophone tecnico 37.png

Trunk Type: Service Provider
Type: SIP
Provider name: Elastix
IP: 10.27.100.9:5060 (Nuestro Elastix)

Credenciales SIM

Después de configurar el trunk, deberemos proporcionar las credenciales básicas de nuestra tarjeta SIM, se pueden configurar varias cosas pero para que funcione solo se le tiene que especificar el numero PIN para que pueda acceder y autenticarse a la red externa.

Ecophone tecnico 39.png

Debemos ir a la sección Mobile list y pulsar el botón del lápiz de nuestra tarjeta SIM:

Ecophone tecnico 40.png

Una vez finalizado en status-->Trunk Status nos mostrará si funciona o no.

Ecophone tecnico 41.png

Configuración IP to Mobile y Mobile to IP

Ecophone tecnico 42.png

En la sección Gateway → VoIP Settings → IP to Mobile Seleccionamos y la siguiente ventana la configuramos de la siguiente manera:

Nota: Para que se muestren todas las opciones necesitamos marcar la opción Simple mode: No.

Ecophone tecnico 44.png

En la sección Gateway → VoIP Settings → Mobile to IP Seleccionamos Add Mobile to IP Route y la siguiente ventana la configuramos de la siguiente manera:

Ecophone tecnico 45.png

Configuración FXO

Descripción FXO: Foreign eXchange Office (Interfaz de central externa), es un aparato que se utiliza para conectar ordenadores a la RTC, lo que hace posible interconectar una red telefónica analógica con una red telefónica VoIP.

Utilización de nuestro dispositivo FXS to FXO, llamado SPA-3000 de Linksys.

Ecophone tecnico 52.png

Para poder acceder a su configuración primero debemos saber su dirección IP, para ello conectamos en la ranura Internet el cable de red a nuestro switch, y en la entrada phone conectamos un teléfono analógico.

Una vez encendido nuestro FXO, deberemos introducir lo siguiente en el teléfono analógico:

**** 

(Cuatro asteriscos)

Al oír la operadora de la máquina nos ofrecerá introducir una opción, marcamos lo siguiente:

110#

Y seguidamente nos irá diciendo digito por digito, la dirección IP para poder acceder.

En nuestro caso nos dio la IP 10.27.3.113, lo siguiente que nos toca hacer es entrar en la configuración.

Ecophone tecnico 46.png

Entramos en la pestaña System y seleccionamos la opción Admin login, tras loguear seleccionamos advanced. La configuración es la siguiente:

DCHP: No
Static IP: 10.27.3.118
Netmask: 255.255.0.0
Gateway: 10.27.255.254

Ecophone tecnico 47.png

Entramos en la sección PSTN Line y la configuramos de la siguiente manera:

SIP Settings

SIP Port: 5060

Proxy and registration

Proxy: 10.27.3.110 (La ip de nuestro FreePBX)

Subscriber information

User ID: Linksys (Usuario determinado en el trunk de FreePBX)
Password: 1(Secret definida en el trunk de FreePBX)

Ecophone tecnico 48.png