我们设计了一个租房平台的微信小程序,为了方便推广,针对每个地区开设了一个或多个微信群,每天会在群里发文字和小程序的二维码来推广小程序和阐述群规定。因为所开的群太多,如果是人工发送这些东西,会很浪费时间。因为发的东西都是固定的,所以考虑使用微信机器人。
具体实现
- 代码repository
git clone git@github.com:isnl/wechat-robot.git
- 代码结构
- bot.js: 项目入口文件,实现了扫码微信,登录登出功能。
- daily-job.js: 群发逻辑的实现函数,可以自定义每天发送的文字以及发送时间。
安装依赖
- npm install wechaty@latest
- npm install wechaty-puppet@latest
- npm install wechaty-puppet-padplus@latest
- npm install qrcode-terminal
- npm install node-schedule
- sudo npm install ts-node typescript -g
代码实现
扫描二维码登录
这个功能主要依赖qrcode-terminal,代码实现如下:
function onScan(qrcode, status) {
if (status === ScanStatus.Waiting || status === ScanStatus.Timeout) {
require('qrcode-terminal').generate(qrcode, {
small: true
}) // show qrcode on console
const qrcodeImageUrl = [
'https://api.qrserver.com/v1/create-qr-code/?data=',
encodeURIComponent(qrcode),
].join('')
log.info('StarterBot', 'onScan: %s(%s) - %s', ScanStatus[status], status, qrcodeImageUrl)
} else {
log.info('StarterBot', 'onScan: %s(%s)', ScanStatus[status], status)
}
}
定时发送消息的功能
主要是依赖node-schedule,通过修改schedule的format可以指定在每天的什么时候发送消息。
// * * * * * *
// ┬ ┬ ┬ ┬ ┬ ┬
// │ │ │ │ │ │
// │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
// │ │ │ │ └───── month (1 - 12)
// │ │ │ └────────── day of month (1 - 31)
// │ │ └─────────────── hour (0 - 23)
// │ └──────────────────── minute (0 - 59)
// └───────────────────────── second (0 - 59, OPTIONAL)
运行代码
node bot.js