Граф Wiki

CRM — продажи и заявки

CRM (/admin/crm/) — нативный модуль работы с лидами и сделками: канбан-воронка с настраиваемыми стадиями, конструктор триггеров-автоматизаций, источники сделок, визуальный Salesbot, Задачи и Списки. Полностью интегрирован с биллингом: сделка знает клиента, тариф и адрес, эскалации уходят в Поддержку, диалоги может подхватывать AI-агент.

Модуль «CRM / Продажи» — на сайте продукта
Содержание раздела
Обучающее видео 2:40

Шесть шагов работы с CRM на живых экранах: приём заявок, воронка и карточка сделки, задачи, источники и автоматизация.

1920×1080 с озвучкой Скачать

Как устроен модуль

Все заявки — из мессенджеров, звонков, форм и почты — проходят через единую точку приёма: дедупликация по телефону, геокодирование адреса, привязка рекламной кампании по UTM, определение организации и воронки. Дальше сделка живёт в канбане, а конструктор автоматизирует рутину: задачи, SMS, документы, теги.

flowchart LR
    subgraph CH["Каналы приёма"]
        TG["Telegram"]
        VK["VK"]
        MX["MAX"]
        MG["Звонок Mango
(голосовая почта)"] AI["AI-виджет / AI Voice"] WF["Веб-формы"] EM["Email / Поддержка"] end SB{"Salesbot
сценарий"} TG --> SB VK --> SB MX --> SB SB -- "узел «Лид в CRM»" --> IN SB -- "узел «AI-агент»" --> BOT["AI-агент"] SB -- "узел «Оператору»" --> SUP["Тикет Поддержки
со сводкой данных"] MG --> IN AI --> IN WF --> IN EM --> IN IN["Единая точка приёма:
дедуп · геокод · UTM · организация"] IN -- "настройки канала" --> SRC[("Источники сделок")] IN --> D["Сделка в воронке"] D -- "вход в стадию" --> AUTO["Триггеры-автоматизации
14 действий"] AUTO --> T["Задачи"] AUTO --> SMS["SMS / Email / Telegram"] AUTO --> DOC["PDF-документы"] AUTO --> TAGS["Теги"]
Права. Работа со сделками доступна всем пользователям модуля CRM. Редактирование конструктора (стадии, источники, доп. поля, боты, вид карточек) — только группам из настройки CRM_PIPELINE_ADMIN_GROUPS (по умолчанию: Директор, Старший менеджер, root); остальные видят эти разделы в режиме просмотра.

Организация по умолчанию

Каждая сделка привязана к организации. Точка приёма определяет её по каскаду: явно указанная организация → организация клиента → по тексту заявки (например, по названию компании) → по каналу-источнику. Если ничего не подошло — сделка привязывается к организации по умолчанию. Сделок «Без организации» в воронке не остаётся: это касается и пропущенных звонков Mango, и нераспознанных голосовых сообщений, у которых нет клиента.

Стадия «Неразобранное» и автораспределение

Пропущенные звонки и нераспознанные голосовые сообщения попадают в первую стадию воронки — «Неразобранное». Такие заявки автоматически распределяются между сэйлсами по очереди (round-robin): каждый новый лид достаётся следующему сотруднику из группы «Сэйлс». Одновременно на сделку ставится задача-звонок «Позвонить клиенту, узнать адрес и заполнить профиль» со сроком «сегодня».

Автораспределение включается настройкой CRM_UNSORTED_AUTODISTRIBUTE (по умолчанию включено). Круг сэйлсов берётся из групп CRM_SALES_GROUPS (Сэйлс, Старший сэйлс). Если ответственный у сделки уже назначен — она не перераспределяется.

Быстрый старт: от нуля до первого лида

Свежая инсталляция превращается в рабочую CRM за пять минут:

  1. Откройте Мастер настройки — шаг «Воронки» создаст стартовые воронки из пресетов (у новых инсталляций они уже созданы автоматически);
  2. На шаге «Каналы» включите источники приёма: формы сайта, Telegram/VK, голосовую почту; для формы скопируйте код вставки с токеном;
  3. Шаг «Команда» — включите распределение лидов по очереди между менеджерами;
  4. Отправьте тестовую заявку с сайта или добавьте лида через Импорт CSV — сделка появится в первой стадии канбана;
  5. Откройте сделку кликом — дровер покажет контакт, источник и UTM; двигайте сделку по полосе стадий до «Подключено», монтажнику назначайте наряд.

Воронка сделок (канбан)

URL: /admin/crm/deals/. Колонки — стадии воронки, карточка сделки показывает то, что настроено в «Виде карточки»: клиента и телефон, адрес, сумму, цветные теги, чипы источника/тарифа/монтажа, «дней в стадии», аватар ответственного.

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

Пример: оператор ищет «Мира 10» → находит заявку по адресу → двойной клик открывает карточку → кнопка «Позвонить» → итог звонка фиксируется прямо в карточке («Дозвонился / Не дозвонился / Перезвонить») и попадает в таймлайн.

Импорт лидов из CSV

Импорт лидов из CSV

Кнопка «Импорт» в тулбаре канбана принимает файл или вставленный текст в формате Имя;Телефон;Комментарий (разделитель — точка с запятой, запятая или табуляция; до 500 строк за раз). Каждая строка проходит штатный приём лидов: дубли отсекаются, применяются теги источника и распределение ответственного; при выбранной недефолтной воронке лиды попадают в неё. После импорта — отчёт: создано / дублей / ошибок по строкам.

Конструктор воронок и стадий

URL: /admin/crm/settings/pipelines/ (CRM → Настройки → Воронки и стадии). Стадии — колонки слева направо, как в воронке: название, цвет, ключ, тип (В работе / Успех / Проигрыш), перестановка ←→, счётчик сделок. Изменения сразу применяются в канбане, карточке сделки, на карте и в дашборде.

Вероятность закрытия: у открытых стадий в шапке — поле «⚖ N %», вероятность что сделка с этой стадии дойдёт до подключения. Пусто — 50%; стадии «Успех» и «Проигрыш» фиксированы (100% / 0%). Используется для взвешенных сумм колонок канбана.

Жизненный цикл сделки

stateDiagram-v2
    direction LR
    [*] --> lead : лид из любого канала
    lead --> tariff : тариф выбран
    tariff --> install : Stage Gate — монтажник ИЛИ дата
    install --> connected : Успех ✅
    lead --> refused : Проигрыш ❌
    tariff --> refused
    install --> refused
    connected --> [*]
    refused --> [*]
    note right of lead
        триггеры «При входе в стадию»
        срабатывают и для нового лида
    end note
    note right of install
        «застряла N дней» — таймер-триггер
        по каждой стадии
    end note

Правила входа (Stage Gates)

Блокируют перенос сделки в стадию, пока условие не выполнено. Настраиваются чипами под каждой стадией:

ПравилоЧто проверяет
Назначен монтажнику сделки заполнен исполнитель
Указана дата монтажазаполнено поле «Дата монтажа»
Монтажник ИЛИ датахотя бы одно из двух
Есть контакт (телефон)у клиента указан телефон
Подтверждение оператораперенос требует явного «Да» в диалоге
🔒 Обязательные доп. полявсе доп. поля с признаком «Обязательно для стадии» заполнены (например, паспортные данные перед «Назначен монтаж»)

Триггеры-автоматизации

Кнопка «+ Добавить триггер» под стадией открывает галерею действий (как плитки). Триггер срабатывает «При входе в стадию» (в том числе при создании лида) или «Застряла в стадии N дней». В текстах работают плейсхолдеры {title} {name} {phone} {stage} {days} {id}.

ДействиеПример использования
Создать задачувход в «Новый лид» → задача «Перезвонить по «{title}»» на завтра
Telegram сотрудникузастряла в «Тариф выбран» 3 дня → пинг ответственному
SMS клиентувход в «Назначен монтаж» → «Монтаж {stage}, ждите звонка мастера»
Письмо клиентуприветственное письмо с презентацией тарифов
Смена стадииавто-перенос после выполнения условий (без цепной реакции)
Сменить ответственногоэскалация на старшего при простое
Примечание в сделкуслужебная отметка в таймлайн
Webhook (POST JSON)уведомить внешнюю систему
Завершить задачивход в «Подключено» → закрыть все открытые задачи
Создать сделкупосле подключения интернета → сделка на видеонаблюдение
Изменить полепроставить доп. поле «Согласие получено» = «да»
Сгенерировать документвход в «Договор» → PDF-договор ссылкой в таймлайн
Редактировать тегидобавить тег «Срочно» при застое
Запустить Salesbotвход в стадию → бот собирает недостающие данные

Вид карточки и раскладка

Галерея «Из шаблона»

Галерея преднастроенных воронок

Кнопка «Из шаблона» открывает галерею готовых воронок провайдера: подключение интернета, продажи B2B, доп. продажи, возврат ушедших, видеонаблюдение. Пресет создаёт новую воронку со стадиями, правилами входа, триггерами и причинами отказа — существующие воронки и сделки не затрагиваются. Ниже встроенных пресетов подтягиваются рецепты с сервера лицензий — новые шаблоны появляются без обновления биллинга. У новых инсталляций с пустой CRM стартовый набор воронок создаётся автоматически при развёртывании.

Воронки и организации

Селектор воронок: бейдж организации перед названием

Воронка принадлежит организации: у каждой компании свои стадии, правила перехода и триггеры. Селектор воронок в канбане показывает только воронки выбранной в шапке компании — если она одна, селектор не показывается вовсе. В режиме «Все организации» перед названием воронки стоит бейдж её компании.

Куда попадёт новый лид. Порядок такой: воронка, заданная у источника лида → воронка организации под тип сделки → общая воронка этого типа. Если организация не определилась, берётся организация по умолчанию. Благодаря этому заявка не остаётся вне воронок и не теряется на доске.

Общая воронка (без организации) остаётся видимой для компании, пока в ней есть её сделки: у сделки часто нет явной воронки, и она держится на совпадении типа. Как только сделки перенесены, общая воронка из списка уходит.

Источники сделок

Источники сделок

CRM → Настройки → Источники сделок (панель вверху конструктора воронок). Источник — это запись, а не фиксированный канал: на один канал (Mango, AI-виджет, AI Voice, VK, Telegram, MAX, веб-форма, заявка из Поддержки) можно завести несколько источников — например «Лендинг тарифов» и «Форма подключения», или отдельные Telegram-источники для разных брендов. Кнопка «+ Источник» создаёт пользовательский источник.

Карточка источника

Все источники идут через единую точку приёма: дедуп, геокод адреса, UTM-кампании и организация работают одинаково везде; у каждой сделки сохраняется ссылка на источник — на ней строится аналитика.

Источники в каталоге виджетов

Источники лидов в каталоге виджетов

Виджеты приёма заявок (Mango, AI-виджет, AI Voice, веб-формы) показаны и в каталоге Настройки → Виджеты — секция «Источники лидов»: включение/выключение источника тумблером, переходы в настройки канала и в панель источников. Виджет «Лиды по источникам» на дашборде CRM показывает топ источников с конверсией; при мультиорганизации он учитывает доступные сотруднику организации и помечает источники-пары чипом организации.

Как подключить форму на сайт

Порядок один для любой формы: сначала воронка, потом источник с токеном, потом сама форма. Токен — то, что связывает форму с настройками: воронкой, этапом входа, организацией, тегами, распределением и окном дублей.

Что подключаемКуда уходит заявкаВключается настройкой
Готовый виджет заказа на чужом сайте/api/crm/lead/CRM_PUBLIC_LEAD_ENABLED
Своя вёрстка формы/api/crm/lead/CRM_PUBLIC_LEAD_ENABLED
Страница конструктора сайтов/l/submit/LANDING_ENABLED
AI-виджет (чат и голос)/api/ai/widget/lead/AI_WIDGET_ENABLED
Salesbot на сайте/api/crm/bot/<id>/канал «Виджет» у бота

Виджет заказа. В карточке источника — кнопка «Скопировать код вставки»: сниппет уже содержит ваш токен. Виджет сам подтянет тарифы, соберёт UTM-метки из адреса страницы и отправит заявку:

<script src="адрес вашей установки/static/js/order_widget.js"
        data-api="адрес вашей установки"
        data-token="9f2c41ab77e0d5c3"
        data-auto-init></script>

Параметры: data-title, data-subtitle, data-color, data-button, data-tariff="0" (скрыть выбор тарифа), data-address="0" (скрыть адрес). Открыть форму из своей кнопки — SmitOrderWidget.openCentered(). Есть и готовая страница заказа без встраивания: /order.

Своя форма. Отправьте JSON — обязателен только телефон; остальные поля заполняют карточку (см. единый приём):

fetch('адрес вашей установки/api/crm/lead/', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    phone: '+7 917 000-11-22',
    name: 'Иванов Иван',
    address: 'г. Волгоград, ул. Мира, д. 10',
    comment: 'Звонить после 18:00',
    source: 'form',
    source_token: '9f2c41ab77e0d5c3',
    utm: { utm_source: 'yandex', utm_medium: 'cpc', utm_campaign: 'internet-vlg' }
  })
})

