>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Go

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.

Evolution Foundation

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