构建 MultiWA:一个开源自托管的 WhatsApp API 网关

发布: (2026年2月16日 GMT+8 10:34)
5 分钟阅读
原文: Dev.to

Source: Dev.to

(请提供需要翻译的正文内容,我将为您翻译成简体中文。)

为什么我创建了 MultiWA

我需要为业务应用提供 WhatsApp 自动化,但官方的 WhatsApp Cloud API 采用按消息计费,并且需要 Meta 托管。现有的开源替代方案要么只能单会话,要么缺乏完善的管理工具。

于是我创建了 MultiWA —— 一个完全自托管的、多会话的 WhatsApp API 网关,配备管理仪表盘、可视化自动化构建器以及 AI 驱动的自动回复。

什么是 MultiWA?

MultiWA 是一个开源的 WhatsApp Business API 网关,能够让您:

  • 通过单一统一的 API 连接多个 WhatsApp 号码
  • whatsapp‑web.jsBaileys 引擎适配器之间进行选择
  • 通过现代 管理仪表盘 管理所有内容
  • 使用 可视化拖拽式流程构建器 构建自动化
  • 使用 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         │
└──────────────────┴───────────────────────────┘

技术栈

技术
APINestJS 10 + Fastify
AdminNext.js 14 + Tailwind CSS
DatabasePostgreSQL 16 + Prisma ORM
QueueRedis 7 + BullMQ
WhatsAppwhatsapp‑web.js / Baileys
AuthJWT (access + refresh tokens)
RealtimeSocket.IO
ContainerDocker + 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 上开启讨论。

0 浏览
Back to Blog

相关文章

阅读更多 »

n8n 是纯粹的精彩

!Miguel Valdeshttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2...