← Все статьи
Руководство

Удаление аккаунта обмена сообщениями UnifyPort: ответы 202 и 204

При удалении аккаунта обмена сообщениями UnifyPort может вернуть 204 No Content или 202 Accepted. В режиме квот 204 означает завершение удаления. В режиме кошелька 202 означает принятие запроса: очистка ресурсов у провайдера и возможный возврат средств продолжаются асинхронно. Получив 202, сохраните operation_id и запросите состояние биллинговой операции. Исчезновение аккаунта из текущего списка не доказывает завершение очистки или возврата.

Главное

  • Удаляйте аккаунт при выводе из эксплуатации, а не ради временной остановки соединения.
  • Проверяйте HTTP-статус до разбора JSON: у 204 нет тела ответа.
  • Храните идентификатор операции из 202 независимо от списка аккаунтов.
  • REVIEW означает неподтверждённый результат, а не успешный возврат средств.

Сначала определите, нужно ли удалять аккаунт

Остановка runtime прекращает работу процесса соединения, но сохраняет аккаунт. Если нужна временная остановка подключения, выбирайте именно этот уровень управления. Чтобы вернуть сохранённый аккаунт в сеть, используйте инструкцию по восстановлению runtime, а не удаление как способ перезапуска.

Если обслуживание требуется только CRM или AI-воркеру, удалять аккаунт или останавливать соединение может быть незачем. В сравнении способов обслуживания webhook показано, как продолжать проверку и надёжное сохранение событий, приостановив их дальнейшую обработку.

Здесь рассматривается ресурс аккаунта в UnifyPort. Это не инструкция по удалению самой учётной записи Telegram, WhatsApp или LINE, очистке CRM либо отмене заданий, которые воркеры уже взяли в работу.

Сопоставляйте ответ с контрактом удаления

Справочник Delete account определяет DELETE /v1/accounts/{account_id} и два успешных варианта ответа:

ОтветДокументированное значениеДействие приложения
204 No ContentУдаление в режиме квот завершеноНе разбирать JSON; сохранить диагностические заголовки
202 AcceptedУдаление в режиме кошелька принято; очистка и возможный возврат продолжаются асинхронноСохранить data.operation_id и отдельно проверять операцию
Тайм-аут или нечитаемый ответКлиент не может установить результатСохранить неопределённость и сверить состояние до следующего изменения

Это соответствует семантике DELETE в RFC 9110: принятие запроса отличается от уже выполненного удаления, не требующего тела ответа. Не объединяйте оба результата в сообщение «всё удалено, средства возвращены».

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

Сохраните результат до удаления строки из интерфейса

Рекомендуемая подготовка на стороне приложения: записать контекст выбранного рабочего пространства, account_id, провайдера, подтверждение оператора и время запроса. Это рекомендации по реализации, а не дополнительные поля API. Запретите создание новых заданий для этого аккаунта в своём планировщике и определите судьбу уже выполняющихся заданий. Такой запрет не гарантирует отмену ранее отправленного запроса на отправку сообщения.

Ниже — иллюстративная функция Node.js, выполняющая одну попытку удаления. Передайте проверенный ID аккаунта и серверный API-ключ. Здесь намеренно нет автоматических повторов и реализации надёжного хранения.

export async function deleteMessagingAccount(accountId, apiKey) {
  const response = await fetch(
    `https://api.unifyport.ai/v1/accounts/${encodeURIComponent(accountId)}`,
    { method: 'DELETE', headers: { 'X-Api-Key': apiKey } }
  );
  const requestId = response.headers.get('X-Request-Id');

  if (response.status === 204) {
    return { httpStatus: 204, requestId };
  }

  const body = await response.json();
  if (response.status === 202 && body.data?.operation_id) {
    return { httpStatus: 202, requestId, operation: body.data };
  }
  throw new Error(`Deletion needs reconciliation; HTTP ${response.status}`);
}

Названия httpStatus, requestId и operation введены приложением: это не новые поля ответа UnifyPort. Надёжно сохраните результат до удаления строки аккаунта из интерфейса. Вызывающий код должен обрабатывать сетевые ошибки, ошибки разбора и неожиданные ответы. Ни один из этих случаев нельзя незаметно превращать в «удаление завершено». Для диагностики сохраняйте сведения об ошибке без секретов.

Отслеживайте операцию, а не исчезнувший аккаунт

Для ответа 202 используйте сохранённый идентификатор в Get account billing operation: GET /v1/account-operations/{operation_id}. API-ключ должен принадлежать тому же рабочему пространству.

Документированный пример принятого удаления содержит operation_id, kind: DELETE, state: PENDING и account_id. В примере запроса операции также показаны state: REVIEW и last_error_code: cleanup_unconfirmed. REVIEW означает отсутствие подтверждения и не доказывает возврат средств. Интерфейс должен сохранять эту неопределённость, а не показывать успех.

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

Для 204 без тела диагностический идентификатор находится в заголовке X-Request-Id. Разницу между трассировкой запроса и отслеживанием бизнес-операции объясняет руководство по request ID.

Приёмочные проверки и FAQ

Перед включением кнопки удаления проверьте: 204 не запускает разбор JSON, идентификатор операции из 202 сохраняется после перезагрузки страницы, REVIEW остаётся видимым как нерешённое состояние. Тайм-аут должен оставлять запись для расследования, а не автоматически создавать новый аккаунт или многократно повторять удаление.

Остановка runtime удаляет аккаунт?

Нет. Она явно сохраняет аккаунт. В описании жизненного цикла состояния авторизации и соединения также разделены.

202 означает ошибку удаления?

Нет. Это принятие асинхронного удаления в режиме кошелька, но не подтверждение завершения всех связанных шагов.

Исчезновение из списка подтверждает возврат средств?

Нет. В режиме кошелька аккаунт исчезает уже после принятия удаления. Проверяйте биллинговую операцию; не выводите финансовый результат из списка или состояния REVIEW.

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

Реализуйте обе ветви ответа по справочнику Delete account до подключения разрушительного действия в интерфейсе. Данные приложения и правила хранения обрабатывайте отдельно: этот API не является универсальной процедурой стирания данных.

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

UnifyPort API

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

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