CRM для авто и мотосервиса нового поколения

Управляйте сервисом
как профессионал

Полная CRM для авто/мотомастерских и моек: онлайн-запись, чаты и объявления Avito, SMS-верификация, PWA-приложение для клиентов, умные печатные формы, телефония, склад и 1С — всё в одной системе.

Записей без лимита
20+
Модулей в системе
2
Портала для работы
24/7
Доступность системы

Система работает на двух уровнях

Отдельные порталы для сотрудников и для клиентов — каждый видит только то, что нужно.

🔧

Мастерская и сотрудники

Полный контроль над работой сервиса: записи, заказ-наряды, склад, маркетплейсы и аналитика.

  • Управление записями, слотами и календарём
  • Назначение механиков, графики смен
  • Чаты и объявления Avito прямо в CRM
  • Склад запчастей, каталог марок и моделей ТС
  • Применимость номенклатуры к технике
  • Печатные формы с Handlebars-шаблонами
  • Телефония Mango Office, фискальные чеки
  • Финансовая аналитика и отчёты
🏍️

Клиенты сервиса

Клиент заходит с телефона — видит статус, историю и может записаться сам.

  • Онлайн-запись на удобное время
  • Статус ремонта в реальном времени
  • История всех обращений и заказов
  • Карточки своего транспорта
  • Вход по SMS-коду — без паролей и регистраций
  • Устанавливается как приложение (PWA)
  • Push-уведомления об изменении статуса

Avito прямо в панели управления

Отвечайте клиентам, следите за объявлениями и синхронизируйте лиды — не выходя из CRM.

Интеграция с Avito
по OAuth 2.0

Подключите аккаунт Avito один раз — и работайте с покупателями прямо внутри S4F-CRM. Токены обновляются автоматически, ничего не нужно настраивать повторно.

Посмотреть в панели →

Всё для работы авто и мотосервиса, а так же мойки

22+ модуля, покрывающих все процессы — от онлайн-записи до OBD-2 диагностики.

🗓️

Онлайн-запись

Клиенты выбирают дату, мастера и услугу сами. Слоты по расписанию, без двойных броней.

📱

Личный кабинет (PWA)

Статус ремонта в реальном времени. Устанавливается на экран телефона как приложение. Push-уведомления о статусе.

🔐

SMS-верификация

Вход в личный кабинет по 4-значному коду из SMS. Без паролей — 2 нажатия и готово. Новые клиенты регистрируются автоматически.

🏍️

Учёт техники

История обслуживания каждого транспорта: пробег, работы, запчасти — всё сохраняется.

📊

Аналитика и отчёты

Выручка по периодам, нагрузка на механиков, популярные услуги — в наглядных графиках.

👥

Управление персоналом

Профили механиков, распределение задач, контроль загруженности каждого сотрудника.

📅

График работы

Еженедельное расписание для каждого механика: рабочие дни, начало и конец смены.

📦

Складской учёт

Остатки запчастей, приходные накладные, расход по заказ-нарядам. Всегда знаете, что есть.

🚗

Каталог марок и моделей ТС

Справочник техники с синхронизацией из 1С. Быстрый поиск марки и модели при оформлении ТС клиента.

🔗

Применимость запчастей

Привязка номенклатуры к маркам и моделям техники. Сразу видно, к какому транспорту подходит деталь.

💬

SMS-уведомления

Клиент получает сообщение при подтверждении записи, смене статуса и напоминание накануне.

🛒

Avito-маркет

Чаты с покупателями, объявления и синхронизация лидов из Avito прямо в панели CRM.

📄

Печатные формы

Handlebars-шаблоны для заказ-нарядов, актов и договоров. Умный редактор с образцами переменных.

📞

Телефония

Интеграция с Mango Office: входящие звонки, история, инициирование звонка из карточки клиента.

🏠

Хранение ТС

Учёт транспорта на длительном хранении: даты приёма и выдачи, стоимость, состояние.

🚿

Мойка

Отдельный модуль для мойки ТС: статусы, очередь и история по каждому заезду.

🏭

1С Номенклатура

Синхронизация каталога запчастей и справочника ТС с 1С:Предприятие через OData. Актуальные цены и остатки.

🧾

Фискальные чеки

Интеграция с АТОЛ Онлайн и Эвотор Cloud для выдачи чеков по 54-ФЗ прямо из системы.

