Google ASR
La actividad Google ASR (Automatic Speech Recognition) transcribe a texto lo que dice el llamante durante una llamada de voz, utilizando el servicio Speech-to-Text de Google Cloud. La actividad graba el audio del canal, lo envía a Google y deja el texto reconocido disponible en variables del flujo para usarlo en pasos posteriores (condiciones, enrutamiento, registro, etc.).
Parámetros de la actividad
Los parámetros se envían al script en este orden. Si un campo opcional se deja vacío, se usa su valor por defecto.
Parámetro | Obligatorio | Descripción | Ejemplo / valor por defecto |
|---|---|---|---|
lang | Sí | Código de idioma que se usará para el reconocimiento de voz (formato BCP-47). Determina en qué idioma se interpreta el audio. |
|
silence | Sí | Cantidad de segundos de silencio que deben detectarse para considerar finalizada la captura de audio. Con |
|
interruptKey | No | Tecla(s) que, al presionarse, interrumpen la grabación antes de detectar silencio. Acepta dígitos |
|
beep | No | Controla si se reproduce un tono (beep) antes de iniciar la grabación. Con |
|
timeout | No | Tiempo máximo absoluto de grabación, en segundos. Al cumplirse, la grabación se detiene aunque no se haya detectado silencio ni presionado una tecla de interrupción. |
|
speechContexts | No | Lista de palabras o frases sugeridas que ayudan a la API a interpretar con mayor precisión términos poco comunes, nombres propios o vocabulario especializado. Se escribe entre corchetes y separada por comas. |
|
Resultado: dónde queda la información
Al finalizar, la actividad deja dos variables de canal disponibles en el resto del flujo. Se referencian como cualquier variable (igual que una creada con un Set):
Variable | Contenido |
|---|---|
| El texto reconocido (la transcripción del audio). Si no se obtuvo reconocimiento, queda en |
| Nivel de confianza del reconocimiento, entre |
Por ejemplo, podés usar un GotoIf con una condición sobre ${confidence} para ramificar el flujo según la confianza, o guardar ${utterance} en otra variable con un Set para enrutar según lo que dijo el llamante.
Configuración requerida en el servidor
Para que la actividad funcione, el servicio de reconocimiento de Google debe estar contratado y asociado a un token / API key. Ese token debe cargarse en el script de la actividad en el servidor.
Editar el archivo /var/lib/asterisk/agi-bin/speech-recog.agi y completar la variable del token, que por defecto viene vacía (my $key = "";):
my $key = "TU_API_KEY_DE_GOOGLE";
Requisitos adicionales en el servidor:
El binario
flacdebe estar instalado (la actividad falla si no lo encuentra).El servidor debe tener salida HTTPS hacia
speech.googleapis.com.
En el mismo archivo se pueden ajustar otros valores por defecto (opcional), que se aplican cuando el parámetro no se completa en la actividad:
my $language = "en-US";— idioma por defecto.my $timeout = 2;— segundos de silencio por defecto.my $samplerate = "";— tasa de muestreo (vacío = autodetección por canal/llamada).my $pro_filter = "false";— filtro de groserías (truepara censurarlas).
Depuración y logs
Las líneas de diagnóstico del script (sentencias warn de Perl) y los errores (die) se escriben a STDERR. Asterisk captura ese STDERR del AGI y lo envía a su propio log como mensajes verbose; no se genera un archivo de log propio del script.
Dónde verlas:
Archivo:
/var/log/asterisk/full(segúnlogger.conf, también en la consola).En vivo por CLI:
asterisk -rvvv(o, en una consola ya abierta,core set verbose 5). Las líneas aparecen con el prefijo del AGI.
La mayoría de los mensajes están condicionados a la variable de depuración, que viene desactivada por defecto (my $debug = 0;). Para ver el detalle completo, editar /var/lib/asterisk/agi-bin/speech-recog.agi y poner:
my $debug = 1;
No es necesario reiniciar Asterisk: el script se ejecuta de nuevo en cada invocación AGI. Adicionalmente, en el CLI se puede activar agi set debug on para ver el intercambio de comandos AGI además de estos mensajes.
Ejemplo
Una actividad Google ASR configurada con lang=es-ES, silence=2, interruptKey=#, beep=NOBEEP, timeout=10 y speechContexts=[soporte,facturacion,ventas] genera en el dialplan la siguiente línea:
agi(speech-recog.agi,es-ES,2,#,NOBEEP,10,[soporte,facturacion,ventas])