Integracja z WhatsApp bez głodu RAM: Spojrzenie na Evolution Go
Jeśli kiedykolwiek łączyłeś WhatsApp z CRM lub budowałeś usługę powiadomień, prawdopodobnie znasz ten problem z zasobami. Większość gotowych rozwiązań Open Source jest przepełniona bibliotekami JavaScript, takimi jak Baileys, lub uruchamia przeglądarkę Puppeteer w trybie headless. Zaledwie kilkaset aktywnych instancji w tym scenariuszu może z łatwością zużyć dziesiątki gigabajtów RAM.
Twórcy Evolution Foundation spotkali się z tym bezpośrednio. Ich główny projekt, Evolution API, jest napisany w Node.js i świetnie sprawdza się w większości zadań. Jednak gdy potrzebowali skalowalności, postanowili przepisać rdzeń silnika w Go.
Tak powstał evolution-go — usługa opakowująca bibliotekę whatsmeow w przejrzyste REST API.

Co kryje się w projekcie
W sercu usługi znajduje się whatsmeow — jedna z najszybszych bibliotek Go do pracy z protokołem WhatsApp. Na tym opiera się framework webowy Gin, który obsługuje żądania HTTP, oraz Swagger do dokumentacji.
Główna idea usługi polega na tym, że samodzielnie zajmuje się całą niskopoziomową pracą z gniazdami, sesjami, autoryzacją przez kod QR i dostarczaniem mediów. Wystarczy wysłać zwykłe żądanie HTTP POST z JSON, a usługa zajmie się resztą.
Główne cechy architektoniczne
Ciekawe jest podejście autorów do dostarczania zdarzeń przychodzących. Często takie usługi ograniczają się tylko do zwykłych webhooków. Tutaj wybór jest szerszy:
- Webhooki dla prostych integracji
- WebSockety dla interfejsów czasu rzeczywistego
- RabbitMQ (AMQP) i NATS dla niezawodnych kolejek w systemach rozproszonych
Jeśli Twój klient wysyła lub odbiera obrazy, wiadomości głosowe lub dokumenty, evolution-go może przesyłać je bezpośrednio do S3 lub MinIO. Cała historia tekstowa i statusy połączeń są zapisywane w PostgreSQL przez GORM, gdy zachodzi taka potrzeba.
Jak to działa w praktyce
Najłatwiejszy sposób uruchomienia projektu to Docker.
git clone https://github.com/evolution-foundation/evolution-go.git
cd evolution-go
make docker-build
make docker-run
Po uruchomieniu aplikacji musisz uzupełnić plik konfiguracyjny .env. Minimalny zestaw ustawień wygląda tak:
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
Jest tutaj ważny szczegół, na który łatwo się nadziać podczas pierwszego uruchomienia. Projekt wykorzystuje system aktywacji. Zaraz po starcie wszystkie punkty końcowe API będą zwracać błąd 403.
Aby usługa działała, musisz otworzyć wbudowany panel kontrolny pod adresem http://localhost:8080/manager/login, wprowadzić swój GLOBAL_API_KEY i przejść krótki proces rejestracji instancji. Po tym status zostanie zapisany do bazy danych, a API stanie się dostępne.
Wysyłanie pierwszej wiadomości
Po aktywacji możesz przejść do Swagger UI pod adresem http://localhost:8080/swagger/index.html lub wykonać żądanie z terminala.
Najpierw tworzymy instancję i pobieramy kod QR do połączenia WhatsApp:
curl -X POST http://localhost:8080/instance/create \
-H "apikey: super-secret-key" \
-H "Content-Type: application/json" \
-d '{"instanceName": "office_number"}'
Pobierz kod QR przez GET /instance/office_number/qrcode, zeskanuj go przez aplikację WhatsApp na telefonie i wyślij testowy tekst:
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."
}'
Gdzie to się przyda
Przede wszystkim projekt zainteresuje tych, którzy budują własne systemy CRM, usługi wsparcia lub systemy powiadomień.
Jeśli potrzebujesz utrzymywać jednocześnie połączone dziesiątki numerów WhatsApp, opcja w Go zaoszczędzi Ci znaczną ilość pieniędzy na serwerach w porównaniu z alternatywami Node.js. Posiadanie NATS i RabbitMQ out of the box znacznie ułatwia integrację z istniejącą architekturą mikrousług.
Minusem jest obowiązkowy krok aktywacji przez menedżera przy pierwszym uruchomieniu. Jeśli planujesz w pełni zautomatyzowane wdrożenie w Kubernetes, będziesz musiał to oprogramować jako osobny krok.
Evolution Go to dobra alternatywa dla rozbudowanych usług integracyjnych. Projekt jest jeszcze młody, ale ma za sobą aktywną społeczność, która jednocześnie rozwija cały ekosystem Evolution Foundation.
Warto wypróbować, jeśli szukasz szybkiej bramki WhatsApp z porządnym REST API i nie chcesz wydawać gigabajtów pamięci na każdą aktywną sesję.
Powiązane projekty