Очередь одобрения заявок в группу 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-заявок.
- Создайте webhook endpoint и включите
group.join_requestвsubscribed_events. Если вы собираете все публичные события, можно использовать["*"]. Когда выбирать явный список, описано в UnifyPort Webhook Event Filters. - Когда приходит
group.join_request, поставьте reconciliation job по ключуaccount_idплюсdata.conversation.id. - Вызовите List group join requests для этой группы. Поле
idв возвращенной записи — это значение, которое потом нужно передать вmember_ids. - Покажите pending-заявки модератору или примените внутренние правила.
- Вызовите 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
- WhatsApp Help Center: How to approve new members as a group admin
- UnifyPort API reference: Webhook events and List group join requests
Превратите интеграцию сообщений в стабильный продуктовый pipeline.
Начните с отправки через единый API, затем возвращайте входящие сообщения в бизнес-систему стандартными событиями.