内存友好的 WhatsApp 集成方案:深入了解 Evolution Go
如果你曾经将 WhatsApp 接入 CRM 或构建过通知服务,你可能对资源消耗问题并不陌生。大多数现成的开源方案都塞满了 JavaScript 库(如 Baileys)或运行无头 Puppeteer 浏览器。在这种场景下,仅几百个活跃实例就可能轻松消耗数十 GB 的内存。
Evolution Foundation 的开发者们直接遇到了这个问题。他们的主要项目 Evolution API 采用 Node.js 编写,在大多数场景下运行良好。但当需要扩展时,他们决定用 Go 重写核心引擎。
由此诞生了 evolution-go——一个将 whatsmeow 库封装为简洁 REST API 的服务。

项目内部结构
服务的核心是 whatsmeow——目前最快的 Go 语言 WhatsApp 协议库之一。在此之上是 Gin Web 框架,负责处理 HTTP 请求,以及用于文档生成的 Swagger。
服务的主要设计理念是自行处理所有底层 socket 通信、会话管理、QR 码授权和媒体传输。你只需发送一个普通的 HTTP POST 请求(携带 JSON),剩下的由服务来完成。
架构亮点
作者们对传入事件推送的处理方式很有意思。通常这类服务只支持普通的 Webhook。而在这里,选择更加丰富:
- Webhook——适用于简单的集成场景
- WebSocket——适用于实时界面
- RabbitMQ(AMQP)和 NATS——适用于分布式系统中的可靠队列
如果你的客户端需要发送或接收图片、语音消息或文档,evolution-go 可以直接将它们转存到 S3 或 MinIO。所有文本历史记录和连接状态会在需要时通过 GORM 保存到 PostgreSQL。
实际运行方式
运行项目最简单的方式是通过 Docker。
git clone https://github.com/evolution-foundation/evolution-go.git
cd evolution-go
make docker-build
make docker-run
启动应用后,你需要填写配置文件 .env。最小配置集如下:
SERVER_PORT=8080
CLIENT_NAME=my_app
GLOBAL_API_KEY=super-secret-key
POSTGRES_AUTH_DB=postgresql://postgres:pass@localhost:5432/evogo_auth?sslmode=disable
POSTGRES_USERS_DB=postgresql://postgres:pass@localhost:5432/evogo_users?sslmode=disable
DATABASE_SAVE_MESSAGES=false
这里有一个在首次启动时容易踩坑的重要细节。项目使用了激活系统。启动后,所有 API 端点都会返回 403 错误。
要使服务正常运行,需要在地址 http://localhost:8080/manager/login 打开内置控制面板,输入你的 GLOBAL_API_KEY,完成简短的实例注册流程。之后状态会保存到数据库,API 即可使用。
发送第一条消息
激活后,你可以访问地址 http://localhost:8080/swagger/index.html 处的 Swagger UI,或通过终端发送请求。
首先,创建一个实例并获取用于关联 WhatsApp 的 QR 码:
curl -X POST http://localhost:8080/instance/create \
-H "apikey: super-secret-key" \
-H "Content-Type: application/json" \
-d '{"instanceName": "office_number"}'
通过 GET /instance/office_number/qrcode 获取 QR 码,用手机上的 WhatsApp 应用扫描,然后发送一条测试文本:
curl -X POST http://localhost:8080/message/sendText \
-H "apikey: super-secret-key" \
-H "Content-Type: application/json" \
-d '{
"instanceName": "office_number",
"number": "79991112233",
"text": "Привет! Это сообщение отправлено через Evolution Go."
}'
适用场景
首先,这个项目最适合那些正在构建自有 CRM 系统、客服系统或通知服务的开发者。
如果你需要同时保持数十个 WhatsApp 号码连接,Go 方案相比 Node.js 替代品能为你节省大量服务器成本。开箱即用的 NATS 和 RabbitMQ 支持也让接入现有微服务架构变得更加容易。
不足之处在于,首次启动时必须通过管理器完成激活步骤。如果你计划进行完全自动化的 Kubernetes 部署,需要将此作为单独步骤进行脚本化。
Evolution Go 是重量级集成服务的一个良好替代方案。项目虽然还很年轻,但背后有一个活跃的社区,正在同步推进整个 Evolution Foundation 生态系统的开发。
如果你正在寻找具有完整 REST API 的快速 WhatsApp 网关,且不想让每个活跃会话都消耗数 GB 内存,值得一试。
相关项目