首页
/ 微信每日说机器人(wechatBot)技术解析与实现指南

微信每日说机器人(wechatBot)技术解析与实现指南

2026-02-04 05:10:11作者:房伟宁

项目概述

微信每日说机器人是一个基于Node.js开发的自动化工具,能够定时向指定微信联系人发送定制化消息。该项目最初灵感来源于一篇关于定时发送暖心邮件的技术文章,开发者将其移植到微信平台,实现了更加即时的情感表达方式。

核心技术栈

1. 核心依赖库

  • Wechaty: 微信机器人核心库,提供微信协议封装和API接口
  • Node-Schedule: 强大的定时任务调度库,支持复杂的定时规则
  • Superagent: 轻量级HTTP请求库,用于爬取网络数据
  • Cheerio: 服务器端jQuery实现,用于解析HTML内容
  • QRCode-Terminal: 在终端生成二维码,方便微信登录

2. 数据来源

  • 每日一句:从"ONE·一个"网站(http://wufazhuce.com)获取
  • 天气信息:从墨迹天气(https://tianqi.moji.com)爬取

系统架构设计

1. 目录结构

├── config/        # 配置文件目录
│   └── index.js   # 项目配置项
├── schedule/      # 定时任务配置
│   └── index.js   # 任务调度设置
├── superagent/    # 数据获取模块
│   └── index.js   # 爬虫实现
├── untils/        # 工具函数
│   └── index.js   # 公共方法
└── index.js       # 主入口文件

2. 核心功能模块

微信机器人主控(index.js)

const bot = new Wechaty()

// 事件监听
bot.on('scan', onScan)        // 二维码扫描
bot.on('login', onLogin)      // 登录成功
bot.on('logout', onLogout)    // 退出登录
bot.on('message', onMessage)  // 消息处理
bot.on('friendship', onFriendShip) // 好友请求处理

// 启动机器人
bot.start()

定时消息发送

// 设置定时任务
schedule.setSchedule(config.SENDDATE, () => {
  console.log('定时任务启动')
  main()
})

// 主发送函数
async function main() {
  const contact = await bot.Contact.find({name: config.NICKNAME})
  const one = await superagent.getOne() // 获取每日一句
  const weather = await superagent.getWeather() // 获取天气
  const today = await untils.formatDate(new Date())
  const memorialDay = untils.getDay(config.MEMORIAL_DAY)
  
  // 构建消息内容
  const message = `${today}<br>今天是我们在一起的第${memorialDay}天<br><br>...`
  
  await contact.say(message) // 发送消息
}

数据爬取模块(superagent/index.js)

// 获取每日一句
async function getOne() {
  const res = await superagent.req(config.ONE, 'GET')
  const $ = cheerio.load(res.text)
  return $('#carousel-one .item').first().find('.fp-one-cita').text().trim()
}

// 获取天气信息
async function getWeather() {
  const url = `${config.MOJI_HOST}${config.CITY}/${config.LOCATION}`
  const res = await superagent.req(url, 'GET')
  const $ = cheerio.load(res.text)
  
  return {
    weatherTips: $('.wea_tips em').text(),
    todayWeather: parseWeatherData($)
  }
}

部署与配置指南

1. 环境准备

由于项目依赖Chromium,建议先配置国内镜像加速安装:

npm config set registry https://registry.npmmirror.com
npm config set puppeteer_download_host https://npmmirror.com/mirrors

2. 项目安装

npm install

3. 关键配置项

修改config/index.js文件:

module.exports = {
  CITY: 'shanghai',                // 目标城市
  LOCATION: 'pudong-new-district', // 具体区域
  MEMORIAL_DAY: '2015/04/18',      // 纪念日
  NAME: 'Leo_chen',                // 联系人备注
  SENDDATE: '30 15 8 * * *',       // 定时规则(每天8:15:30)
  // 其他配置...
}

4. 运行项目

npm run start

扫描终端显示的二维码登录微信账号(建议使用小号)

功能扩展思路

  1. 消息内容增强

    • 添加节日/生日自动提醒
    • 整合更多数据源(新闻头条、每日运势等)
    • 支持Markdown/HTML富文本格式
  2. 交互功能扩展

    • 关键词自动回复
    • 对话历史分析
    • 智能对话能力
  3. 稳定性优化

    • 异常自动恢复机制
    • 消息发送失败重试
    • 多账号负载均衡

常见问题解决方案

  1. 登录状态维持问题

    • 使用wechaty-puppet-padplus等稳定协议
    • 实现自动重连机制
  2. 天气数据获取失败

    • 添加备用数据源(和风天气等)
    • 实现请求重试和缓存机制
  3. 定时任务异常

    • 使用PM2等进程管理工具
    • 添加任务执行日志记录

项目优化建议

  1. 代码结构优化

    • 使用TypeScript增强类型安全
    • 采用依赖注入管理服务
    • 实现配置热更新
  2. 安全性增强

    • 敏感信息加密存储
    • 添加请求频率限制
    • 实现权限控制系统
  3. 可观测性改进

    • 添加详细日志记录
    • 集成监控告警系统
    • 实现健康检查接口

总结

微信每日说机器人项目展示了如何将Node.js与微信生态结合,实现自动化社交功能。通过合理的技术选型和模块化设计,开发者可以快速构建出功能完善的微信机器人。该项目不仅适用于个人情感表达,其核心架构也可扩展至客服、营销等多种业务场景。

登录后查看全文
热门项目推荐
相关项目推荐