基于 Wachaty 开发微信机器人 & 个人微信号小助手平台

wxbot

微信机器人,个人微信号小助手平台, nodejs + nuxt + wechaty 技术栈

准备

微信机器人开源库调研,GitHub 找到以下 3 个开源作品:

  • itchat
    • itchat 是一个开源的微信个人号接口,使用 python 调用微信
    • 使用不到 30 行的代码,你就可以完成一个能够处理所有信息的微信机器人
  • wechaty
    • wechaty 是适用于微信个人的 Bot SDK ,可以使用 6js 创建一个机器人
    • 具有包括 linuxWindowsMacOSDocker 在内的跨平台支持,基于 Node.js
  • vbot
    • vbot 是基于微信 web 版的接口,使用 http 协议 以及轮询方式实现
    • 亮点在于通过匿名函数,能够实现多种有趣的玩法
    • 通过 API,更方便的打造属于自己的网页版微信,基于 PHP

初识 wechaty

Wechaty 是一个开源的的对话机器人 SDK,支持 个人号 微信。它是一个使用 Typescript 构建的 Node.js 应用。支持多种微信接入方案,包括网页,ipadioswindowsandroid 等。同时支持 Linux, Windows, Darwin(OSX/Mac)Docker 多个平台。

先看一下官方文档:

只需要 6 行代码,你就可以 通过个人号 搭建一个 微信机器人功能 ,用来自动管理微信消息。

import { Wechaty } from 'wechaty'

Wechaty.instance()
.on('scan',        qrcode  => console.log('扫码登录:' + qrcode))
.on('login',       user    => console.log('登录成功:' + user))
.on('message',     message => console.log('收到消息:' + message))
.on('friendship',  friendship => console.log('收到好友请求:' + friendship))
.on('room-invite', invitation => console.log('收到入群邀请:' + invitation))
.start()

更多功能包括:

  • 消息处理:关键词回复
  • 群管理:自动入群,拉人,踢人
  • 自动处理好友请求
  • 智能对话:通过简单配置,即可加入智能对话系统,完成指定任务
  • ... 请自行开脑洞

好了,文档齐全 & api 丰富,完全满足我的需求,就选这个库了。

首先跑一个示例看看 wechaty-getting-started。下载完之后先 npm install & npm start 一顿操作,然后运行就有了登录二维码,拿出手机扫码,然后 GG。

基于 Web 微信的限制

查找资料 基于nodejs + wachaty开发微信机器人平台,发现已经有大佬踩过坑了。

原来2017年之后注册的微信号都无法登录网页版微信,而2017年之前注册得微信账号也有很大几率登录不上,找朋友试了也都不行。

检验你的微信号是否支持网页微信登录:

http://wx.qq.com

点击链接链接,PC端进入然后手机扫码登录,若是可以登上,即可以使用上述示例

然后又去看了 vbot 和 itchat,但发现也都是是基于网页协议实现的

从网上查资料,大概有一下几种实现方式:

  • Web网页端:2017年后不再支持新号登录,仅支持老号,并且掉线严重,功能缺失严重
  • Xposed技术:在2019年6月份,微信官方在行业重点打击Xposed,自此行业内一片哀嚎遍野,陆续向iPad/MAC协议转型。具体案例请点击
  • PC Hook:代码注入型,也就是逆向开发。封号情况偏多,使用容易出现追封,公司大规模封号等情况,且目前在营销行业使用率较少,比较偏小团队使用
  • 模拟机:延迟高、消息实时到达率低、模拟人为操作效率慢、功能偏少,承担不了商业化功能
  • ipad协议:安全性较好,功能满足,行业占有率高,但具有能力研发人员偏少,基本两三个团队研发,且目前已有团队解散,部分微信号段登录失败、且通过grpc,mmtls研发,被检测几率存在
  • MAC协议:安全性相比iPad协议更好,功能性相比ipad协议少些,行业内具有研发能力更少,安全性、稳定性比较优秀,不会出现追封、批量封的情况
  • 混合通道:微信内部通道,最高权限,基于MAC与Ipad协议,非grpc,mmtls,功能合适,微信正版通道,不会出现技术封号问题

看了看,内部通道是不可能的,只有ipad协议个mac协议目前最好了

