构建 MultiWA:一个开源自托管的 WhatsApp API 网关
Source: Dev.to
(请提供需要翻译的正文内容,我将为您翻译成简体中文。)
为什么我创建了 MultiWA
我需要为业务应用提供 WhatsApp 自动化,但官方的 WhatsApp Cloud API 采用按消息计费,并且需要 Meta 托管。现有的开源替代方案要么只能单会话,要么缺乏完善的管理工具。
于是我创建了 MultiWA —— 一个完全自托管的、多会话的 WhatsApp API 网关,配备管理仪表盘、可视化自动化构建器以及 AI 驱动的自动回复。
什么是 MultiWA?
MultiWA 是一个开源的 WhatsApp Business API 网关,能够让您:
- 通过单一统一的 API 连接多个 WhatsApp 号码
- 在 whatsapp‑web.js 与 Baileys 引擎适配器之间进行选择
- 通过现代 管理仪表盘 管理所有内容
- 使用 可视化拖拽式流程构建器 构建自动化
- 使用 OpenAI 或 Google AI 设置 AI 驱动的自动回复
- 通过 REST API 发送消息,并提供 TypeScript、Python 和 PHP 的官方 SDK
架构
┌──────────────────────────────────────────────┐
│ Nginx (SSL/Proxy) │
├──────────────────┬───────────────────────────┤
│ Admin (Next.js) │ API (NestJS/Fastify) │
│ Port 3001 │ Port 3000 │
│ │ WhatsApp Engine Adapters │
│ │ ├─ whatsapp-web.js │
│ Worker (BullMQ) │ └─ Baileys │
│ │ PostgreSQL │ Redis │
└──────────────────┴───────────────────────────┘
技术栈
| 层 | 技术 |
|---|---|
| API | NestJS 10 + Fastify |
| Admin | Next.js 14 + Tailwind CSS |
| Database | PostgreSQL 16 + Prisma ORM |
| Queue | Redis 7 + BullMQ |
| whatsapp‑web.js / Baileys | |
| Auth | JWT (access + refresh tokens) |
| Realtime | Socket.IO |
| Container | Docker + Docker Compose |
关键特性
多会话管理
连接无限的 WhatsApp 账户,每个账户独立运行,拥有自己的二维码认证、状态监控和消息路由。
可插拔引擎适配器
MultiWA 使用适配器模式来支持 WhatsApp 引擎。目前支持 whatsapp‑web.js(基于 Chromium)和 Baileys(轻量级,无需浏览器)。您可以在每个会话中切换引擎,而无需更改应用代码。
可视化自动化构建器
使用拖拽界面创建消息自动化流程。定义触发器(关键词匹配、正则、Webhook)、条件和操作(回复、转发、API 调用)——全部无需编写代码。
AI 知识库
上传文档,让 AI 自动处理客户咨询。支持 OpenAI 和 Google AI 作为提供商。系统使用 RAG(检索增强生成)从您的知识库中查找相关答案。
企业功能
- 使用 JWT 进行身份验证并支持刷新令牌
- API 密钥管理,支持作用域和过期时间
- Webhook 订阅,实现实时事件通知
- 定时消息和广播
- 审计日志和分析仪表板
- 符合 GDPR 的数据导出和删除
使用 Docker 快速入门
git clone https://github.com/ribato22/MultiWA.git
cd MultiWA
cp .env.production.example .env
docker compose -f docker-compose.production.yml up -d
API 在端口 3333 上运行,并提供 Swagger 文档,管理员仪表盘在端口 3001 上。
发送您的第一条消息
curl -X POST http://localhost:3333/api/v1/messages/send \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"profileId": "profile-uuid",
"to": "6281234567890",
"message": "Hello from MultiWA!"
}'
SDK 支持
官方 SDK 支持三种语言。以下是 TypeScript 示例:
import { MultiWA } from '@multiwa/sdk';
const client = new MultiWA({
baseUrl: 'http://localhost:3000',
apiKey: 'your-api-key',
});
await client.messages.send({
profileId: 'profile-uuid',
to: '6281234567890',
message: 'Hello!',
});
贡献
MultiWA 使用 MIT 许可证,欢迎贡献。无论是错误报告、功能请求,还是拉取请求——一切皆受欢迎。
GitHub:
如果您对架构有任何疑问或需要帮助进行设置,欢迎在评论中提问或在 GitHub 上开启讨论。