Как отдать WhatsApp в распоряжение кода, не изобретая SMS-шлюз заново
Знакомая ситуация? Заказчику нужны уведомления в мессенджер, а вы сидите и выбираете между дорогим корпоративным 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-го), но развивается активно, так что за ним стоит присмотреть.