Ответ — {"ok": true, "deal_id": 12345}. Если сработал контроль дублей, вернётся номер уже существующей сделки: для посетителя это по-прежнему «заявка принята», а в CRM вместо второй карточки появится примечание «Повторная заявка» со всеми новыми данными.

Три частые причины «форма отправилась, а лида нет». (1) Не включена настройка приёма — endpoint отвечает disabled. (2) Выключен тумблер источника — заявка отбрасывается намеренно. (3) Превышен лимит: 10 заявок с одного IP за 10 минут. Приём никогда не роняет форму: любая внутренняя ошибка пишется в журнал, а посетитель видит «спасибо» — поэтому после настройки отправьте тестовую заявку и убедитесь, что сделка появилась в канбане.

Организацию, воронку и этап источник задаёт сам, но заявка может указать их явно (organization_id, pipeline_id, stage) — явное указание приоритетнее настроек источника. Полный список полей заявки и рецепты подключения — во внутренней инструкции «Формы создают лиды в CRM» (раздел «Разработчикам» → Документация).

Единый приём: как заполняется карточка

Все каналы (веб-форма, AI-виджет чата и голоса, звонки Mango, голосовая почта, VK/Telegram/MAX, Email, Salesbot, импорт CSV) сходятся в одной функции приёма crm_intake. Она максимально заполняет карточку лида из того, что есть в обращении, и делает это одинаково для всех каналов:

