>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Go

内存友好的 WhatsApp 集成方案:深入了解 Evolution Go

如果你曾经将 WhatsApp 接入 CRM 或构建过通知服务,你可能对资源消耗问题并不陌生。大多数现成的开源方案都塞满了 JavaScript 库(如 Baileys)或运行无头 Puppeteer 浏览器。在这种场景下,仅几百个活跃实例就可能轻松消耗数十 GB 的内存。

Evolution Foundation 的开发者们直接遇到了这个问题。他们的主要项目 Evolution API 采用 Node.js 编写,在大多数场景下运行良好。但当需要扩展时,他们决定用 Go 重写核心引擎。

由此诞生了 evolution-go——一个将 whatsmeow 库封装为简洁 REST API 的服务。

Evolution Foundation

项目内部结构

服务的核心是 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 内存,值得一试。

相关项目