← Все статьи
Сравнение

Исправить, отозвать или скрыть сообщение: что выбрать в UnifyPort

Если подключённый аккаунт отправил ошибочное сообщение, сначала определите область изменения. Редактирование заменяет отправленный текст, отзыв запрашивает удаление сообщения у всех участников беседы, а локальное скрытие меняет только представление в вашем приложении. UnifyPort документирует редактирование текста для WhatsApp и отзыв для Telegram, WhatsApp и LINE. Обе операции относятся к сообщениям самого аккаунта. Получение события изменения или удаления не даёт права выполнять соответствующее действие.

Главное

  • Для исправления текста используйте редактирование, для отзыва собственного сообщения — отзыв, для настройки видимости — средства приложения.
  • Сохраняйте аккаунт, беседу и сообщение как единый объект выбора. После подтверждения не подставляйте «последнее сообщение».
  • Проверяйте поддержку действий отдельно от поддержки входящих событий.
  • Ответ API, наблюдение через webhook и удаление downstream-копий — разные виды подтверждения.

Редактирование, отзыв и локальное скрытие

Предположим, сотрудник поддержки отправил неверное время встречи. Исправление текста и исчезновение строки с экрана сотрудника решают разные задачи.

ЦельПодходящий механизмЧего он не доказывает
Исправить отправленный текстРедактирование сообщенияПолучатель не видел исходный текст
Отозвать сообщение этого аккаунтаОтзыв сообщенияВсе сохранённые и пересланные копии исчезли
Скрыть строку в своём интерфейсеУправление видимостью в приложенииСообщение изменилось в чате клиента
Обработать наблюдаемый отзывОбработка message.deletedОтправлен новый запрос на отзыв

Официальная справка WhatsApp предупреждает: получатель может увидеть сообщение до удаления, а медиа, сохранённые в «Фото» на iOS, могут остаться. Не называйте кнопку «стереть везде» и не считайте отзыв доказательством отсутствия утечки конфиденциального содержимого.

Локальное скрытие здесь — решение вашего приложения, не документированный endpoint UnifyPort для локального удаления отдельного сообщения. События conversation.deleted и conversation.cleared также описывают локальные изменения беседы, а не отзыв одного сообщения у всех участников.

Проверяйте матрицу действий, а не только событий

Текущая матрица действий по провайдерам содержит следующие соответствия:

ПровайдерРедактирование отправленного текстаОтзыв собственного сообщения
whatsappДаДа
telegramНетДа
lineНетДа
twitter, zalo, tiktok, whatsapp-protocolНетНет

Это поддержка на уровне адаптера, а не гарантия выполнения каждого запроса при любых условиях аккаунта или внешнего сервиса. Нереализованные сочетания возвращают 501 unsupported_by_provider.

Например, руководство по изменённым сообщениям LINE описывает получение и применение message.updated. Оно не включает возможность исходящего редактирования LINE. Не активируйте кнопку «Изменить» только потому, что обработчик понимает это событие.

Контракт отзыва UnifyPort также уже некоторых встроенных функций модерации: можно отзывать только сообщения, отправленные подключённым аккаунтом. Статус администратора группы сам по себе не позволяет использовать этот endpoint для сообщений других участников.

Зафиксируйте выбранное сообщение до исправления

Используйте сохранённое наблюдение message.received: account_id, data.conversation.id и data.message.id. Событие может описывать входящий или исходящий трафик; перед действием проверьте data.message.direction и принадлежность сообщения. Верхнеуровневый id события — не идентификатор сообщения.

Рекомендуемые проверки в приложении:

  1. Проверить права сотрудника на выбранный аккаунт сообщений и беседу.
  2. Зафиксировать целевое сообщение в окне подтверждения, показать текущий текст и область действия.
  3. Проверить поддержку провайдера и отправителя; редактирование разрешать только для текстовых сообщений.
  4. Последовательно обрабатывать исправления одного объекта, чтобы сотрудники не перезаписывали решения друг друга.
  5. Хранить журнал действия и результата отдельно от отображаемого содержимого.

Ниже приведены примеры JSON с вымышленными идентификаторами, а не реальный клиентский трафик. Отправляйте запросы с сервера с аутентификацией через X-Api-Key; не помещайте ключ в код браузера.

В POST /v1/messages/edit поле content содержит полный новый текст, а не частичную правку:

{
  "account_id": "acc_example",
  "conversation_id": "8600000000000@s.whatsapp.net",
  "message_id": "3EB0A185AAC596E2BB602C",
  "content": "Исправление: встреча назначена на 15:00."
}

Для POST /v1/messages/revoke укажите тот же объект без заменяющего текста:

{
  "account_id": "acc_example",
  "conversation_id": "8600000000000@s.whatsapp.net",
  "message_id": "3EB0A185AAC596E2BB602C"
}

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

Отделяйте результат запроса от удаления копий

Примеры успешных ответов обоих endpoint содержат data.ok: true. Сохраните фактический результат, но не трактуйте его как подтверждение удаления старого содержимого у всех получателей и во всех внешних системах.

НаблюдениеРекомендуемое действие
501 unsupported_by_providerОтключить сочетание провайдера и действия, не повторять неизменённый запрос
edit_message_failed или revoke_message_failedИзучить ошибку и контекст целевого сообщения
Тайм-аут HTTP или потерянный ответСохранить неопределённый результат, проверить ситуацию до повтора
Пришло соответствующее message.updated или message.deletedИдемпотентно применить наблюдение к нужному сообщению
Соответствующего события нетНе делать вывод об успехе или отказе только по отсутствию события

Сохраняйте request_id для расследования по руководству трассировки запросов. Это не токен идемпотентности и не гарантированный ключ связи с webhook.

При обработке событий следуйте контракту доставки: настройте signing_secret, проверяйте HMAC-SHA256 по временной метке и исходному телу запроса, контролируйте свежесть и сохраняйте данные до подтверждения. Порядок доставки не гарантирован. Собственные копии в поиске, CRM и контексте ИИ требуют отдельной очистки; этот уровень описан в руководстве удаления отозванного содержимого.

Вопросы и ответы

Можно ли заменить вложение через редактирование?

Документированная операция ограничена текстовыми сообщениями. Не используйте content как поле замены медиа.

Если скрыть строку в своём интерфейсе, она исчезнет у клиента?

Нет. Локальная видимость и отзыв на стороне провайдера — разные операции. Явно укажите область действия в интерфейсе.

Поддержка message.deleted гарантирует callback после каждого отзыва?

Нет. Матрица событий не гарантирует, что каждый аккаунт или каждое окружение внешнего сервиса выдаёт все события. Храните результат HTTP отдельно от наблюдаемого состояния.

Следующий шаг и источники

Начните со справки по отзыву и проверьте выбор сообщения и подтверждение в разрешённой тестовой беседе. UnifyPort — неофициальный интерфейс: он не заменяет правила платформ и не гарантирует удаление внешних копий.

Источники проверены 2026-10-12:

UnifyPort API

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

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