Verstuur en ontvang de audio van een gesprek vanuit je eigen programma, bijvoorbeeld je eigen telefoonsysteem of app. Start het gesprek:
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 }'
De websocket_url in het antwoord bevat een eenmalig token en kan binnen 15 minuten worden geopend. encoding is pcm_s16le (16-bits little-endian PCM met een sample_rate van 8000, 16000 of 24000) of mulaw (8 kHz μ-law). Audio gaat in beide richtingen als binaire frames in dat formaat, bij voorkeur van 20 ms. Tekstframes zijn JSON:
| Richting | Berichten |
|---|---|
| Jij → EvaSay | {"type":"dtmf","digits":"12#"} toetsaanslagen; {"type":"end"} hangt op; {"type":"text","text":"…"} woorden die de beller typte ("input":"button" voor een aangetipt antwoord); {"type":"context","text":"…","key":"cart"} wat je app meldt (de agent antwoordt er niet op); {"type":"typing"} de klant is aan het typen (stuur dit ongeveer elke seconde zolang er getypt wordt; de agent zegt 2 s niets); {"type":"tool_result","id":"…","result":{…}} (of "error") het antwoord van een paginafunctie |
| EvaSay → jij | start (met callId); clear (de beller onderbrak: gooi nog niet afgespeelde audio van de agent weg); transcript (role, text, final, en input voor getypte woorden); user_started_speaking, user_stopped_speaking, agent_started_speaking, agent_stopped_speaking; cards (cards, quick_replies); tool (id, name, arguments: voer een van je paginafuncties uit); notice (code: too_fast of limit voor getypte woorden); ended (met reason, daarna sluit de socket) |
De agent begroet zodra je verbinding maakt. user_id en page_tools (de paginafuncties waarop je app antwoordt, zie hieronder) kunnen aan het verzoek worden toegevoegd. Gesprekken worden per minuut gefactureerd zoals elk ander, met dezelfde gespreksgegevens, analyse en webhooks.