GET /api/v1/voice/calls/{id} возвращает статус звонка, длительность, списанные кредиты, краткое содержание, анализ и расшифровку. Список звонков — GET /api/v1/voice/calls?agent_id=&status=&channel=&user_id=&page= (user_id: ваш собственный идентификатор человека из токена веб-звонка). Его turns — пошаговый отладочный журнал звонка: куда ушло время от конца реплики звонящего до момента, когда он услышал ответ, в миллисекундах — waitMs (конец речи), sttMs (распознавание), llmMs (первое слово модели, плюс по одному на каждый раунд функций), ttsMs (первый звук голоса), firstAudioMs (ответ услышан) — с вызванными функциями, перебиваниями и ошибками. Его показывает и страница звонка.
С recording_enabled каждый звонок записывается как двухканальный WAV: звонящий слева, агент справа, с частотой дискретизации звонка. При recording_consent: "announce" агент сначала сообщает, что звонок записывается; при "ask" — спрашивает, и запись сохраняется, только если звонящий согласен (отсутствие ответа считается отказом); при "none" ничего не говорится. Уточните, что требует закон там, где находитесь вы и ваши абоненты.
Записи хранятся в хранилище EvaSay или в вашем собственном бакете, совместимом с S3 (AWS S3, Cloudflare R2, Google Cloud Storage, Supabase, MinIO), который задаётся в Интеграции → Вебхуки и уведомления → Хранилище записей. Воркер, ведущий звонок, загружает файл прямо в бакет. GET /api/v1/voice/calls/{id} возвращает recordingUrl, действительный один час после сохранения записи, и recording.status (recording, stored, declined или failed).
DELETE /api/v1/voice/calls/{id} удаляет завершённый звонок вместе с расшифровкой, записью (в хранилище EvaSay или в вашем бакете), анализом и отправками вебхуков. Потраченные Credits остаются в истории кредитов. Звонок, который пока нельзя удалить, отвечает 409 с code call_not_deletable_yet: он ещё идёт или только что завершился, ещё оплачивается, запись, возможно, ещё загружается, или по нему есть долг в Credits, который не покрыл баланс (сначала пополните Credits).
Когда человек просит удалить его данные, POST /api/v1/voice/calls/delete-by-caller с { "phone_number": "+14155550123" } удаляет все звонки с этим номером (у входящих — номер звонившего, у исходящих — набранный номер), а с { "user_id": "..." } — все веб-звонки с этим user_id в токене. Ответ: { "deleted": 12, "kept_back": { "settling": 1 }, "more": false }. За один запрос удаляется не более 200 звонков, поэтому повторяйте, пока more равно true, а звонки из kept_back удалите позже. Если номер есть в списке «Не звонить», он там останется. В панели то же самое делает Звонки → Удалить данные звонившего.