← 所有文章
教學

用 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 接收群組事件,然後再與待審清單同步:

  1. 建立 webhook endpoint,讓 subscribed_events 包含 group.join_request;如果你本來就收全部公開事件,也可以使用 ["*"]。篩選方式可參考 UnifyPort Webhook Event Filters
  2. 收到 group.join_request 後,以 account_iddata.conversation.id 建立同步工作。
  3. 呼叫 List group join requests 取得目前待審申請。回傳項目的 id 就是稍後放進 member_ids 的值。
  4. 將申請顯示給人工審核者,或套用你的內部規則。
  5. 呼叫更新 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_secretX-Device-TimestampX-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 核對)

UnifyPort API

讓訊息接入變成一條穩定的產品管線。

先用統一 API 跑通傳送,再用標準事件把所有入站訊息接回業務系統。