企业微信客户群怎么@指定成员?群机器人@不到人怎么办
官方「群机器人 / 消息推送」走的是 Webhook,不是群成员身份。这会带来两个硬限制:
- 仅内部群可用,客户群(外部群)没有添加入口
- 即使内部群能推消息,
@userid往往没有会话强提醒
要在客户群里出现可点击、可提醒的 @,消息必须由已在该群内的企业微信账号发出。下面按账号级消息接口来接。
接口模型和必要 ID
一次指定 @,至少要凑齐 3 个 ID:
| 参数 | 含义 | 来源 |
|---|---|---|
guid |
执行设备 / 登录节点 | 扫码登录成功后返回 |
toId |
消息接收方 | 群聊填 roomId,私聊填 userId |
| 被 @ 人 | 群成员 userId |
群成员列表或消息回调 |
不要用昵称、备注名做主键。重名、改名都会对错人。
统一调用形态(POST + JSON):
POST /api/qw/doApi
Content-Type: application/json
X-QIWEI-TOKEN: YOUR_TOKEN
{
"method": "/msg/sendText",
"params": {
"guid": "{{guid}}",
"toId": "{{roomId}}",
"content": "请核对今天下午的发货单",
"isNoNeedRead": true
}
}
这只是把文本打进群。真正的 @ 还要带「提到谁」。能用 QiWe API 时,在消息模块里把被 @ 成员的 userId 一并传入(文本或混合文本接口均可,以后者为准更常见)。
被 @ 的 userId 从哪取
有两种取法,第二种更稳。
1. 拉群成员列表
按 roomId 取成员,落地保存 userId。适合固定角色:群主、值班账号、对接人。
2. 从消息回调反查
客户在群里发言后,Webhook 会带发送者 ID 和 roomId。自动回复时 @ 这个发送者,不需要自己维护全量成员表。
回调处理伪代码:
def on_group_message(event):
room_id = event["roomId"]
sender_id = event["fromUserId"]
text = event.get("content", "")
if "对账单" not in text:
return
send_text_with_mention(
guid=GUID,
to_id=room_id,
content="对账单已生成,请查看",
mention_user_ids=[sender_id],
)
mention_user_ids 对应你实际接口里的 @ 字段名(有的叫 atlist,有的放在混合文本节点里)。字段名以消息模块文档为准,逻辑不变:群 ID 走 toId,人 ID 走 @ 列表。
和官方机器人的差异
| 点 | 官方 Webhook 机器人 | 账号级消息接口 |
|---|---|---|
| 客户群 | 不支持 | 账号在群即可 |
| 发送身份 | 机器人 | 企业微信成员 |
| @ 提醒 | 弱 / 无 | 接近手工 @ |
| 拉人、回执、引用 | 基本没有 | 可继续接群模块、reply |
群发通知不要用 @all 代替指定 @。客户群里 @ 全员容易被屏蔽,也和「点名某个人处理」不是同一需求。
联调检查
- 先发一条不带 @ 的群文本,确认
code == 0且isSendSuccess == 1 - 再带单个
userId发 @,看消息气泡是否出现蓝色 @ 名字 - 用两个测试号验证:被 @ 的人是否有提醒,未被 @ 的人是否无提醒
- 换一个未在群内的
userId,确认接口失败或 @ 无效,避免静默发错
常见失败:
toId填了人 ID,消息跑到私聊- 只写了
@张三字符串,没有传userId,界面无真实 @ - 执行账号已退群,或目标
userId不在该roomId里
总结
客户群指定 @ 做不到,是因为走了官方机器人通道,不是字段没配好。
用群内账号发消息:toId = roomId,同时传入被 @ 成员的 userId,再从回调里取发送者,就可以把 @ 接到自动回复里。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)