1. 引言

个人微信二次开发里,私聊自动回复相对好做,群聊更容易出问题:消息密度高、@ 解析不统一、欢迎语重复、定时推送把群聊刷屏。本文只讲个人微信群场景的工程做法,不涉及任何商业接口。

2. 群消息和私聊的差别

私聊 群聊
目标 ID 发送者 群 ID,回复不能回错人
唤醒 每条都可处理 必须加唤醒条件
频率 一对一还好 一条群消息触发全员可见
系统消息 较少 进群、退群、改群名混在一起

群聊机器人默认「沉默」,只有命中规则才开口。

3. 唤醒词设计

常见三种:

  • @机器人 或 @ 指定成员
  • 前缀命令:查 订单号#天气 北京
  • 关键词白名单:仅「价格」「地址」等少量词
def should_reply_group(msg) -> bool:
    if not msg.from_group():
        return False
    text = (msg.content or "").strip()
    if msg.is_at_me():
        return True
    if text.startswith("查 ") or text.startswith("#"):
        return True
    return False

没唤醒就 return,比事后用「抱歉我只是机器人」补救更干净。

4. 进群欢迎要幂等

进群系统提示可能重复推送。欢迎语按「群 ID + 成员 ID」做一次性标记,过期时间至少 24 小时。

def welcome_if_needed(room_id: str, user_id: str, send_fn):
    key = f"welcome:{room_id}:{user_id}"
    if not redis.set(key, 1, nx=True, ex=86400):
        return
    send_fn(room_id, "欢迎进群,请先阅读群规。")

欢迎语放短规则,不要接大模型,避免进群瞬间刷长文。

5. 定时推送

日报、天气、值班表适合定时,不适合高频营销。建议:

  • 每个群独立开关和时间点
  • 发送前检查仍在群内、账号仍在线
  • 失败重试最多 1 次,避免早上 9 点连发三条
  • 内容先写到文件或后台,再由任务读取,不要把文案写死在脚本里
import schedule

def push_daily(room_id: str):
    if not is_online() or not in_room(room_id):
        return
    wcf.send_text(load_daily_text(), room_id)

schedule.every().day.at("09:00").do(push_daily, room_id="目标群ID")

6. 群聊安全

  • 管理命令(踢人、改名)必须校验发送者是否管理员
  • 不要把群消息原文未经脱敏就写入公开日志
  • 控制机器人发言占比,群成员投诉是比技术故障更早的下线信号
  • 用小号测试,确认 Hook 或客户端版本匹配后再进正式群

7. 总结

个人微信群机器人能落地的关键不是「全自动」,而是唤醒条件、欢迎幂等、定时可关。群是公共空间,少说错比多说一句更重要。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