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
festival
sip show peers
sip show registry
Log de asterisk tail -f /var/log/asterisk/
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();
?>