Надсилайте й приймайте аудіо дзвінка зі своєї програми, наприклад власної телефонної системи чи застосунку. Розпочніть дзвінок:
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 (функції сторінки, на які відповідає ваш застосунок, див. нижче). Дзвінки тарифікуються поминутно, як і будь-які інші, з тими самими записами дзвінків, аналізом і вебхуками.