API de voz
Last updated
La API de voz proporciona una comunicación de audio de extremo a extremo entre el usuario y el bot de texto:
La comunicación se realiza en los siguientes pasos generales:
El texto del usuario se reconoce a partir del audio del usuario mediante STT (Speech To Text technology; también ASR - Automatic Speech Recognition).
A continuación, el texto del usuario se pasa al sistema de bots (véase la plataforma de bots de chat).
El sistema de bots genera mensajes de texto en función del escenario (véase la plataforma de bots de chat).
A continuación, el audio del bot se sintetiza a partir de los mensajes de texto del bot mediante la tecnología TTS (Text To Speech).
Puede comprobar si la API de voz está disponible enviando una simple solicitud GET ahttps://{host}/api/voice/v1/user-stt-bot-tts/ping .
El streaming se basa en la conexión websocket (WS), que proporciona comunicación dúplex (se pueden enviar y recibir datos en paralelo).
La API v1 es totalmente compatible, pero puede quedar obsoleta en el futuro.
La nueva API v2 está en desarrollo activo.
Work with streaming endpoint in the following steps:
abrir conexión WS a wss://{host}/api/voice/v1/user-stt-bot-tts/stream .
enviar trama abierta a WS una vez abierta la conexión.
enviar tramas de audio a WS (habla del usuario) después de abrir la trama.
recibir tramas de audio del WS (discurso / respuestas del bot) después de abrir la trama.
cerrar la conexión WS para finalizar el flujo de comunicación.
Si la trama abierta no es válida (por ejemplo, clave de API no válida) o se produce un error interno durante la transmisión, el endpoint cierra la conexión WS.
También puede proporcionar información adicional para la conexión actual (por ejemplo, ID de usuario, información contextual, anulación de la configuración STT / TTS, véase la estructura de trama abierta más abajo).
Marco abierto simple para iniciar la comunicación utilizando la configuración predeterminada del canal del buzón de voz.
Abrir el marco con la configuración por defecto y el ID de usuario proporcionado y el contexto personalizado y desencadenar el escenario bot antes de que el usuario hable (la respuesta bot será la primera).
Marco abierto con anulación de parámetros de audio de frecuencia de muestreo STT y TTS. La configuración final utilizará los mismos proveedores que en el canal del cuadro de voz correspondiente, pero con valores de frecuencia de muestreo específicos para STT y TTS.
Marco abierto con anulación de bot de texto para activar el escenario bot antes del primer discurso del usuario.
Después de abrir el marco, puede enviar y recibir datos de audio. El número de fotogramas es ilimitado (puedes enviar y recibir audio todo el tiempo que quieras).
La trama de audio es un mensaje binario WS con datos de audio. Los datos de audio deben codificarse en formato lineal 16.
Trabaje con el punto final de streaming en los siguientes pasos:
abrir conexión WS con wss://{host}/api/voice/v2/user-stt-bot-tts/stream .
empezar a recibir tramas de respuesta de WS tras el envío de la trama abierta.
enviar trama abierta a WS una vez abierta la conexión.
enviar la trama de inicio de sesión de usuario al WS después de enviar la trama de apertura para iniciar la sesión de comunicación con un usuario específico.
enviar tramas de sesión de usuario (por ejemplo, audio) a WS después de que se envíe la trama de inicio de sesión de usuario para ese usuario.
enviar trama de fin de sesión de usuario a WS después de las tramas de sesión de usuario para finalizar la sesión de comunicación con un usuario específico.
se detiene para recibir tramas de respuesta de WS antes de que WS se cierre.
cerrar la conexión WS para finalizar todas las comunicaciones activas a la vez.
Si la trama abierta no es válida (por ejemplo, clave de API no válida) o se produce un error interno durante la transmisión, el punto final envía a WS la trama de error y puede cerrar la conexión WS si la conexión está interrumpida.
La API permite la comunicación con varios usuarios a través de una única conexión WS. Para ello, debe enviar el marco de inicio de sesión de usuario para cada usuario y proporcionar el user_id adecuado en cada marco de sesión de usuario.
Cada mensaje WS es una cadena JSON serializada. Además, cada marco tiene un campo de tipo para especificar la estructura adecuada de todo el marco.
A continuación se muestra un archivo con el esquema JSON completo para el punto final WS. WSStreamRequest - estructura del mensaje WS entrante; WSStreamResponse - estructura del mensaje WS saliente.
Los marcos pueden ser de dos tipos generales:
request frame object - el cliente envía una solicitud al servidor
response frame object - el servidor envía la respuesta al cliente
El punto final de la API acepta mensajes WS en un único objeto JSON de marco de solicitud o en una matriz JSON de objetos de marco de solicitud. El punto final de la API devuelve mensajes WS en una matriz JSON de objetos de marco de respuesta.
1 objeto marco abierto en 1 mensaje de texto WS: {”kind”: “open”, “api_key”: “...”} .
un array con 1 objeto marco abierto en 1 mensaje de texto WS: [{”kind”: “open”, “api_key”: “...”}] .
3 marcos de respuesta en 1 mensaje de texto WS: [{”kind”: “opened”}, {”kind”: “error”, “message”: “some error description”}, {”kind”: “closed”}] .
También puede proporcionar información adicional para la conexión actual (por ejemplo, anular la configuración de STT / bot de texto / TTS, véase la estructura de anulación más abajo). Esto anula la configuración sólo para la conexión actual.
Ejemplos
Sencillo marco abierto para iniciar la comunicación utilizando la configuración predeterminada del canal del buzón de voz.
Confirma que la solicitud abierta se ha procesado correctamente.
Estructura
Si se produce algún error durante la transmisión, la API intentará enviar una trama de respuesta de error..
Estructura
Cerrar marco de solicitud
Pedir al endpoint que cierre el streaming con elegancia.
Estructura
Marco de respuesta cerrado
Notifica que el flujo de comunicación está cerrado y que la conexión WS puede cerrarse.Estructura
Trama de solicitud de inicio de sesión de usuario
Antes de comenzar a enviar y recibir datos de audio del usuario, debe enviar el marco de inicio de sesión del usuario. También puede proporcionar información adicional para la conexión actual (por ejemplo, anular la configuración de STT / bot de texto / TTS, consulte la estructura de anulación a continuación). Esto anula la configuración para el usuario actual sólo dentro de la conexión actual.
Estructura
Confirma que la sesión de usuario se ha iniciado correctamente.
Estructura
Trama de solicitud de fin de sesión de usuario
Finaliza la comunicación sólo con el usuario especificado.
Estructura
Trama de respuesta de sesión de usuario finalizada
Notifica que el flujo de comunicación con un usuario específico ha finalizado.
Estructura
Trama de solicitud de audio de la sesión de usuario
Después del marco de inicio de sesión de usuario puede enviar datos de audio para ese usuario. La cantidad de fotogramas de audio es ilimitada (puedes enviar y recibir audio todo el tiempo que quieras).
Los datos de audio deben codificarse en formato de cadena lineal 16 base64.
Estructura
Marco de solicitud de texto de sesión de usuario
Una vez iniciada la sesión de usuario, puede enviar datos de texto para ese usuario. Este texto será reenviado al bot directamente, saltándose el sistema STT.
Estructura
Marco de solicitud de contexto de actualización de sesión de usuario
Después del marco de inicio de sesión del usuario puede enviar información contextual sobre el usuario. Ver contexto.
Estructura
Fotograma de respuesta de audio de la sesión de bot
El mensaje de texto de un bot se procesará con TTS y el audio resultante se enviará al cliente.
Los datos de audio deben codificarse en formato de cadena lineal 16 base64.
Estructura
Marco de respuesta de adjunto de sesión de bot
El mensaje adjunto de un bot (ver adjunto para más información).
Estructura
IMPORTANTE: los datos de audio de usuario enviados deben grabarse con la misma frecuencia de muestreo especificada en los ajustes STT y los datos de audio de bot recibidos deben reproducirse con la misma frecuencia de muestreo especificada en los ajustes TTS.
En general, el contenido de los archivos de audio WAV se almacena en formato de audio PCM lineal. Para extraerlo se puede leer el archivo WAV y soltar metadatos WAV. Este es un ejemplo de archivo WAV de voz, codificado con frecuencia de muestreo (frecuencia de cuadro) = 16000, ancho de muestreo = 2, canales = 1
Ejemplo de datos de audio lineal 16
Puedes leer datos de audio de un archivo WAV usando la lib wave de python:
También puedes escribir datos de audio en archivos WAV:
Un enfoque similar se utiliza en echo bot python ejemplo v1.
Lineal 16 formato de cadena base64
El contenido binario del audio en formato lineal 16 se codifica en cadena base64.
ejemplo de codificación / descodificación de bytes base64
El objeto de anulación proporcionado se fusiona con la configuración del canal base y, a continuación, el objeto final se valida y se utiliza dentro de la conexión o sesión de usuario.
Ejemplo
Suponga que tiene la siguiente configuración por defecto para su canal con la clave API XXX .
Puede anular la configuración de la frecuencia de muestreo para STT y TTS en el marco abierto de conexión.
O anular el nombre de voz para TTS y habilitar los subtítulos en el marco de inicio de sesión de usuario para el usuario con id abcdef .
Todas las configuraciones anteriores utilizarán proveedores STT y TTS internos. Para anular el proveedor tiene que proporcionar una configuración completa. Por ejemplo, reemplazar STT interno por google STT para la conexión actual.
Proporcionar a bot información contextual adicional sobre el usuario (por ejemplo, fecha de nacimiento, número de teléfono, etc.). El bot de texto puede utilizar esta información en el escenario.
Estructura
Example
El bot de texto puede enviar archivos adjuntos que no serán procesados por el TTS.
Proporcione un texto sencillo que no se utilizará en audio (síntesis). Por ejemplo, un código promocional.
Proporcionar una referencia a algún dato (por ejemplo, una URL a una imagen)
Ejemplo
Facilite un anexo completo con su contenido.
La siguiente configuración es un escenario de bot de texto simple (echo bot) con saludo de usuario en el inicio y respuesta echo.
Para importar la configuración debes tener una cuenta registrada en nuestra plataforma. Importa la configuración del agente, luego entrena a tu agente, crea el canal API de voice box, activa el canal y publica el proyecto. Después podrás utilizar la clave API del canal voice box creado para comunicarte con el bot a través de la API de voz. (TODO: referencias a la importación del agente, entrenamiento del agente, creación del canal voice box, activación del canal)
IMPORTANTE: para comunicarte con el bot tienes que conectarte al mismo host donde se construyó tu bot.
Una vez completada la configuración y obtenida la clave API, estarás listo para comunicarte con el bot.
Aquí ejemplos de archivos WAV con el discurso del usuario y el discurso de respuesta del bot:
El siguiente script utiliza la API v1
El siguiente script utiliza la API v2
Requisitos:
python 3.12
Antes de ejecutar el script de ejemplo debe especificar los argumentos api_key y host para la llamada a la función principal.
Tras el inicio, el script leerá el archivo fuente y enviará su audio a la API de voz. Al mismo tiempo, el script recibirá los fotogramas WS entrantes y los escribirá en el archivo de salida.
Durante la ejecución el script mostrará algo como:
Tras salir del script podrás reproducir el archivo de audio WAV dest.
El siguiente proyecto NodeJS utiliza la API v2.
Compruebe README.md para preparar el proyecto para su ejecución.
@types/node-wav@0.0.3
@types/node@22.10.2
@types/ws@8.5.13
node-wav@0.0.2
nodemon@3.1.9
ts-node@10.9.2
typescript@5.7.2
uuid@11.0.3
ws@8.18.0
Antes de ejecutar el proyecto de ejemplo debe especificar los argumentos api_key y host para la llamada a la función principal.
Tras el inicio, el script leerá el archivo fuente y enviará su audio a la API de voz. Al mismo tiempo, el script recibirá los fotogramas WS entrantes y los escribirá en el archivo de salida.
Durante la ejecución el script mostrará algo como:
Después de salir del script podrás reproducir el archivo WAV de audio dest.
Antes de empezar a enviar y recibir datos de audio, debe enviar una trama abierta con su clave API(). Open frame es un mensaje de texto WS con una cadena JSON serializada.
Una vez iniciada la conexión, debe enviar una trama abierta con su clave API().
3.10.6 (puede instalarlo con pip install aiohttp==3.10.6)