← Все статьи
Гайд

Аудиосообщения или звонки WhatsApp: что выбрать для поддержки

Выбирайте аудиосообщение WhatsApp, если клиент может прослушать его и ответить позже. Голосовой звонок подходит, когда оба участника свободны и вопрос требует немедленного уточнения. Запись в сообщении и разговор в реальном времени передают речь, но приложению поддержки нужны разные запросы, идентификаторы и критерии завершения.

В статье сравниваются аудиосообщения UnifyPort и исходящие звонки один на один, которые человек запускает через неофициальный интерфейс в закрытом бета-тестировании. Это не руководство по Meta WhatsApp Business Calling API. Полную настройку смотрите в инструкции по интеграции звонков.

1. Учитывайте доступность клиента

СитуацияРекомендуемый способПричина
Клиент и оператор в разных часовых поясахАудиосообщениеКаждый отвечает в удобное время
Короткое объяснение без немедленных вопросовАудиосообщение с текстовым резюмеМожно вернуться к объяснению и важным деталям
Нужно быстро согласовать несколько деталейЗвонок после согласования времениУчастники вместе устраняют неоднозначность
Клиент не может слушать без посторонних или предпочитает текстТекстГолос подходит не всегда

Например, порядок получения заказа можно объяснить аудио, а адрес и время написать текстом. Спорную деталь можно обсудить звонком с согласия клиента, когда он свободен. Это рекомендация по процессу, а не автоматическая маршрутизация и не обещание повысить долю ответов.

2. Используйте разные структуры запросов

В обоих случаях храните API-ключ на сервере, выбирайте нужный авторизованный аккаунт WhatsApp с runtime_status, равным running, и используйте полученный для этого аккаунта conversation_id личного диалога. Не подставляйте строку с номером телефона вместо идентификатора диалога.

Для аудиосообщения отправьте это тело в POST /v1/messages:

{
  "account_id": "acc_example",
  "to": { "id": "<conversation_id>", "type": "user" },
  "message": {
    "type": "audio",
    "url": "https://cdn.example.com/support/explanation.ogg"
  }
}

Замените пример URL доступным аудиоресурсом. Контракт медиасообщений требует хотя бы один непустой источник: message.url, message.file_url или message.file_key. URL должен быть абсолютным адресом HTTP(S). Пример отправляет готовый файл, а не записывает микрофон через API. Расширение не доказывает пригодность кодировки, а запрос не гарантирует конкретный вид нативного голосового сообщения или расшифровку.

Для голосового звонка отправьте другое тело в POST /v1/calls:

{
  "account_id": "acc_example",
  "to": { "id": "<conversation_id>", "type": "user" },
  "media_type": "voice"
}

Контракт создания звонка требует допуска рабочего пространства к бета-тестированию, который включает поддержка. is_beta доступен только для чтения. Успешный ответ 201 со state: preparing означает готовность закрытой одноразовой ссылки join_url. Оператор должен открыть её и нажать Start call до expires_at; открытие страницы само по себе не начинает набор. Подготовка по умолчанию действует две минуты с момента создания, срок регулируется сервером и не ограничивает длительность соединённого звонка. Микрофон обязателен, камера — нет.

3. Разделяйте подтверждения результата

НаблюдениеЧто сохранитьЧто ещё не доказано
Ответ сообщения содержит status: acceptedПолученный message_id и аккаунтДоставка, прослушивание и решение вопроса
Пришло соответствующее событие доставки или прочтенияОбласть действия квитанции и идентификаторы сообщенийКлиент прослушал аудио
Создание звонка вернуло подготовленную ссылкуПолученный call_id и задачу поддержкиНабор или соединение
Пришёл call.answeredПодтверждение соединения для data.call.idВопрос решён
Пришёл call.endedПричину завершения и duration_secondsНоль секунд доказывает отсутствие соединения

Следуйте документированной области действия квитанций доставки и прочтения, а не отмечайте завершёнными все сообщения диалога. Прочтение не является квитанцией прослушивания. Длительность соединения округляется вниз до целых секунд, поэтому храните событие ответа даже при нулевой длительности.

Настройте нужные подписки и следуйте правилам доставки и проверки подписи Webhook: проверяйте исходное тело, устраняйте дубли, учитывайте задержки и нарушение порядка. Допуск к бета-тестированию и подписка на события звонков — разные условия. Аудиовложение в сообщении не является событием звонка или записью, автоматически созданной API звонков.

4. Сделайте действие оператора явным

В приложении разделите действия Отправить аудио и Начать голосовой звонок. Перед отправкой покажите выбранный файл и клиента. Запись микрофона, хранение файлов и расшифровку, если вы их создаёте, считайте отдельными функциями приложения и проверяйте результат до передачи ресурса в API.

У действия звонка покажите клиента, назначенного оператора и доступность функции. Передавайте ссылку только текущему оператору и не пишите её полностью в журналы. Храните сообщения и звонки отдельно, связывая их с одной задачей поддержки. Окончание звонка не должно автоматически закрывать заявку.

5. Смена способа требует нового решения

Если на аудиосообщение нет ответа, не делайте вывод, что его не слышали, и не звоните автоматически. Спросите, удобен ли звонок. Если звонок не решил вопрос, оператор может осознанно отправить текстовое резюме или аудио для продолжения работы. Это новое сообщение, а не продолжение результата звонка.

При тайм-ауте сохраняйте неизвестный результат вместо немедленного повтора записи. Если результат звонка неясен, используйте руководство по диагностике звонков и запросите текущий управляемый звонок. Пустой ответ не восстанавливает прошлые результаты. Не завершайте незнакомый звонок ради освобождения аккаунта.

6. Начните с одной конкретной задачи поддержки

Выберите подходящий тестовый диалог, согласуйте с клиентом способ общения и проверьте аккаунт, адресата, запрос, сохранённые идентификаторы и последующие события. Проверьте дубли и итоговое обновление заявки оператором. Это предлагаемые шаги приёмки, а не отчёт о реальном тестовом звонке для этой статьи.

Текущая функция звонков не включает входящие и групповые звонки, запись, расшифровку, SIP/PBX и автономные звонки с ИИ. Для обсуждения допуска и конкретного сценария обратитесь в техническую поддержку, не передавая API-ключи и закрытые ссылки на звонок.

UnifyPort API

Превратите интеграцию сообщений в стабильный продуктовый pipeline.

Начните с отправки через единый API, затем возвращайте входящие сообщения в бизнес-систему стандартными событиями.