DeskcommCRM: как развернуть опенсорсную CRM с ИИ-агентами для WhatsApp на своем сервере

06 Aug, 2026
348
🔱 180
👥 4

Продажи через 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.

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