最近总有朋友找我聊做微信机器人这事儿。

聊下来发现一个挺普遍的误解:很多人觉得做微信机器人,核心就是把AI接上,接上一个聪明的大模型,机器人就活了。AI嘛,能聊天能推理,那不就完事了?

我一开始也是这么想的。直到真上手做了几个机器人项目,才发现AI这东西吧,它就是个大脑——光有大脑没手脚,它啥也干不了。

你想啊,用户在微信里发了一句"帮我查下我的订单",AI再聪明,它怎么知道用户发了这句话?又怎么把生成的回复"说"给用户听?这中间得有一层API把消息搬进来、把回复搬出去。

所以我现在跟人解释的时候,喜欢用一个人的比喻:AI是大脑,API是眼睛、嘴巴、记忆和手脚。少了哪一样,这个"人"都不完整。这篇文章就把这四个角色挨个拆开讲。

眼睛:Webhook回调让机器人"看见"消息

机器人得先"看见"用户发了什么,才能开始思考。这一步靠Webhook回调。

用户在微信里发的每一条消息——文字、图片、语音、视频——Eyun都会通过Webhook推送到你配置的服务端地址。你的服务端收到这个HTTP请求,就等于机器人"看见"了这条消息。推送过来的是JSON格式,带wId、fromUser、msgType、content这些字段,按消息类型分流处理就行。

我之前踩过一个坑:没做消息去重,结果同一条消息被处理了两次,机器人给用户回了俩一模一样的回复,用户体验直接拉胯。后来在服务端加了消息ID的Redis缓存,才把这问题解决掉。

Webhook这层接口,本质上是给机器人装了一双"眼睛",让它能实时感知微信里发生了什么。

嘴巴:sendText/sendImage让机器人"开口说话"

光看见还不够,机器人还得会"说"。

这一步靠的是主动发消息的接口,最常用的就是sendText发文字、sendImage发图片。机器人想回复用户、想主动推送通知,都靠这一类接口。

这里有个细节挺关键:发消息的时候要带上wId(实例ID)标识是哪个微信号发的,Token也得在请求头里带上做鉴权。我一开始Token复制错了,调了半天接口一直返回鉴权失败,还以为是服务挂了,排查俩小时才发现是Token的问题。

所以说"嘴巴"这个能力听着简单,但鉴权、参数这些细节不处理好,机器人就是个哑巴。

记忆:消息记录让机器人"记住"历史对话

人聊天是有上下文的,"上次说的那个事儿"这种话很常见。机器人也得有记忆。

Eyun提供了消息记录拉取的接口,可以按用户、按时间段把历史消息拉出来。这样机器人跟用户聊天的时候,就能结合上下文来回复,而不是每次都从零开始。

我做过一个客服机器人,用户上午问了一半被打断了,下午又来问。没接记忆的时候,机器人完全不记得上午聊过啥,用户体验很差。接上消息记录之后,机器人能接着上午的话题往下聊,用户反馈立马好了很多。

记忆这事儿,说白了就是API帮你把历史数据存下来、能取出来用。

手脚:联系人管理和群聊操作让机器人"动手"

最后说手脚。

光聊天不够,很多时候机器人得真的去"做事"——把某个用户拉进一个群、给某个好友打个标签、自动通过好友请求等等。这些业务动作,靠的是联系人管理接口和群聊操作接口。

我之前给一个做社群的客户做过机器人,识别到用户是某个课程的目标人群,机器人就自动把他拉进对应的课程群,同时打上标签方便后续运营。这套流程跑起来之后,客户的运营效率提升很明显。

这些接口让机器人从"只会聊天"变成"能干活",这是机器人项目和纯聊天AI最大的区别。

四个角色能力一览

用一张表把四个角色的能力整理一下:

角色

API能力

在机器人中的作用

眼睛

Webhook消息回调

实时感知用户发了什么消息

嘴巴

sendText/sendImage发消息

把机器人的回复"说"给用户

记忆

消息记录拉取接口

让机器人有上下文,能接着聊

手脚

联系人管理/群聊操作

执行业务动作(拉群/打标签等)

四个角色凑齐了,机器人才能算"活"了。缺了眼睛是瞎子,缺了嘴巴是哑巴,缺了记忆是金鱼,缺了手脚是瘫痪——光有个聪明大脑也没用。

一个统一调度的代码示例

把机器人四个角色的调度逻辑精简了一下,大概是这样:

class WeChatBot:
    def __init__(self, wid, token):
        self.wid = wid
        self.token = token
        self.headers = {"Authorization": f"Bearer {token}"}

    def on_message(self, msg):
        """眼睛:收到Webhook推来的消息"""
        user = msg["fromUser"]
        content = msg["content"]
        # 记忆:拉历史对话做上下文
        history = self.fetch_history(user)
        # 大脑:AI生成回复
        reply = self.call_ai(content, history)
        # 嘴巴:把回复发回去
        self.send_text(user, reply)
        # 手脚:根据意图执行业务动作
        if self.detect_intent(content) == "join_group":
            self.add_to_group(user, "课程群")

    def fetch_history(self, user):
        # 调Eyun消息记录接口,拉最近10条
        pass

    def send_text(self, user, text):
        # 调Eyun sendText接口
        pass

    def add_to_group(self, user, group):
        # 调Eyun群聊接口
        pass

    def call_ai(self, msg, history):
        # 调大模型
        pass

这段代码把四个角色串起来了,实际项目里每个方法都得填上具体的接口调用,但骨架就是这样。我自己的项目里on_message这层还加了异常兜底——AI挂了就回一句"稍等转人工",别让机器人直接装死。

总结

做微信机器人这事儿,别只盯着AI。

AI再聪明,没有API这一层做眼睛、嘴巴、记忆和手脚,它就是个困在玻璃罩子里的大脑,啥也干不了。把API能力摸透了,AI才能真正落地跑起来。

如果你也在做机器人,建议先把 Eyun开发文档 里关于Webhook、发消息、消息记录、联系人管理这些接口过一遍,心里有个底再动手写。磨刀不误砍柴工,这话放这儿挺合适。

Logo

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

更多推荐