Streaming y eventos
El envío de un mensaje devuelve la respuesta como text/event-stream, en lugar de esperar a que el turno completo termine de generarse. Esto permite que la interfaz reaccione mientras la operación está en curso.
Tipos de evento
El ciclo de vida de una llamada a herramienta
Las herramientas se ejecutan del lado de Kivox: su aplicación nunca recibe una llamada que deba ejecutar por su cuenta, solo observa su progreso y su resultado a través del stream.
Un turno puede incluir varias llamadas a herramientas, secuenciales o superpuestas. No asuma que solo habrá una.
Consumir el stream
turn_complete es la señal explícita de que el turno finalizó. Prefiera este evento sobre inferir el final a partir del cierre del stream: el cierre de la conexión también ocurre ante un error o una cancelación, y turn_complete es la única forma de distinguir un final exitoso de esos otros casos.
Estados de una respuesta
Cancelar un stream
Una conversación activa puede cancelarse cuando la aplicación ya no necesita continuar el turno, por ejemplo si el usuario interrumpe una respuesta mientras el agente está respondiendo o navega fuera de la conversación.
La respuesta exitosa es 204 No Content. La cancelación debería tratarse como un estado normal del ciclo de una conversación, no como un caso excepcional.
Si su aplicación construyó la solicitud con un AbortController, abortar esa señal cierra la conexión localmente de inmediato. Llamar además al endpoint de cancelación es lo que le indica a Kivox que detenga el procesamiento del turno en el servidor.
Idempotencia y reintentos
El encabezado Idempotency-Key en el envío de mensajes representa una operación concreta desde la perspectiva del cliente, útil cuando existe la posibilidad de que una solicitud se repita por una pérdida temporal de conexión. Cada operación independiente debe usar una clave distinta.
No todas las solicitudes fallidas deben reintentarse automáticamente. Si una operación ya ejecutó una acción externa antes de que la aplicación perdiera la conexión, repetirla sin una estrategia adecuada puede tener efectos no deseados. El comportamiento general de reintento por código de error está en Manejo de errores.