← 所有文章
教程

通过 API 移除 WhatsApp 群成员:标识选择与结果核验

通过 UnifyPort 移除已有 WhatsApp 群成员,应调用 POST /v1/accounts/{account_id}/groups/members,传入 group_id、action: "remove",以及放在 member_id 中的成员 LID。LID 应来自群成员列表返回的 peer_id。每次请求只针对一个人。保存响应后重新读取成员状态,不要把界面中一行消失当成移除成功的证据。

要点

  • 移除成员、撤销管理员身份、拒绝待审批申请,以及消息账号自己退群,是不同操作。
  • 同时锁定消息账号、群组和成员,不要用手机号拼出 LID。
  • 移除前必须确认对象和意图,不应因昵称陌生就自动移除。
  • 请求超时意味着结果不确定,不意味着可以反复提交。

让按钮对应真实意图

WhatsApp 的官方成员管理说明将移除操作描述为:在群资料中选中具体成员,再确认移除。API 界面也应保留明确的目标和确认步骤,而不是把危险动作藏在“清理”按钮后。

操作目的对应操作
移除已入群成员成员管理 remove
保留成员,只撤销管理员权限独立的 demote
拒绝尚未入群的申请人拒绝待审批申请
让当前连接的账号离开群退群
仅隐藏自己系统中的一行本地界面变化,不是群成员变更

撤销管理员身份请参考管理员升降级指南;处理尚未入群的人请使用入群申请审批队列。这些流程不能共用含义模糊的“移除”按钮。

移除确认卡片需要展示什么

启用危险操作前,在选定消息账号下调用列出会话成员,将群 ID 作为 conversation_id,并传入 type=group。根据 data.has_more 和 data.next_cursor 继续分页,直到完成所需核验。第一页没有找到某人,不代表他不在群中。

保留返回的 peer_id、display_name 和 role。文档中的角色为 member、admin、superadmin,最后一个表示群主或创建者。显示名称仅用于识别,不能作为操作标识。

以下是建议的应用保护措施,不是新增的 API 必填要求:

  • 确认前同时显示消息账号、目标群和成员。
  • 检查操作员在你系统中的权限,以及连接账号管理该群的权限。持有 API Key 不等于拥有群管理权限。
  • 不让 superadmin、连接账号自身或身份尚未确认的对象进入普通移除流程;转交单独审核或使用对应操作。
  • 重新读取过期的成员选择,并在应用后端阻止同一账号、群、成员的并发移除提交。

无法将目标对应到返回的 WhatsApp LID 时,应停止操作。不要改用手机号、显示名称,或其他格式的事件参与者标识。

一个经确认的成员,一次请求

管理群成员参考接受单数 member_id,而不是入群审批使用的 member_ids 数组。UnifyPort 提供非官方接口;当前渠道动作能力表仅将此操作映射到 whatsapp,不包括 LINE、Telegram 或 whatsapp-protocol。

下面的 JavaScript 示例只构造请求体。传入已确认的群 ID 和从成员列表选中的记录;它不执行权限检查,也不发送网络请求。

function removalBody(groupId, selectedMember) {
  if (!groupId || !/^\d+@lid$/.test(selectedMember?.peer_id ?? '')) {
    throw new Error('Select a group and a returned WhatsApp member LID');
  }
  if (!['member', 'admin'].includes(selectedMember.role)) {
    throw new Error('This target requires separate review');
  }
  return {
    group_id: groupId,
    action: 'remove',
    member_id: selectedMember.peer_id
  };
}

角色检查是本地安全策略;LID 格式检查不能证明身份或权限。由后端向前述端点发送 JSON,使用 X-Api-Key 和 Content-Type: application/json,不要将密钥放进浏览器或日志。文档没有定义多人移除事务;即使界面提供批量操作,也要分别记录每个经批准对象的结果。

判断证据,不要看界面动画

将操作意图、HTTP 结果和实际观察到的成员状态分开保存:

证据应用可以得出的结论
200 OK 且 data.ok: trueAPI 返回成功,接下来刷新成员列表
成功完成成员读取,未发现所选 LID该次读取未观察到此人,同时记录读取时间
成员读取失败或未完成核验仍未解决
写请求超时或响应不可读请求结果不确定,再次写入前先调查

文档中的 group.updated 事件可在 data.changes[] 中包含 kind: "member_removed" 和 members[]。将它作为重新核验的信号,不要当成每次请求都保证产生的回执。信任事件前,按投递契约验证签名。事件中的参与者标识也不一定能直接用于下一次成员管理请求。

有 request_id 时保存它用于排查,但不要当成幂等键。结果不确定时,检查当前成员状态,再次变更前要求重新审核。自动发送 add 作为补偿是新的成员变更决定,不是有保证的回滚。

常见问题

能使用创建群时的手机号吗?

不能。此操作要求成员列表 peer_id 返回的 WhatsApp LID;创建群的初始成员标识是另一套契约。

移除是否同时删除已存消息,或永久禁止再次入群?

不要根据这个 API 作出这些承诺。它管理群成员,不是历史内容删除或永久准入策略。自行管理数据保留与后续入群决策。

上线前应测试什么?

使用受控账号测试重名、目标位于后续分页、选择已过期、权限不足、响应丢失及核验读取失败。这些是建议测试,不是已执行结果。

下一步与参考资料

先基于列出会话成员实现确认选择,再将危险操作接入管理群成员。

资料核对日期:2026-11-01。

UnifyPort API

让消息接入变成一条稳定的产品管线。

先用统一 API 跑通发送,再用标准事件把所有入站消息接回业务系统。