自动回复机器人是微信API最基础的应用——用户发消息,机器人自动回复。但"简单"不等于"随便写"——即使是最简版本,也要考虑消息接收、回复逻辑、发送限流三个基础点。本文从最小可运行版本讲起,再逐步扩展。

一、最小可运行版本——10行核心代码

最简自动回复机器人只有三步:接收消息→匹配关键词→回复。关键词匹配用字典,匹配到返回对应回复,没匹配到返回默认回复。发送前加3秒间隔防限流。

最小版本的价值是快速跑通——验证接收和发送链路没问题,再扩展功能。很多人一上来就做意图识别、AI对话,结果链路没跑通,排查不知道哪出问题。先跑通最小版本,再叠加功能。

二、关键词匹配扩展——从精确到模糊

精确匹配只能匹配完全一样的关键词,用户说"在吗"和"在不在"匹配不上。模糊匹配用关键词包含——消息里包含关键词就匹配。再扩展到正则匹配——更灵活的模式匹配。

匹配的工程实现是匹配器链——精确匹配→包含匹配→正则匹配,按优先级依次尝试。匹配器链的价值是可扩展——新增匹配方式加一个匹配器,不改原有逻辑。

三、回复逻辑扩展——从固定到动态

固定回复是写死的回复内容,动态回复是根据上下文或业务数据生成。动态回复的工程要点是变量替换和业务调用。变量替换——回复模板里的占位符填入用户信息。业务调用——回复内容来自业务接口查询结果。

回复扩展的工程实现是回复处理器——固定回复直接返回模板,动态回复调用业务接口组装回复。回复处理器的价值是灵活——不同场景用不同回复方式。

简单机器人实现

import time

class SimpleReplyBot:
    def __init__(self):
        self.replies = {                    # 关键词→回复
            "你好": "你好,有什么可以帮您?",
            "订单": "请提供订单号为您查询",
            "退款": "退款请联系客服处理",
        }
        self.default = "没理解您的意思,请换个说法"
        self.last_send = 0

    def on_message(self, raw):
        text = raw.content
        # 关键词匹配(包含匹配)
        for keyword, reply in self.replies.items():
            if keyword in text:
                return self.send(raw.wxid, reply)
        # 默认回复
        return self.send(raw.wxid, self.default)

    def send(self, wxid, content):
        # 限流3秒间隔
        elapsed = time.time() - self.last_send
        if elapsed < 3:
            time.sleep(3 - elapsed)
        requests.post(f"{API}/send", json={
            "wxid": wxid, "content": content
        })
        self.last_send = time.time()

最简机器人对照

扩展阶段

匹配方式

回复方式

复杂度

最小版本

精确匹配

固定回复

低

模糊匹配

包含/正则

固定回复

中

动态回复

包含/正则

变量替换+业务调用

高

落地建议

从最小版本做起——10行代码跑通接收和发送,再扩展功能。匹配从精确到模糊——先精确匹配,再加包含和正则。回复从固定到动态——先固定回复,再加变量替换和业务调用。限流必须有——发送间隔3秒,不然触发限流。微信侧的消息接收和发送由 Eyun 这类个人微信API平台 提供,匹配和回复逻辑在自建服务实现,接口字段以平台开发文档为准。

Logo

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

更多推荐