เปลี่ยนแอดมินกลุ่ม WhatsApp ผ่าน API: แต่งตั้งหรือถอดสิทธิ์
หากต้องการเปลี่ยนแอดมินกลุ่ม WhatsApp ผ่าน UnifyPort ให้เรียก POST /v1/accounts/{account_id}/groups/members พร้อม group_id, LID ของสมาชิกใน member_id และ action: "promote" หรือ "demote" แต่ละครั้งจัดการสมาชิกหนึ่งคนด้วยหนึ่งคำสั่ง การถอดสิทธิ์แอดมินไม่ใช่คำสั่ง remove ที่นำสมาชิกออกจากกลุ่ม อ่านสถานะสมาชิกปัจจุบันก่อน และอย่านำผู้สร้างกลุ่มเข้าสู่ขั้นตอนถอดสิทธิ์ทั่วไป
ประเด็นสำคัญ
- เลือกบัญชีรับส่งข้อความ กลุ่ม และสมาชิกเป็นชุดเดียวกัน ชื่อที่แสดงไม่ใช่ตัวระบุ
- ใช้ LID ที่รายการสมาชิกคืนมาใน
peer_idอย่าสร้างจากหมายเลขโทรศัพท์ - แยก
member,adminและsuperadminก่อนเปิดใช้ปุ่มเปลี่ยนบทบาท - อ่านสถานะอีกครั้งหลังส่งคำขอ อย่าส่งคำสั่งตรงข้ามอัตโนมัติเมื่อหมดเวลารอ
กำหนดการเปลี่ยนบทบาทให้ชัดเจน
คู่มือแอดมินกลุ่มอย่างเป็นทางการของ WhatsApp อธิบายการถอดแอดมิน และระบุว่าผู้สร้างกลุ่มไม่สามารถถูกนำออกได้และจะยังเป็นแอดมินจนกว่าจะออกจากกลุ่มเอง การเชื่อมต่อ API ไม่ได้เปลี่ยนกติกานี้
ตารางนี้เป็น นโยบายที่แนะนำสำหรับแอปพลิเคชัน ไม่ใช่การรับประกันว่าแพลตฟอร์มจะยอมรับทุกคำขอ
| บทบาทที่อ่านได้ | ความตั้งใจของผู้ปฏิบัติงาน | สิ่งที่แอปควรทำ |
|---|---|---|
member | แต่งตั้งเป็นแอดมิน | เสนอ promote หลังตรวจสอบสิทธิ์ |
admin | ให้อยู่ในกลุ่มต่อ แต่ถอดสิทธิ์แอดมิน | เสนอ demote หลังยืนยัน |
superadmin | ถอดสิทธิ์ผู้สร้าง | หยุดขั้นตอนและอธิบายข้อจำกัด |
| เป็นบทบาทที่ต้องการอยู่แล้ว | ทำคำสั่งเดิมซ้ำ | อัปเดตหน้าจอแทนการส่งซ้ำ |
| ข้อมูลสมาชิกหาย ไม่ทราบ หรือไม่ครบ | เปลี่ยนบทบาทต่อไป | อ่านใหม่หรือให้คนตรวจสอบ |
นี่ไม่ใช่ขั้นตอนอนุมัติเข้ากลุ่ม หากต้องตัดสินว่าใครเข้าร่วมได้ ให้ใช้คิวอนุมัติคำขอเข้ากลุ่ม WhatsApp หากต้องแจกคำเชิญ ให้ใช้ขั้นตอนลิงก์เชิญกลุ่ม แยกต่างหาก ทั้งสองอย่างไม่ได้แต่งตั้งแอดมิน
เก็บข้อมูลสมาชิกที่เลือกจากรายการปัจจุบัน
เรียกรายการสมาชิกการสนทนา ภายใต้บัญชีที่เลือก ส่ง conversation_id ของกลุ่ม อ่านหน้าถัดไปด้วย cursor และเก็บ peer_id กับ role ของรายการที่เลือก บทบาทที่ระบุในเอกสารคือ member, admin และ superadmin ซึ่งค่าหลังหมายถึงเจ้าของหรือผู้สร้างกลุ่ม
ตัวอย่างคำขออ่านต่อไปนี้ใช้ตัวแปรสภาพแวดล้อมที่แบ็กเอนด์กำหนดจากข้อมูลที่เลือกจริง:
curl --get \
"https://api.unifyport.ai/v1/accounts/${UNIFYPORT_ACCOUNT_ID}/conversations/members" \
-H "X-Api-Key: ${UNIFYPORT_API_KEY}" \
--data-urlencode "conversation_id=${WHATSAPP_GROUP_ID}" \
--data-urlencode "type=group" \
--data-urlencode "limit=50"
หาก data.has_more เป็นจริง ให้ใช้ data.next_cursor ที่คืนมาเพื่ออ่านต่อ การไม่พบคนในหน้าแรกไม่ได้พิสูจน์ว่าเขาออกจากกลุ่ม เก็บ LID ตามที่ได้รับ อย่าประกอบจากเบอร์โทร ชื่อที่แสดง หรือตัวระบุผู้เข้าร่วมในอีเวนต์ที่ใช้รูปแบบต่างกัน
ก่อนส่ง ตรวจสอบว่าผู้ปฏิบัติงานมีสิทธิ์จัดการบัญชีและกลุ่มนี้ และบัญชี WhatsApp ที่เชื่อมต่อมีอำนาจจัดการกลุ่มตามที่ต้องใช้ สิทธิ์เรียก API ของเวิร์กสเปซไม่เท่ากับสิทธิ์แอดมินกลุ่ม เก็บ API Key ไว้ฝั่งเซิร์ฟเวอร์
ส่งการเปลี่ยนแปลงที่ชัดเจนทีละรายการ
เอกสารจัดการสมาชิกกลุ่ม ระบุคำสั่ง add, remove, promote และ demote การเปลี่ยนบทบาทใช้เฉพาะสองคำสั่งหลัง พร้อม member_id แบบเอกพจน์ ไม่ใช่อาร์เรย์ member_ids ของการอนุมัติเข้ากลุ่ม
JavaScript นี้เป็นตัวอย่างสร้างเนื้อหาคำขอจากสมาชิกที่เลือกไว้เท่านั้น ไม่ได้ตรวจสอบการอนุญาตหรือส่งคำขอเครือข่าย:
function roleChangeBody(groupId, selectedMember, action) {
const expectedRole = { promote: 'member', demote: 'admin' };
if (!Object.hasOwn(expectedRole, action) ||
selectedMember?.role !== expectedRole[action]) {
throw new Error('Refresh membership before changing this role');
}
if (!groupId || !selectedMember?.peer_id?.endsWith('@lid')) {
throw new Error('Select a group and a returned WhatsApp member LID');
}
return {
group_id: groupId,
member_id: selectedMember.peer_id,
action
};
}
ส่ง JSON จากแบ็กเอนด์ไปยังเอนด์พอยต์ที่ระบุพร้อม X-Api-Key การตรวจส่วนท้ายเป็นเพียงตัวป้องกันข้อผิดพลาดในแอป ไม่ใช่หลักฐานยืนยันตัวตนหรือสิทธิ์ หน้ายืนยันควรระบุกลุ่ม สมาชิก และคำสั่งให้ชัด อย่าเลือกเป้าหมายจากแถวแรกของรายการที่กำลังเปลี่ยนแปลง
UnifyPort เป็น อินเทอร์เฟซที่ไม่เป็นทางการ สำหรับบัญชีที่เชื่อมต่อ ตารางรองรับคำสั่งตามช่องทาง ปัจจุบันระบุการเขียนนี้สำหรับ whatsapp เท่านั้น ไม่รวม LINE, Telegram หรือผู้ให้บริการแยกอย่าง whatsapp-protocol การอ่านสมาชิกหรือรับอีเวนต์กลุ่มของ LINE ได้ ไม่ได้หมายความว่าจะเปลี่ยนบทบาทผ่านคำสั่งนี้ได้
ตรวจสอบผลโดยไม่สมมติว่าเป็นธุรกรรมเดียว
เอกสารระบุผลสำเร็จเป็น 200 OK พร้อม data.ok: true เก็บผล HTTP และ request_id จากนั้นอ่านสมาชิกใหม่ เพื่อแสดงบทบาทที่สังเกตได้แยกจากความตั้งใจของผู้ปฏิบัติงาน
มาตรการที่แนะนำ:
- จัดลำดับการเปลี่ยนแปลงภายในแอปสำหรับบัญชี กลุ่ม และสมาชิกเดียวกัน
- ตรวจบทบาทอีกครั้งก่อนส่ง แอดมินคนอื่นอาจแก้ไขไปแล้วหลังเปิดกล่องยืนยัน
- เมื่อหมดเวลารอ ให้ระบุว่าผลยังไม่แน่ชัดแล้วตรวจสมาชิกปัจจุบัน อย่าส่งซ้ำหรือส่งคำสั่งตรงข้ามเพื่อชดเชยโดยอัตโนมัติ
- อย่ามองการส่งต่องานหลายคนเป็นธุรกรรมแบบอะตอม หากย้ายหน้าที่ ให้ตรวจว่าคนใหม่มีบทบาทแอดมินแล้ว ก่อนพิจารณาถอดสิทธิ์คนเดิมเป็นอีกขั้นตอนหนึ่ง
อีเวนต์มาตรฐาน group.updated อาจมีรายการใน data.changes[] ที่ใช้ kind: "promoted" หรือ "demoted" พร้อม members[] ใช้เพื่อเริ่มตรวจสอบสถานะใหม่ได้ แต่ไม่ใช่ใบยืนยันที่รับประกันว่าจะมีสำหรับทุกคำขอ ตัวระบุผู้เข้าร่วมในอีเวนต์ก็ไม่ได้เป็น LID ที่ใช้เขียนครั้งถัดไปได้เสมอ หากรับ webhook ให้ทำตามเอกสารลายเซ็นและการส่งอีเวนต์ ตรวจสอบก่อนเชื่อถือเนื้อหา และรองรับอีเวนต์ซ้ำหรือมาถึงผิดลำดับ
คำถามที่พบบ่อย
demote นำสมาชิกออกจากกลุ่มหรือไม่?
ไม่ การถอดสิทธิ์แอดมินกับการนำสมาชิกออกเป็นคนละคำสั่ง อย่าผูกปุ่มถอดแอดมินกับ remove
เปลี่ยนบทบาทของผู้สร้างกลุ่มได้หรือไม่?
อย่าเสนอการกระทำนี้ในขั้นตอนดังกล่าว WhatsApp ระบุว่าผู้สร้างยังเป็นแอดมินจนกว่าจะออกเอง และรายการสมาชิกของ UnifyPort แสดงบทบาทนี้เป็น superadmin
เปลี่ยนแอดมินหลายคนในคำขอเดียวได้หรือไม่?
เอนด์พอยต์นี้ทำไม่ได้ รับหนึ่ง member_id และหนึ่งคำสั่งต่อครั้ง หากแอปทำงานเป็นชุด ต้องบันทึกผลแยกแต่ละรายการ
ขั้นตอนถัดไปและแหล่งข้อมูล
เริ่มจากรายการสมาชิกการสนทนา แล้วเพิ่มปุ่มตามเอกสารจัดการสมาชิกกลุ่ม ก่อนเปิดใช้งานจริง ให้ทดสอบการแบ่งหน้า การเลือกผู้สร้าง ข้อมูลบทบาทเก่า สิทธิ์ไม่เพียงพอ และผลเครือข่ายที่ไม่แน่ชัด รายการนี้เป็นข้อเสนอการทดสอบ ไม่ใช่ผลทดสอบที่ดำเนินการแล้ว
ตรวจสอบข้อมูลวันที่ 2026-10-17:
เปลี่ยนการเชื่อมต่อข้อความให้เป็น pipeline ผลิตภัณฑ์ที่เสถียร
เริ่มจากการส่งผ่าน API เดียว แล้วส่งข้อความขาเข้าทั้งหมดกลับสู่ระบบธุรกิจของคุณด้วย event มาตรฐาน