微信对话机器人wechaty开源

Wechaty 是什么

微信个人号功能非常强大和灵活,是一个非常适合用来做ChatBot的载体。它可以灵活不受限制的发送语音短信、视频、图片和文字,支持多人群聊。但是使用微信个人微信号作为ChatBot,需要通过非官方的第三方库接入微信。因为截至2018年底,微信尚无任何官方的ChatBot API发布。
Wechaty 是一个开源的的对话机器人 SDK,支持 个人号 微信。它是一个使用Typescript 构建的Node.js 应用。支持多种微信接入方案,包括网页,ipad,ios,windows, android 等。同时支持Linux, Windows, Darwin(OSX/Mac) 和 Docker 多个平台。
在GitHub上可以找到很多支持微信个人号接入的第三方类库,其中大多都是基于Web Wechat的API来实现的,如基于Python的WeixinBot,基于Node.js的Wechaty等。少数支持非Web协议的库,大多是商业私有闭源的,Wechaty是少有的开源项目支持非Web协议的类库。

只需要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()

更多功能包括:

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

详情请看Wechaty 项目,下面列出一些简单的基本功能

收消息

每次微信收到消息,我们都可以得到一个消息变量,代表了我们收到的消息。消息类型可以为文字、图片、视频、链接分享、联系人等。

wechaty.on('message', msg => console.log(msg))

msg这个变量是一个Message类的实例,通过它我们可以得到每一条消息的所有细节,比如:

在这里插入图片描述

发消息

可以将文本、图片、视频、链接卡片、联系人卡片等信息,发送给其他微信用户,或是发到某一个微信群中。
在这里插入图片描述
如果希望在微信群中发消息,只需要将contact替换为room即可

好友管理

我们可以对好友进行查找,使用 Contact 类,也可以为他们设置别名:

const filehelper = await wechaty.Contact.find({ name: '文件传输助手' })
filehelper.alias('文件中转站')

也可以向其他用户发起新好友请求( 使用 Friendship 类):

wechaty.Friendship.add(stranger)

或者接受好友请求:

wechaty.on('friendship', async friendship => {
  if (friendship.type() === Friendship.Type.Receive) {
    await friendship.accept()
  }
})

群管理

我们可以进行建群、群查找、拉人入群、踢人出群等操作,使用 Room 类。

const newRoom = await wechaty.Room.create([contact1, contact2], '新群主题')
const oldRoom = await wechaty.Room.find({ name: '已经存在的群主题' })

得到了room之后,我们就可以基于这个room进行加人、减人和标题操作,如:
在这里插入图片描述

实现原理

  • 第一阶段:早期是基于网页版的微信客户端实现,详情查看 Wechaty 101: from v0.0 to v0.7 这篇博客通过一个近2个小时的视频教程和ppt 来详细解释了实现原理。所有基于网页版本的实现均是完全开源且免费的。
  • 第二阶段:基于网页版的微信有了较多限制,为了方便开发者继续搭建自己的聊天机器人,我们提供了中间件 Puppet 来支持多种实现方式。查看多种微信接入方式

基于Web 微信的限制

从2017年6月下旬开始,使用基于web版微信接入方案存在大概率的被限制登陆的可能性。 主要表现为:无法登陆Web 微信,但不影响手机等其他平台。 验证是否被限制登陆: https://wx.qq.com 上扫码查看是否能登陆。
从2018年开始,web api 无法创建群聊和自动拉人入群。

解决方案: 第三方提供了非web协议的 Puppet 解决方案,点击购买token , 更多技术细节查看 wechaty-puppet-padchat

支持多种微信接入方式

我们提供多种微信协议的实现方式,在wechaty 的系统中,我们叫她Puppet。Puppet的英文意思是傀儡, 很形象的描述了我们希望Puppet做的事情:帮助 Wechaty 来控制微信的操作。
所有的实现方式都以PuppetXXX 来命名的,比如PuppetPuppeteer 是通过谷歌浏览器,通过 google puppeteer来控制网页微信API。PuppetPadchat 是通过WebSocket 连接一个协议服务器来控制iPad 微信

如果你希望深入了解Puppet是如何在Wechaty 运行的,你可以在https://github.com/Chatie/wechaty-puppet/blob/master/src/puppet.ts 查看源代码。
基于网页微信的实现方式是免费的,基于其他的接入方式需要付费购买,也可以参加开源激励计划获取免费token,点击了解如何获取Token
以下是Puppet 和Wechaty 的架构图,更多Puppet 的介绍在这里: Puppet in wiki
在这里插入图片描述

快速开始

  • 安装 Node.jS (>=10)
  • 从GitHub 上下载 wechaty-getting-started 代码
git clone https://github.com/wechaty/wechaty-getting-started
cd wechaty-getting-started
  • 安装依赖
npm install
  • 运行Bot
npm start
// 或者直接用node 运行代码
node examples/starter-bot.js
// npm start 实际上执行的命令是:node examples/starter-bot.js你可以基于examples 目录下的starter-bot.js 文件修改你希望实现的功能。

运行成功后,你可以看到下面的界面:
在这里插入图片描述
以上是默认使用网页微信的解决方案,但是网页微信有如下的限制:

  • 登录限制:从2017年6月下旬开始,使用基于web版微信接入方案存在大概率的被限制登陆的可能性。 主要表现为:无法登陆Web 微信,但不影响手机等其他平台。验证是否被限制登陆: https://wx.qq.com 上扫码查看是否能登陆。
  • 功能限制:Web 版本会限制微信一些方法的获取,具体参考puppet 功能对比。

为了帮助开发者快速实现自己希望实现的功能,我们提供了一个ipad 版本的接入方式,运行下面两条命令就可以了:

  1. 安装 wechaty-puppet-padchat
    npm install wechaty-puppet-padchat

  2. 通过环境变量设置接入方式并设置token 运行
    WECHATY_PUPPET_PADCHAT_TOKEN=你的token
    WECHATY_PUPPET=padchat
    npm start

针对环境变量的进一步说明:

WECHATY_PUPPET_PADCHAT_TOKEN:点击链接申请token
WECHATY_PUPPET :切换到wechaty-puppet-padchat 的puppet 来运行,即从使用web 版本变为使用ipad 版本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值