Отправьте POST /api/v1/voice/calls/{id}/control, пока звонок идёт. Воркер, ведущий звонок, подхватывает команду примерно за 2 секунды; API отвечает 202. Если воркер, ведущий звонок, недоступен, API отвечает 503 (code call_unreachable), и команда не выполняется.
type | Что происходит |
|---|---|
say | Агент произносит text после текущей фразы или сразу, если указано "interrupt": true |
note | Агенту сообщается text (не произносится), и он учитывает это со следующего ответа; в расшифровке это отмечается |
end | Агент произносит text, если он задан, и вешает трубку; телефонный звонок без text завершается сразу |
ended_reason звонка тогда равен api_ended. На странице звонка в панели есть те же элементы управления.
POST /api/v1/voice/calls/{id}/listen (при желании { "channels": 2 }) возвращает listen_url, которую можно открыть в течение двух минут. Это WebSocket: сначала JSON-сообщение {"type":"start","sampleRate":8000,"channels":1,"encoding":"pcm_s16le"}, затем бинарные кадры 16-битного little-endian PCM с тем, что слышит звонящий (оба голоса смешаны; при channels: 2 звонящий слева, агент справа). Он закрывается, когда звонок завершается. Звук идёт прямо от воркера, ведущего звонок, минуя плоскость управления EvaSay; кнопка «Слушать» на странице звонка в панели использует тот же адрес.