🔒

Роли и безопасность

JWT-авторизация, разделение ролей (админ, менеджер, механик, мойщик). Защита всех маршрутов.

🛍️

Интернет-магазин

Каталог запчастей с корзиной и оформлением заказов для внешних покупателей. Синхронизирован со складом.

🔌

OBD-2 диагностика

Подключение ELM327-адаптера по Bluetooth прямо в браузере. Чтение кодов ошибок (DTC), история сканирований по каждому ТС. Коды автоматически переносятся в заказ-наряд.

👨‍🔧

Управление персоналом

4 должности: механик, мойщик, мастер-приёмщик, менеджер по запчастям. Индивидуальный график работы и специализации по типам транспорта.

Личный кабинет как приложение
с SMS-верификацией

Клиент устанавливает кабинет на экран телефона и входит за 2 нажатия — без App Store, без паролей.

Как это работает

После установки приложения клиент входит по номеру телефона — система отправляет 4-значный SMS-код. Существующие клиенты получают токен сразу, новые заполняют имя один раз и больше к этому не возвращаются.

  • 1
    Открывает ссылку в браузере телефона Chrome или Safari предложат «Установить» — работает без App Store
  • 2
    Вводит номер телефона Система отправляет 4-значный код через SMS Aero
  • 3
    Вводит код → сразу внутри Готово. Токен сохраняется, следующий вход без SMS
  • 4
    Получает push-уведомления Статус ремонта приходит на экран как обычное уведомление телефона
📲
Установка без магазина приложений PWA-манифест + Service Worker — браузер предлагает добавить на рабочий стол
🔑
SMS OTP верификация 4-значный код действует 5 минут, максимум 5 попыток. Rate-limit: 1 код в 60 секунд
📶
Офлайн-оболочка Service Worker кэширует интерфейс — страница загружается даже без сети
🔔
Web Push уведомления Клиент разрешает уведомления один раз и получает их без открытого браузера
🌐
iOS и Android Работает на всех современных смартфонах без дополнительных настроек

Умный редактор шаблонов

Создавайте заказ-наряды, акты и договоры с переменными, которые подставляются автоматически при печати.

Почему S4F-CRM

Система создана специально для авто и мотосервисов, а не адаптирована из общего CRM-конструктора.

01

Заточено под авто и мото

Карточки транспорта с VIN, маркой, моделью и пробегом. Каталог марок ТС из 1С. Не универсальный «клиент», а конкретная техника с историей.

02

Маркетплейсы внутри

Avito-чаты, объявления и лиды — прямо в панели. Не нужно переключаться между вкладками и терять заявки.

03

Клиент без лишних шагов

Вход по SMS-коду за 30 секунд. PWA-приложение на экране телефона. Push-уведомления. Клиент всегда в курсе — без вашего звонка.

04

Всё у вас на сервере

Self-hosted на Docker. Ваши данные остаются у вас. Нет подписки, нет зависимости от облачного провайдера.

Два интерфейса, один сервер

Общий API-сервер, разные JWT-токены и полное разделение доступа.

Для сотрудников

Панель управления

Полный функционал для администраторов и механиков:

  • Записи, Avito-чаты, печатные формы
  • Клиенты, техника, история обслуживания
  • Склад, каталог ТС, применимость запчастей
  • Телефония, аналитика, фискальные чеки
  • Хранение ТС, мойка, интернет-магазин
Открыть панель →
panel.s4f-crm.ru
Для клиентов

Личный кабинет

Мобильное PWA-приложение для клиентов:

  • Вход по SMS-коду — без паролей
  • Статус ремонта в реальном времени
  • Самостоятельная онлайн-запись
  • История заказов и карточки транспорта
  • Push-уведомления об изменении статуса
Войти в кабинет →
client.s4f-crm.ru

Частые вопросы

Ответы на самые распространённые вопросы по настройке и использованию S4F-CRM.

Как установить S4F-CRM на сервер?
Для запуска системы достаточно Docker и Docker Compose. Скопируйте репозиторий, создайте файл .env с переменными окружения и выполните:

docker compose up -d --build api-server

