在开始 Wechaty 机器人开发之前,确保你的 Windows 系统已经准备好以下基础环境。许多初学者往往在这一步就遇到各种问题,导致后续流程无法进行。
Node.js 是 Wechaty 运行的基础环境,但很多教程没有说明版本兼容性问题。以下是经过验证的最佳实践:
bash复制node -v
npm -v
应该分别显示 v18.x.x 和 9.x.x 以上的版本号注意:如果你之前安装过旧版本 Node.js,建议先完全卸载再安装新版,避免版本冲突。
很多初学者直接在桌面或文档文件夹创建项目,这可能导致权限问题。推荐以下做法:
bash复制# 在 PowerShell 或 CMD 中执行
mkdir D:\wechaty-project
cd D:\wechaty-project
为什么选择D盘? Windows 系统盘(通常是C盘)有时会有严格的权限限制,特别是企业环境中。
在项目目录下执行:
bash复制npm init -y
这会生成默认的 package.json 文件。
执行以下命令安装最新版 Wechaty:
bash复制npm install wechaty@latest
常见问题解决:
EPERM 错误,尝试以管理员身份运行终端bash复制npm config set registry https://registry.npmmirror.com
在 package.json 中添加:
json复制{
"type": "module",
"dependencies": {
"wechaty": "^1.20.2"
}
}
这个配置解决了 Node.js 18+ 中常见的 import 语法报错问题。
创建 bot.js 文件,内容如下:
javascript复制import { WechatyBuilder } from 'wechaty';
const bot = WechatyBuilder.build();
bot.on('scan', (qrcode, status) => {
console.log(`扫描二维码登录: ${status}\nhttps://wechaty.js.org/qrcode/${encodeURIComponent(qrcode)}`);
});
bot.on('login', (user) => {
console.log(`用户登录: ${user}`);
});
bot.on('message', (message) => {
console.log(`收到消息: ${message}`);
});
bot.start()
.then(() => console.log('机器人启动成功'))
.catch(e => console.error('启动失败:', e));
关键点说明:
WechatyBuilder.build() 创建机器人实例scan 事件处理二维码登录login 事件处理登录成功回调message 事件处理接收到的消息常见错误:
SyntaxError: Cannot use import statement outside a module → 确保 package.json 中有 "type": "module"Error: Cannot find module 'wechaty' → 检查是否在项目目录下执行,并确认已安装依赖在项目目录下执行:
bash复制node bot.js
登录限制说明:
查看详细日志:
bash复制export WECHATY_LOG=verbose
node bot.js
常见登录问题:
如果你熟悉 Docker,可以使用官方镜像避免环境问题:
bash复制docker pull wechaty/wechaty
docker run -ti --name=wechaty --rm wechaty/wechaty
为了避免每次重启都需要重新登录,可以配置会话持久化:
javascript复制const bot = WechatyBuilder.build({
puppet: 'wechaty-puppet-wechat',
puppetOptions: {
uos: true // 启用 UOS 协议
}
});
改进的消息处理示例:
javascript复制bot.on('message', async (message) => {
if (message.self()) return; // 忽略自己发送的消息
const room = message.room();
const text = message.text();
if (room) {
console.log(`群聊[${await room.topic()}] ${message.talker().name()}: ${text}`);
} else {
console.log(`私聊 ${message.talker().name()}: ${text}`);
}
// 自动回复示例
if (text.includes('你好')) {
await message.say('你好,我是机器人!');
}
});
安装 PM2:
bash复制npm install -g pm2
启动并守护进程:
bash复制pm2 start bot.js --name wechaty-bot
常用命令:
bash复制pm2 logs wechaty-bot # 查看日志
pm2 restart wechaty-bot # 重启
pm2 save # 保存当前进程列表
pm2 startup # 设置开机自启
配置日志轮转:
bash复制pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
设置健康检查:
javascript复制// 在 bot.js 中添加
setInterval(() => {
if (!bot.isLoggedIn) {
console.error('检测到机器人掉线,尝试重启...');
process.exit(1);
}
}, 60000); // 每分钟检查一次
配合 PM2 的自动重启功能,可以实现基本的故障恢复。
| 方案类型 | 价格区间 | 稳定性 | 功能完整性 | 适合场景 |
|---|---|---|---|---|
| 官方 Puppet | $200+/月 | ★★★★★ | ★★★★★ | 企业级应用 |
| 第三方 Puppet | $50-150/月 | ★★★☆☆ | ★★★★☆ | 中小项目 |
| 网页版协议 | 免费 | ★★☆☆☆ | ★★★☆☆ | 个人学习测试 |
在多个生产环境项目中,我发现这些实践特别重要:
一个健壮的生产环境代码结构示例:
code复制/wechaty-project
/src
/handlers # 消息处理器
/services # 外部服务集成
/utils # 工具函数
bot.js # 主入口
/logs # 日志目录
.env # 环境变量
package.json
在开发复杂机器人时,这种模块化结构能让代码更易维护和扩展。