Отправляйте и принимайте аудио звонка из собственной программы, например своей телефонной системы или приложения. Начните звонок:
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 в ответе содержит одноразовый токен и может быть открыт в течение 15 минут. encoding — это pcm_s16le (16-битный little-endian PCM с sample_rate 8000, 16000 или 24000) или mulaw (μ-law, 8 кГц). Аудио идёт в обе стороны бинарными кадрами в этом формате, в идеале по 20 мс. Текстовые кадры — JSON:
| Направление | Сообщения |
|---|---|
| Вы → EvaSay | {"type":"dtmf","digits":"12#"} нажатия клавиш; {"type":"end"} — повесить трубку; {"type":"text","text":"…"} слова, набранные звонящим ("input":"button" для выбранного ответа); {"type":"context","text":"…","key":"cart"} то, о чём сообщает ваше приложение (агент на это не отвечает); {"type":"typing"} клиент печатает (отправляйте примерно раз в секунду, пока он печатает; агент молчит 2 с); {"type":"tool_result","id":"…","result":{…}} (или "error") ответ функции страницы |
| EvaSay → вы | start (с callId); clear (звонящий перебил: отбросьте ещё не воспроизведённое аудио агента); transcript (role, text, final и input для набранных слов); user_started_speaking, user_stopped_speaking, agent_started_speaking, agent_stopped_speaking; cards (cards, quick_replies); tool (id, name, arguments: выполните одну из ваших функций страницы); notice (code: too_fast или limit для набранных слов); ended (с reason, затем сокет закрывается) |
Агент здоровается, как только вы подключились. В запрос можно добавить user_id и page_tools (функции страницы, на которые отвечает ваше приложение, см. ниже). Звонки тарифицируются поминутно, как и любые другие, с теми же записями звонков, анализом и вебхуками.