Привет! Недавно на GitHub нашёл репозиторий Evolution API — открытое решение для работы с WhatsApp через API. После теста понял, что это отличная альтернатива WhatsApp Business API, а также платным сервисам Wazzup, Chat‑API и Green API.
Развернул Evolution API на своем VPS, настроил интеграцию с n8n, и получил полноценный инструмент для автоматизации работы с WhatsApp. В этой статье поделюсь своим опытом установки и настройки — весь процесс занял около часа, включая подключение к WhatsApp и создание простого рабочего автоответчика. Шаблон n8n выложу в своем Telegram канале “ProAi“
Evolution API — это REST API для работы с WhatsApp через веб-версию. По сути, это обертка над WhatsApp Web, которая позволяет:
Отправлять и получать сообщения программно
Работать с группами
Отправлять медиафайлы
Получать статус доставки
И многое другое
Главное преимущество перед платными сервисами Wazzup, Chat‑API, Green API и WhatsApp Business API:
Бесплатно (только затраты на хостинг)
Быстрый старт — можно развернуть за час
Open source — код открыт, можно изучить и доработать
Версия v2, которую я использую, более стабильная и имеет улучшенный веб-интерфейс для управления инстансами.
Вот ссылка на официальный репозиторий https://github.com/EvolutionAPI/evolution-api
Сначала установим Evolution API на сервер VPS
Изначально для своих Docker-контейнеров использовал Beget, но со временем стало понятно, что для множества AI-сервисов и автоматизаций нужно что-то более гибкое и бюджетное. После анализа нескольких провайдеров остановился на сервисе dockerhosting.ru — их предложение с 4GB RAM и 2 CPU за адекватные деньги оказалось оптимальным для моих задач. Я перенес с Beget все свои Docker-контейнеры на этот сервис.
Плюс на VPS полный доступ по SSH, что позволяет гибко управлять всеми контейнерами через терминал. Docker и Portainer уже предустановлены, не нужно ничего дополнительно настраивать.
Также по словам менеджера в ближайшее время добавят локацию Нидерланды, ДНС сервер, шаблон n8n с авторазверткой и собственным доменом и прокси llm.
Для развертывания Evolution API на VPS я обратился за помощью к Perplexity, так как сам в этом мало что смыслю.
bash
ssh root@ваш_ip
Вводим пароль от VPS, пароль при вводе не будет виден. После успешного подключения терминал покажет приветственное сообщение сервера и командную строку вида:
root@vps-название:~#
Проверяем, установлен ли Docker (на dockerhosting.ru Docker установлен по умолчанию поэтому можно пропустить шаг 2 и сразу переходить к шагу 3):
bash
docker --version
docker compose version
Если Docker не установлен, устанавливаем:
bash
apt update
apt install -y docker.io docker-compose
Терминал покажет процесс установки пакетов. После завершения снова проверяем версии:
bash
docker --version
docker compose version
Вывод должен быть примерно таким:
Docker version 24.0.7, build 24.0.7-0ubuntu4
Docker Compose version v2.21.0
Создаем директорию для Evolution API:
bash
mkdir -p ~/evolution-api
cd ~/evolution-api
Команда выполняется без вывода. Проверяем, что находитесь в нужной директории:
bash
pwd
Вывод:
/root/evolution-api
Создаем файл конфигурации:
bash
nano docker-compose.yaml
Откроется текстовый редактор nano. Вставляю следующую конфигурацию:
yaml
version: "3.9"
services:
app:
image: evoapicloud/evolution-api:v2.3.5
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_started
environment:
# Сгенерируйте свой уникальный API ключ!
AUTHENTICATION_API_KEY: ваш_уникальный_api_ключ_32_символа
# Укажите IP вашего сервера
SERVER_URL: http://ваш\_ip:8099
DEL_INSTANCE: "false"
DATABASE_ENABLED: "true"
DATABASE_PROVIDER: postgresql
# ВАЖНО: пароль должен совпадать с POSTGRES_PASSWORD ниже
DATABASE_CONNECTION_URI: postgresql://evolution:ваш_надежный_пароль@postgres:5432/evolution
DATABASE_SAVE_DATA_INSTANCE: "true"
DATABASE_SAVE_DATA_NEW_MESSAGE: "true"
DATABASE_SAVE_MESSAGE_UPDATE: "true"
DATABASE_SAVE_DATA_CONTACTS: "true"
DATABASE_SAVE_DATA_CHATS: "true"
DATABASE_SAVE_DATA_LABELS: "true"
DATABASE_SAVE_DATA_HISTORIC: "true"
DATABASE_CONNECTION_CLIENT_NAME: evolution_v2
CACHE_REDIS_ENABLED: "true"
CACHE_REDIS_URI: redis://redis:6379/1
CACHE_REDIS_PREFIX_KEY: evolution_v2
CACHE_REDIS_SAVE_INSTANCES: "false"
CACHE_LOCAL_ENABLED: "false"
RABBITMQ_ENABLED: "false"
S3_ENABLED: "false"
# Версия WhatsApp Web (оставляем строкой в кавычках)
CONFIG_SESSION_PHONE_VERSION: "2.3000.1023204200"
CLEAN_STORE_CLEANING_INTERVAL: 7200
CLEAN_STORE_MESSAGES: "true"
CLEAN_STORE_MESSAGE_UP_TO: "false"
CLEAN_STORE_CONTACTS: "true"
CLEAN_STORE_CHATS: "true"
ports:
- "8099:8080"
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: evolution
POSTGRES_USER: evolution
# Тот же пароль, что в DATABASE_CONNECTION_URI
POSTGRES_PASSWORD: ваш_надежный_пароль
volumes:
- pgdаta:/var/lib/postgresql/data
ports:
- "5434:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U evolution -d evolution"]
interval: 5s
timeout: 3s
retries: 20
redis:
image: redis:7-alpine
restart: unless-stopped
command: ["redis-server", "--save", "", "--appendonly", "no"]
volumes:
- redisdаta:/data
ports:
- "6389:6379"
volumes:
pgdаta:
redisdаta:
Важно! Перед сохранением замените:
ваш_уникальный_api_ключ_32_символа — на свой уникальный ключ (можно сгенерировать командой в терминале
openssl rand -hex 16
) Обязательно сохраните его где-то так как он еще не один раз понадобиться!
ваш_ip — на IP адрес вашего сервера
ваш_надежный_пароль — на надежный пароль для PostgreSQL (используйте один и тот же пароль в
DATABASE_CONNECTION_URI
и
POSTGRES_PASSWORD
) Тоже советую его сохранить!
Сохраняем файл:
Нажимаем
Ctrl+O
затем
Enter
для сохранения
Нажимаем
Ctrl+X
для выхода из nano
Если нужно сгенерировать надежный API ключ, используйте команду:
bash
openssl rand -hex 16
Терминал выведет строку из 32 символов, например:
b8f3d2a19c4e4b7fa8d35e6c2b9f1a4d
Альтернативный вариант через uuidgen:
bash
uuidgen | tr -d '-' | tr '[:upper:]' '[:lower:]'
Копируем полученный ключ и вставляем в docker-compose.yaml как значение AUTHENTICATION_API_KEY.
Если решили переустановить Evolution API, нужно очистить старые данные:
bash
docker compose down -v
Терминал покажет процесс остановки и удаления контейнеров:
[+] Running 4/4
✔ Container evolution-api-app-1 Removed
✔ Container evolution-api-postgres-1 Removed
✔ Container evolution-api-redis-1 Removed
✔ Volume evolution-api_pgdata Removed
✔ Volume evolution-api_redisdata Removed
Проверяем, не остались ли старые volumes:
bash
docker volume ls | grep evolution
Если что-то осталось, удаляем вручную:
bash
docker volume rm evolution-api_pgdata evolution-api_redisdata
Запускаем Docker Compose:
bash
docker compose up -d
Флаг -d запускает контейнеры в фоновом режиме. При первом запуске Docker начнет скачивать образы. Процесс занимает 1-3 минуты:
[+] Running 15/15
✔ redis 7 layers [⣿⣿⣿⣿⣿⣿⣿] Pulled 8.2s
✔ postgres 6 layers [⣿⣿⣿⣿⣿⣿] Pulled 7.5s
✔ app 8 layers [⣿⣿⣿⣿⣿⣿⣿⣿] Pulled 12.3s
[+] Running 4/4
✔ Network evolution-api_default Created 0.1s
✔ Container evolution-api-redis-1 Started 1.2s
✔ Container evolution-api-postgres-1 Started 1.5s
✔ Container evolution-api-app-1 Started 2.3s
Проверяем, что все контейнеры запустились:
bash
docker compose ps
Вывод должен показывать три контейнера в статусе Up:
NAME IMAGE SERVICE STATUS PORTS
evolution-api-app-1 evoapicloud/evolution-api:v2.3.5 app Up 2 minutes 0.0.0.0:8099->8080/tcp
evolution-api-postgres-1 postgres:16-alpine postgres Up 2 minutes (healthy) 0.0.0.0:5434->5432/tcp
evolution-api-redis-1 redis:7-alpine redis Up 2 minutes 0.0.0.0:6389->6379/tcp
Важно обратить внимание на статус PostgreSQL — должно быть (healthy).
Проверяем логи Evolution API на наличие успешной миграции базы данных:
bash
docker logs evolution-api-app-1 -f
В логах должны быть строки:
╔═══════════════════════════════════════╗
║ Evolution API v2.3.5 ║
║ Starting application... ║
╚═══════════════════════════════════════╝
[INFO] Connecting to database...
[INFO] Database connection established
[INFO] Running migrations...
[INFO] Migration succeeded
[INFO] Connecting to Redis...
[INFO] Redis ready
[SERVER] HTTP - ON: 8080
[INFO] Server is running on port 8080
Если видите Migration succeeded и Server is running on port 8080 — всё работает!
Для выхода из режима отслеживания логов нажимаем Ctrl+C.
Открываем браузер и заходим на http://ваш_ip:8099.
Должны увидеть JSON-ответ:
json
{
"status": 200,
"message": "Welcome to the Evolution API, it is working!",
"version": "2.3.5"
}
Отлично! Evolution API запущен и работает.
Прежде чем перейти к настройке, вот полезные команды для управления контейнерами:
Просмотр логов:
bash
# Логи Evolution API (включая Manager UI)
docker logs evolution-api-app-1 -f
# Логи PostgreSQL
docker logs evolution-api-postgres-1
# Логи Redis
docker logs evolution-api-redis-1
Управление контейнерами:
bash
# Остановка всех контейнеров
docker compose stop
# Запуск остановленных контейнеров
docker compose start
# Перезапуск контейнеров
docker compose restart
# Полное удаление контейнеров (данные сохранятся)
docker compose down
# Удаление контейнеров вместе с данными (ОСТОРОЖНО!)
docker compose down -v
Мониторинг:
bash
# Просмотр использования ресурсов в реальном времени
docker stats
# Проверка статуса контейнеров
docker compose ps
Проверка файрвола (если что-то не открывается):
bash
# Проверка статуса
sudo ufw status
# Открытие необходимых портов
sudo ufw allow 8099/tcp # Evolution API и Manager UI
sudo ufw allow 5678/tcp # n8n (если установлен)
Хорошая новость: в Evolution API v2.3.5 веб-интерфейс Manager уже встроен в основной контейнер! Не нужно устанавливать ничего дополнительно.
Открываем браузер и заходим по адресу http://ваш_ip:8099/manager
Должна открыться страница Evolution Manager с интерфейсом управления инстансами.
Evolution Manager — это удобный веб-интерфейс для управления WhatsApp инстансами. Через него можно создавать инстансы, подключать WhatsApp, настраивать webhook'и и мониторить статус подключений.
На главной странице Manager нажимаем Instance+.
Заполняем поля:
Instance Name:
business-bot
(или любое понятное название)
Token: Тот же API ключ, что указали в docker-compose
Нажимаем “Save”.
Далее нужно нажать на шестеренку созданного инстанса и потом на кнопку “Get QR Code“
Появиться QR-код
Достаем телефон с WhatsApp:
Открываем WhatsApp → Настройки → Связанные устройства
Сканируем QR-код
Через несколько секунд статус инстанса меняется на Connected.
Готово! WhatsApp подключен к API. Теперь можем отправлять и получать сообщения через REST API.
Теперь самое интересное — настроим автоматическую обработку входящих сообщений через n8n.
Перед созданием workflow рекомендую установить специальный пакет n8n-nodes-evolution-api — это community node, который значительно упрощает работу с Evolution API в n8n. Он предоставляет готовые ноды с преднастроенными параметрами вместо ручной настройки HTTP запросов.
Установка через интерфейс n8n:
Открываем ваш n8n
Переходим в Settings (иконка шестеренки в левом меню)
Выбираем Community Nodes
Нажимаем Install a community node
В поле вводим:
n8n-nodes-evolution-api
Ставим галочку
Нажимаем Install
n8n начнет установку пакета. Процесс занимает 1-2 минуты.
После установки в списке нод появятся новые:
Преимущества использования community node:
✅ Готовые настройки для всех методов API
✅ Автоматическая валидация данных
✅ Понятный интерфейс без ручных HTTP запросов
✅ Поддержка всех возможностей Evolution API
Примечание: Если у вас нет доступа к установке community nodes (например, на хостинговой версии n8n), можно использовать стандартную ноду HTTP Request, как описано ниже. Оба подхода работают одинаково эффективно.
Заходим в n8n и создаем новый workflow.
Добавляем ноду “Webhook”:
Настройки ноды “Webhook”:
HTTP Method: POST
Webhook URLs пока оставьте в режиме “Test URL“ далее после полной настройки и отладки workflow переключите на “Production URL“ главное потом не забудьте заменить адрес Webhook в настройках инстанса!
Path:
evolution
Respond: Immediately
Копируем URL webhook — он должен быть вида:
http://ваш_ip:5678/webhook/evolution
Отлично! Теперь у нас есть конкретный адрес webhook. Возвращаемся в Evolution API Manager.
Теперь, когда у нас есть URL webhook из n8n, нужно добавить его в настройки инстанса.
Заходим обратно в Evolution API Manager (http://ваш\_ip:8099), открываем настройки инстанса business-bot.
Переходим во вкладку “Events“ → “Webhook“ заполняем:
URL:
http://ваш_ip:5678/webhook/evolution
(тот что скопировали из n8n)
Далее включаем нужные события (Я пока включил эти):
messages.upsert (новые сообщения)
messages.update (обновления статусов)
connection.update (статус подключения)
Webhook Base64 (Отправка мультимедийных данных base64 в webhook)
Сохраняем настройки. Теперь Evolution API будет отправлять все события в наш n8n workflow.
Чтобы проверить, что webhook работает, отправляю себе в WhatsApp тестовое сообщение с другого номера.
В n8n кликаю Listen for Test Event на Webhook ноде.
Отправляю сообщение "Тест" и смотрю в n8n — должны прийти данные.
Отлично! Данные приходят. Структура примерно такая:
json
{
"headers": { ... },
"body": {
"event": "messages.upsert",
"instance": "business-bot",
"data": {
"key": {
"remoteJid": "79991234567@s.whatsapp.net",
"fromMe": false,
"id": "3EB0C431DF82B2F0A74E"
},
"pushName": "Алексей",
"message": {
"conversation": "Привет"
},
"messageType": "conversation",
"messageTimestamp": 1699364789
},
"sender": "79991234567@s.whatsapp.net"
}
}
Обратите внимание на структуру:
body.event — тип события
body.data.key.remoteJid — ID чата отправителя
body.data.key.fromMe — от меня ли сообщение
body.data.pushName — имя отправителя
body.data.message.conversation — текст сообщения
body.sender — номер отправителя
Теперь создадим простой автоответчик, который будет отвечать на входящие сообщения.
Добавляем ноду “IF” после Webhook:
Настройки условия:
Condition:
{{ $json.body.event }}
Equal
messages.upsert
И проверяем, что сообщение не от вас:
{{ $json.body.data.key.fromMe }}
Equal
false
Это нужно, чтобы обрабатывать только входящие сообщения от клиентов, а не свои исходящие.
После IF добавляем ноду “Set” для удобной работы с данными:
Настраиваем переменные:
chatId:
{{ $json.body.data.key.remoteJid }}
messageText:
{{ $json.body.data.message.conversation }}
senderName:
{{ $json.body.data.pushName }}
Здесь есть два варианта: использовать готовую ноду Evolution API (если установили community node) или стандартную ноду HTTP Request.
Вариант 1: С использованием Evolution API node (рекомендуется)
Добавляем ноду “Enviar texto”:
Настройки:
Recurso: Mensagem
Operação: Send Text
Nome Da Instancia:
{{ $('Webhook').item.json.body.instance }}
Numero Do Destinatario:
{{ $json.chatId }}
Text Message:
Здравствуйте, {{ $json.senderName }}! Спасибо за ваше сообщение: "{{ $json.messageText }}". Мы получили вашу заявку и скоро свяжемся с вами.
В настройках “Credential to connect with” указываем:
API URL вашего Evolution:
http://ваш_ip:8099
API Key: ваш API ключ от Evolution
Вариант 2: С использованием HTTP Request (универсальный)
Добавляю ноду HTTP Request для отправки ответа через Evolution API:
Настройки:
Method: POST
URL:
http://ваш_ip:8099/message/sendText/ваше_имя_инстанса
Важно! Замените ваше_имя_инстанса на точное имя инстанса, которое вы создали в Evolution Manager (например, business-bot или Personal answering machine bot). Не используйте переменные в имени инстанса в URL — только статическое названи
Authentication: None
Send Query Parameters: Off (выключен)
Send Headers: On (включаем тогл - станет зеленым)
Specify Headers: Using JSON (выбираем из выпадающего списка)
В поле JSON для заголовков вставляем:
json
{
"apikey": "ваш_api_ключ"
}
Где ваш_api_ключ — это тот же API ключ, что вы указали в docker-compose.yaml в параметре AUTHENTICATION_API_KEY.
Итоговая схема workflow: Webhook → IF → Set → Evolution API / HTTP Request
Совет: Готовый workflow для автоответчика (с использованием community node Evolution API) можно скачать из моего Telegram канала ProAi. Там же публикую другие полезные автоматизации и интеграции с AI-инструментами.
Документация Evolution API v2: https://doc.evolution-api.com/
Основные эндпоинты:
bash
# Отправка текстового сообщения
POST http://ваш_ip:8099/message/sendText/{instance}
# Отправка медиафайла
POST http://ваш_ip:8099/message/sendMedia/{instance}
# Получение информации об инстансе
GET http://ваш_ip:8099/instance/fetchInstances
# Статус подключения
GET http://ваш_ip:8099/instance/connectionState/{instance}
Все запросы требуют header:
apikey: ваш_секретный_ключ
Хотя у меня все прошло практически гладко после того как разобрался с нюансами, вот несколько типичных проблем и их решения:
Причина: Несовпадение пароля в DATABASE_CONNECTION_URI и POSTGRES_PASSWORD.
Решение: Это самая частая ошибка! Убедитесь, что пароль в строке подключения:
DATABASE_CONNECTION_URI: postgresql://evolution:ваш_пароль@postgres:5432/evolution
точно совпадает с паролем в:
POSTGRES_PASSWORD: ваш_пароль
Если изменили пароль, нужно полностью пересоздать volumes:
bash
docker compose down -v
docker compose up -d
Причина: Старые данные в базе данных с другими настройками.
Решение: Полностью очистите volumes и запустите заново:
bash
docker compose down -v
docker volume ls | grep evolution
docker volume rm evolution-api_pgdata evolution-api_redisdata
docker compose up -d
Причина: WhatsApp Web имеет ограничения на количество одновременных подключений.
Решение: Используйте один телефон для одного инстанса. Не подключайте один номер к нескольким Evolution API одновременно.
Причина: Неправильно указан URL webhook или порты закрыты.
Решение:
Проверьте, что n8n доступен по указанному адресу
Убедитесь, что в настройках инстанса указан правильный webhook URL
Проверьте, что порт 5678 открыт на сервере
Причина: Неправильный API ключ.
Решение: Убедитесь, что в HTTP Request ноде в n8n указан тот же API ключ, что и в docker-compose.yml.
Прежде чем использовать Evolution API в продакшене, учтите следующее:
Evolution API работает через WhatsApp Web, что технически нарушает Условия использования WhatsApp. Хотя многие используют подобные решения без проблем, риск блокировки аккаунта существует, особенно при:
Массовых рассылках незнакомым людям
Высокой частоте отправки сообщений
Спам-активности
Рекомендации для минимизации рисков:
Используйте отдельный номер для тестирования
Не превышайте 100-150 сообщений в день
Добавляйте задержки между сообщениями (3-10 секунд)
Используйте только для ответов существующим клиентам
Имитируйте естественное поведение человека
Для критичных бизнес-процессов рассмотрите официальный WhatsApp Business API, который гарантирует легальность и стабильность работы.
Можно ли использовать? Да, но с умом и осторожностью.
Для чего безопасно? Личная автоматизация, автоответчики для своих клиентов.
Для чего опасно? Массовые рассылки, спам, агрессивная автоматизация.
Главное правило: Ведите себя как человек, а не как бот! ?→??
Развертывание Evolution API на VPS оказалось проще, чем я ожидал. Основные преимущества подхода:
✅ Полный контроль — все данные у вас на сервере
✅ Бесплатно — только стоимость VPS (у меня ~250₽/мес)
✅ Гибкость — интеграция с чем угодно через API
✅ Масштабируемость — можно создать множество инстансов
✅ Производительность — Redis кэширование значительно ускоряет работу
✅ Удобство — готовые community nodes для n8n упрощают автоматизацию
Использование community node n8n-nodes-evolution-api значительно ускоряет разработку workflow — не нужно вручную настраивать каждый HTTP запрос, все работает из коробки.
VPS провайдер: dockerhosting.ru
Если у вас остались вопросы по настройке или хотите узнать больше про AI-автоматизацию — подписывайтесь на мой Telegram канал ProAi. Там регулярно публикую новости, гайды по AI-инструментам, автоматизации и новым сервисам.
Спасибо за внимание! Если материал оказался полезным — поддержите кармой, чтобы я мог публиковать чаще. В планах еще несколько гайдов по AI-автоматизации.


