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();
?>
Hola , amigo buen dato el que publicaste pero en la parte del demoagi.php me parece que debes iniciar cada funcion con mayuscula , saca error de formato , ejemplo Exec, Answer, Hangup , y tambien me ocurre que solo dice una palabra digamos en ese ejemplo solo dice mensaje ... pero no dice mensaje de prueba solo dice una sola frase
ResponderEliminarComo puedo realizar llamadas, habilitando ARI
ResponderEliminar$agi->exec('festival', "apellido\ persona\ nombre\ general");
ResponderEliminar