python-wechaty
用 Python 构建跨平台聊天机器人,一次编写支持微信/WhatsApp/企业微信等多平台
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用 Python 构建跨平台聊天机器人,一次编写支持微信/WhatsApp/企业微信等多平台
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你在深夜调试一个微信机器人,处理了 200 行代码终于跑通了「收到ding回复dong」的功能,却发现换一个平台(从微信换成WhatsApp)又要重写一大半——那种挫败感每个 Chatbot 开发者都不陌生。Python Wechaty 正是为解决这个痛点而生:一次编写,多平台运行,而且用的是你熟悉的 Python。
Python Wechaty 诞生于 2018 年,隶属于 Wechaty 多语言生态项目(Wechaty 最初由李卓桓(@huan)用 TypeScript 实现,随后衍生出 Python、Go、Java、Scala 等多语言版本)。它的核心目标是:让开发者用尽可能少的代码,构建能与用户自然对话的机器人程序。
这个项目的发起背景很清晰——当时市面上主流的即时通讯机器人 SDK,要么强依赖特定平台(微信网页版协议脆弱、WhatsApp API 商业化门槛高),要么学习曲线陡峭(需要理解复杂的异步架构)。Python Wechaty 在 Wechaty TypeScript SDK 稳定后,选择了翻译而非重写的路线,最大化复用经过生产验证的架构设计。
目前项目有两位核心维护者(吴京京 @wj-Mcat 和李卓桓 @huan),一位提交者(黄纯洪 @huangaszaq),GitHub 星标 1825 个,248 个 Fork,代码遵循 Apache-2.0 协议,Python 版本要求 3.7 以上。

