martes, 30 de enero de 2018

Usar Festival en Issabel para realizar llamadas por medio de web service


El siguiente es la documentación de un proyecto que hice para la empresa donde trabajo, lo que requería era que mediante un webservice, Issabel recibiera dos parámetros: número de teléfono y mensaje, el mensaje se debía recitar al número enviado en español, para ello debía usar un TTS, aprovechando que Issabel trae el motor de Festival usé este.



Paso 1:  Habilitar desde el GUI el Festival desde herramientas - Festival

Paso 2: Instalar el lenguaje Español para Festival:


yum install hispavoces-sfl-diphone

Luego, modificar este archivo:


/usr/share/festival/lib/voices.scm



/usr/share/festival/lib/voices/es/.....


En el, buscar:


(defvar default-voice-priority-list
'(nitech_us_slt_arctic_hts
nitech_us_awb_arctic_hts
........
)

Para que quede asi:
(defvar default-voice-priority-list
'(JuntaDeAndalucia_es_sf_diphone
nitech_us_slt_arctic_hts
nitech_us_awb_arctic_hts
.......



recargamos asterisk y festival:

asterisk -rx reload

service festival restart

sip show peers

sip show registry

Log de asterisk tail -f /var/log/asterisk/full

Ubicación de grabaciones
\var\spool\asterisk\monitor



ingresar a consola debug
asterisk -r
core set verbose 10

Personalizar audio de buzón
en /var/spool/asterisk/voicemail/default
dentro de la carpeta de cada extensión se debe crear audio .wav así:
busy.wav
unavail.wav

Después de esto al probar va a sonar el audio personalizado pero también el audio de asterisk, por eso se debe ingresar a : 

/var/lib/asterisk/sounds/en/  y renombrar el vm-intro.gsm por otro nombre y crear un archivo vacío con el nombre de vm-intro.gsm, de esto modo sólo sonará el audio personalizado.

festival

(voice.list)


para probar, podemos poner esto en extensions_custom.conf y realizar una llamadas desde una extensión válida a la extensión 645.


exten => 645,1,Answer()
exten => 645,n,Festival(esta es una prueba de festival en español)
exten => 645,n,Hangup()

Es posible que la velocidad de la voz sea muy rápida, para disminuir o aumentar la velocidad podemos editar el archivo  JuntaDeAndalucia_es_sf_duration.scm en la ubicación:


/usr/share/festival/lib/voices/es/JuntaDeAndalucia_es_sf_diphone/festvox

y buscamo en donde dice:


;;Speed up the voice with Duration_Stretch. An 0.8 value is recommended. The lowest the value, the shortest the predicted duration.
(Parameter.set 'Duration_Stretch 0.9)

una velocidad buena es 1.1


Festival quedó listo!

Lo siguiente es lograr levantar una llamada automáticamente desde Asterisk y que dicte un texto de prueba, la forma en que lo hice fue por medio de la cola de llamadas de asterisk, creando un archivo .call en /var/spool/asterisk/

El siguiente archivo llamará a la extensión 201 con la información que se encuentre en la configuración del extension en 645

Channel: SIP/201

MaxRetries: 2
Callerid: "Prova" <201>
RetryTime: 2000
WaitTime: 30
Archive: yes
Context: from-internal
Extension: 645
Priority: 1
Account: 10012

se guarda el archivo prueba.call y se debe copiar en la carpeta /var/spool/asterisk/outgoing/ de esta manera asterisk ejecuta la acción.



En archivo Extensions_Custom.conf se define el contexto de la siguiente manera


[custom-agiphp]
exten=>646,1,Answer
exten=>646,2,AGI(demoagi.php)
exten=>646,5,Hangup



El archivo demoagi.php debe ubicarse en /var/lib/asterisk/agi-bin/




#!/usr/bin/php -q

<?php

require("/var/lib/asterisk/agi-bin/phpagi.php");

error_reporting(E_ALL);

$agi = new AGI();
$agi->answer();
$agi->exec(Festival,'"Mensaje de prueba"') ;

$agi->hangup();
?>