Invia e ricevi l'audio di una chiamata dal tuo programma, ad esempio il tuo sistema telefonico o la tua app. Avvia la chiamata:
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 nella risposta contiene un token monouso e può essere aperta entro 15 minuti. encoding è pcm_s16le (PCM a 16 bit little-endian con sample_rate di 8000, 16000 o 24000) oppure mulaw (μ-law a 8 kHz). L'audio viaggia nei due sensi come frame binari in quel formato, idealmente da 20 ms ciascuno. I frame di testo sono JSON:
| Direzione | Messaggi |
|---|---|
| Tu → EvaSay | {"type":"dtmf","digits":"12#"} tasti premuti; {"type":"end"} riaggancia; {"type":"text","text":"…"} parole digitate da chi chiama ("input":"button" per una risposta toccata); {"type":"context","text":"…","key":"cart"} ciò che segnala la tua app (l'agente non risponde); {"type":"typing"} il cliente sta scrivendo (invialo circa una volta al secondo mentre scrive; l'agente non parla per 2 s); {"type":"tool_result","id":"…","result":{…}} (o "error") la risposta di una funzione di pagina |
| EvaSay → tu | start (con callId); clear (chi chiama ha interrotto: scarta l'audio dell'agente non ancora riprodotto); transcript (role, text, final e input per le parole digitate); user_started_speaking, user_stopped_speaking, agent_started_speaking, agent_stopped_speaking; cards (cards, quick_replies); tool (id, name, arguments: esegui una delle tue funzioni di pagina); notice (code: too_fast o limit per le parole digitate); ended (con reason, poi il socket si chiude) |
L'agente saluta non appena ti connetti. Alla richiesta si possono aggiungere user_id e page_tools (le funzioni di pagina a cui risponde la tua app, vedi sotto). Le chiamate sono fatturate al minuto come tutte le altre, con gli stessi registri di chiamata, analisi e webhook.