← บทความทั้งหมด
บทช่วยสอน

สร้างคิวอนุมัติคำขอเข้ากลุ่ม WhatsApp ด้วย UnifyPort

ถ้าต้องการทำระบบอนุมัติคำขอเข้ากลุ่ม WhatsApp แบบอัตโนมัติ อย่าใช้ webhook เป็นแหล่งข้อมูลเดียว สิ่งที่ควรทำคือให้การตั้งค่ากลุ่มของ WhatsApp เป็นตัวกำหนดว่าสมาชิกใหม่ต้องรออนุมัติหรือไม่ ส่วน UnifyPort ใช้ group.join_request เป็นสัญญาณแบบเร็ว ใช้ GET /v1/accounts/{account_id}/groups/join-requests เพื่ออ่านรายการรออนุมัติที่เชื่อถือได้ และใช้ POST /v1/accounts/{account_id}/groups/join-requests/update เพื่ออนุมัติหรือปฏิเสธผู้ขอเข้ากลุ่ม

สรุปสำคัญ

  • ศูนย์ช่วยเหลือทางการของ WhatsApp ระบุว่า Approve new members ปิดอยู่โดยค่าเริ่มต้น ถ้าเปิดไว้ ผู้ดูแลกลุ่มต้องอนุมัติคนที่ต้องการเข้ากลุ่ม
  • group.join_request เหมาะสำหรับปลุก worker แต่ไม่ควรเป็นฐานข้อมูลหลัก เอกสาร UnifyPort แนะนำให้ poll List group join requests เป็นแหล่งสถานะที่เชื่อถือได้
  • ก่อนตัดสินใจ ควรบันทึก account_id, group id, requester id, วิธีที่ผู้ใช้ขอเข้ากลุ่ม และการตัดสินใจของทีม
  • ในไทย หลายทีมใช้ LINE เป็นช่องทางหลัก แต่ยังมี WhatsApp สำหรับลูกค้าต่างประเทศหรือคู่ค้า แนวคิด webhook-first ใน Webhook-First Inbound Integration Checklist ใช้ได้กับ flow นี้เช่นกัน

WhatsApp ยังควบคุมอะไรอยู่

การอนุมัติสมาชิกใหม่เป็นฟีเจอร์ของผู้ดูแลกลุ่ม WhatsApp หน้า Help Center ทางการ How to approve new members as a group admin ระบุว่าเมื่อเปิด Approve new members ผู้ดูแลต้องอนุมัติคนที่ต้องการเข้ากลุ่ม และการตั้งค่านี้ปิดอยู่โดยค่าเริ่มต้น

ดังนั้นระบบ backend ไม่ควรแทนที่การตั้งค่าของ WhatsApp หน้าที่ของ backend คือจัดการงานปฏิบัติการ: เมื่อมีคำขอ ใครต้องตรวจ ดูข้อมูลอะไร และต้องส่งคำสั่ง approve หรือ reject ให้ requester id ใด

โครงสร้างคิวอนุมัติ

ใช้ webhook endpoint ที่มีลายเซ็นสำหรับรับ event แล้วค่อย reconcile กับรายการรออนุมัติ:

  1. สร้าง webhook endpoint และตั้ง subscribed_events ให้มี group.join_request; ถ้าระบบเก็บ event สาธารณะทั้งหมดอยู่แล้ว ใช้ ["*"] ได้ ดูแนวทางเลือก filter ใน UnifyPort Webhook Event Filters
  2. เมื่อได้รับ group.join_request ให้สร้างงาน sync ด้วย account_id และ data.conversation.id
  3. เรียก List group join requests เพื่ออ่านคำขอที่ยังรออนุมัติ ค่า id ของแต่ละรายการคือค่าที่ต้องส่งต่อใน member_ids
  4. แสดงรายการให้ moderator ตรวจ หรือใช้กฎภายในของทีม
  5. เรียก update API พร้อม action: "approve" หรือ action: "reject"

ถ้าเคยสร้าง คิวอนุมัติคำขอเข้ากลุ่ม Telegram มาก่อน หลักการเหมือนกัน: push event มีหน้าที่ปลุกระบบ ส่วน list API คือสถานะที่ควรเชื่อถือ

ตัวอย่าง event และ request

คำขอเข้ากลุ่ม WhatsApp อาจมาถึงในรูป event แบบนี้:

{
  "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" }
  }
}

ก่อนอนุมัติ ให้ sync รายการก่อน:

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 ที่ได้เพื่อ approve หรือ reject:

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"]
  }'

Worker Node.js แบบสั้น

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 โดยตรวจ HMAC-SHA256 จาก raw body ด้วย signing_secret, X-Device-Timestamp และ X-Device-Signature

ข้อจำกัดและ trade-off

flow นี้ไม่ได้ให้สิทธิ์ admin กับ account ที่ไม่มีสิทธิ์จัดการกลุ่มอยู่แล้ว และไม่ควรใช้ group.join_request เป็นสถานะสุดท้าย เพราะเป็นสัญญาณ best-effort UI สำหรับ moderator ควรโหลดรายการรออนุมัติอีกครั้งก่อนแสดงผลหรือก่อนส่งคำสั่ง UnifyPort ช่วยทำให้ event และ action เป็นรูปแบบเดียวกัน ส่วนกฎว่าใครเข้ากลุ่มได้ยังเป็นของทีมและ permission ใน WhatsApp

FAQ

ใช้ webhook อย่างเดียวเพื่ออนุมัติคำขอเข้ากลุ่ม WhatsApp ได้ไหม?

ไม่ควร ใช้ webhook เพื่อปลุก worker จากนั้นเรียก GET /v1/accounts/{account_id}/groups/join-requests แล้วส่ง id ที่ได้ไปยัง update API

member_ids ต้องใช้ค่าไหน?

ใช้ id จากรายการที่ได้จาก List group join requests อย่าใช้ชื่อที่แสดงใน UI หรือคาดเดารูปแบบเบอร์โทรเอง

ต้องมี WhatsApp Business API หรือไม่?

บทความนี้ใช้ unofficial interface ของ UnifyPort โดยเชื่อมต่อ WhatsApp account ที่มีสิทธิ์กลุ่มที่จำเป็น การตั้งค่าอนุมัติสมาชิกใหม่ยังเป็นของ WhatsApp ทางการ

ควรเริ่มจากเอกสารไหน?

เริ่มที่ List group join requests แล้วค่อยต่อ Approve / reject join requests เมื่อ moderator UI พร้อม

Sources checked on 2026-09-02

UnifyPort API

เปลี่ยนการเชื่อมต่อข้อความให้เป็น pipeline ผลิตภัณฑ์ที่เสถียร

เริ่มจากการส่งผ่าน API เดียว แล้วส่งข้อความขาเข้าทั้งหมดกลับสู่ระบบธุรกิจของคุณด้วย event มาตรฐาน