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

Очередь одобрения заявок в группу WhatsApp на UnifyPort

Если вам нужно автоматизировать заявки на вступление в группу WhatsApp, не делайте webhook единственным источником состояния. Разделите ответственность: настройка группы в WhatsApp определяет, нужны ли approvals; UnifyPort отправляет group.join_request как быстрый сигнал, затем ваш backend читает надежный список через GET /v1/accounts/{account_id}/groups/join-requests и завершает решение через POST /v1/accounts/{account_id}/groups/join-requests/update.

Главное

  • В официальном Help Center WhatsApp сказано, что Approve new members выключен по умолчанию. Если настройка включена, администраторы группы должны одобрять пользователей, которые хотят присоединиться.
  • group.join_request — это сигнал для запуска обработки, а не база состояния. Документация UnifyPort прямо рекомендует опрашивать List group join requests как надежный источник.
  • Перед решением сохраните account_id, id группы, id заявителя, способ запроса и собственный audit trail модерации.
  • Если вы уже читали Webhook-First Inbound Integration Checklist, здесь тот же принцип для модерации группы: проверить подпись, сохранить событие, затем маршрутизировать.

Что остается на стороне WhatsApp

Одобрение новых участников — это функция администратора группы WhatsApp. Официальная страница How to approve new members as a group admin объясняет: когда Approve new members включен, администраторы должны одобрять пользователей, которые хотят вступить в группу; по умолчанию эта настройка выключена.

Поэтому backend не заменяет настройку WhatsApp. Его задача уже: кто увидит заявку, какие данные помогут принять решение и какие exact requester ids нужно approve или reject.

Архитектура очереди

Используйте подписанный webhook endpoint для сигналов группы, а затем сверяйтесь со списком pending-заявок.

  1. Создайте webhook endpoint и включите group.join_request в subscribed_events. Если вы собираете все публичные события, можно использовать ["*"]. Когда выбирать явный список, описано в UnifyPort Webhook Event Filters.
  2. Когда приходит group.join_request, поставьте reconciliation job по ключу account_id плюс data.conversation.id.
  3. Вызовите List group join requests для этой группы. Поле id в возвращенной записи — это значение, которое потом нужно передать в member_ids.
  4. Покажите pending-заявки модератору или примените внутренние правила.
  5. Вызовите update endpoint с action: "approve" или action: "reject".

Если вы строили очередь заявок для Telegram-группы, операционный вывод такой же: push event будит систему, но доверенное состояние приходит из list API.

Формат события и запросов

Заявка в WhatsApp может прийти как нормализованное событие:

{
  "id": "evt_gjr_5e1c8a3f9b",
  "type": "group.join_request",
  "provider": "whatsapp",
  "account_id": "acc_8c21d0",
  "occurred_at": "2026-06-08T13:10:30Z",
  "data": {
    "conversation": { "id": "120363041234567890@g.us", "type": "group" },
    "requester": { "id": "8613912345678@lid", "type": "user" },
    "request_method": "invite_link",
    "event": { "kind": "group_join_request" }
  }
}

Перед решением перечитайте список:

curl "https://api.unifyport.ai/v1/accounts/acc_8c21d0/groups/join-requests?group_id=120363041234567890%40g.us" \
  -H "X-Api-Key: $UNIFYPORT_API_KEY"

Затем отправьте approve или reject для id из ответа:

curl -X POST "https://api.unifyport.ai/v1/accounts/acc_8c21d0/groups/join-requests/update" \
  -H "X-Api-Key: $UNIFYPORT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "group_id": "120363041234567890@g.us",
    "action": "approve",
    "member_ids": ["8613912345678@lid"]
  }'

Небольшой Node.js worker

const pending = new Map();

app.post('/webhook', verifyUnifyPortSignature, async (req, res) => {
  const event = req.body;
  if (event.type !== 'group.join_request') return res.status(200).end();

  const groupId = event.data.conversation.id;
  const key = `${event.account_id}:${groupId}`;
  pending.set(key, { accountId: event.account_id, groupId });

  res.status(200).end();
});

Перед production используйте схему из webhook delivery: проверяйте HMAC-SHA256 по raw body с signing_secret, X-Device-Timestamp и X-Device-Signature.

Ограничения и компромиссы

Эта схема не дает административные права аккаунту, у которого их нет в группе. Она также не делает push-событие единственным источником истины: group.join_request описан как best-effort сигнал. Интерфейс модератора должен заново получать список pending-заявок перед показом финального состояния или отправкой решения. UnifyPort стандартизирует события и действия; правила допуска в группу остаются у вашей команды и в permissions WhatsApp.

FAQ

Можно ли одобрять заявки WhatsApp только по webhook?

Не стоит. Webhook нужен, чтобы разбудить worker. Перед решением вызовите GET /v1/accounts/{account_id}/groups/join-requests и передайте id возвращенных записей в update endpoint.

Какое поле использовать в member_ids?

Используйте id из ответа List group join requests. Не используйте отображаемое имя и не угадывайте формат телефона.

Нужен ли WhatsApp Business API?

В этом tutorial используется unofficial interface UnifyPort, подключенный к WhatsApp account с нужными групповыми правами. Официальная настройка WhatsApp все еще определяет, возникают ли заявки на вступление.

С какого документа начать?

Начните с List group join requests, затем подключите Approve / reject join requests после готовности moderation UI.

Sources checked on 2026-09-02

UnifyPort API

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

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