wechaty-puppet-padplus

使用 wechaty-puppet-padplus 一套基于 ipad 协议的包。不过天下没有免费的午餐,需要申请 token,见 Wechaty Token 申请及使用文档和常见问题

聊天机器人 API

目前网络上有许多非常好的智能聊天机器人,这里找了6个目前使用很广泛的:

  • 海知智能 功能很强大,不仅仅用于聊天。需申请 key,免费
  • 思知对话机器人 注册很简单,调用也很简单,而且完全免费
  • 图灵机器人 需要注册账号,可以申请 5 个机器人,未认证账户每个机器人只能回 3 条/天,认证账户每个机器人能用 100 条/天
  • 青云客智能机器人 无须申请,无数量限制,但有点智障,分手神器,慎用
  • 腾讯闲聊 需要注册和申请,还需要加密处理
  • 天行机器人 白嫖用户绑定微信后有 10000 次永久额度,之后 1 元 10000 次

搭建微信机器人平台

项目初始参考 wxbot 搭建机器人后台管理。

项目介绍

  • 控制台
    • 绑定机器人
    • 登录
    • 自动通过好友验证关键词设置,当有人添加机器人时,关键词匹配后直接通过
    • 好友验证通过自动回复
    • 退出
  • 自动回复
    • 普通消息
      • 针对好友/某个群聊/所有群聊 设置关键词自动回复
    • 加群邀请
      • 机器人回复群聊列表,好友可以选择性进群
    • 踢人指令
      • 机器人识别指令,自动把成员移出群聊
  • 我的好友
    • 单独对某个好友送消息
  • 我的群聊
    • 群聊列表,管理所有群聊
    • 设置群聊名称,发布公告,发送群消息
    • 设置群聊基本信息,入群欢迎语,成员违规次数上限,是否受机器人控制
  • 定时任务
    • 针对好友/某个群聊/所有群聊设置定时任务,机器人在指定时间会触发消息推送
  • 智能聊天
    • 低智商对话
    • 成语接龙,查天气,查酒店,歇后语...
admin.png

技术构成

这里就直接介绍下机器人模块

|-- server/
|———- /lib
|------ FriendShip.js   # 友谊关系,好友添加监听
|------ Login.js        # 机器人登录退出
|------ Message.js      # 消息监听处理
|------ Room.js         # 加群,退出群聊
|------ Task            # 机器人定时任务
|———- index.js          # 入口文件

快速开始

准备条件

安装依赖

cnpm i

启动服务

  • 本地单机插件版本

首先需要修改配置文件 local/config.js 或者根目录创建 .local.config.js 配置文件(此文件已加入 .gitignore 中可以防止 token 敏感信息上传至 git)。

npm run local
  • 开发模式
npm run dev
  • 生产模式

先编译项目

npm run build

再启动服务

npm start

打开浏览器,访问 http://localhost:3000/

系统配置

根据实际情况修改 config.js 配置文件,修改后需要重启服务才能生效。
参数说明:

host

String 类型,主机名,配置为 0.0.0.0 表示监听任意主机。

port

Number 类型,端口号。

mongoUrl

String 类型,MongoDB 链接。

secret

String 类型,JWT 秘钥。

tianApiKey

String 类型,天行数据秘钥

线上部署

使用PM2

推荐使用 pm2 进行 Node.js 的进程管理和持久运行。

安装
cnpm i -g pm2
启动
pm2 start pm2.config.js

踩坑

1.Wechaty Token 申请及使用文档和常见问题

2.tianApiKey 申请及天行机器人配置

  • 首先,去 天行数据 注册账号,申请 APIKEY
  • 其次,申请 天行机器人 接口,用于机器人自动回复
  • 最后,别忘记配置 机器人身份设置,否则在机器人回复中会有奇怪的代码串,如 {robotname}

3.部署中执行 sudo pm2 报错 command not found 问题

4.部署中执行 sudo pm2 报错 permission denied 问题

感谢

  • 感谢 beclass 的开源项目 wxbot,这是一套优秀的微信机器人平台。
  • 感谢 Wechaty 团队提供微信机器人 SDK,让开发者可以专注于业务代码。
  • 感谢 句子互动 提供的 pad 协议版 token
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容