API-сервер поднимет подключение к MongoDB и PostgreSQL, применит миграции и будет доступен на порту, указанном в PORT.
💡 Для production рекомендуем добавить Nginx в качестве reverse-proxy и настроить HTTPS через Let's Encrypt.
Какие базы данных используются?
S4F-CRM использует две базы данных:
  • MongoDB — основная бизнес-база: клиенты, записи, склад, чаты Avito, шаблоны, техника.
  • PostgreSQL — авторизация сотрудников (учётные записи панели управления).
Строки подключения задаются через переменные окружения MONGO_URI и DATABASE_URL.
Как создать первого пользователя панели управления?
После первого запуска выполните скрипт создания администратора:

docker compose exec api-server node dist/scripts/create-admin.js

Скрипт попросит ввести логин, пароль и роль. После создания войдите в панель по адресу panel.s4f-crm.ru с этими данными.
Как обновить систему до новой версии?
Обновление выполняется в две команды:

git pull origin main
docker compose up -d --build api-server

Docker пересоберёт только изменённые слои. Миграции базы данных применяются автоматически при старте сервера. Данные в томах Docker не затрагиваются.
⚠️ Перед обновлением рекомендуем сделать резервную копию базы MongoDB: mongodump --uri="$MONGO_URI"
Как клиент входит в личный кабинет?
С введением SMS-верификации вход выглядит так:
  • Клиент вводит номер телефона в формате +7.
  • Система отправляет 4-значный код через SMS Aero (действует 5 минут).
  • Клиент вводит код — существующие пользователи сразу получают токен.
  • Новые клиенты заполняют имя один раз при первом входе.
Токен сохраняется в браузере — при повторных открытиях приложения SMS не требуется.
Как установить личный кабинет как приложение на телефон?
Личный кабинет — это PWA (Progressive Web App). Установка:
  • Android (Chrome): открыть сайт → нажать «⋮» → «Установить приложение» или «Добавить на главный экран».
  • iOS (Safari): открыть сайт → нажать кнопку «Поделиться» → «На экран Домой».
После установки приложение запускается без браузера, как обычное приложение из магазина.
💡 Push-уведомления работают только после установки приложения и явного разрешения в браузере.
Клиент не получил SMS с кодом. Что делать?
Возможные причины:
  • Не настроены переменные SMS_AERO_EMAIL и SMS_AERO_API_KEY — в этом случае в dev-режиме код отображается в ответе API.
  • Баланс SMS Aero исчерпан — проверьте в личном кабинете smsaero.ru.
  • Прошло менее 60 секунд с предыдущей отправки (rate-limit) — кнопка «Отправить снова» активируется автоматически.
  • Номер телефона занесён в стоп-лист оператора — такое случается редко.
Как настроить push-уведомления для клиентов?
Для работы Web Push необходимо:
  • Установить переменные VAPID_PUBLIC_KEY и VAPID_PRIVATE_KEY. Сгенерировать их можно командой: node -e "const w=require('web-push'); const k=w.generateVAPIDKeys(); console.log(k)"
  • Клиент должен дать разрешение на уведомления в браузере (в личном кабинете есть кнопка «Включить уведомления»).
После этого при каждом изменении статуса записи клиент получает уведомление на телефон.
Как подключить SMS-уведомления через SMS Aero?
В файле .env задайте три переменные:

SMS_AERO_EMAIL=your@email.ru
SMS_AERO_API_KEY=ваш_api_ключ
SMS_AERO_SIGN=ИмяОтправителя

Логин, ключ и имя отправителя берутся из личного кабинета smsaero.ru. После перезапуска контейнера SMS-отправка активируется автоматически — в настройках CRM появится зелёный индикатор «SMS активны».
Когда клиент получает SMS?
SMS отправляется клиенту в следующих случаях:
  • При входе в личный кабинет — 4-значный OTP-код верификации.
  • При подтверждении записи администратором.
  • При изменении статуса заказ-наряда.
  • Напоминание накануне визита (за 24 часа, по расписанию).
Все уведомления отправляются асинхронно и не блокируют основной поток обработки.
Почему SMS-статус в настройках показывает «не настроено»?
Индикатор в разделе «Настройки → Интеграции» проверяет наличие трёх переменных: SMS_AERO_EMAIL, SMS_AERO_API_KEY и SMS_AERO_SIGN. Если хотя бы одна из них отсутствует — отображается статус «не настроено». После добавления всех трёх переменных и перезапуска контейнера статус переключается в «активно» без перезагрузки страницы.
Как привязать запчасть к маркам и моделям техники?
Откройте карточку товара на складе (Склад → Позиция). В разделе «Применимость»:
  • Выберите марку из выпадающего списка (загружается из каталога ТС).
  • После выбора марки выберите модель.
  • Нажмите «Добавить» — связь сохранится.
