手把手教你用 Wechaty 搭建聊天机器人:从安装到实战

20 次阅读 0 点赞 0 评论 9 分钟原创技术教程

从零开始搭建一个具备消息监听、自动回复、群欢迎和关键词触发能力的聊天机器人。学完可独立完成可部署的 Bot,应用于智能客服、群管通知等真实场景,支持 Node.js 与 Docker 双环境运行。

#Wechaty #聊天机器人 #Node.js #TypeScript #微信机器人 #自动化 #RPA #实战教程
手把手教你用 Wechaty 搭建聊天机器人:从安装到实战

作为后端开发,你大概率遇到过这种需求:业务群里每天有成百上千条重复问题,回复到手软;又或是想做一个定时推送通知的助手,但微信没有官方 Bot API,自己抓协议又怕封号。用 up Wechaty,才发现原来「写个微信机器人」这件事,可以简单到只写 6 行代码。

Wechaty 是一个开源的 Conversational RPA SDK,把微信、WhatsApp 等聊天平台的底层协议细节封装好了,你不需要关心协议逆向,只需要专注业务逻辑。它支持 TypeScript/JavaScript,用同一套代码可以跑在 Node.js 或 Docker 里。这篇带你从零开始,一步步搞出一个能自动回复、管理群的消息机器人。


前置条件

开工之前,确认环境满足这些要求:

依赖 最低版本 说明
Node.js 16+ Wechaty 底层依赖较新的 ES 模块特性
npm 7+ 依赖管理和包解析

推荐用 nvm 管理 Node 版本:

bash 复制代码
nvm install 16
nvm use 16
node -v

Wechaty 重度使用现代 ES Module 特性,Node 14 及以下会遇到 import/export 解析报错。


快速上手:6 行代码跑通第一个 Bot

初始化项目

bash 复制代码
mkdir my-wechaty-bot && cd my-wechaty-bot
npm init -y
npm install wechaty

在独立目录操作,避免与已有项目产生版本冲突。

创建入口文件

新建 bot.js

javascript 复制代码
import { WechatyBuilder } from 'wechaty'

const wechaty = WechatyBuilder.build()

wechaty
  .on('scan', (qrcode, status) => {
    const url = `https://wechaty.js.org/qrcode/${encodeURIComponent(qrcode)}`
    console.log(`请扫码登录!状态:${status}\n二维码链接:${url}`)
  })
  .on('login', (user) => console.log(`✅ 登录成功,欢迎回来:${user}`))
  .on('message', (msg) => console.log(`📨 收到消息:${msg}`))

wechaty.start()

核心事件拆解:

  • scan:弹出二维码,扫码登录。qrcode 拼上官网 URL 可浏览器查看
  • login:扫码确认后触发,拿到登录账号信息
  • message:收到消息(私聊、群消息均触发)时调用
  • start():启动 Bot,初始化 Puppet 并开始监听

运行

bash 复制代码
node bot.js

终端打印二维码链接,浏览器打开用扫码。登录后,任何消息都会打印在终端。

默认使用 Puppeteer(Web 微信协议),部分账号有限制。登录失败时后续会教切换协议。


实战:智能客服 + 群管机器人

光打印消息不够实用,下面写一个能真正干活的机器人:

  • 私聊自动回复常见问题
  • 新人入群自动欢迎
  • 群内关键词触发功能列表

完整代码

新建 smart-bot.js

javascript 复制代码
import { WechatyBuilder } from 'wechaty'

const FAQ = {
  '价格': '服务分基础版(免费)和专业版(99元/月)。',
  '退款': '支持7天无理由退款,请在订单页面提交申请。',
  '帮助': '回复关键词:价格、退款、联系方式。'
}

const wechaty = WechatyBuilder.build({
  name: 'smart-customer-bot'
})

wechaty.on('scan', (qrcode, status) => {
  const url = `https://wechaty.js.org/qrcode/${encodeURIComponent(qrcode)}`
  console.log(`📱 请扫码登录!\n状态:${status}\n链接:${url}`)
})

