Google ASR

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

Parámetro

Obligatorio

Descripción

Ejemplo / valor por defecto

lang

Código de idioma que se usará para el reconocimiento de voz (formato BCP-47). Determina en qué idioma se interpreta el audio.

es-ES, en-US, pt-BR · por defecto en-US

silence

Cantidad de segundos de silencio que deben detectarse para considerar finalizada la captura de audio. Con 2, si hay 2 segundos consecutivos sin voz se detiene la grabación y se procesa el audio. Usar -1 para no cortar por silencio.

2 · por defecto 2

interruptKey

No

Tecla(s) que, al presionarse, interrumpen la grabación antes de detectar silencio. Acepta dígitos 0-9 y los símbolos # o *. El valor any hace que cualquier tecla interrumpa.

# · por defecto #

beep

No

Controla si se reproduce un tono (beep) antes de iniciar la grabación. Con NOBEEP no suena; si se deja vacío, suena un beep al comenzar.

NOBEEP

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. -1 = sin límite.

10 · por defecto -1

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.

[Agamemnon,Midas]

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

Variable

Contenido

${utterance}

El texto reconocido (la transcripción del audio). Si no se obtuvo reconocimiento, queda en -1.

${confidence}

Nivel de confianza del reconocimiento, entre 0 y 1. Valores superiores a 0.95 suelen indicar que el texto es correcto. Si no hubo resultado, queda en -1.

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 flac debe 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 (true para 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ún logger.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])