Можно добавить неограниченное число связей для одной позиции. Также поддерживается ввод применимости свободным текстом для совместимости с данными из 1С.
Как работает каталог марок и моделей транспортных средств?
Каталог ТС доступен в разделе «Склад → Каталог ТС». Он состоит из двух уровней: марки (бренды) и модели.

Данные можно:
  • Добавлять и редактировать вручную прямо в таблице.
  • Синхронизировать из 1С — кнопка «Синхронизация с 1С» загружает справочник Catalog_Ф1_МаркиМотоциклов и Catalog_Ф1_МоделиМотоциклов.
Синхронизация обновляет существующие записи и добавляет новые, не удаляя данные, которых нет в 1С.
Как настроить типы транспортных средств?
Типы ТС (мотоцикл, скутер, квадроцикл и т.д.) настраиваются в разделе «Настройки → Типы транспорта». Здесь можно добавить, переименовать или удалить тип. Типы используются при оформлении техники клиента и в форме онлайн-записи.
Как настроить синхронизацию с 1С?
Для интеграции с 1С:Предприятие через OData задайте переменные окружения:

ONEC_BASE_URL=http://ваш-1с-сервер/base/odata/standard.odata
ONEC_USER=имя_пользователя
ONEC_PASSWORD=пароль

После настройки в панели управления появятся кнопки ручной синхронизации. Автоматическая ночная синхронизация запускается по расписанию cron.
Что синхронизируется из 1С?
Из 1С синхронизируются:
  • Номенклатура — наименование, артикул, цена, единица измерения, остатки.
  • Марки транспорта — справочник Catalog_Ф1_МаркиМотоциклов.
  • Модели транспорта — справочник Catalog_Ф1_МоделиМотоциклов с привязкой к маркам.
Синхронизация идёт в одну сторону: 1С → CRM. Изменения в CRM в 1С не записываются.
Как принудительно запустить синхронизацию с 1С?
В панели управления:
  • Номенклатура: Склад → кнопка «Синхронизация с 1С» в шапке страницы.
  • Каталог ТС: Склад → Каталог ТС → кнопка «Синхронизация с 1С».
Через API: POST /api/admin/warehouse/vehicle-catalog/sync. Синхронизация выполняется асинхронно и возвращает статистику: сколько марок и моделей создано / обновлено.
Какие должности поддерживает раздел «Персонал»?
В реестре персонала поддерживаются четыре должности:
  • Механик — назначается на записи ремонта; обязательно указание типов транспорта.
  • Мойщик — назначается на записи мойки через специальную доску; обязательно указание типов транспорта.
  • Мастер приёмки — работает с входящими записями; типы транспорта не требуются.
  • Менеджер по запчастям — работает со складом и заказами; типы транспорта не требуются.
Все должности отображаются в едином разделе «Персонал» с фильтрацией по вкладкам.
💡 Должность — это профессиональная роль в сервисе. Роль входа в систему (Администратор / Менеджер / Механик / Мойщик) настраивается отдельно в разделе «Сотрудники».
Почему нельзя сохранить механика без типов транспорта?
Для механиков и мойщиков типы транспорта обязательны — они используются при создании записи для фильтрации доступных специалистов по виду транспорта клиента. Без этих данных система не сможет корректно подобрать мастера.

При попытке сохранить форму без выбора хотя бы одного типа транспорта появляется ошибка «Выберите хотя бы один тип транспорта». Для должностей «Мастер приёмки» и «Менеджер по запчастям» это поле не отображается — оно не обязательно.
Как работает фильтр по должностям в графике работы?
Раздел «График работы» отображает смены всего персонала в единой сетке. Вкладки-фильтры над сеткой позволяют ограничить отображение:
  • Все — все сотрудники.
  • Механик / Мойщик / Мастер приёмки / Менеджер по запчастям — только выбранная должность.
Вкладка отображается только если в базе есть хотя бы один сотрудник с этой должностью. Каждая строка и карточка статистики показывает цветной значок должности сотрудника.
💡 Мойщик, вошедший в систему под своим аккаунтом, видит в графике только собственную строку — расписание других сотрудников ему недоступно.
Как назначить мойщика на запись мойки?
На доске мойки откройте карточку нужной записи и нажмите «Назначить мойщика». В выпадающем списке отображаются только сотрудники с должностью «Мойщик» — механики и другой персонал там не появятся.

