Salesbot
Сценарии бота в мессенджерах: приём заявок по шагам, черновик и публикация, проверка и тест сценария, рассылка и веб-виджет на сайт.
Salesbot
Пункт меню: CRM → Salesbot (— сценарии правят чаще, чем воронки).
Карточки ботов, сценарий на холсте, настройка шага, лид в CRM, готовые сценарии и AI-помощник, проверка и тест, публикация и рассылка.
URL: /admin/crm/bots/ (CRM → Настройки → Salesbot). Визуальный
конструктор чат-сценариев для входящих каналов и веб-виджета: узлы перетаскиваются
по канвасу, связи-ветки тянутся мышью от кружка-выхода к целевому
узлу (живая линия за курсором, подсветка цели). Бот отвечает клиенту до
AI-агента и оператора.
Как устроен редактор:
- Правая панель, три вкладки: «Шаги» — палитра, сгруппированная по смыслу (Разговор · Данные клиента · Логика · CRM · Люди и связь); «Узел» — настройки выбранного шага; «Бот» — каналы автозапуска, воронка для лидов, организация и код веб-виджета.
- Связи — перетаскиванием: тяните линию от кружка-выхода к узлу. Клик по линии — удалить связь. У ветвлений линии подписаны: «Да», «Нет», названия кнопок — видно, куда ведёт каждая.
- Шаги — из палитры: перетащите плитку на канвас (или клик — добавит в центр).
- Двойной клик по узлу — правка текста прямо на канвасе.
- Ctrl+Z / Ctrl+Y — отмена / возврат; Ctrl+D — дубль узла; Del — удалить выделенный.
- Кебаб-меню (⋮): проверка сценария, история версий, готовые сценарии, рассылка, разложить граф, привязка к сетке, отмена черновика, новый бот.
- Индикатор в шапке показывает, сохранён ли черновик; при уходе со страницы с несохранёнными правками браузер переспросит.
Разбор на примере: «Приём заявок СмИТ»
Бот работает в Telegram и VK и отвечает раньше AI-агента и оператора: типовые обращения он закрывает сам, а остальное передаёт людям. Ниже — весь его сценарий, четырнадцать шагов.
flowchart TD
S["Клиент написал в Telegram или VK"] --> M1["Приветствие и меню:
Подключиться · Нет интернета ·
Баланс и оплата · Другой вопрос"]
M1 -->|"Подключиться"| A1["Адрес подключения
шаг «Адрес»: подсказка и проверка"]
A1 --> Q1["Как вас зовут?"]
Q1 --> Q2["Телефон для связи"]
Q2 --> C1{"Телефон
распознан?"}
C1 -->|"нет"| Q2
C1 -->|"да"| LEAD["Лид в CRM:
сделка в воронке «Интернет-подключения»"]
LEAD --> OK["«Заявка принята,
менеджер перезвонит»"]
M1 -->|"Нет интернета"| W{"Рабочее время?
9:00-18:00"}
W -->|"да"| H1["Передать дежурному
специалисту сейчас"]
W -->|"нет"| P1["Описать проблему:
адрес и что не работает"]
P1 --> H2["Заявка специалистам,
ответят с 9:00"]
M1 -->|"Баланс и оплата"| PAY["Ссылка на личный кабинет"]
PAY -->|"вопрос по платежу"| H3["Оператор поддержки"]
PAY -->|"спасибо"| END["Конец диалога"]
M1 -->|"Другой вопрос"| AI["AI-помощник:
знает тарифы и услуги"]
AI -->|"не справился"| H3
Из каких шагов он собран
| Шаг | Что делает в этом боте |
|---|---|
| Сообщение с кнопками | Приветствие и меню из четырёх пунктов. У кнопки есть синонимы («подключение», «интернет», «тариф») — клиент может не нажимать кнопку, а написать словами, и бот поймёт. |
| Адрес | Спрашивает адрес подключения, показывает распознанный вариант и просит подтвердить. Не понял — переспрашивает своим текстом, а не общей ошибкой. |
| Вопрос | Имя и телефон. Ответ кладётся в поле сделки, а не теряется в переписке. |
| Условие | Два разных: «телефон распознан?» — иначе спросит ещё раз; «рабочее время?» — в нерабочее не обещает дежурного, а принимает заявку. |
| Лид в CRM | Создаёт сделку в воронке организации со всем, что собрал: адрес, имя, телефон, источник и метки кампании. |
| Передать человеку | Уводит диалог в Поддержку: дежурному сейчас или специалистам к утру. |
| AI-помощник | «Другой вопрос» отдаётся ассистенту, который знает тарифы и услуги; не справился — зовёт оператора. |
| Конец | Закрывает диалог, чтобы бот не перехватывал следующее сообщение клиента. |
Что важно в такой связке
- Порядок ответа. Бот отвечает до 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 читает шаги и связи и возвращает разбор — где тупик, чего не хватает, что переписать. Советы приходят списком с чекбоксами (по умолчанию отмечены все); «Применить выбранное» перестраивает сценарий с их учётом, сохраняя тексты шагов, к которым замечаний не было.
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}}») |
| Переход / Стоп | прыжок на другой шаг / завершение сценария |
Пример — сценарий «Приём заявок» (стартовый шаблон):
- Приветствие с кнопками: Подключиться · Нет интернета · Оплата и баланс · Другой вопрос.
- «Подключиться» → адрес → имя → телефон (условие проверяет, что это телефон) → Лид в CRM → «Заявка принята 🎉».
- «Нет интернета» → условие «рабочее время 9–18»: днём — живая передача дежурному, ночью — бот записывает проблему и оформляет заявку на утро.
- «Оплата» → ссылка на личный кабинет + кнопка «Нужен оператор».
- «Другой вопрос» → передача 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.
Рассылка
Кебаб → «Рассылка». Получатели — только те, кто сам писал этому боту: согласие берём из факта переписки, чужие списки не грузим — это уже спам, и бота за него блокируют. Панель показывает, сколько человек и по каким каналам получат сообщение.
- Проверка на себе перед отправкой: посмотреть «как получилось» после рассылки уже поздно.
- Ограничение частоты —
BOT_BROADCAST_RATE(4 сообщения в секунду по умолчанию): Telegram блокирует ботов за спешку. - Итоги по каждой рассылке: доставлено, заблокировали бота, ошибки — отказ адресата отделён от сбоя доставки.
- Рассылка выключена по умолчанию: включается настройкой
BOT_BROADCAST_ENABLED. - Отписка командой: клиент пишет боту «стоп» (или «отписаться»,
/stop) и больше не получает рассылок; «старт» возвращает./start— открытие бота — не перехватывается. - Стоп-лист: чаты, где клиент или контакт сделки в стоп-листе «без рекламы», из получателей исключаются (стоп-лист).
- Без повторов: каждое сообщение рассылки отмечается в журнале отправок. Перезапуск после сбоя досылает только тем, кому не ушло, а тем, кто заблокировал бота, не пишет. Рассылки по чатам клиента видны в его карточке, во вкладке «Сообщения».
Веб-виджет на сайт
Включите канал «Виджет» в тулбаре — бот станет доступен на внешнем
сайте как чат-виджет (кнопка-пузырь в углу → окно диалога с кнопками-ответами).
Кнопка «Код виджета» выдаёт готовый сниппет для вставки перед
</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.