flowchart LR
    subgraph CH["Каналы приёма"]
      F["Веб-форма"]
      W["AI-виджет (чат)"]
      V["AI Voice / голос. почта"]
      MG["Звонки Mango"]
      MSG["VK / Telegram / MAX"]
      EM["Email"]
      SB["Salesbot"]
      CSV["Импорт CSV"]
    end
    CH --> INTAKE["crm_intake
единая точка приёма"] INTAKE --> C1["Контакт: имя/тел/email/phone2"] INTAKE --> C2["Юрлицо: ИНН → DaData
(КПП/ОГРН/адрес/директор)"] INTAKE --> C3["Адрес → Homes + геокод"] INTAKE --> C4["Тариф + доп.услуги
(IP, камеры) → в Итого"] INTAKE --> C5["UTM → кампания, referrer"] INTAKE --> C6["Орг / источник / дедуп /
авто-назначение / теги"] C1 & C2 & C3 & C4 & C5 & C6 --> DEAL[("Сделка в CRM
карточка заполнена")]

Доп. поля сделок

Доп. поля — панель групп

URL: /admin/crm/userfields/. Панель групп слева (как разделы анкеты), поля выбранной группы справа — с порядком ↑↓ и добавлением «+ поле в группу».

Свойство поляЗачем
ТипТекст / Число / Дата / Список (варианты) / Да-Нет / Многострочный
Группасекция в карточке сделки: «Договор — физ. лицо», «UTM и рекламные метки»…
Тип клиентафиз / юр — поле показывается только своему сегменту
Воронка и организацияпусто = все; иначе поле видно только сделкам этой воронки/организации
🔒 Обязательно для стадииStage Gate: без заполнения сделка не перейдёт в указанную (и последующие) стадию
В списке / в превьюколонка в «Списках» / показ в карточке-модалке

Пример: группа «Договор — физ. лицо» содержит паспортные поля с 🔒 «Назначен монтаж» — менеджер физически не сможет назначить монтаж, пока не заполнит паспорт; для юр. лиц действует своя группа с ИНН/КПП.

Задачи

Задачи — просроченные, типы, результат

URL: /admin/crm/tasks/ (CRM → Задачи). Единый список задач по всем сделкам:

Пример потока: триггер «Новый лид → Создать задачу „Перезвонить“» ставит задачу автоматически; утром менеджер открывает чип «Сегодня», обзванивает список, закрывает задачи с результатами — вся история остаётся в таймлайнах сделок.

Списки (контакты)

Списки — настройки таблицы и inline-редактор

URL: /admin/crm/contacts/ (CRM → Списки). Все клиенты CRM одной таблицей:

Пример: маркетологу нужен срез по UTM — включает колонки «UTM source» и «UTM campaign» в настройках таблицы и выгружает картину по источникам без отчётов.

Salesbot

Пункт меню: CRM → Salesbot (— сценарии правят чаще, чем воронки).

Редактор сценария: канвас со связями и правая панель с палитрой шагов

URL: /admin/crm/bots/ (CRM → Настройки → Salesbot). Визуальный конструктор чат-сценариев для входящих каналов и веб-виджета: узлы перетаскиваются по канвасу, связи-ветки тянутся мышью от кружка-выхода к целевому узлу (живая линия за курсором, подсветка цели). Бот отвечает клиенту до AI-агента и оператора.

Как устроен редактор:

Черновик и публикация

Правки не уходят клиентам в момент сохранения. «Сохранить» пишет в черновик, «Опубликовать» переносит его в живой сценарий, а прежний уходит в историю версий. В шапке горит бейдж «Черновик», пока опубликованное и черновик расходятся; «Отменить черновик» в кебаб-меню возвращает к опубликованному. Симулятор («Тест») тоже гоняет черновик — проверять можно до публикации.

История версий хранит последние 10 состояний: снимок делается перед каждым сохранением и перед откатом, поэтому вернуться можно и после самого отката.

flowchart LR
    E["Правка в редакторе"] --> D["Черновик
draft_graph"] D -->|"Тест"| SIM["Симулятор:
диалог на живом движке"] D -->|"Опубликовать"| CHK{"Проверка
сценария"} CHK -- "есть ошибки" --> D CHK -- "чисто" --> P["Опубликованный сценарий
отвечает клиентам"] P -.->|"снимок"| H["История версий
последние 10"] H -->|"откат"| D

Проверка сценария

Проверка сценария: список проблем и подсветка шагов на канвасе

Сломанный сценарий видит только клиент: он упирается в шаг без продолжения и остаётся без ответа. Поэтому перед публикацией сценарий проверяется, и ошибки публикацию блокируют:

УровеньЧто ловим
Ошибкашаг без продолжения · переход на несуществующий шаг · у условия заполнена не каждая ветка · кнопка никуда не ведёт · пустой квиз · нет стартового шага
Предупреждениенет ветки «другой ответ» · недостижимый шаг · пустой текст сообщения · ответ никуда не сохраняется · сделка создаётся, а телефон нигде не спрашивается

Проблемы в списке кликабельны: подсвечивают и центрируют нужный шаг на канвасе (красная рамка — ошибка, жёлтая — предупреждение).

Готовые сценарии

Галерея готовых сценариев

Кебаб → «Из шаблона»: приём заявки на подключение (адрес через DaData, контакты с проверкой, сделка и уведомление операторам), заявка на ремонт (в рабочее время сразу оператору, ночью принимает описание) и квалификация лида квизом с распределением между менеджерами. Шаблон ложится в черновик: опубликованный сценарий не меняется, пока вы не посмотрите и не опубликуете сами.

Текст шага: форматирование и превью

Панель шага: превью «как увидит клиент» и панель форматирования

Над полем текста — панель форматирования: жирный, курсив, моноширинный, цитата, ссылка и эмодзи. Это ровно та разметка, которую понимает отправка в мессенджеры: **жирный**, *курсив*, `код`, строка с > — цитата, [текст](адрес) — ссылка.

Ссылка вставляется окном: адрес и выбор «в новой вкладке / в этом окне». Выбор действует в веб-виджете — в Telegram, VK и MAX ссылку открывает сам мессенджер.

Блок «Как увидит клиент» показывает пузырь сообщения с готовым форматированием, кнопками и вариантами квиза и обновляется на каждый ввод — текст не приходится править вслепую.

Тест сценария

Тест сценария: диалог с кнопками-подсказками

«Тест» открывает боковую панель с диалогом на живом движке — проверяется черновик, клиенты его не видят. Под полем ввода — кнопки-подсказки: варианты, которых ждёт текущий шаг (кнопки сообщения, варианты квиза, физ/юр лицо), их видно и можно нажать, а не угадывать «1». Реплики бота показываются с форматированием. История диалога остаётся при закрытии панели, начать заново — кнопкой «Сбросить».

✨ AI-помощник. Кнопка «AI» в тулбаре: опишите словами, что должен делать бот («приём заявок: поприветствуй, спроси адрес и телефон, создай лид, поблагодари»), — AI соберёт готовый граф узлов. Результат применяется на канвасе (откат Ctrl+Z), проверьте и сохраните черновик.

AI-помощник: разбор сценария с советами и чекбоксами

Там же — «Проанализировать и дать советы»: AI читает шаги и связи и возвращает разбор — где тупик, чего не хватает, что переписать. Советы приходят списком с чекбоксами (по умолчанию отмечены все); «Применить выбранное» перестраивает сценарий с их учётом, сохраняя тексты шагов, к которым замечаний не было.

flowchart TD
    IN["Входящее сообщение
Telegram / VK / MAX / Веб-виджет"] --> HOOK{"Salesbot"} HOOK -- "активный диалог" --> RUN["следующий шаг сценария"] HOOK -- "первый контакт
(канал в автозапуске)" --> START["стартовый узел"] HOOK -- "бот не назначен /
пауза 6 ч после диалога" --> BOT["AI-агент"] BOT -- "не справился" --> TK["Тикет оператору"] START --> RUN RUN --> B1["Сообщение с кнопками
(в Telegram — настоящие inline)"] RUN --> B2["Вопрос → сохранить ответ"] RUN --> B3{"Условие: слова /
рабочее время / телефон"} RUN --> B4["Лид в CRM
в воронку бота"] RUN --> B5["Передать AI-агенту"] RUN --> B6["Оператору: тикет-сводка
собранных данных"]
УзелЧто делает
Сообщениетекст + кнопки; у кнопки — синонимы для свободного текста («подключить, интернет»); ветка «Другой ответ» ловит нераспознанное
Вопросответ сохраняется: имя / телефон / адрес / любое доп. поле
Квизнесколько вопросов одним шагом: прогресс «Вопрос 2 из 5», возврат словом «Назад», варианты — кнопками в Telegram и VK. Принимается и номер, и текст варианта, и свободный ответ
Стикерстикер в Telegram по эмодзи, номеру в наборе или file_id. ⚠ file_id уникален для каждого бота — набор запрашивается токеном отправляющего бота
Отчёт (PDF)по собранным ответам собирает документ: снимок первого экрана сайта, таблица ответов, разбор AI и план работ. Ссылка приходит клиенту и ложится примечанием в сделку
Условиеключевые слова · рабочее время (часы) · «в ответе есть телефон»; ветки Да / Нет
Действиелюбое действие автоматизаций CRM (задача, SMS, теги…)
Лид в CRMсделка из собранных ответов — в воронку и организацию бота, через единую точку приёма (дедуп, геокод, SMS-подтверждение)
Проверка ответавалидатор: телефон (нормализует в +7…) · email · число · regex; ветки «Валидно / Невалидно», при ошибке — переспрос
Распределениеназначить ответственного сделке (round-robin / случайно по логинам операторов); ставить после «Лид в CRM»
AI-агентпередача диалога AI-агенту; при сложном вопросе AI сам эскалирует оператору
Операторуэскалация: собранные данные уходят тикетом-сводкой в Поддержку
Картинкаотправить изображение по URL с подписью (поддержка {{переменных}})
Задать переменнуюсохранить значение в память сессии ({{имя}}) — используется дальше в текстах и уходит в лид
Тег сделкенавесить тег на сделку сессии (ставить после «Лид в CRM»)
ВебхукHTTP POST на внешний URL с собранными данными ({bot, session_id, deal_id, channel, collected})
Уведомить оператораTelegram-уведомление операторам с подстановкой {{переменных}} (напр. «Новый лид {{name}}, тел {{phone}}»)
Переход / Стоппрыжок на другой шаг / завершение сценария

Пример — сценарий «Приём заявок» (стартовый шаблон):

  1. Приветствие с кнопками: Подключиться · Нет интернета · Оплата и баланс · Другой вопрос.
  2. «Подключиться» → адрес → имя → телефон (условие проверяет, что это телефон) → Лид в CRM → «Заявка принята 🎉».
  3. «Нет интернета» → условие «рабочее время 9–18»: днём — живая передача дежурному, ночью — бот записывает проблему и оформляет заявку на утро.
  4. «Оплата» → ссылка на личный кабинет + кнопка «Нужен оператор».
  5. «Другой вопрос» → передача AI-агенту.

В тулбаре редактора: каналы автозапуска (Telegram/VK/MAX/Виджет), воронка для лидов, организация (multi-org: бот СмИТ не отвечает клиентам бота другой организации), тумблер «Включён» и «Тест» — симулятор диалога на живом движке, работающий и с несохранённым сценарием. После завершения диалога бот 6 часов не здоровается заново — клиент спокойно общается с AI или оператором.

Отчёт клиенту: PDF и Mini App

Узел «Отчёт (PDF)» собирает документ по собранным ответам — так работает воронка «бесплатный аудит»: клиент проходит квиз и получает разбор.

В отчёт попадают: снимок первого экрана сайта клиента, таблица его ответов, разбор AI и план работ. Шапка — из брендинга организации: логотип, название, сайт, телефон, e-mail. Рядом с PDF собирается веб-версия — адаптивная страница с темой Telegram и кнопкой «Обсудить с инженером»; в Telegram ссылка приходит кнопкой Mini App, и разбор открывается прямо в мессенджере.

flowchart TD
    Q["Квиз: ответы клиента"] --> L["Лид в CRM"]
    L --> DOC["Узел «Отчёт (PDF)»"]
    DOC --> BG["Фоновая сборка"]
    BG --> SH["Снимок сайта
сервис smit-shot"] BG --> AI["Разбор AI:
вывод, что мешает, план"] SH --> PDF["PDF (WeasyPrint)"] AI --> PDF PDF --> GCS["Файлы в облаке:
PDF + веб-версия"] GCS --> TG["Клиенту: кнопка Mini App"] GCS --> DEAL["Примечание в сделке"] TG --> ASK["«Обсудить с инженером»
→ задача-звонок ответственному"]

Почему фоном. Снимок сайта и разбор AI занимают десятки секунд. Если делать это в момент ответа, клиент ждал бы в чате, а веб-запрос успел бы отвалиться. Поэтому бот сразу отвечает «готовим», а ссылка приходит следом. Любой шаг может не получиться — отчёт всё равно уйдёт с тем, что собрал квиз.

Ссылка на отчёт живёт ограниченное время (BOT_REPORT_TTL_DAYS, 90 дней по умолчанию): в разборе — данные клиента и снимок его сайта, вечная публичная ссылка тут не годится. Просроченные отчёты убираются из облака суточной задачей.

Окно отправки

Сообщения, которые бот шлёт по своей инициативе (готовый отчёт, рассылка), вне окна 9:00–20:00 откладываются и уходят утром — очередь разбирается раз в 10 минут. Ответы на сообщения клиента окно не трогает: написал ночью — ждёт ответа ночью. Настройки: BOT_SEND_WINDOW_ENABLED, BOT_SEND_WINDOW_FROM, BOT_SEND_WINDOW_TO.

Рассылка

Панель рассылки: текст, получатели, превью и проверка на себе

Кебаб → «Рассылка». Получатели — только те, кто сам писал этому боту: согласие берём из факта переписки, чужие списки не грузим — это уже спам, и бота за него блокируют. Панель показывает, сколько человек и по каким каналам получат сообщение.

Веб-виджет на сайт

Включите канал «Виджет» в тулбаре — бот станет доступен на внешнем сайте как чат-виджет (кнопка-пузырь в углу → окно диалога с кнопками-ответами). Кнопка «Код виджета» выдаёт готовый сниппет для вставки перед </body>:

<script src="адрес вашей установки/static/js/salesbot_widget.js"
        data-bot="3" data-title="Онлайн-консультант"
        data-color="#43b77a" async></script>

Параметры: data-title (заголовок), data-color (цвет), data-pos="left|right" (угол), data-greeting (приветствие). Виджет гоняет тот же сценарий через публичный движок /api/crm/bot/<id>/ (CORS, лимит 30 сообщений/5 мин), гость запоминается между сессиями. Соберите ответы узлом «Лид в CRM» — заявки придут в воронку бота с источником web.

Виджеты-плагины

Виджеты — каталог с сервера лицензий

URL: /admin/settings/widgets/ (Настройки → Виджеты). Каталог загружаемых расширений: новый виджет публикуется на сервере лицензий и появляется у всех инсталляций без обновления биллинга, с фильтрацией по тарифному плану.

sequenceDiagram
    participant A as Администратор СмИТ
    participant L as Сервер лицензий
    participant B as Биллинг клиента
    participant P as Страница (дашборд CRM)
    A->>L: загрузка zip-пакета виджета
    B->>L: каталог по лицензионному ключу
    L-->>B: список виджетов тарифа (+SHA-256)
    B->>L: скачать пакет
    B->>B: сверка SHA-256, распаковка
только фронтовых файлов P->>B: страница с точкой монтирования B-->>P: widget.js + контейнер P->>P: SmitWidget.register() → рендер

Пакет — zip с манифестом и фронтовым кодом (серверный код в v1 не исполняется):

{
  "slug": "funnel-summary",
  "name": "Сводка воронки",
  "version": "1.0.0",
  "entry": "widget.js",
  "description": "Счётчики сделок по стадиям — прямо на дашборде CRM."
}
// widget.js — контейнер уже в DOM, settings — из настроек установки
window.SmitWidget.register('funnel-summary', function (el, settings) {
  fetch('/admin/crm/deals/json/?type=' + (settings.type || 'internet'))
    .then(r => r.json())
    .then(d => { el.innerHTML = /* счётчики по d.counts */; });
});

На плитке каталога: версия, размер, точка монтирования, кнопки Установить / Обновить / Удалить и тумблер вкл/выкл. Первая точка монтирования — дашборд CRM (виджет «Сводка воронки»), далее — карточка сделки и карточка клиента.

Версия, «Подробнее» и автообновление

Плитка виджета показывает бейдж версии справа от названия (зелёный — установлен и включён, жёлтый — доступно обновление, серый — доступен в каталоге). Кнопка «Подробнее» открывает модалку с обложкой, полным описанием и вкладками «Возможности» / «Как это работает» / «Скриншоты» — так же, как у карточки модуля (данные приходят из расширенного каталога сервера лицензий).

Обновление по умолчанию ручное: у виджета с более новой версией в каталоге появляется кнопка «Обновить». Тумблер «Автообновление виджетов» в тулбаре (WIDGET_AUTO_UPDATE_ENABLED, по умолчанию OFF) включает ежесуточное авто-обновление всех установленных виджетов. Аналогичный тумблер «Автообновление модулей» — на /admin/settings/modules/ (MODULE_AUTO_UPDATE_ENABLED), там же версия модуля показана бейджем рядом с названием. Полное описание политики версионности и автообновления — в разделе СОРМ → Версионность и обновления.

Точки монтирования и стандартные виджеты

Виджет «Лицензия и модули»

Встроенные карточки «Быстрый доступ»

Шесть карточек в карточке клиента (Аудит, Услуги и бонусы, Операции, Обращения, Сообщения, Сессии) — тоже виджеты: в каталоге они показаны в секции «Встроенные карточки» и включаются/выключаются тумблером для всех сотрудников сразу. Удалить встроенную карточку нельзя — только выключить; персональная видимость из настроек профиля продолжает действовать поверх.

Карточка клиента с виджетами

Виджет «Рекламные кампании»

Точка монтирования — дашборд CRM, стоит сразу под воронкой по организациям. За 30 дней: топ-3 кампании по заявкам, сделки, выручка и окупаемость, снизу итог по всем. Суммы коротко («403,5К»), точное значение — в подсказке. ROI считается только у кампаний с заявками. Клик по названию открывает дашборд кампании.

Виджет «Salesbot»

Отвечает на один вопрос — работают боты или молчат: диалоги за 30 дней, сколько дошло до заявки и какая доля. У каждого бота отметка «включён». Ссылка ведёт в конструктор сценариев.

Виджет «Организации: сводка»

Точка монтирования — дашборд CRM. Показывает, как распределены сделки между компаниями: всего, новые за 30 дней, в работе, выиграно и конверсия. Каждая строка помечена единым бейджем организации. При одной организации виджет скрывается сам. Устанавливается из каталога на странице /admin/settings/widgets/.

Мастер настройки

Мастер настройки CRM

URL: /admin/crm/setup/ (CRM → Настройки → Мастер настройки). Пять шагов приводят CRM в боевое состояние: воронки из пресетов, каналы приёма заявок, команда и распределение лидов, AI-бот Поддержки, рекомендованные виджеты — каждый шаг применяется одной кнопкой и пишет только в существующие настройки. Чеклист «Готовность CRM» из шести живых проверок (есть воронка, работает источник, настроено распределение, включён бот, пришёл свежий лид, установлен виджет) обновляется после каждого шага.

Наряды монтажника

Наряды монтажника: карточки нарядов по дням, статусы и адреса

URL: /admin/crm/montazh/ — вид «Наряды» календаря (переключатель «Календарь | Наряды» на обеих страницах). Мобильный сценарий «мой наряд на день»: назначенные монтажи карточками — дата и окно времени, клиент, телефон одним касанием, адрес со ссылкой «маршрут», тариф и комментарий. Просроченный наряд помечается красным. Кнопка «Выполнено» переводит сделку в стадию «Подключено» её воронки прямо с телефона и оставляет системную заметку; «Перенести» сдвигает дату с причиной. Монтажник (группа installer) видит только свои наряды и не может закрыть чужой; менеджеру доступны все наряды и фильтр по монтажнику.

Дашборд и карта

Дашборд CRM: плитки KPI, воронка по организациям, рекламные кампании

Плитки KPI идут одной строкой; крупные суммы показываются коротко («5,5М ₽»), точное значение — в подсказке при наведении. В разбивке по организациям и в таблице кампаний стоит единый бейдж компании.

URL: /admin/crm/. KPI, блок «На карте» — геопривязанные лиды и монтажи с фильтрами (диапазон дат / Все / Мои / Наблюдаю) и полноэкранным режимом. Тултип маркера: аватарка + Фамилия / Имя Отчество, телефон, стадия, адрес. Цвет маркера — по стадии сделки.

CRM — дашборд с картой

Инсайты периода

Полоса над KPI: новые лиды · подключено · выручка подключений · конверсия периода за последние 7/30/90 дней (переключатель, параметр ?days=). У каждой метрики — дельта к предыдущему равному окну: ↑ зелёная / ↓ красная, конверсия — в процентных пунктах. Подключения считаются по моменту входа сделки в won-стадию (stage_changed_at).

AI-сводка воронки

Зелёная карточка под инсайтами: AI формулирует 3–5 предложений — динамика периода, узкое место (стадия с застрявшими ≥5 дней сделками), лучший источник лидов и рекомендация. Факты собирает код (числа AI не выдумывает), текст пишет движок из AI-агента. Кеш 1 час на пару «организация + период», кнопка ↻ пересчитывает принудительно. Endpoint: GET /admin/crm/ai_summary/?days=30.

Переток по стадиям — Sankey

Диаграмма под «Воронкой интернет-подключений»: сколько сделок за период перешло из стадии в стадию (источник — аудит смен стадий). Ширина потока — число сделок, цвета узлов — цвета стадий воронки. Видно, на какой стадии воронка «протекает» в отказ. Движения назад по воронке в диаграмму не входят — показываются счётчиком «↩ N возвр.» в шапке карточки. Endpoint: GET /admin/crm/stage_flow/?days=30.

Рекламные кампании

URL: /admin/crm/campaigns/. Кампании и каналы с UTM-метками: линк-билдер + QR-код, привязка сделки к кампании по utm_campaign в момент приёма (единая точка всех каналов), дашборд CAC (стоимость привлечения).

Рекламные кампании: выбор периода, диаграммы и таблица с ROI

Слева от поиска — выбор периода (тот же компонент, что в отчётах и аудите), по умолчанию последние 30 дней. Период применяется и к диаграммам.

Диаграммы

Блок скрывается, если за период не было ни одной заявки — пустые оси занимали бы экран и ничего не сообщали.

Таблица и итог

Строка «Итого» суммирует бюджет, выручку, лиды и сделки по показанным кампаниям. Суммы выводятся коротко («552,6К», «4,8М»), точное значение — в подсказке при наведении.

ROI считается только у работавших кампаний. При нулевых лидах в колонках ROI и CAC стоит прочерк: у черновика с бюджетом, который ни разу не запускался, «−100 %» означало бы провал, которого не было.

При мульти-орг и режиме «Все организации» в таблице появляется колонка «Орг.» с единым бейджем компании — тем же, что в списках и карточках. Кампания принадлежит организации, и её воронка задаёт, куда попадут лиды этой рекламы.

AI-мастер кампании

URL: /admin/crm/campaigns/wizard/, кнопка «AI-мастер» в списке кампаний. Оператор описывает задумку словами, помощник задаёт один круг уточняющих вопросов и собирает кампанию целиком: метки UTM и каналы, лендинг, форму заявки с воронкой и источником, запись DNS для поддомена.

AI-мастер кампании: слева диалог с уточняющими вопросами, справа собранный план

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

Что спрашивает помощник

Пять вещей, без которых кампании не существует: кому реклама (сегмент и география), оффер, каналы размещения, бюджет и срок, что считаем результатом. Вопросы приходят пачкой, одним списком — отвечать можно одним сообщением. Круг вопросов один: дальше помощник обязан выдать план, а чего оператор не сказал — домысливает разумными значениями (тарифы берёт с витрины, старт — сегодня).

Что создаётся при сборке

Повторная сборка ничего не дублирует. Нажатие «Собрать всё» второй раз возвращает уже созданное — второй кампании с той же меткой не появится.

Готовность к запуску

Чек-лист проверяет то, что реально ломает кампанию: страница опубликована, адрес резолвится, форма привязана к воронке и источнику, есть текст согласия на обработку данных, заполнены заголовок и описание для поисковиков, кампания активна и у неё есть канал с UTM. Каждый невыполненный пункт объясняет, что не так, и ведёт туда, где это чинится.

Материалы и ссылки

Карточка кампании: тексты объявлений, ссылки с UTM, QR-код и разбор результатов

На карточке кампании — блок «Материалы для размещения». Кнопка «Подготовить тексты» пишет объявления под те каналы, что заведены в кампании, и проверяет лимиты площадок: Яндекс.Директ режет длинный текст молча, поэтому перебор помечается прямо в карточке. Рядом — ссылки с UTM по каждому каналу и QR-код для листовок и наружной рекламы. Тексты хранятся в кампании и правятся вручную.

Разбор результатов

Блок «Разбор результатов» показывает заявки, конверсию, цену заявки и сделки, разбивку по источникам — и объясняет словами, что происходит, плюс что стоит сделать. При малом числе заявок помощник честно говорит, что данных мало и выводы делать рано.

Кампания без заявок несколько дней — обычно встало размещение. Не пополнили кабинет, слетела ссылка, модерация отклонила объявление. Раз в сутки биллинг проверяет активные кампании и присылает сигнал ответственному. Порог — настройка CAMPAIGN_IDLE_DAYS (по умолчанию 3 дня), выключатель — CAMPAIGN_IDLE_ALERT_ENABLED.

Карточка сделки (полноэкранный дровер)

Карточка сделки — полноэкранный дровер

Одинарный клик по карточке канбана открывает сделку дровером на весь экран. Слева — «паспорт сделки»: полоса-прогресс стадий (клик по сегменту переводит сделку), контакт с телефонами и адресом, параметры, клиент биллинга, обращения в Поддержку, мини-карта адреса и виджеты точки «Карточка сделки». Справа — лента: суть заявки, активность, задачи и композер внизу.

Вкладки левой панели:

Какие тарифы видны в сделке. В списке тарифа на вкладке «Подключение» показываются тарифы с флагом «CRM» (отмечается в карточке тарифа → «Статус и видимость»). Если ни один тариф не помечен — показываются все не архивные тарифы. Сам селект тарифа — единый компонент SmitTariffSelect (обложка + скорость + цена).
Формирование договора. Кнопка «Сформировать договор» не активна, пока не заполнены необходимые поля (тариф, адрес, контакт) — при наведении тултип поясняет, чего не хватает. Перед генерацией показывается модалка подтверждения со сводкой данных, чтобы договор не ушёл с ошибками. Кнопка «Создать клиента» из сделки доступна только на выигранной стадии.
Единые компоненты в дровере. Селектор ответственного и монтажника — ProfileSelect (аватар + Фамилия И.О. + группы); кнопка «Наблюдать» — SmitWatchButton (иконка + счётчик, зелёный фон в активном состоянии); телефоны — SmitPhone с click-to-call; i-иконки справки в заголовках — SmitHelpIcon. Полоса-прогресс стадий учитывает правила воронки (запрет пропуска/движения назад, цвета стадий).

Вкладка Статистика — источник, счётчики, UTM-метки

Задачи в ленте — карточками: видно, до какого времени и для кого поставлена задача; поле «Добавить результат» и кнопку «Выполнить» видит только ответственный. Новая задача из композера требует дату/время и ответственного. Дубли: если у клиента есть другие открытые сделки с тем же телефоном, над лентой появляется плашка «Возможные дубли» — кнопка «Объединить» переносит заметки, задачи, звонки и теги в текущую сделку (id: дубль удаляется, в сделке остаётся системная заметка). Прямые ссылки вида /admin/crm/deals/<id>/ автоматически открывают канбан с этим дровером.