这个项目能做什么
OpenWA 是一个免费、开源的 WhatsApp API 网关,提供 HTTP 端点和 webhook,用于收发 WhatsApp 消息,而无需依赖 Meta 的官方 Cloud API。它使用 NestJS、TypeScript 和 React 仪表盘构建,并且原生支持 Docker,便于部署。
架构
OpenWA 采用可插拔架构:数据库后端可以是 SQLite(零配置)或 PostgreSQL,存储和迁移使用本地文件系统或兼容 S3 的服务,缓存可选通过 Redis 实现。媒体文件以内联方式返回给 API 和 webhook 消费方,而不会自动持久化到存储中。
引擎
提供两种 WhatsApp 引擎,各有不同的取舍:
- whatsapp-web.js:驱动真实的 headless Chromium 实例,模拟真实的 WhatsApp Web 流量,因此封号风险较低,但内存占用较高(每个会话约 300–500 MB)。
- Baileys:直接使用多设备 WebSocket 协议,内存占用较低(每个会话约 30–80 MB),但由于更容易被指纹识别,封号风险更高。
核心能力
- 多会话管理:在一个实例上同时运行多个 WhatsApp 账号。
- 消息收发:发送和接收文本、媒体(图片、视频、音频、文档)、表情回应和消息编辑;支持批量发送消息。
- 群组和频道:创建、加入、配置群组;管理标签;支持 WhatsApp Channels/新闻通讯。
- Webhook:实时事件,支持 HMAC 签名验证和可选的预分发过滤器。
- API 认证:operator 和 viewer 令牌,支持会话范围和聊天范围的访问控制,因此集成可以限制到特定会话或单个聊天。
- 通话处理:call.received 事件和按会话自动拒接(仅 Baileys)。
- 基础设施:面向 Kubernetes 的健康检查、后端之间的数据迁移、按会话代理支持、可配置的速率限制和 CIDR 白名单。
安全
生产 Docker 栈通过 dumb-init 和 gosu 以非 root 用户运行 Node 进程,在修复卷所有权后降低权限,并通过专用代理 sidecar 路由 Docker socket 访问,而不是直接挂载 socket。安全文档见 SECURITY.md。
集成
通过沙箱化集成框架,为 Chatwoot 和 Typebot 提供官方插件,并且存在用于 n8n 工作流自动化的社区节点。也支持 ioBroker 等第三方适配器。
警告
由于 OpenWA 通过逆向工程客户端而非 Meta 官方 API 连接,因此始终存在账号受限或封禁的非零风险。维护者建议使用一个你可以承受丢失的专用号码,逐步预热新账号,遵守速率限制,并为关键流程保留短信或电子邮件作为备用方案。在受监管环境(医疗、金融、欧盟/GDPR 场景)中,应改用官方 WhatsApp Cloud API。
快速开始
最快的方式是使用 Docker Compose:克隆仓库,运行 docker compose -f docker-compose.dev.yml up -d,然后在 http://localhost:2785 访问仪表盘和 API。生产部署可以通过 compose profiles 添加 PostgreSQL、Redis 和 MinIO。启用后,可在 /api/docs 使用交互式 Swagger 端点。
评论
0 评分人数达到10人后显示
登录后参与讨论。