DeskcommCRM: как развернуть опенсорсную CRM с ИИ-агентами для WhatsApp на своем сервере
Продажи через WhatsApp требуют постоянного участия менеджеров или подключения сторонних сервисов вроде Kommo или Intercom. Когда база клиентов растет, счета за подписки и тарифы за каждое рабочее место превращаются в ощутимую статью расходов. Разработчик из Бразилии Рафаэль Мельгара выложил на GitHub проект DeskcommCRM. Это self-hosted система управления продажами, заточенная под работу с ИИ-агентами и интеграцией с мессенджером.
Проект позиционируют как систему управления продажами для малого и среднего бизнеса. Изначально проект создавали под интернет-магазин с интеграцией Nuvemshop, но позже архитектуру переработали. В результате получилось гибкое решение для клиник, агентств недвижимости, инфобизнеса и любых сервисов, принимающих заявки из чатов.
Стек технологий и архитектура
Архитектурно DeskcommCRM собран на привычном стеке для современного веб-приложения:
- Frontend и backend: Next.js 16 (App Router) с React 19 и TypeScript в строгом режиме.
- База данных и авторизация: Supabase (PostgreSQL), где активно используются механизм Row Level Security (RLS) и расширение pgvector для векторного поиска.
- Интеграция с WhatsApp: WAHA (WhatsApp HTTP API) на движке NOWEB, работающий в Docker-контейнере.
- ИИ-слой: Vercel AI SDK v7 с интеграцией моделей Anthropic Claude, OpenAI и Google Gemini.
Система содержит встроенный сервер MCP (Model Context Protocol). Это означает, что внешние ИИ-агенты могут подключаться к CRM по общему протоколу и совершать операции с воронкой продаж.
Умные агенты вместо обычных автоответчиков
В DeskcommCRM ИИ-агенты работают иначе, чем привычные чат-боты с жестким деревом сценариев. Бот выполняет роли ответственного менеджера: ведет диалог, квалифицирует лида, двигает его по карточкам воронки и передает диалог человеку, когда не может ответить самостоятельно.
Пользователь -> WhatsApp (WAHA) -> Event Log -> Vercel AI SDK (RAG via pgvector) -> Ответ/Действие в CRM
Для каждого клиента создается изолированная база знаний. Диалоги, завершившиеся успешно, попадают обратно в векторное хранилище. Таким образом агент постепенно накопит контекст и станет точнее отвечать на типовые вопросы. При этом передача управления человеку контролируется правилами, чтобы бот не отправлял лишнего.
Вебхуки и очереди обработки
Для приёма заявок с внешних лендингов и форм в системе предусмотрены точки входа вебхуков. Любой POST-запрос с параметрами в формате JSON или urlencoded сразу создает лида на нужной стадии воронки.
Интересно устроена обработка событий внутри приложения. Чтобы не перегружать триггеры PostgreSQL HTTP-запросами, разработчик применил паттерн таблицы событий. Все действия (изменение статуса лида, появление тега, входящее сообщение) записываются в таблицу event_log. Фоновый процесс раз в минуту забирает события из очереди и исполняет автоматизации вида «когда/если/тогда».
На практике схема выглядит так:
# Пример вызова воркера для разбора очереди событий
curl -X POST https://your-domain.com/api/v1/cron/event-log-drain \
-H "Authorization: Bearer $INTERNAL_SECRET"
В облаке Vercel этот роут вызывает обычный Cron Job, а при развертывании на собственном сервере запуск подхватывает системный crontab.
Безопасность и проверка изоляции данных
Поскольку CRM поддерживает мультиарендность (multi-tenancy), критически важно гарантировать, чтобы одна компания не увидела чужие контакты или переписки. В DeskcommCRM изоляция построена на политиках RLS в PostgreSQL.
В репозитории настроен пайплайн CI, который при каждом пулле запускает 364 теста инвариантов на чистом инстансе базы данных. Один из ключевых тестов генерирует две разные организации, имитирует JWT-токены пользователей и проверяет, вернет ли база хотя бы одну строку чужой компании. Если политика безопасности пропускает чужие данные, сборка падаёт.
Быстрый запуск в локальном окружении
Для знакомства с кодом проект поднимается локально за пару минут. Потребуется Node.js 22 версии, pnpm и запущенный Docker.
# Клонируем репозиторий
git clone https://github.com/melgarafael/DeskcommCRM.git
cd DeskcommCRM
# Устанавливаем зависимости
pnpm install
# Подготавливаем переменные окружения
cp .env.example .env.local
# Запускаем локальный WAHA для эмуляции WhatsApp
docker compose up -d
# Применяем базовую схему базы данных в Supabase
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -f supabase/baseline.sql
# Запускаем сервер разработки
pnpm dev
Для полноценного деплоя на VPS автор подготовил набор скриптов hostgator-setup-kit. Скрипт сам запрашивает домен, ключи от Supabase, API-ключи нейросетей, генерирует токены и поднимает готовый стек с сертификатами HTTPS.
Ограничения и особенности проекта
При изучении репозитория стоит учитывать несколько нюансов:
- Часть комментариев в коде и документации написана на португальском языке, так как проект изначально создавался для бразильского рынка.
- Репозиторий пока относительно молодой, у него чуть больше 300 звезд на GitHub.
- Работа с WhatsApp опирается на WAHA, поэтому при высокой активности сообщений важно настраивать задержки и интервалы отправки для защиты от блокировок номера.
Кому пригодится DeskcommCRM
Проект будет полезен веб-студиям и фрилансерам, которые собирают CRM-системы под ключ для малого бизнеса и не хотят платить за ежемесячные подписки сторонним сервисам. Также код пригодится разработчикам как качественный референс: здесь можно подсмотреть аккуратное использование Next.js 16, настройку RAG с pgvector, реализацию сервера MCP и тестирование правил RLS в PostgreSQL.