📌 项目地址:rmyndharis/OpenWA | ⭐ 4,842 颗星 | 🔧 TypeScript | 📜 未标注
这东西到底是干啥的
说白了,OpenWA是一个把WhatsApp Web协议包装成REST API的开源服务。它跑在你自己的服务器上,让你能用HTTP发消息、管理群组、收webhook,所有数据都不经过Meta的服务器。
项目有4842个star,TypeScript写的,README列出了二十多项功能,全是✅。你可能觉得这项目很香——尤其是被官方Business API的按对话计费和审核流程恶心过之后。
但我要先说明白:它底层走的是WhatsApp Web协议,不是官方API。这意味着你的号码可能被WhatsApp封禁,这个风险README没强调,但你必须心里有数。
插件化架构到底值什么价
README专门用表格标榜“Pluggable Architecture”,说的是三层层可以独立换:
- 数据库:SQLite ↔ PostgreSQL
- 存储:Local ↔ S3
- 缓存:Memory ↔ Redis
切换方式只改配置文件的provider和连接字符串,不用动一行业务代码。
这个设计在开发和生产环境分离时很值钱。开发阶段你用Docker起一个SQLite+内存缓存的实例,改完代码秒级验证。上线前改成PostgreSQL+Redis,性能和可靠性都够。运维只需要维护一套配置模板,不用在代码里写if dev if prod。
但README没给配置文件长什么样。仓库根目录没有.env.example,你得自己翻./docs/config-service.md(如果有)。建议部署前先搞清楚配置结构。
另外,SQLite和PostgreSQL在并发写入性能上差很多。如果OpenWA的数据库抽象层只是ORM通用接口(比如TypeORM),换库后可能有性能差异。我建议你在部署前做一个小测试:批量写入1000条消息,分别用SQLite和PostgreSQL跑一次,看看耗时的差距。如果差别超过10倍,就要评估你真实场景的写频率。
功能表格里哪些是真正有用的
README三个表格,列了二十多项功能,全标✅。我挑几个我觉得实际价值高的。
多会话。一个实例同时跑多个WhatsApp号码,每个独立会话。这个功能不算稀奇,但稳定做到不容易。我以前试过同类项目(比如WhatsApp-Web.js自己封装),会话一多就内存泄漏或WebSocket断连,撑不过一周。OpenWA用TypeScript,类型安全有助于减少这类混乱,但README没给出压力测试数据——最多支持多少个会话?内存占多大?
代理支持。每个会话可以单独配置HTTP或SOCKS代理。如果你有跨境需求,多个号码可以分配不同出口IP,避免WhatsApp检测到同一IP跑多个号而被封。这个是刚需。
CIDR白名单。允许只让特定IP段访问API。比API Key更底层,适合把API暴露给内网或特定VPC段。配合API Key认证,双重防护,安全上放心一些。
Swagger文档。启动后访问/docs路径,能在线填参数、点发送,直接测试所有接口。这对新手和调试都很友好。README说“Interactive API documentation”,没错。
群组和频道API。支持创建、管理群组,以及WhatsApp Channels(订阅号)。其他开源网关很多不支持频道。如果你需要一对多广播,这个有用。
不过我怀疑有些功能是凑数,比如标签管理、消息状态追踪。这些在Web应用里常见,但OpenWA能稳定同步WhatsApp真实状态吗?官方API的消息状态都有延迟,Web协议方案大概率更不靠谱。你用它追踪状态,别指望实时。
风险:README没说的,我说
封号风险
所有基于WhatsApp Web协议的项目都绕不开。WhatsApp随时可能检测到非官方客户端,封了你的号码。README只字未提。如果你对封号零容忍,直接看官方Business API。用OpenWA只放不重要的号码,做好随时换号的准备。
会话持久化脆弱
服务重启、网络中断、WhatsApp Web会话过期,都会导致掉线。README说支持多会话,但没提重连机制。我见过一些同类项目几秒自动重连,有的需要手动扫码,有的重试几次后放弃。你要自己验证一下:停掉容器再启动,会话能不能自动恢复?断网10分钟再连,会不会掉线?如果必须手动扫码,这个项目就不适合放生产。
审计日志无限增长
所有API操作都记录在数据库里。README没提日志表有没有过期清理。生产环境跑一个月,日志表可能膨胀到几百MB。SQLite数据库文件太大严重影响性能;PostgreSQL还好,但也要定期清理。建议加个定时任务,每天删除30天前的日志。
缺少快速上手示例
README没有一行curl命令。发一条文本消息需要什么参数、怎么认证,都得自己去翻Swagger文档。如果你是新手,启动Docker后先访问/docs,找到POST api/messages/send,填上API Key和消息内容就能测试。但这个门槛对第一次接触的人不低。
我建议的测试步骤
如果你决定试一下,按这个顺序来:
- 拉Docker镜像(README说“Docker Native”),不用看配置文件,先跑起来。
- 访问
/docs,找到发送消息的接口,用测试号码发一条“hello”。看响应有没有报错。 - 故意断网:拔服务器互联网连接,等5分钟再恢复,观察会话是否自动重连。如果掉线后必须手动扫码,这个项目不适合你。
- 压力测试:用脚本连续发100条消息,看CPU和内存变化。有内存泄漏的话,半小时就见分晓。
谁该用,谁不该用
适合:你数据必须留在自己手里,不接受第三方SaaS;你需要同时管理多个号码,每个号要不同的出口IP和代理;你有Docker和运维经验,能处理会话掉线和手动扫码;你愿意花时间翻文档填坑。
不适合:你只想偶尔发几条消息,为一两个号码搭全套服务不划算;你对封号零容忍;你没有24小时运行的服务器,会话经常断;你看到Swagger就头疼。
我认为OpenWA是目前功能覆盖最全的开源WhatsApp网关之一。插件化架构在基础设施层面给了不错的灵活性,功能列表没有虚标。如果你能接受Web协议的风险并愿意投入运维精力,花半小时Docker试试不算亏。但如果你需要稳定、低维护的生产级服务,官方Business API还是更靠谱的选择。