用 UnifyPort 建立 WhatsApp 群組加入申請審核佇列
要自動化 WhatsApp 群組加入申請,請先把責任分清楚:WhatsApp 的群組審核設定仍然決定是否需要審核;你的系統負責把申請整理成可追蹤的工作佇列。UnifyPort 提供 group.join_request webhook 作為低延遲提示,提供 GET /v1/accounts/{account_id}/groups/join-requests 取得可靠待審清單,再用 POST /v1/accounts/{account_id}/groups/join-requests/update 同意或拒絕指定申請人。
重點整理
- WhatsApp 官方說明指出,Approve new members 預設為關閉;開啟後,群組管理員需要審核想加入群組的人。
group.join_request適合作為提示,不適合作為唯一資料庫。UnifyPort 文件建議輪詢 List group join requests,把清單 API 當作可靠來源。- 審核前先保存
account_id、群組 id、申請人 id、申請來源,以及你自己的審核決策。 - 如果你已經讀過 Webhook 優先的入站整合清單,這篇就是群組審核版:先驗簽、先保存,再分派。
WhatsApp 仍然控制哪些事情
WhatsApp 群組加入審核是群組管理員功能。官方 Help Center 的 How to approve new members as a group admin 說明:當 Approve new members 開啟後,管理員需要批准想加入群組的人;這個設定預設是關閉的。
因此,你的系統不應取代 WhatsApp 的群組設定。它應該處理的是流程問題:有申請時誰要看、審核人看到哪些資訊、最後對哪些申請人 id 執行同意或拒絕。
審核佇列架構
建議用一個已簽名的 webhook endpoint 接收群組事件,然後再與待審清單同步:
- 建立 webhook endpoint,讓
subscribed_events包含group.join_request;如果你本來就收全部公開事件,也可以使用["*"]。篩選方式可參考 UnifyPort Webhook Event Filters。 - 收到
group.join_request後,以account_id和data.conversation.id建立同步工作。 - 呼叫 List group join requests 取得目前待審申請。回傳項目的
id就是稍後放進member_ids的值。 - 將申請顯示給人工審核者,或套用你的內部規則。
- 呼叫更新 API,傳入
action: "approve"或action: "reject"。
如果你做過 Telegram 群組加入申請審核佇列,這裡的操作邏輯相同:push 事件負責喚醒系統,清單 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"
再對回傳的 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();
});
上線前,請依照 webhook delivery 的要求,用 signing_secret、X-Device-Timestamp 和 X-Device-Signature 對原始 request body 做 HMAC-SHA256 驗證。
限制與取捨
這個流程不會讓沒有管理權限的帳號取得群組管理能力。它也不應把 push 事件當成唯一可信狀態,因為 group.join_request 是 best-effort 訊號。審核介面在顯示或提交前都應重新同步待審清單。UnifyPort 負責事件與動作的標準化;誰能加入群組,仍由你的團隊規則與 WhatsApp 群組權限決定。
FAQ
只靠 webhook 可以審核 WhatsApp 群組加入申請嗎?
不建議。webhook 用來喚醒 worker;真正審核前,請先呼叫 GET /v1/accounts/{account_id}/groups/join-requests,再把回傳項目的 id 傳給更新 API。
member_ids 要填哪個欄位?
填 List group join requests 回傳項目的 id。不要使用顯示名稱,也不要自行猜測電話號碼格式。
一定要 WhatsApp Business API 嗎?
本教學使用 UnifyPort 的非官方介面,連接具備群組權限的 WhatsApp 帳號。WhatsApp 官方的群組審核設定仍然決定是否會產生加入申請。
下一步應該看哪份文件?
先看 List group join requests,再接上 Approve / reject join requests。
資料來源(2026-09-02 核對)
- WhatsApp Help Center: How to approve new members as a group admin
- UnifyPort API reference: Webhook events 與 List group join requests
讓訊息接入變成一條穩定的產品管線。
先用統一 API 跑通傳送,再用標準事件把所有入站訊息接回業務系統。