Как отдать WhatsApp в распоряжение кода, не изобретая SMS-шлюз заново

03 окт 2026
405
134
8
2 недели

Знакомая ситуация? Заказчику нужны уведомления в мессенджер, а вы сидите и выбираете между дорогим корпоративным API, где каждое сообщение тарифицируется, и самодельным скриптом на Python, который ломается на второй неделе. Я часто сталкиваюсь с этим в проектах автоматизации: интеграция с WhatsApp выглядит простой задачей ровно до момента, когда нужно масштабировать её на несколько аккаунтов и не словить бан.

Пока листал GitHub в поисках готового решения, наткнулся на WA-AKG от индонезийского разработчика Aditya. Проект пока не слишком известен — 405 звёзд на момент написания, но у него есть 134 форка, что для инструмента такого профиля довольно бодрый показатель. Давайте разберёмся, что он умеет и где может пригодиться.

Что это вообще такое

WA-AKG — это self-hosted шлюз, который прикручивает к WhatsApp REST API и веб-дашборд. Технически всё просто: приложение держит WebSocket-соединение с серверами WhatsApp через библиотеку @whiskeysockets/baileys, а наружу отдаёт обычные HTTP-эндпоинты. Вы отправляете POST-запрос — уходит сообщение. Приходит новое сообщение — срабатывает вебхук.

Проще говоря, WhatsApp становится ещё одним сервисом в вашей инфраструктуре, наравне с базой данных или платёжным провайдером. Никаких официальных тарифов за сообщение, всё крутится на вашем сервере.

Стек стандартный для современного веб-приложения: Next.js, TypeScript, Prisma в качестве ORM, MySQL или PostgreSQL под капотом. Ничего экзотического, развернуть сможет любой, кто хоть раз настраивал Node-проект.

Реклама

Что внутри

Возможностей в README перечислено много, так что остановлюсь на том, что реально цепляет.

Мультисессионность. Можно подключить сколько угодно WhatsApp-аккаунтов одновременно. Каждый сканирует свой QR-код и живёт независимо. Для агентств или компаний с несколькими брендами это прямо в точку — не нужно плодить отдельные сервера под каждый номер.

Антибан при рассылках. Мессенджер не любит массовые сообщения, и разработчики это учли. Встроенная рассылка дробит отправку на батчи и вставляет случайные задержки от 10 до 30 секунд. Полной защиты от бана это не даёт, но выглядит куда разумнее, чем цикл, который выпаливает тысячу сообщений за минуту.

Автоответы с контекстом. Правила можно навешивать отдельно на личные чаты, группы или вообще на все переписки. В ответ можно вложить не только текст, но и медиа. Плюс работают белый и чёрный списки — для команд бота и для автоответов.

Планировщик. Отложенная отправка с поддержкой картинок, видео и документов. Пригодится для напоминаний или постов по расписанию.

Вебхуки. Событие вроде входящего сообщения, смены статуса подключения или обновления группы улетает на ваш внешний сервис в виде JSON. Выглядит это так:

{
  "event": "message.received",
  "sessionId": "xgj7d9",
  "timestamp": "2026-01-17T05:33:08.545Z",
  "data": {
    "from": "6287748687946@s.whatsapp.net",
    "type": "TEXT",
    "content": "saya sedang reply",
    "isGroup": false
  }
}

Из приятных мелочей — встроенный генератор стикеров с удалением фона через remove.bg. Казалось бы, зачем это в шлюзе, но такие вещи внезапно востребованы в клиентских ботах.

Интеграция с n8n

Отдельно стоит упомянуть поддержку n8n. Разработчик выпустил официальные community-ноды (n8n-nodes-wa-akg) с action- и trigger-узлами. То есть можно собирать сценарии мышкой в low-code редакторе: прилетело сообщение — записали в таблицу — ответили — переслали в CRM. Для тех, кто не хочет писать код под каждую мелочь, это снимает половину боли.

Чего стоит осторожно касаться

README честно предупреждает о проблемах с обновлением статусов (сторис). Текстовые статусы с кастомным фоном могут отображаться криво, а медиа-статусы иногда не заливаются на серверы WhatsApp. Функция в активной разработке, в продакшн её лучше пока не тащить.

Про документацию: авторы выложили целый набор файлов в docs — описание API, переменных окружения, схему базы. Заявлено 109+ эндпоинтов со Swagger UI по адресу /docs. Это уже неплохо для проекта с четырьмя сотнями звёзд. Но живых примеров на реальных кейсах я не нашёл, так что на старте придётся копать документацию самому.

Как это запустить

Развёртывание стандартное. Нужен Node.js 20+ (рекомендуют 22), MySQL или PostgreSQL и PM2 для продакшена:

git clone https://github.com/mrifqidaffaaditya/WA-AKG.git
cd WA-AKG
npm install
cp .env.example .env
# заполняем DATABASE_URL, AUTH_SECRET, PORT
npm run db:push
npm run make-admin admin@example.com password123

Дальше либо npm run dev для разработки, либо ./start.sh, который сам поставит зависимости, синхронизирует схему БД, соберёт проект и поднимет процесс в PM2. Есть и альтернатива через Docker Compose, но авторы честно рекомендуют PM2.

Отправка сообщения выглядит буднично:

curl -X POST http://localhost:3000/api/messages/session_01/62812345678@s.whatsapp.net/send \
  -H "X-API-Key: your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "message": { "text": "Hello from WA-AKG!" } }'

Кому это зайдёт

Если вы строите клиентский сервис, поддержку, интернет-магазин или внутреннюю автоматизацию поверх WhatsApp и не хотите платить за каждое сообщение официальному брокеру — WA-AKG стоит попробовать. Он закрывает ровно тот участок, где обычно начинается самодеятельность: подключение аккаунтов, планировщик, автоответы и вебхуки в одном флаконе.

С другой стороны, не питайте иллюзий: это неофициальный клиент, и риск блокировки аккаунта никуда не девается, как и у любого решения на Baileys. Для критичных бизнес-процессов с гарантией доставки официальное API всё ещё безопаснее — пусть и дороже.

Начал бы я с одного тестового аккаунта и одной задачи: например, уведомления о заказах. Если связка окажется стабильной неделю-другую, можно подключать остальное. Проект молодой (первый коммит датируется январем 2026-го), но развивается активно, так что за ним стоит присмотреть.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.