El equipo de desarrollo de Asterisk acaba de anunciar que ya está listo el AEAP (Asterisk External Application Protocol), un protocolo que llevaba más de un año siendo desarrollado y que por fin ha visto la luz a partir de las versiones de Asterisk 18.12.0 y Asterisk 19.4.0 y que nos permitirá conectar con aplicaciones externas para enviarles audio y datos y obtener resultados sobre estos.
Un ejemplo básico que están utilizando como demostración para entender cómo funciona el AEAP es un módulo para convertir VOZ a TEXTO (speech-to-text) y que utiliza la API de Google para hacer la conversión, pero que podríamos utilizar otros motores y crear nuestro propio conector gracias a este protocolo.
El protocolo AEAP nos permite crear un «subsistema» para dar de alta aplicaciones nativas de Asterisk que recibirán datos de entrada y generarán datos de respuesta. Para hacer estos «subsistemas» hay que conocer cómo funciona la arquitectura de Asterisk y utilizar los módulos res_aeap.h y res_aeap_message.h desde donde generaremos un nuevo «motor» al que podremos enviar los datos y que devolverá el resultado que éste nos devuelva.
Como ejemplo de uso, han creado un «subsistema para hacer el reconocimiento de voz a texto» y lo han incorporado a Asterisk en el módulo res_speech_aeap.c lo que generará un nuevo motor de reconocimiento que podremos utilizar con los comandos estándar de Asterisk SpeechCreate, SpeechStart y SpeechDestroy para enviarle el audio y que el motor nos devuelva el resultado:
exten => 550,1,NoOp()
same => n,Answer()
same => n,SpeechCreate(my-speech-to-text)
same => n,SpeechStart()
same => n,SpeechBackground(hello-world)
same => n,Verbose(0,${SPEECH_TEXT(0)})
same => n,SpeechDestroy()
same => n,Hangup()
Ese «my-speech-to-text» es un motor «custom» que hemos creado gracias a un servidor websocket que recibe el audio y lo envía a la API de reconocimiento de Google para que nos devuelva en la variable ${SPEECH_TEXT} el resultado del reconocimiento, pero que con algo de maña, se puede adaptar para que, en lugar de Google, utilicemos otros sistemas diferentes, e incluso que el resultado, en lugar de devolvernos el texto, nos devuelva otra información (identificación de la persona que habla, estado de humor, edad aproximada de la persona, etc. por poner un ejemplo)
Ese «my-speech-to-text» se configura en el archivo de configuración ‘aeap.conf‘ que tendría algo como esto:
[my-speech-to-text]
type=client
codecs=!all,ulaw
url=ws://127.0.0.1:9099
protocol=speech_to_text
y en el puerto 9099, tendríamos un servidor websocket que sería quien recibiría el audio y generaría las variables de resultado.
En esta URL podéis encontrar el servidor websocket que usan como ejemplo:
https://github.com/asterisk/aeap-speech-to-text
Este sistema no es algo orientado al usuario final de Asterisk, quizá requiere de conocimientos algo más avanzados, pero los resultados son verdaderamente interesantes y prometedores.
Mas información:
– Introducción al AEAP (protocolo)
– Introducción al uso del AEAP orientado a Reconocimiento de voz
– Interfaz API de Asterisk para el reconocimiento de voz
– Ejemplo de servidor y configuración básica para el reconocimiento de voz