Envía y recibe el audio de una llamada desde tu propio programa, por ejemplo tu propia centralita o app. Inicia la llamada:
curl https://evasay.com/api/v1/voice/calls/websocket \
-X POST \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{ "agent_id": "AGENT_ID", "encoding": "pcm_s16le", "sample_rate": 16000 }'
La websocket_url de la respuesta lleva un token de un solo uso y puede abrirse en los 15 minutos siguientes. encoding es pcm_s16le (PCM de 16 bits little-endian con un sample_rate de 8000, 16000 o 24000) o mulaw (μ-law a 8 kHz). El audio va en ambos sentidos como tramas binarias en ese formato, idealmente de 20 ms cada una. Las tramas de texto son JSON:
| Dirección | Mensajes |
|---|---|
| Tú → EvaSay | {"type":"dtmf","digits":"12#"} pulsaciones de teclas; {"type":"end"} cuelga; {"type":"text","text":"…"} palabras que quien llama ha escrito ("input":"button" para una respuesta tocada); {"type":"context","text":"…","key":"cart"} lo que informa tu app (el agente no responde a ello); {"type":"typing"} el cliente está escribiendo (envíalo más o menos una vez por segundo mientras escribe; el agente no habla durante 2 s); {"type":"tool_result","id":"…","result":{…}} (o "error") la respuesta de una función de página |
| EvaSay → tú | start (con callId); clear (quien llama interrumpió: descarta el audio del agente aún no reproducido); transcript (role, text, final, e input para palabras escritas); user_started_speaking, user_stopped_speaking, agent_started_speaking, agent_stopped_speaking; cards (cards, quick_replies); tool (id, name, arguments: ejecuta una de tus funciones de página); notice (code: too_fast o limit para palabras escritas); ended (con reason, y después se cierra el socket) |
El agente saluda en cuanto te conectas. A la solicitud se pueden añadir user_id y page_tools (las funciones de página a las que responde tu app, véase más abajo). Las llamadas se facturan por minuto como cualquier otra, con los mismos registros de llamada, análisis y webhooks.