1. Wechaty简介
Wechaty 是一个开源聊天机器人框架SDK,具有高度封装、高可用的特性,支持NodeJs, Python, Go 和Java 等多语言版本。在过去的4年中,服务了数万名开发者,收获了 Github 的 1w+ Star。同时配置了完整的 DevOps 体系并持续按照 Apache 的方式管理技术社区。
参考文档:
- github - wechaty/getting-started
- github - Wechaty/python-wechaty
- github - wechaty/python-wechaty-template
- github - wechaty/python-wechaty-getting-started
- github - wechaty/docker-getting-started
- Everything about Wechaty
- python-wechaty首页
- 使用Padlocal协议
- github - wechaty/puppet-padlocal
- 使用Paimon协议
2. Wechaty核心概念
2.1. 协议
运行微信机器人有多种协议可以使用,有以下几种不同的协议方式:
- Padlocal协议(推荐使用)
- Paimon协议(最简单)
- 免费Web协议(目前已不可用)
- puppet-xp协议(仅windows下可用)
每个协议都有不用的特点,如果不知道选什么,那么建议使用Padlocal协议。
2.2. Token
Token 是 Wechaty 开放源代码项目中,所设计和支持的一种认证技术,可以使用第三方的 Wechaty Puppet Service 服务。Wechaty 社区中,提供 Puppet Service 的第三方,称之为 Wechaty Puppet Service Provider 。句子互动公司是 Wechaty PadPlus, WxWork, Donut 等 Puppet Service 的 Provider,提供对应 Puppet Service 的 Token ,实现开发者可以使用对应的协议服务。
在设置 Token 后,每个 Token 将可以使得一个微信号以 iPad 或 Mac 登录的方式进行登录,避免了既有网页端登录受限的问题。
每个 Token 可以使得一个微信号登录,如果希望多个号同时登录,需要获取多个 Token 。 但 Token 不与微信号绑定,即可以多个号不同时段轮流使用一个 Token 进行登录。
2.3. Puppet
Wechaty 中的术语 Puppet 是用于实现协议插件的抽象类。插件是帮助控制 微信/Whatspp/TikTok 的组件,这就是我们称之为Puttet(傀儡)的原因。
3. Padlocal Getting Started
参考文档:
- github - voidking/python-wechaty-template
- 使用Padlocal协议
- Python Wechaty如何使用PadLocal Puppet Service
- Wechaty Gateway 使用教程
3.1. 申请Token
申请 Padlocal Token 链接:Padlocal
免费试用Token可以使用7天,续费200元/月。建议成为Wechaty开发者,可以免费续期Token,参考文档How to be a Wechaty Contributor。
3.2. 启动Gateway
1、启动Gateway Docker
1 | git clone https://github.com/voidking/python-wechaty-template.git |
其中 puppet_padlocal_xxx
要替换成自己的Token。
最后一行的链接,是一个微信登录的二维码,python-wechaty连接gateway之后能够自动获取到这个链接并展示,以便我们登录。
当然,直接在浏览器中也能访问这个二维码,微信扫码可以登录,不过没什么用。
Gateway启动时,会生成一个WECHATY_TOKEN
,Gateway使用;同时会填入到 .env
文件中,给机器人使用。
运行自己的机器人代码时,也要用到这个 WECHATY_TOKEN
。
2、验证Gateway是否启动成功
1 | curl https://api.chatie.io/v0/hosties/$WECHATY_TOKEN |
3.3. 运行机器人
1 | make bot |
报错:
1 | Traceback (most recent call last): |
这是因为,机器人连接Gateway Docker时,使用了外网IP,而外网IP的8080端口并未开放。
有两个解决办法:(1)开放外网IP的8080端口;(2)配置使用 WECHATY_PUPPET_SERVICE_ENDPOINT
变量。
这里选择第二种方法:
1 | docker run -it --name bot -d \ |
这里有个错误:Wechaty - ERROR - internal error <>
参考Wechaty - ERROR - internal error and failed to scan,忽略即可。
扫描登录,第一次登录时,会询问你登录的是 mac、windows还是ipad,这里要选择ipad。
登录成功后,半分钟左右,会自动退出,提示为了你的账号安全,请重新登录。
然后,再扫描登录,登录成功后还是会退出,后来再扫描二维码就没有反应了。。。
Padlocal Get Started,以失败告终。
4. Paimon Get Started
Paimon相对于Padlocal,缺点很多:发送/接收图片、文件较慢;不支持接收/转发动图;不支持接收/发送语音消息;不支持转发音频/视频等。
不过,Paimon最大的优点就是简单,这就够了,关键是能用。
参考文档:
4.1. 申请Token
申请Token链接:Puppet Service: Paimon
免费试用Token可以使用7天,续费200元/月。建议成为Wechaty开发者,可以免费续期Token,参考文档How to be a Wechaty Contributor。
4.2. 运行机器人
1、安装依赖
1 | pip install wechaty -i https://pypi.tuna.tsinghua.edu.cn/simple |
2、编写脚本 test.py
1 | import asyncio, os |
3、启动脚本
1 | python test.py |
使用微信号B扫码登录微信。
4、测试 ding dong
使用微信号A给微信号B发送一个ding
,可以收到自动回复的dong
,但是并没有接收到图片消息。
代码出现了报错:
经查,是因为教程中给的图片地址过期了,换成可用的地址后,可以正常接收到图片消息了。