Назначение также доступно при создании новой записи на мойку через кнопку «+ Новая запись».
Как подключить Avito?
Интеграция с Avito настраивается в разделе «Маркетплейс → Настройки Avito»:
  • Нажмите «Подключить Avito».
  • Вы будете перенаправлены на страницу авторизации Avito (OAuth 2.0).
  • Разрешите доступ — и вы вернётесь в CRM с активным подключением.
Токены обновляются автоматически, повторная авторизация не требуется.
Почему чаты Avito не обновляются?
Чаты Avito загружаются по запросу — система не использует webhook-подписки (Avito API не предоставляет webhook для чатов). Нажмите кнопку обновления или обновите страницу чатов, чтобы загрузить новые сообщения. Счётчик непрочитанных в навигации обновляется каждые 30 секунд автоматически.
Как покупатели из Avito попадают в базу клиентов?
При синхронизации чатов система извлекает данные покупателя (имя, Avito ID) из диалога и создаёт запись клиента в CRM, если её ещё нет. К клиенту привязываются все его чаты и диалоги. Впоследствии клиента можно найти в общем списке и привязать к записи на обслуживание.
Как создать первый шаблон печатной формы?
Перейдите в раздел «Печатные формы» и нажмите «Новый шаблон». В редакторе:
  • Введите название шаблона (например, «Заказ-наряд стандартный»).
  • Напишите HTML-разметку документа.
  • Вставляйте переменные через двойные фигурные скобки: {{client.fullName}}, {{appointment.number}}.
  • При наборе {{ откроется автокомплит с доступными переменными и образцами.
Нажмите «Сохранить», затем «Предпросмотр» — система подставит тестовые данные и покажет результат в PDF.
Какие переменные доступны в шаблоне?
В шаблоне доступны объекты:
  • {{client.*}} — данные клиента: fullName, phone, email.
  • {{appointment.*}} — запись: number, date, status, services.
  • {{car.*}} — техника: brand, model, vin, mileage, year.
  • {{company.*}} — реквизиты вашего сервиса из настроек.
  • {{parts}} — массив запчастей с ценами и количеством.
Хелперы: {{money value}}, {{formatDate date}}, {{upper string}}. Полный список — в интерфейсе редактора.
Какие порты нужно открыть на сервере?
Для работы системы необходимы:
  • 80 / 443 — HTTP/HTTPS для Nginx (панель и личный кабинет).
  • 27017 — MongoDB (только для внутреннего доступа, не открывайте наружу).
  • 5432 — PostgreSQL (только для внутреннего доступа).
API-сервер работает на внутреннем порту (по умолчанию 3000) за Nginx, наружу не выставляется.
Как сделать резервную копию данных?
Резервное копирование MongoDB:

docker compose exec mongo mongodump --db s4f --out /backup/$(date +%Y%m%d)

Для PostgreSQL:
docker compose exec postgres pg_dump -U postgres s4f_auth > backup_auth.sql

Рекомендуем настроить cron-задачу для автоматического ежедневного бэкапа с ротацией за последние 7 дней.
💡 Храните резервные копии на отдельном сервере или в облачном хранилище (S3, Yandex Object Storage).
Как настроить HTTPS с Let's Encrypt?
Для получения SSL-сертификата через Certbot:

apt install certbot python3-certbot-nginx
certbot --nginx -d panel.s4f-crm.ru -d client.s4f-crm.ru

Certbot автоматически обновит конфигурацию Nginx и настроит автопродление сертификата. Убедитесь, что DNS-записи для обоих доменов указывают на ваш сервер.
Как отслеживать здоровье системы?
API предоставляет эндпоинт: GET /health — возвращает статус подключений к MongoDB и PostgreSQL.

Логи контейнера:
docker compose logs -f api-server

Для production рекомендуем интегрировать с системой мониторинга (Grafana + Prometheus или Uptime Kuma) — настройка не требует изменений в CRM.

Запустите систему сегодня

Один docker compose up — и вся CRM работает на вашем сервере.

Свяжитесь с нами

Ответим на вопросы, поможем с запуском и настройкой системы.