Envie e receba o áudio de uma chamada a partir do seu próprio programa, por exemplo seu próprio sistema telefônico ou app. Inicie a chamada:
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 }'
A websocket_url da resposta traz um token de uso único e pode ser aberta em até 15 minutos. encoding é pcm_s16le (PCM de 16 bits little-endian com sample_rate de 8000, 16000 ou 24000) ou mulaw (μ-law a 8 kHz). O áudio vai nos dois sentidos como quadros binários nesse formato, idealmente de 20 ms cada. Os quadros de texto são JSON:
| Direção | Mensagens |
|---|---|
| Você → EvaSay | {"type":"dtmf","digits":"12#"} teclas pressionadas; {"type":"end"} desliga; {"type":"text","text":"…"} palavras digitadas por quem liga ("input":"button" para uma resposta tocada); {"type":"context","text":"…","key":"cart"} o que seu app informa (o agente não responde a isso); {"type":"typing"} o cliente está digitando (envie cerca de uma vez por segundo enquanto ele digita; o agente não fala por 2 s); {"type":"tool_result","id":"…","result":{…}} (ou "error") a resposta de uma função de página |
| EvaSay → você | start (com callId); clear (quem liga interrompeu: descarte o áudio do agente ainda não reproduzido); transcript (role, text, final e input para palavras digitadas); user_started_speaking, user_stopped_speaking, agent_started_speaking, agent_stopped_speaking; cards (cards, quick_replies); tool (id, name, arguments: execute uma das suas funções de página); notice (code: too_fast ou limit para palavras digitadas); ended (com reason, e então o socket se fecha) |
O agente cumprimenta assim que você se conecta. user_id e page_tools (as funções de página às quais seu app responde, veja abaixo) podem ser adicionados à requisição. As chamadas são cobradas por minuto como qualquer outra, com os mesmos registros de chamada, análise e webhooks.