不用手动操作!用个人微信二次开发接口实现微信群消息自动监听与回复
群消息自动回复做出来不难,难的是"回得像个人"——收到就秒回、见话就接、语气一成不变,用不了两天群成员就知道这是个机器人。这篇讲监听与回复的完整链路,重点放在"接话时机"这个最影响体验的细节上。
一、监听:群消息进来先分流
群消息通过回调推过来,第一步不是直接处理,是分流。按消息类型分——文本进语义处理,图片、链接、名片各自走专门通道或忽略。按发送者分——机器人自己发的跳过(防止自循环),白名单管理员的标记不处理,普通成员的进判定。
分流的代码要放在回调入口,分流完立即 ACK,后续判定和回复全走异步队列。消息回调的字段结构在 Eyun 开发文档 中有说明。
二、判定:这条消息该不该回
不是所有消息都该回。判定的优先级从高到低:@ 了机器人——必回;明确问题句式(带问号、带"怎么/如何/请问")——按群策略决定;闲聊、表情、灌水——不回。
判定用规则加轻量分类就够,不需要每条都调大模型。规则匹配不上再进模型兜底,既省钱又快。
三、接话时机:机器人最像人的地方
真人接话有节奏——看到消息、想几秒、打字几秒。机器人要模拟这个节奏:@ 机器人的消息延迟 2-5 秒再回(随机值),非 @ 的插话延迟更长(5-15 秒),同一个人连续发问时合并成一条回复。
还有一个细节:回复前检查"这期间有没有新消息进来",有的话把新消息也纳入上下文一起回,避免刚发完回复发现用户又补了一句。
四、回复出口:统一排队控速
多个群、多个成员的回复请求统一进一个出口队列,按 3 秒间隔逐条发。群里连续触发多条回复时,后发的带上"补充"衔接语,而不是干巴巴连发三条。
监听回复链路对照
| 环节 | 核心动作 | 关键参数 | 常见坑 |
|---|---|---|---|
| 监听 | 回调分流 | 按类型+发送者 | 回复自己的消息死循环 |
| 判定 | 该不该回 | @必回/问题选择性回 | 见话就接刷屏 |
| 时机 | 拟人化延迟 | 2-5秒随机 | 秒回暴露机器人 |
| 出口 | 统一队列控速 | ≥3秒间隔 | 并发直发被限流 |
拟人化回复实现
import time, random, queue, threading
class GroupListener:
def __init__(self, api, brain):
self.api = api
self.brain = brain # 回复内容生成
self.outbox = queue.Queue()
self.pending = {} # group_id -> 待回消息缓冲
threading.Thread(target=self.sender_loop, daemon=True).start()
def on_message(self, event):
# 分流:自己的消息跳过
if event["from"] == SELF_WXID: return
if event["type"] != "text": return
# 判定:该不该回
at_me = SELF_WXID in event.get("at_list", [])
is_question = any(k in event["content"]
for k in ["?", "?", "怎么", "如何", "请问"])
if not (at_me or is_question): return
# 时机:@ 我 2-5 秒,普通问题 5-15 秒
delay = random.uniform(2, 5) if at_me else random.uniform(5, 15)
gid = event["group_id"]
self.pending[gid] = (event, time.time() + delay)
def sender_loop(self):
while True:
now = time.time()
for gid, (event, due) in list(self.pending.items()):
if now < due: continue
del self.pending[gid]
# 回复前检查是否有补充消息,合并上下文
reply = self.brain.generate(
gid, event["content"],
extras=self.recent(gid, since=event["ts"]))
self.outbox.put((gid, reply[:500]))
while not self.outbox.empty():
gid, text = self.outbox.get()
self.api.post("/send", {
"group_id": gid, "content": text})
time.sleep(3) # 出口统一控速
time.sleep(0.5)
落地建议
监听入口先分流——机器人自己的消息必须跳过,否则回复触发回复死循环。判定分层——@ 必回、问题句式选择性回、闲聊不回,别见话就接。接话时机加随机延迟,@ 的 2-5 秒、插话的 5-15 秒,回复前检查有没有补充消息一起回。回复出口统一队列 3 秒间隔,别并发直发。微信侧的群消息回调和发送接口由 Eyun 这类个人微信API平台 提供,判定和时机控制在自建服务实现,具体字段以平台开发文档为准。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)