图1:Python Wechaty 项目工作流程示意
Python Wechaty 的核心运行逻辑建立在 Python 异步编程之上。当你注册一个消息事件处理器后,框架会在后台自动监听来自即时通讯平台的消息,并通过 asyncio 事件循环分发到对应处理器。
from wechaty import Wechaty
from wechaty.user import Message, Contact
async def on_message(msg: Message) -> None:
from_contact = msg.talker() # 消息发送者
text = msg.text() # 消息文本
room = msg.room() # 判断是否在群聊中
if text == 'ding':
target = from_contact if room is None else room
await target.say('dong') # 回复 dong
await target.say(FileBox.from_url('https://example.com/ding.jpg'))
这种模式的优势在于:开发者无需关心底层网络协议、消息队列或重连逻辑——所有复杂性都被框架隐藏,暴露给用户的只有 msg.text()、talker()、room() 等直觉化的 API。
Python Wechaty 真正的差异化能力在于 跨平台一致性。底层通过 wechaty-puppet 抽象层屏蔽各 IM 平台的差异——微信、WhatsApp、企业微信、Lark、Gitter 都共享同一套上层 API。切换平台只需更换 Puppet Token 和 Token 类型,Bot 核心代码完全不用改动。
支持的平台及其 Token 类型在官方文档中有详细说明,开发者需要向 Wechaty 官方申请相应的 Puppet Token(部分平台免费,部分需要付费)。
Python Wechaty 内置了功能丰富的插件系统(WechatyPlugin),这是一个真正可扩展的模块化架构。插件可以:
from quart import Quart
from wechaty import WechatyPlugin
class MyPlugin(WechatyPlugin):
async def blueprint(self, app: Quart) -> None:
@app.route('/health')
async def health():
return {'status': 'ok'}
框架对即时通讯中所有实体都建立了对应的 Python 类:
| 类名 | 说明 | 核心方法 |
|---|---|---|
Contact | 联系人/好友 | say(), ready(), tags() |
Room | 群聊 | topic(), member_list(), say() |
Message | 消息 | text(), talker(), room(), forward() |
RoomInvitation | 加群邀请 | accept() |
Friendship | 好友申请 | accept(), hello() |
MiniProgram | 小程序 | 支持序列化和转发 |
Image | 图片消息 | thumbnail(), hd(), artwork() |
每个对象都遵循"先 ready() 再操作"的生命周期规范,确保远程数据加载完成后再执行业务逻辑。
Python Wechaty 采用 上层 Bot 框架 + 下层 Puppet 驱动的两层分离架构:
这种设计的精妙之处在于:Bot 开发者写的代码永远不需要直接面对微信协议——协议全在 Puppet Service 端,而 Puppet Service 可以选择本地运行或使用 Wechaty 官方托管的服务。
从 requirements.txt 可以看出项目的核心技术栈选择:
asyncio + pyee(事件发射器),pyee 是 Node.js EventEmitter 的 Python 移植,与 Wechaty TypeScript 原版的理念一脉相承。quart(异步版 Flask,支持 ASGI),用于内置 HTTP 服务和插件路由。grpclib,基于 gRPC 协议与 Puppet Service 通信。SQLAlchemy + APScheduler,支持任务持久化调度。lxml,用于解析微信消息中的 XML 结构(如小程序、链接卡片)。类型检查方面,项目同时使用 mypy(CI 静态检查)和 pytype(Google 开源的渐进式类型检查工具),并在 pyproject.toml 中对外部库做了类型覆盖。
测试方面使用 pytest + pytest-cov,CI 流程包括 PyPI 自动发布(通过 GitHub Actions)。
src/wechaty/
├── wechaty.py # 核心 Bot 类(入口)
├── plugin.py # 插件系统 + 内置 HTTP 服务(35KB,最大的文件)
├── config.py # 全局配置
├── user/ # 用户域对象(Message、Contact、Room 等)
│ ├── message.py # 消息对象
│ ├── contact.py # 联系人
│ └── room.py # 群聊
└── utils/ # 工具函数(QR码、数据转换、日期处理)
plugin.py 是项目中代码量最大的模块(约 35KB),说明插件系统是该框架的核心扩展机制,而非简单的附加功能。
项目内置了基于 Quart 的 Web 服务(默认端口 5000),开发者可以在插件中注册任意 HTTP 路由。这意味着 Bot 进程本身可以同时作为 Web 服务运行,接收外部 HTTP 请求来触发 Bot 行为(如接收第三方系统的 webhook 通知)。
虽然没有独立的 Web UI 界面,但通过插件架构可以实现可交互的 Web 控制面板。
Python Wechaty 以标准 Python 包发布,安装极为简单:
pip3 install wechaty
仅需 Python 3.7+ 环境。项目使用标准 setup.py + pyproject.toml 发布到 PyPI,CI 流程在测试通过后自动发布新版本(__version__ = 0.10.8)。
这是一个纯 CPU 运行的项目,不需要 GPU。最小运行环境:512MB RAM、200MB 磁盘空间,Python 3.7 以上即可。关键外部依赖是 wechaty-puppet-service,需要配置有效的 Token 和 endpoint。
项目仓库中没有 Dockerfile 和 docker-compose.yml,因此不支持容器化一键部署。官方推荐的部署方式是通过 pip 安装后直接运行 Python 脚本。此外,使用 Wechaty 的核心功能需要申请 Puppet Token(部分平台有免费额度),这是除代码本身之外的额外门槛。
无论使用哪个 IM 平台,Python Wechaty 的运行都依赖 Wechaty Puppet Token。这意味着:
对于微信平台,Python Wechaty 底层依赖的是微信网页协议,而非官方 API。这意味着:
由于 Python 版本是从 TypeScript 版翻译而来,Python 版的更新通常会比 TypeScript 版晚一些。部分最新特性可能需要等待翻译和适配。
Python Wechaty 所在的赛道——Conversational RPA(对话式机器人流程自动化)——正在快速增长。从智能客服、自动化工作流到 AI Agent 时代的交互入口,聊天机器人作为人与系统之间的桥梁,价值持续放大。
Python Wechaty 的多语言策略本身就是一个值得关注的模式:不重写核心逻辑,而是翻译实现。这种方式能快速建立生态覆盖,同时让各语言版本共享一个 Puppet 抽象层,确保跨语言体验的一致性。
截至目前,Wechaty 生态已有 TypeScript、Python、Go、Java、Scala 五个稳定实现,开发者可以用自己擅长的语言接入同一个 Bot 后端,这对于多语言团队和现有 Python 技术栈的企业尤其友好。
pip3 install wechatyWECHATY_PUPPET_SERVICE_TOKEN 后直接运行脚本。如果你熟悉 Python asyncio 并且需要构建跨平台的聊天机器人,Python Wechaty 是在生产级质量上有充分验证的选择——它的代码经过了数千个开发者的实际使用验证,TypeScript 原版的架构设计也经受了多年迭代打磨。