用 UnifyPort 建立 WhatsApp 群組入群申請審批隊列
要自動化 WhatsApp 群組入群申請,重點不是把 webhook 當成唯一記錄,而是建立一個可核對的審批隊列。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 接收群組事件,再用列表 API 做同步:
- 建立 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 驗證。
限制與取捨
這個流程不會讓沒有管理權限的帳號取得群組管理能力。它也不應把推送事件當成唯一可信狀態,因為 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 跑通發送,再用標準事件將所有入站訊息接返去業務系統。