wechaty.on('login', async (user) => {
  console.log(`🎉 登录成功!账号:${user.name()}`)
  await user.say('🤖 智能客服已上线!')
})

wechaty.on('message', async (msg) => {
  if (msg.self()) return

  const text = msg.text()
  const from = msg.from()

  // 私聊自动回复
  if (!msg.room() && from) {
    for (const [keyword, reply] of Object.entries(FAQ)) {
      if (text.includes(keyword)) {
        await msg.say(reply)
        return
      }
    }
    await msg.say('🤖 暂无法识别,回复「帮助」查看问题列表。')
  }

  // 群内互动
  if (msg.room()) {
    const room = msg.room()
    const roomName = await room.topic()
    
    if (text.includes('帮助') || text === 'help') {
      const helpMsg = `📋 功能列表:
1. 回复「价格」查看报价
2. 回复「退款」了解流程
3. 回复「联系人工」转客服`
      await room.say(helpMsg)
    }
  }
})

wechaty.on('room-join', async (room, inviteeList, inviter) => {
  const roomName = await room.topic()
  const inviteeNames = inviteeList.map(c => c.name()).join('、')
  const inviterName = inviter?.name() || '未知用户'

  const welcomeMsg = `👋 欢迎 @${inviteeNames} 加入【${roomName}】!\n回复「帮助」查看功能列表。`
  await room.say(welcomeMsg)
})

wechaty.start()

设计要点

模块 作用
FAQ 字典 关键词→回复映射,生产环境可替换为数据库或大模型调用
msg.self() 过滤 Bot 自己发出的消息,防止循环触发
msg.room() 区分私聊(空)和群聊(有值),群对象可调用 room.say()
room-join 新人入群自动欢迎,适合大群管理
room.say() 支持 @昵称 自动处理提及逻辑

常见问题与踩坑

1. Web 协议登录失败

Error: login failed 是常见报错,微信对 Web 端登录做了限制。切换到其他 Puppet:

bash 复制代码
## Linux/macOS
export WECHATY_PUPPET=wechaty-puppet-service

## Windows (PowerShell)
$env:WECHATY_PUPPET="wechaty-puppet-service"

wechaty-puppet-service 基于 iPad/Windows 协议,稳定性好,需申请 Token。

2. import 语句报错

报错 SyntaxError: Cannot use import statement outside a module,在 package.json 加:

json 复制代码
{
  "type": "module"
}

3. 封号风险防控

频繁自动回复可能被判定为异常:

  • 加随机延时await new Promise(r => setTimeout(r, Math.random() * 2000 + 1000))
  • 设置上限:记录当日回复次数,到阈值停止
  • 优先 @ 回复:用 msg.mentionSelf() 判断,只回复被 @ 的消息

4. Docker 部署

bash 复制代码
docker run -ti --rm --volume="$(pwd)":/bot wechaty/wechaty smart-bot.js

自动挂载执行,扫码链接端打印。


总结

回顾完整路径:

  1. npm init + npm install wechaty 搭环境
  2. 6 行代码跑通扫码登录+消息监听
  3. 智能客服 Bot 覆盖私聊回复、群欢迎、关键词识别
  4. 解决 Web 限制、ES Module 报错、封号风险

下一步可深入:

  • 接入大模型:FAQ 替换为 OpenAI/Claude API
  • 插件化:用 WechatyPlugin 拆分欢迎语、定时任务
  • 数据持久化:MongoDB/PostgreSQL 存聊天记录做分析
  • CI/CD:GitHub Actions + Docker 自动部署

23000+ Stars 的开源项目、覆盖多平台、6 行代码就能跑,值得花一个下午试一下。动手写,永远比看十篇文章有用。

最后更新:2026-09-13T10:02:42

评论 (0)

发表评论

blog.comments.form.loading
0/500
加载评论中...