Поддержка — модуль техподдержки клиентов
Поддержка (/admin/support/) — нативный модуль техподдержки
внутри СмИТ Биллинга: единое окно приёма обращений из всех каналов (email, VK,
Telegram, MAX, пропущенные звонки, веб-виджет), карточка тикета со связью с клиентом
и CRM, AI-бот с автоответами, база знаний, аналитика. Клиент привязывается к тикету
напрямую (данные хранятся в базе биллинга) — оператор видит баланс, тариф и статус
без каких-либо внешних интеграций.
Содержание страницы
- Обзор модуля
- Каналы приёма обращений
- Входящие: список тикетов
- Дашборд Поддержки
- Карточка тикета
- Правый сайдбар
- Выезжающая панель и мобильная версия
- — Ответ клиенту или заметка
- — Лента: сообщения и история действий
- — Запись звонка и «Не тот звонок»
- Тикеты, требующие внимания
- AI-бот
- — База знаний в промпте
- Телефонный AI (61-32-40)
- Голосовая почта
- — Расшифровка и суть звонка (AI)
- База знаний
- Аналитика и учёт времени
- Настройки
- Мессенджеры и SMS-идентификация
- Связь с биллингом и CRM
Тот же механизм, но нарисованный: узлы можно подсвечивать, связи — разбирать по шагам. Открывается в новой вкладке.
Все схемы системыОбзор модуля
Очередь «Входящие» и её срезы, панель обращения, ответ клиенту и заметка, запись звонка и история действий в ленте, полная карточка, журнал звонков на линию и дашборд смены — и три правила, на которых держится очередь.
Модуль доступен в верхнем меню биллинга — пункт «Поддержка». Левый сайдбар раздела: Дашборд · Входящие · Мои тикеты · Не назначены · Назначенные · Отмеченные · Отслеживаемые · Черновики · Закрытые · Спам · Корзина · База знаний · Настройки.
flowchart TD
EM["Email (IMAP)
ask@ · connect@ · call@"] --> IN
VK["VK (сообщество)"] --> IN
TG["Telegram (бот)"] --> IN
MAX["MAX-мессенджер"] --> IN
VM["Голосовая почта
(пропущенные звонки)"] --> IN
WG["Веб-виджет и AI-виджет"] --> IN
IN["Единая точка приёма
ingest_message()"] --> FLT{"Фильтры шума"}
FLT -- "bounce / автоответ
уведомление провайдера" --> DROP["Отброшено —
тикет НЕ создаётся"]
FLT -- "обращение" --> CONV["Тикет
+ привязка клиента"]
CONV --> ORG["Маршрутизация по организации"]
CONV --> AI{"AI-бот
включён?"}
AI -- "отвечает сам" --> REPLY["Автоответ клиенту"]
AI -- "эскалация" --> OP["Оператор: Входящие"]
REPLY -.->|"ESCALATE_TO_HUMAN"| OP
OP --> DONE["Ответ · статус · SLA
· учёт времени"]
Карта раздела
- Поддержка
- Каналы приёма
- Email IMAP
- Telegram
- VK
- MAX
- Голосовая почта
- Веб-виджет и AI
- Очередь
- Входящие и сохранённые виды
- Не назначены · Мои
- Спам · Корзина
- Карточки на телефоне
- Карточка тикета
- Переписка и вложения
- Шаблонные ответы
- AI-бот
- Запись звонка и суть
- SLA и учёт времени
- Контекст биллинга
- Клиент и договор
- Баланс · тариф · статус
- Прошлые обращения
- Настройки
- Ящики и права
- Мессенджеры
- Теги и доп. поля
- Вложения только в GCS
- Фильтры шума
- Мульти-орг
- Ящик = организация
- Изоляция тикетов
Ключевые принципы:
- Единое окно — все каналы сходятся в одну очередь; ответ уходит в тот же канал, откуда пришло обращение.
- Биллинг-контекст с первой секунды — сопоставленный клиент (баланс/тариф/статус/аватар/соцсети) виден в сайдбаре тикета и в выезжающей панели.
- Мульти-организация — ящики и тикеты изолируются по организациям маршрутизация — по ящику-получателю и маркерам в тексте.
- Лиды ≠ тикеты — обращения «хочу подключиться» уходят лидами в CRM-воронку, а не в очередь поддержки.
Модуль «Поддержка» — единое окно техподдержки
Поддержка (/admin/support/) — нативный модуль
техподдержки внутри биллинга: приём обращений из всех каналов, карточка тикета со
связью с клиентом и CRM, AI-ответы, база знаний, аналитика. Весь приём и обработка обращений — внутри СмИТ Биллинг.
i-иконка рядом с заголовком раздела Поддержки и в модалках тикета ведёт прямо сюда.
Приём обращений — единая точка
Все каналы (email IMAP, VK, Telegram, MAX, голосовая почта Mango, веб-виджет) сходятся в единую функцию приёма, создающую или дополняющую тикет; AI-бот может ответить автоматически или эскалировать на оператора.
flowchart TD
EM["Email (IMAP)"] --> IN
VK["VK"] --> IN
TG["Telegram (polling)"] --> IN
MAX["MAX (WS)"] --> IN
VM["Голосовая почта Mango"] --> IN
WG["Веб-виджет"] --> IN
IN["ingest_message()"] --> CONV["Тикет (SupportConversation)"]
CONV --> AI{"AI-бот доступен?"}
AI -- "да" --> REPLY["Автоответ"]
AI -- "эскалация/нет" --> OP["Оператор: Входящие"]
REPLY -. "ESCALATE_TO_HUMAN" .-> OP
Входящие: список тикетов, поиск
Срезы очереди («Все открытые · Без ответа · Клиент ответил»), сохранённые виды, фильтры (приоритет, категория, период, ящик) и умный поиск. Подробно — Поддержка → Входящие.
Поиск по тексту переписки. Ищет по теме, тексту сообщений, ФИО/договору клиента, адресу, телефону (любой формат) и №. Если совпадение не в теме — в строке тикета показывается сниппет-выдержка из тела сообщения с жёлтой подсветкой, чтобы оператор видел, почему тикет найден.
Карточка тикета и сайдбар
Слева — тред сообщений и редактор ответа (шаблоны saved-replies, AI-«Нейроответ»). Справа — сайдбар: Ответственный + Приоритет, Категория, Биллинг (аватар/баланс/тариф/статус/соцсети), SLA-таймер «Ждёт ответа», Прошлые обращения клиента, Теги, Доп. поля, Логи времени.
- SLA-таймер — время с последнего сообщения клиента без ответа оператора; цвет по порогу (зелёный <1 ч · оранжевый <4 ч · красный ≥4 ч).
- Прошлые обращения — последние 5 тикетов клиента (№ · тема · статус · дата), клик открывает тикет.
Выезжающая панель тикета
Клик по тикету из «Входящих» выдвигает панель быстрого просмотра и ответа без ухода со списка. В панели: метки отдела, статуса и канала, клиент с балансом, запись звонка с кнопкой «Не тот звонок», приоритет одним нажатием, лента переписки со строками истории (кто назначил, кто сменил статус), переключатель «Ответ клиенту · Заметка» и подтверждение перед закрытием обращения. Подробно — Поддержка → Выезжающая панель.
Мобильная адаптация
На узком экране в карточке тикета над записью звонка и перепиской — свёрнутая шапка клиента (имя, баланс, статус); разворот показывает SLA, договор, тариф, телефон и кнопки перехода. В выезжающей панели детали обращения свёрнуты в строку «Детали», а переписке и полю ответа достаётся весь экран.
Вложения: политика, оптимизация, архив в GCS
- Политика вложений (настройки) — множественный выбор типов
файлов (изображения / документы / архивы / …) + макс. объём; список расширений
динамически мержится в
acceptформ загрузки. - Оптимизация картинок — изображения сжимаются при загрузке (Pillow, ≤1600px, JPEG q82) — экономия диска без видимой потери качества.
- Архивация в GCS — Celery-задача переносит старые вложения (настройки: возраст в днях, порог объёма) в облако; локальный файл удаляется только после успешного аплоада.
Категории обращений и «Перезвонить»
Категории настраиваются пер-ящик (у каждой — имя и иконка), выбираются в сайдбаре тикета и в модалке создания; фильтр по категории — в списке. Отметка «Перезвонить» на тикете создаёт заметку (с необязательным комментарием) и поднимает тикет в блок «требующие внимания».
Тикеты, требующие внимания + кнопка «следующий»
Под формой ответа — до 3 карточек тикетов, требующих внимания оператора («Перезвонить» и «Клиент ждёт N мин»); в шапке — кнопка перехода к следующему такому тикету. Включается настройкой.
Прочие возможности карточки
- Редактирование своего ответа/заметки — автор может исправить отправленное (с отметкой о правке); суперадмин — любое такое сообщение.
- Нормализация адресов — адрес из текста тикета прогоняется через DaData ФИАС (для голосовых — предварительно ИИ переводит адрес прописью в цифры), геокод попадает на карту сети.
- AI авто-триаж — команда закрытия/классификации старых тикетов с помощью AI (массовая разгрузка очереди).
- Модалка нового тикета — поиск клиента (имя/телефон/договор/ адрес), контакты и ящик подставляются по организации клиента, вложения-скриншоты, цветные кружки приоритета.
- Рейтинги — оценка ответа оператора клиентом (настройка).
- Учёт времени — таймер (авто-старт на своих тикетах) + ручное добавление, блок «Логи времени» в сайдбаре.
Настройки, база знаний, аналитика
Настройки Поддержки — вкладки: Общие, Внутренние, Авто-назначение ответственного и наблюдателя, Группы и права, Оповещения, Системный фильтр; почта и каналы настраиваются пер-ящик. Рядом в разделе: База знаний, Аналитика, Мессенджеры, Теги; журнал голосовой почты — в Отчётах.
Каналы приёма обращений
| Канал | Как работает | Куда попадает |
|---|---|---|
| IMAP-приём с ящиков поддержки (каждый ящик — свои IMAP+SMTP настройки); ответ оператора уходит письмом | Тикет в ящик-получатель | |
| VK | Сообщения в сообщество ВКонтакте; идентификация клиента по VK ID или коду из SMS | Тикет (канал VK) |
| Telegram | Клиентский бот; long-polling демон (работает из РФ без вебхуков) | Тикет (канал Telegram) |
| MAX | Приём через пользовательскую сессию мессенджера MAX | Тикет (канал MAX) |
| Звонки | Пропущенные звонки от АТС → письмо с записью → авто-разбор (голосовая почта) | Тикет / лид CRM / мусор |
| Веб-виджет | AI-виджет на сайте и форма заказа; диалог с AI, эскалация оператору | Тикет или лид CRM |
| Вручную | Кнопка «Новый тикет» во Входящих: поиск клиента, контакты и ящик подставляются по его организации, вложения-скриншоты | Тикет |
SMS-идентификация внешних каналов. Когда клиент пишет из VK/Telegram/MAX/виджета, AI-бот подтверждает личность кодом из SMS (номер → код → доступ к данным договора). Идентификация «по номеру договора» запрещена — это защита персональных данных. Управляется настройкой на странице Мессенджеры.
Варианты ответа в MAX — цифрами. В MAX кнопок нет, поэтому бот присылает варианты пронумерованным списком («1. Я хочу подключиться», «2. Я ваш клиент») с подсказкой «Ответьте цифрой». Ответ «1» или «2.» бот понимает как выбранный вариант; можно написать и своими словами. Показанные варианты бот помнит 30 минут, а после сообщения без вариантов цифры снова считаются обычным текстом. У сценариев Salesbot своя нумерация, она работает как раньше. В Telegram и ВКонтакте варианты — по-прежнему кнопками.
Входящие: список тикетов
Главный экран оператора: KPI-карточки (Не назначены / Мои / Активные / Ожидают / Закрыты), статусные папки в левом сайдбаре, таблица тикетов с превью, тегами и бейджами.
Todo-секции «Разобрать» и отложенные
Полоса секций по принципу «что делать», а не «какой статус»: Нужен первый ответ (нет ни одного ответа оператора — риск SLA) · Ждёт нашего ответа (клиент написал после нас) · Ждёт клиента · Отложенные. Секции со срочной работой подсвечиваются янтарным, счётчики точные.
Отложить (snooze) — в карточке тикета: 1 ч / 3 ч / завтра 9:00 / понедельник / своя дата. Отложенный тикет скрыт из «Входящих» до срока, затем «просыпается» автоматически: уведомление ответственному в ленту и личный Telegram.
SLA-чипы
При настроенных SLA-политиках строка тикета получает метку SLA в колонке «Ожидает»: красная — просрочен, жёлтая — под угрозой (прошло больше 80% цели), серая — выполнен с опозданием или пауза (статус «Ожидает»). Подробный статус целей — блоком в карточке тикета.
Умный поиск
Одно поле ищет по: теме · тексту переписки · ФИО и договору клиента · адресу · телефону в любом формате (нормализуется до цифр) · номеру тикета. Если совпадение не в теме, строка тикета показывает сниппет — выдержку из сообщения с жёлтой подсветкой найденного.
Фильтры и массовые действия
- Фильтры: приоритет (мультивыбор), категория, период (быстрые кнопки), ящик, «Перезвонить».
- Селект «Оператор» (обновлён в 2026-07): в списке — все операторы, которым назначены тикеты, с количеством напротив каждого. Клик по фамилии в колонке «Назначено» подставляет этого сотрудника в фильтр — быстрый разбор очереди конкретного оператора.
- Кнопка «Наблюдаю» — единый компонент SmitWatchButton: только иконка глаза и счётчик, зелёный фон в активном состоянии. Фильтрует тикеты, за которыми следит оператор.
- Сортировка по колонкам: № / Назначено / Приоритет / Ожидает.
- Массовые действия по чекбоксам: назначить, теги, статус, спам, удалить.
- Строка тикета: значки скрепки (есть вложения) и трубки (требуется перезвон), превью телефон+адрес, техтеги, клик по клиенту открывает панель клиента.
- Клик по строке — выезжающая панель (или полная карточка, по настройке «Открытие тикета»).
Обновления инбокса (2026-08):
- Пик-панель всегда по клику — тикет открывается в выезжающей справа панели (тема, клиент, запись звонка, приоритет, переписка, поле ответа), список слева остаётся.
- Аватар ответственного + инлайн-переназначение в колонке «Назначено»: кнопка ▾ открывает меню операторов (с аватарами) → назначение без открытия тикета.
- Тумблер «Компактно/Просторно» — плотность строк (скрывает превью и теги), запоминается в браузере; доступен на всех разделах.
- Акцент «нужен ответ» — левая жёлтая полоса + жирная тема у тикетов, где последнее слово за клиентом.
- Массовые действия (колонка чекбоксов + панель) — только для
su и группы «Старший менеджер»; endpoint
/support/bulk/защищён на сервере. - Таблица тикетов не даёт горизонтального скролла на всех разделах
(
table-layout:fixed+ фикс-ширины колонок); тулбар фильтров в один ряд с авто-сжатием поиска и icon-only при нехватке места.
Дашборд Поддержки
URL: /admin/support/dashboard/. Сводка очереди в стиле CRM-дашборда.
Мультиорг-осведомлён: режим «Все» показывает сводные показатели + разбивку по
организациям; при выбранной организации — строго её тикеты.
Выпуск 3.7.0: две колонки без пустот
Период — общим календарём в шапке, рядом кнопка знакомства с разделом. Блоки разложены в две независимые колонки: слева динамика, тепловая карта, ящики и последние обращения; справа организации, топ населённых пунктов, операторы, каналы и теги — высокий блок одной колонки больше не оставляет пустоту в другой. Служебные теги (канал, организация, номер линии) в разбивке не показываются, обращения без адреса собраны в строку «Адрес не определён».
Период и дельты
- Единый компонент диапазона дат (SmitDateRange — пресеты + календарь), по умолчанию последние 30 дней; выбранный диапазон запоминается в сессии.
- Дельты потока ▲/▼ к предыдущему равному периоду на карточках «Всего» (создано), «Закрыто», «Спам». Цвет по смыслу: закрыто↑ — хорошо, спам↑ — плохо.
- Медианное время первого ответа (по первому ответу оператора) и время решения (создание→закрытие) за период, с дельтой к прошлому периоду (меньше — лучше).
- SLA-карточка «Первый ответ в срок (≤N ч)» — % в срок / из скольких /
просрочено. Порог — настройка
SUPPORT_SLA_HOURS(по умолчанию 4).
Как считаются метрики за выбранный период:
flowchart LR P["Период
(SmitDateRange, 30 дн.)"] --> M["Метрики за период"] T[("Тикеты
+ сообщения")] --> M M --> C1["Создано ▲▼"] M --> C2["Закрыто ▲▼"] M --> FR["Медиана
1-го ответа"] M --> RS["Медиана
решения"] M --> SLA["SLA:
% в срок ≤N ч"] T --> HM["Тепловая карта
часы × дни"] T --> OP["Топ операторов
+ время ответа/решения"] T --> RC["Последние
открытые тикеты"]
Тепловая карта и топ операторов
- Тепловая карта «часы × дни недели» (7×24, 5 уровней интенсивности) по созданным тикетам — помогает планировать смены. Размещена под графиком динамики в левой колонке.
- Топ операторов — к «Открытых / Закрыто / Всего» добавлены «1-й ответ» и «Решение»: медианное время по тикетам, где оператор ответственный, за период.
Последние тикеты и каналы
- «Последние тикеты» оформлены как карточка настроек (серая шапка + table-hover). Только открытые (актив+ожид). В строке: статус-точка, тема (клик → тикет), под ней бейджи канала (цветной, иконка+имя), статуса, приоритета, категории, а также № тикета · клиент; справа — аватар ответственного и время.
- «Каналы обращений»: каналы импорта свёрнуты в один бакет «Импорт (архив)», добавлен канал «AI-ассистент».
Карточка тикета
URL: /admin/support/<id>/. Слева — тред сообщений
(клиент / оператор / внутренние заметки, жёлтым), справа —
сайдбар. В шапке: номер + тема, чипы статуса/канала/категории,
кнопки: учёт времени, звёздочка (Отмеченные), колокольчик (Отслеживаемые), спам,
корзина, «следующий тикет внимания».
Сообщение клиента отмечено серой полосой, ответ оператора — зелёной, внутренняя заметка — жёлтым фоном. Статус SLA показан метками «в норме», «до 14:30», «с опозданием», «просрочен» и «пауза (ждём клиента)».
Редактор ответа и вложения
Лёгкий визуальный редактор: форматирование (жирный/курсив/списки/ссылка), прикрепление файлов, вставка картинки из буфера (Ctrl+V). Вложения-картинки — миниатюры с лайтбоксом, PDF открывается в модальном окне. Для e-mail уходит HTML-тело, для мессенджеров — очищенный plain-text. Кнопки: Ответить · Нейроответ (черновик от AI) · Ответить и закрыть · Заметка · Закрыть тикет. Черновик автосохраняется.
Шаблонные ответы с переменными
Настройки → Шаблонные ответы (/admin/support/saved-replies/).
Готовые тексты для вставки в редактор. Переменные в тексте раскрываются данными
текущего тикета в момент вставки. Видимость шаблона: глобальная, на ящик или
личная; категории группируют шаблоны в списке.
| Переменная | Что подставляет |
|---|---|
| Тикет | |
{%ticket.number%} | Номер тикета |
{%ticket.subject%} | Тема |
| Клиент | |
{%customer.fullname%} | Полное имя |
{%customer.first%} | Имя — для обращения в письме |
{%customer.email%} | Электронная почта |
{%customer.phone%} | Телефон |
| Клиент в биллинге | |
{%abonent.contract%} | Номер договора |
{%abonent.login%} | Логин учётной записи |
{%abonent.tariff%} | Название тарифа |
{%abonent.balance%} | Баланс, ₽ |
| Ящик и оператор | |
{%mailbox.email%} | Адрес ящика поддержки |
{%mailbox.name%} | Название ящика |
{%agent.name%} | Имя отвечающего оператора |
Если данных нет — клиент не опознан в биллинге или у него не заполнен телефон — переменная раскрывается в пустую строку. Составляйте текст так, чтобы он читался и без подстановки: «Здравствуйте!» вместо «Здравствуйте, {%customer.first%}!».
AI-подбор шаблона
Кнопка «Подобрать» рядом с «Шаблоны»: AI читает последние сообщения клиента и предлагает до 3 подходящих шаблонов чипами — клик вставляет шаблон с раскрытием переменных. Работает на движке из «AI-агента», результат кешируется до нового сообщения клиента; при 3 и менее шаблонах AI не вызывается.
Правка отправленного
Автор может отредактировать свой ответ или заметку — рядом появляется отметка «изменено». Суперадмин может править любые сообщения операторов.
Правый сайдбар тикета
flowchart TB
A["Ответственный с аватарами
и приоритет"]
B["Категория обращения
и «Перезвонить»"]
C["Биллинг: баланс, тариф, статус,
телефон и соцсети клиента"]
D["SLA «Клиент ждёт ответа: N ч»
и прошлые обращения"]
E["Теги, доп. поля
и логи времени"]
A --> B --> C --> D --> E
- Ответственный — селектор с аватарами и ролями; «Взять в работу» одним кликом; назначение — у ст. менеджера/директора.
- Биллинг — сопоставленный клиент: аватар, ФИО (клик — drawer), договор, баланс (цвет), тариф, статус, блоки, телефон, email, соц-иконки. Если не сопоставлен — кнопка «Связать с клиентом» (поиск по ФИО/договору/адресу/ телефону/email).
- SLA-таймер — время с последнего сообщения клиента без ответа оператора; зелёный <1 ч · оранжевый <4 ч · красный ≥4 ч. Если обращение завёл сотрудник со слов клиента, подпись всё равно «Клиент ждёт ответа»; фамилия сотрудника стоит в подписи только у внутреннего тикета без клиента.
- Прошлые обращения — последние 5 тикетов клиента (№ · тема · статус · дата), клик открывает.
- Доп. поля — кастомные поля тикета
(текст/число/дата/список/Да-Нет/многострочный), глобальные или на ящик
(
/admin/support/userfields/). Поля «Номер договора» и «Адрес подключения» при связанном клиенте — только для чтения (берутся из карточки). - Логи времени — таймер (авто-старт на своих тикетах, по настройке) + ручное добавление; последние записи с итогами.
Выезжающая панель и мобильная версия
Клик по тикету из Входящих открывает выезжающую панель справа — просмотр и ответ без ухода со списка. Та же панель открывается из карты клиентов, карты сети, карточки клиента и журнала голосовой почты. Панель собрана по итогам разбора с операторами, руководителем смены и экспертом по интерфейсам: главное в ней — чтобы служебный текст нельзя было случайно отправить клиенту и чтобы по ленте было видно, что с обращением происходило.
flowchart TB
H["Шапка: номер, организация,
«создано N д назад»"] --> B["Метки: отдел · статус · канал,
тема и «Ждёт ответа»"]
B --> D["Детали: клиент и баланс, запись звонка,
приоритет, прошлые обращения"]
D --> F["Переписка · N: сообщения
и строки истории"]
F --> R["Ответственный"]
R --> M{"Ответ клиенту
или заметка?"}
M -- "ответ" --> A["Уходит клиенту
в канал обращения"]
M -- "заметка" --> N["Видят только
сотрудники"]
- Метки в шапке — отдел, статус и канал с подсказками. Статусы обращения — «Открыто», «Ожидает», «Закрыто», «Спам», поэтому их не спутать со статусом клиента «Клиент активен / отключён». Рядом с номером — «создано N д назад», точная дата в подсказке.
- Детали — клиент (клик открывает панель клиента), баланс, тариф, статус и телефон в одну линию, запись звонка, приоритет и прошлые обращения. На десктопе раскрыты всегда, на телефоне свёрнуты в строку «Детали».
- Приоритет — «Низкий · Средний · Высокий» одним нажатием, выбранный вариант залит своим цветом в обеих темах.
- Ответственный — подписанный выбор оператора с аватарами; без права назначать — кнопка «Взять в работу».
Ответ клиенту или заметка
Над полем — переключатель «Ответ клиенту · Заметка». Под ним строка, куда уйдёт сообщение: «Клиент получит ответ: Telegram» или «Ответ появится в обращении клиента — в личном кабинете и приложении». В режиме заметки поле становится жёлтым, кнопка — «Сохранить заметку», строка — «Заметка — видят только сотрудники». У сотрудника без права отвечать клиенту переключателя нет: доступна только заметка.
Рядом с отправкой — «AI-черновик» (черновик ответа, который оператор проверяет перед отправкой), «Черновик» (сохранить текст на этом устройстве) и «Закрыть». Закрытие спрашивает подтверждение с номером обращения и предупреждает, если в поле остался текст: он уйдёт вместе с закрытием.
Лента: сообщения и история действий
Заголовок «Переписка · N» считает сообщения, кнопка рядом разворачивает ленту на всю панель. Лента открывается на последнем сообщении — текущее состояние дела видно сразу. У каждого сообщения метка: «Клиент» (серая), «Ответ» (зелёная) или «Заметка» (жёлтая) — тип виден не только по цвету полосы.
- История действий — между сообщениями по времени идут служебные строки: «Иван Петров · ответственный: Анна Смирнова», «статус: Закрыто», «приоритет: Высокий», «закрыто автоматически», «присоединено обращение #29670», «отвязана запись звонка от 28.07.2026». Источник — аудит Поддержки; отдельные записи «ответ» и «заметка» в историю не попадают, их и так видно сообщениями.
- Автосводка звонка — заметка с разбором звонка свёрнута в строку «Автосводка звонка · показать». Полный текст — в блоке «Запись звонка», поэтому сводка не дублируется в ленте.
- «Записано со слов клиента: …» — если обращение завёл сотрудник, первое сообщение подписано клиентом, а под именем указано, кто его записал.
flowchart TB
T[("Сообщения
обращения")] --> FEED["Лента панели
по времени"]
AU[("Аудит
Поддержки")] --> FEED
FEED --> L1["Сообщения с метками
Клиент · Ответ · Заметка"]
FEED --> L2["Строки истории: статус,
ответственный, приоритет"]
FEED --> L3["Автосводка звонка —
строкой, текст по «показать»"]
Запись звонка и «Не тот звонок»
Если к обращению есть запись разговора, в деталях — блок «Запись звонка» с датой звонка в свёрнутом заголовке. Внутри: плеер (перемотка на 10 секунд, скорость, «Скачать»), суть звонка, «Текст разговора» и «Обновить суть».
Какая запись попадает в обращение. Сначала — звонок, за которым уже закреплён номер этого обращения. Если такого нет — свободная запись с тем же телефоном, сделанная не дальше суток от создания обращения. Раньше при пустых сутках бралась последняя запись с этим телефоном за любое время, и фоновая расшифровка закрепляла её за обращением: к тикету про обрывы попадал звонок трёхнедельной давности про баланс, а категория и теги обращения менялись по чужому разговору.
flowchart TB
S["Открыто обращение"] --> Q1{"Звонок закреплён
за этим обращением?"}
Q1 -- "да" --> SHOW["Запись в деталях"]
Q1 -- "нет" --> Q2{"Свободная запись с тем же телефоном
в пределах суток от обращения?"}
Q2 -- "да" --> SHOW
Q2 -- "нет" --> NONE["Записи нет"]
SHOW --> FAR{"Звонок дальше суток
от обращения?"}
FAR -- "да" --> WARN["Плашка «проверьте,
тот ли это разговор»"]
SHOW --> UN["«Не тот звонок»"]
UN --> OUT["Запись уходит из обращения,
в журнале звонков остаётся"]
OUT --> LOG["Строка в истории
и в аудите"]
Если звонок дальше суток от даты обращения, в свёрнутом заголовке появляется значок предупреждения, а внутри — плашка «Звонок на 68 дней позже обращения — проверьте, тот ли это разговор». Кнопка «Не тот звонок» (для тех, кто может отвечать или назначать) убирает запись из обращения после подтверждения. Запись остаётся в журнале звонков и может найтись для другого обращения, а в ленте появляется строка «отвязана запись звонка от …».
Мобильная версия
Раздел рассчитан на работу с телефона — оператор в поле открывает очередь и отвечает без десктопа:
- Входящие — карточки, а не урезанная таблица. Каждый тикет: тема, телефон и адрес, теги с бейджем организации, строки «Клиент», «Исп.» и время ожидания с меткой SLA. Ничего не прячется.
- Панель тикета во весь экран. Детали обращения свёрнуты в строку «Детали», чтобы переписке и полю ответа досталось больше места; «AI-черновик» и «Черновик» — значками, «Ответить» и «Закрыть» — с подписью, в один ряд. Кнопки приоритета 32 px высотой при зоне нажатия 44 px.
- Модалки — полноэкранные слайд-панели (выезжают справа, шапка и кнопки действий прилипают) — общесистемное поведение интерфейса.
- Фильтры сворачиваются в нижний лист, «Новый тикет» — кнопкой на всю ширину.
Канбан-доска подключений находится в разделе CRM → Воронка сделок.
Тикеты, требующие внимания
Под формой ответа — до трёх карточек тикетов, требующих реакции оператора: «Перезвонить» (отмеченные) и «Клиент ждёт N мин» (входящее без ответа). В шапке карточки — кнопка перехода к следующему такому тикету: оператор обрабатывает очередь не возвращаясь в список. Включается настройкой «Показывать тикеты внимания».
AI-бот
AI-бот (единый AI-модуль AI-агент) работает на
всех внешних каналах: отвечает на типовые вопросы (баланс, тариф, «нет интернета» —
с данными из биллинга), проводит SMS-идентификацию и эскалирует оператору по
ключевым словам или запросу клиента (ESCALATE_TO_HUMAN).
- Нейроответ — кнопка в редакторе: AI формирует черновик ответа по треду и биллинг-контексту, оператор правит и отправляет.
- Авто-триаж — команда массовой AI-классификации и закрытия устаревших тикетов (разгрузка очереди после миграций).
- База знаний — статьи с аудиторией «Бот» подмешиваются в контекст AI-ответов.
- Журнал AI-сессий —
/admin/reports/ai_chat_dashboard/: все диалоги клиентов с AI (текст и голос), KPI, привязки к тикетам и лидам, расход токенов. Настройки провайдеров (ключи, промпты) — в разделе/admin/ai/.
База знаний в промпте + авто-обогащение
Статьи базы знаний с аудиторией «Только бот» или
«Бот + оператор» автоматически подмешиваются в system prompt всех
AI-каналов (виджет, боты VK/Telegram, голос, телефон) — бот отвечает по вашим
сценариям. Кэш 120 сек; лимит статей — настройка AI_KB_TOP_N; per-org
(свои статьи организации + общие). Статьи «Только оператор» в промпт не идут.
Чтобы замкнуть цикл обучения, в панели оценки сессии на дашборде есть кнопка
«В базу знаний»: из операторского разбора «как надо» + диалога AI
генерирует черновик статьи. Черновик создаётся
неактивным — в промпт бота он попадёт только после проверки и
включения оператором в /admin/ai/kb/.
Кроме ручной кнопки работает автономное обогащение: раз в сутки
фоновая задача сканирует свежие сессии с оценкой «Как не надо» и сама готовит
неактивные черновики статей, присылая в Telegram сводку
«N черновиков на проверку». Так база знаний постепенно растёт на реальных разборах,
а оператору остаётся только проверить и включить нужные. Отключается настройкой
KB_AUTODRAFT_ENABLED.
flowchart LR
S["Сессия с оценкой «как не надо»
и разбором «как надо»"] --> B["Кнопка «В базу знаний»"]
B --> AI["AI → черновик статьи"]
AI --> KB["Неактивная статья"]
KB --> R["Оператор проверил →
включил"]
R --> P["В промпте бота"]
Телефонный AI (звонок на 61-32-40)
Клиент звонит на 61-32-40 и разговаривает с голосовым AI-ассистентом вживую: тот здоровается фирменно и по имени, называет баланс/тариф, меняет тариф, оформляет обещанный платёж — сразу, без ввода кода (клиент опознаётся по номеру, с которого звонит). Это отдельный AI-канал «Телефон» со своим промптом и настройками, независимый от голосового виджета на сайте.
flowchart LR
A["Клиент 61-32-40"] --> N["Novofon"]
N --> AST["Asterisk"]
AST --> BR["Мост smit-phone-ai"]
BR --> BILL["Биллинг: АОН → клиент,
промпт, ключ, движок"]
BR --> AI{"Realtime"}
AI --> GEM["Основной провайдер"]
AI --> OAI["Резервный провайдер
(фолбэк)"]
BR --> LOG["Журнал звонков
ai_chat_dashboard"]
- Опознание по номеру (АОН) — CallerID сопоставляется с клиентом; баланс/тариф выдаются сразу. Приветствие собирается автоматически: компания + Имя Отчество + статус («баланс положительный», «подключение активно» — если это так).
- Движок с фолбэком — основной голосовой провайдер; при недоступности ключа автоматически переключается на резервный, с Telegram-алертом.
- Журнал звонков — все звонки попадают в
/admin/reports/ai_chat_dashboard/(чип «Телефон»): транскрипт, токены, стоимость, «Кто» = номер, форма оценки «для обучения». - Настройки — карточка «Телефонный AI» в
/admin/ai/: движок, голос, приветствие, номер линии, кнопка «Проверить ключ», per-org. Промпт — на/admin/settings/ai/phone/.
Голосовая почта
Отчёты → Голосовая почта (/admin/reports/voicemail/).
Пропущенные звонки на номера техподдержки АТС записывает и присылает письмом с
расшифровкой на служебный ящик (call@…). Биллинг разбирает их сам —
оператору ничего слушать не нужно.
/admin/settings/telephony/). Старые адреса
/admin/support/voicemail/ и /admin/crm/voicemail/
ведут на новый журнал, ссылки из писем и закладки не ломаются.
flowchart LR
ATC["АТС (Mango и др.)
письмо: запись + расшифровка"] --> P1["1. Приём письма
телефон + номер линии"]
P1 --> P2["2. Нормализация (ИИ)
телефон → +7…, адрес прописью → цифры
ИИ + regex-резерв"]
P2 --> P3{"3. Классификация"}
P3 -- "мусор (сброс/тишина)" --> G["ничего не создаётся"]
P3 -- "поддержка" --> T["Тикет в ящик «Поддержка»
+ тег «Звонок ‹линия›»"]
P3 -- "подключение" --> L["Лид в CRM-воронку
+ тикет + SMS клиенту
+ геокод адреса на карту"]
P1 -. "письмо без записи и расшифровки
(«пришло новое голосовое сообщение»)" .-> N["Уведомление провайдера —
отбрасывается, тикета нет"]
- Телефонные линии — по номеру, на который звонил клиент, выбирается сегмент (физлица / юрлица / партнёрская компания / поддержка), организация, воронка CRM и ящик тикета.
- Авто-SMS «Мы перезвоним» — клиенту сразу после звонка (шаблон на линию).
- Геокодирование — адрес прописью («ленина дом пять») нормализуется AI и геокодируется через DaData — лид сразу виден на карте CRM.
- Тест разбора — на странице «Голосовая связь»: dry-run письма без создания тикетов и заявок.
manage.py restore_voicemail_leads --days 30 --apply.
Журнал разбора
Каждое письмо — строка журнала: дата, телефон, организация линии, запись, SMS, клиент, линия, тип события, распознанная проблема, причина и что создано (обращение или заявка). Колонки настраиваются кнопкой «Колонки» — набор сохраняется в профиле сотрудника, поэтому у каждого свой вид.
- Фильтры — полоса типов со счётчиками, период, поиск и панель фильтров: организация, линия, наличие записи, что создано, тестовые прогоны. Есть быстрые фильтры и сохранённые виды.
- Прокрутка вместо страниц — строки догружаются по мере прокрутки.
- Выбор строк — отметить записи и скопировать телефоны (например, чтобы обзвонить) или выгрузить их в CSV.
- Обращение открывается панелью — той же, что в очереди Поддержки: тема, переписка и поле ответа, не уходя из журнала.
- Запись — плеер прямо в строке, с длительностью на кнопке; рядом карточка звонка с расшифровкой и сутью.
- Помощник раздела — отметьте строки и спросите AI: он разберёт именно их.
Расшифровка записи и суть звонка (AI)
Если у тикета есть запись разговора (мп3 от АТС), биллинг умеет расшифровать её и выделить суть — оператору не нужно слушать звонок целиком. Блок «Запись звонка» показывается и в карточке тикета (раздел 4), и в выезжающей панели (раздел 6) — в панели это сворачиваемый аккордеон.
В блоке: плеер записи, кнопка «Скачать», ссылка «Расшифровка» (полный текст) и кнопка «Транскрибировать / Обновить суть». По нажатию запись расшифровывается и прогоняется через AI-движок, который возвращает структурную выжимку:
- Суть звонка — 1–2 предложения: что случилось и что просит клиент (числительные прописью приводятся к цифрам: «двадцать шестая линия» → «линия 26»). Только то, что сказано в звонке: без оценок клиента и без додуманных сроков, сумм и номеров договоров. Ошиблись номером — так и написано; если по делу ничего не сказано (тишина, автоответчик, обрыв) — суть пустая;
- Категория — определяется автоматически и проставляется тикету (например «Не работает интернет» → категория ящика «Нет интернета»);
- Теги — навешиваются по содержанию разговора;
- Требуется оператор — бейдж, если ситуация требует живого участия (авария, конфликт, срочно);
- Связь с клиентом — если клиент не был сопоставлен, тикет привязывается к нему по телефону звонящего или по номеру договора, названному в разговоре; если у клиента не заполнен телефон — в карточку добавляется номер, с которого звонили.
Результат дописывается в тикет внутренней заметкой «Сводка звонка (AI-разбор)», а суть, категория и связь клиента обновляются в карточке без перезагрузки. В выезжающей панели эта заметка свёрнута в строку «Автосводка звонка» — текст сводки уже есть в блоке записи (подробнее). Какая запись считается записью этого обращения и как убрать чужую — в разделе «Запись звонка и „Не тот звонок“».
Автоматический режим. В Настройки → Общие
(/admin/support/settings/) есть тумблер
«Авто-транскрибация звонков». Когда включён — расшифровка и
выделение сути запускаются сами при поступлении тикета со звонком,
и оператор сразу видит готовую выжимку. Требуется ключ сервиса распознавания речи и настроенный
AI-движок канала «voice».
Чем расшифровываем и что делать, если сервис отказал
Распознавание речи вынесено в один сервис, поэтому им пользуются и звонки телефонии, и кнопка «Расшифровать запись», и разбор голосовой почты. Провайдера два — OpenAI Whisper и Google Gemini, — выбор в Настройки → Голосовая связь. Если выбранный не ответил, расшифровка автоматически уходит второму: запись важнее, чем верность настройке.
Сколько стоит. Каждая расшифровка попадает в журнал AI с моделью, организацией линии и категорией, поэтому её расход виден в дашборде расходов и уходит в отчёт потребления. Организация определяется по номеру, на который звонили, — расход ложится на нужное юрлицо.
Если провайдер AI лёг. Когда сервис отвечает отказом по
ключу, оплате или лимиту (401, 402, 403, 429), он уходит в
карантин на 15 минут, а запросы идут к резервному провайдеру
— порядок задаётся настройкой. Это касается не только расшифровки: так же
подстрахованы бот поддержки, виджет на сайте и разбор голосовой почты.
Посмотреть, кто в карантине, и снять его после починки:
manage.py ai_failover_status и
manage.py ai_failover_status --clear gemini.
База знаний
Поддержка → База знаний (/admin/support/kb/).
Статьи с категориями и поиском. У каждой статьи — аудитория:
- Оператор — регламенты и инструкции для сотрудников, открываются из карточки тикета;
- Бот — сценарии и фактура для AI-ответов: статья попадает в контекст AI-бота и «Нейроответа».
Аналитика и учёт времени
Аналитика (/admin/support/reports/) — отчёты по
потоку обращений: динамика по каналам и ящикам, скорость первого ответа, нагрузка
на операторов, топ категорий и тегов.
Отчёты Поддержки (выпуск 3.7.0)
Страница /admin/reports/support/: четыре раздела — Обращения,
Продуктивность, Удовлетворённость, Время. Разделы и фильтры (период, канал,
тег, ящик) стоят в одной строке; выбранный фильтр подсвечивается зелёным.
- Обращения: поступило, не закрыто, закрыто, закрываемость, медиана первого ответа; динамика по дням; как быстро ответили; каналы. Ящики и населённые пункты — кольцевыми диаграммами (7 долей и «Прочее»), категории по тегам — первые 3, остальные по «Показать ещё».
- Продуктивность: ответы операторов (без заметок и служебных записей), назначено и закрыто, медианы первого ответа и решения, доля переоткрытых; тепловая карта новых обращений по часам.
- Удовлетворённость: CSAT — доля оценок «отлично»; оценки по операторам и последние отзывы — в две колонки.
- Время: учтённое время по операторам и обращения с наибольшим временем; подсказка, если учёт ведут не у всех обращений, и пометка записей дольше 4 часов («проверьте таймер»).
- У оператора — аватар и имя-ссылка на карточку сотрудника.
Отслеживание времени
Настройки → Отслеживание времени
(/admin/support/timetracking/). KPI-отчёт по затраченному времени с
разбивкой по менеджерам: часы, доля, тикетов, среднее мин/тикет. Период — единый
календарный виджет, менеджер — профиль-селектор с аватарами. Экспорт CSV.
Источник данных — таймер и ручные записи в карточке тикета.
Настройки
Поддержка → Настройки (/admin/support/settings/) —
вкладки: Общие · Авто ответств. · Авто наблюдат. · Категории · Рейтинги ·
Учёт времени · Почта (IMAP+SMTP) · Каналы. Настройки ящика собраны
пер-ящик: выбрал ящик — правишь его почту, Telegram-параметры,
категории. Кнопка «Сохранить» активируется только при изменениях (dirty-save),
пояснения к опциям — в i-иконках.
SLA-политики
/admin/support/sla/ (ссылка — из вкладки «Общие»). Цели
первого ответа (мин) и решения (ч) с привязкой
к ящику / приоритету / организации; для тикета применяется самая специфичная
активная политика. Типовой набор провайдера: авария (высокий приоритет)
15 мин/4 ч · перезвон по пропущенному 30 мин · стандарт
60 мин/24 ч · низкий приоритет 4 ч/72 ч. Опция «пауза на
„Ожидает"» — просрочка решения не подсвечивается, пока ждём клиента (время
считается календарно). Статус — чипами в инбоксе и блоком
в карточке тикета.
Очереди операторов — round-robin
Во вкладках «Авто ответств.» / «Авто наблюдат.» в селекте оператора появилась группа «Очередь группы (round-robin)»: вместо конкретного сотрудника тикеты канала/ящика раздаются по кругу активным операторам выбранной Django-группы — нагрузка распределяется автоматически.
Сбор оценок CSAT
При включённых «Отзывах» ящика блок оценки 😊/😐/😞 добавляется в email-ответы
(положение и текст — из настроек ящика), в мессенджеры — строка со ссылкой.
При закрытии тикета без оценки клиенту уходит опрос (выключатель
SUPPORT_CSAT_ON_CLOSE). Оценка «Плохо» — мгновенный алерт
ответственному (лента + личный Telegram). Статистика — в
отчётах, вкладка «Удовлетворённость».
- Общие: размер страницы списка, открытие тикета (панель / полная карточка), показ тикетов внимания, SLA-порог, политика вложений (мультивыбор типов + макс. объём, сжатие картинок при загрузке, хранение вложений в облаке).
- Авто-назначение: правила ответственного и наблюдателя по ящику/каналу/категории.
- Категории: справочник категорий обращений на каждый ящик (имя + иконка).
- Рейтинги: оценка ответа оператора клиентом.
- Учёт времени: вкл/выкл, авто-таймер на своих тикетах, ручные записи, видимость логов.
Вложения: хранение только в облаке (GCS)
Файлы из переписки не копятся на диске сервера. При включённом тумблере «Только облако (GCS)» вложение сразу после загрузки уезжает в облако, а локальная копия удаляется — на сервере остаётся только ссылка. Скачивание и превью работают прозрачно: биллинг перенаправляет на облачный файл.
flowchart LR
UP["Оператор или клиент
прикрепил файл"] --> CHK{"Тип и размер
разрешены?"}
CHK -- "нет" --> REJ["Отклонено"]
CHK -- "да" --> OPT["Сжатие картинки
(если включено)"]
OPT --> GCS["Заливка в GCS
+ ссылка в тикете"]
GCS --> DEL["Локальный файл удалён"]
GCS --> VIEW["Скачивание и превью —
редирект на облако"]
Плитки «Занято места» показывают фактическую картину: На диске — файлы, физически лежащие на сервере; В облаке (GCS) — выгруженные; Без файла — записи, оставшиеся от импорта старой системы (сам файл в биллинг не переносился, поэтому объём не занимает).
Перенос накопленного.
Файлы, загруженные до включения режима, переносятся в облако разово — командой
support_attachments_to_gcs --apply. Требует настроенного хранилища
GCS в разделе «Интеграции». Отдельно работает «Архивация старых» — она уводит в
облако вложения старше N дней, если режим «только облако» выключен.
Ящики и разрешения
Настройки → Ящики (/admin/support/mailboxes/).
У каждого ящика: email, IMAP+SMTP, организация, категории, Telegram-канал.
Организация у ящика обязательна: тикет наследует организацию
ящика при создании, а карточка тикета фильтруется по организациям — тикет без
организации виден в списках, но не открывается (404). Если ящик остался без
организации, назначьте её и обновите существующие тикеты.
Кнопка «Разрешения» — выбор сотрудников, работающих с ящиком
(по ролям: ст. менеджер / менеджер / монтажник / сэйлс). Ящик без выбранных —
открыт всем; с выбранными — виден только им, они же получают оповещения.
Оповещения per-mailbox
Настройки → Оповещения (/admin/support/alerts/).
Вкладка «По умолчанию» + вкладка на каждый ящик. Матрица событий (новый тикет /
ответ клиента / назначен / просрочен) × каналов (Telegram / Email). Telegram-алерт
уходит в личные чаты подключивших бота сотрудников, иначе — в общий чат поддержки.
Теги: справочник и автоназначение
Настройки → Теги (/admin/support/tags/) — название +
цвет, CRUD. Автоназначение навешивает теги при создании тикета:
по ключевым словам в теме/тексте («не работает» → «Авария»), по каналу
(Email/VK/Telegram/Звонок/MAX), по ящику. Правило можно ограничить организацией.
Мессенджеры и SMS-идентификация
Настройки → Мессенджеры (/admin/support/messengers/) —
подключение клиентских каналов:
- Telegram — клиентский бот приёма обращений; токен и параметры, приём через long-polling демон (устойчив к блокировкам вебхуков из РФ).
- VK — сообщество: токен, Group ID, secret; сообщения в личку сообщества становятся тикетами, ответы оператора уходят обратно в VK.
- MAX — приём через пользовательскую сессию мессенджера.
- SMS-идентификация — тумблер: бот внешних каналов подтверждает личность клиента кодом из SMS перед выдачей данных договора (6 цифр, 10 минут, 5 попыток).
Связь с биллингом и CRM
Модуль живёт в базе биллинга, поэтому «интеграция» — это прямые связи, а не API:
- Тикет ↔ Клиент — прямая привязка; виджет «Биллинг» в сайдбаре читает баланс/тариф/статус из тех же таблиц, что и карточка клиента.
- Вкладка «Поддержка» в карточке клиента — все тикеты клиента с созданием нового.
- Лиды → CRM — «подключение» из любого канала (голос, connect@, виджет) создаёт сделку в воронке CRM с UTM-атрибуцией и геокодом.
- Уведомления — колокольчик в навбаре (вкладка «Уведомления» внутреннего чата), Telegram-алерты сотрудникам, push клиенту в мобильное приложение при ответе оператора.
- Карта сети — геопривязанные тикеты отображаются слоем «Заявки» на карте клиентов; клик — та же выезжающая панель тикета.
- REST API — для внешних систем доступны эндпоинты
/rest_api/v2/(раздел API).