Wysyłaj i odbieraj dźwięk połączenia z własnego programu, na przykład własnej centrali telefonicznej lub aplikacji. Rozpocznij połączenie:
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 }'
websocket_url w odpowiedzi zawiera jednorazowy token i można ją otworzyć w ciągu 15 minut. encoding to pcm_s16le (16-bitowy PCM little-endian z sample_rate 8000, 16000 lub 24000) albo mulaw (μ-law 8 kHz). Dźwięk płynie w obie strony jako ramki binarne w tym formacie, najlepiej po 20 ms. Ramki tekstowe to JSON:
| Kierunek | Wiadomości |
|---|---|
| Ty → EvaSay | {"type":"dtmf","digits":"12#"} naciśnięte klawisze; {"type":"end"} rozłącza; {"type":"text","text":"…"} słowa wpisane przez rozmówcę ("input":"button" dla odpowiedzi wybranej dotknięciem); {"type":"context","text":"…","key":"cart"} to, co zgłasza Twoja aplikacja (agent na to nie odpowiada); {"type":"typing"} klient pisze (wysyłaj mniej więcej raz na sekundę podczas pisania; agent nie odzywa się przez 2 s); {"type":"tool_result","id":"…","result":{…}} (lub "error") odpowiedź funkcji strony |
| EvaSay → Ty | start (z callId); clear (rozmówca przerwał: odrzuć jeszcze nieodtworzony dźwięk agenta); transcript (role, text, final oraz input dla wpisanych słów); user_started_speaking, user_stopped_speaking, agent_started_speaking, agent_stopped_speaking; cards (cards, quick_replies); tool (id, name, arguments: uruchom jedną z Twoich funkcji strony); notice (code: too_fast lub limit dla wpisanych słów); ended (z reason, potem gniazdo się zamyka) |
Agent wita się, gdy tylko się połączysz. Do żądania można dodać user_id i page_tools (funkcje strony, na które odpowiada Twoja aplikacja, patrz niżej). Połączenia są rozliczane za minutę jak każde inne, z tymi samymi zapisami połączeń, analizą i webhookami.