Skip to main content

Обзор

Система поддержки работает в трёх режимах, задаваемых переменной SUPPORT_SYSTEM_MODE:
РежимОписание
ticketsТолько тикет-система
contactТолько ссылка на контакт (SUPPORT_USERNAME)
bothТикеты + ссылка на контакт (по умолчанию)
Режим переключается без перезапуска бота из админ-панели.

Тикеты для пользователей

Создание тикета

  1. Пользователь нажимает “Поддержка” в главном меню
  2. Выбирает “Создать тикет”
  3. Вводит заголовок (5-255 символов)
  4. Вводит описание (10-500 символов) или отправляет фото с подписью
  5. Тикет создаётся со статусом open и приоритетом normal
  6. Администратор получает уведомление
У пользователя может быть только один активный тикет (открытый или отвеченный). Для создания нового необходимо закрыть текущий.

Просмотр тикетов

  • Мои тикеты — список открытых/отвеченных тикетов с пагинацией (10 на страницу)
  • Закрытые тикеты — отдельная вкладка с историей
  • Детальный просмотр с историей сообщений (разбивка по 3500 символов на страницу)
  • Кнопка “Вложения” для просмотра фото (отправляются как медиагруппа)

Ответ на тикет

  • Текст 5-400 символов или фото с подписью
  • При ответе пользователя статус меняется на open
  • Антиспам: 1 сообщение в 2 секунды, подавление дублей после создания (6 сек)

Закрытие тикета

Пользователь может закрыть свой тикет в любой момент. История сообщений сохраняется (только чтение).

Статусы и приоритеты

Статусы тикетов

СтатусОписание
openОткрыт, ожидает ответа администратора
answeredАдминистратор ответил, ожидает реакции пользователя
pendingВ обработке
closedЗакрыт

Приоритеты

ПриоритетОписание
lowНизкий
normalОбычный (по умолчанию)
highВысокий
urgentСрочный

Администрирование тикетов

Просмотр

  • Два раздела: Открытые (open + answered) и Закрытые
  • Список с пагинацией (10 на страницу)
  • Каждый тикет показывает: статус, приоритет, имя пользователя, username, Telegram ID
  • Детальный просмотр с историей сообщений и ссылками на профиль пользователя

Действия администратора

ДействиеОписание
ОтветитьТекст до 400 символов или фото. Статус → answered. Пользователь получает уведомление
ЗакрытьЗакрытие тикета. Действие логируется
Закрыть всеМассовое закрытие всех открытых/отвеченных тикетов
Блокировка (временная)Блокировка ответов на N минут (1 — 525 600 = 1 год)
Блокировка (постоянная)Постоянная блокировка ответов пользователя
РазблокировкаСнятие любой блокировки
Все действия записываются в журнал аудита (support_audit_logs).

SLA-система

SLA-мониторинг проверяет тикеты без ответа администратора и отправляет уведомления при нарушении.

Как работает

  1. Фоновая задача проверяет тикеты через заданный интервал
  2. Если тикет со статусом open не получил ответа дольше, чем SLA_MINUTES — отправляется уведомление
  3. Повторные напоминания отправляются с учётом cooldown
  4. При ответе пользователя таймер SLA сбрасывается

Настройка

ПеременнаяПо умолчаниюОписание
SUPPORT_TICKET_SLA_ENABLEDfalseВключить SLA-мониторинг
SUPPORT_TICKET_SLA_MINUTES60Минут до нарушения SLA
SUPPORT_TICKET_SLA_CHECK_INTERVAL_SECONDS300Интервал проверки (секунды)
SUPPORT_TICKET_SLA_REMINDER_COOLDOWN_MINUTES30Cooldown между повторными напоминаниями
Все параметры SLA можно менять в реальном времени из админ-панели бота или через Cabinet API без перезапуска.

Модераторы

Модераторы — обычные пользователи с ограниченным доступом к тикетам. Управление модераторами доступно из раздела настроек поддержки в админ-панели.

Возможности модераторов

  • Просмотр всех тикетов (открытых и закрытых)
  • Ответ на тикеты
  • Закрытие тикетов (единичное и массовое)
  • Блокировка/разблокировка пользователей
  • Просмотр вложений
Все действия модераторов логируются в журнал аудита с пометкой is_moderator=True.

Управление

  • Добавить модератора — указать Telegram ID
  • Удалить модератора — указать Telegram ID
  • Список модераторов — показать всех
Модераторы получают отдельную точку входа в интерфейсе бота (кнопка “Тикеты” в панели модератора).

Вложения

Поддерживаются фотографии:
  • Пользователи могут прикрепить фото при создании тикета или в ответе
  • Администраторы могут отправить фото в ответе
  • Фото хранятся как Telegram file_id
  • Просмотр через кнопку “Вложения” — отправляются медиагруппой (до 10 фото)

Уведомления

Тикет-система использует 4 канала уведомлений:
КаналПолучательТриггеры
Telegram (админы)Чат администраторовНовый тикет, ответ пользователя, нарушение SLA
Telegram (пользователь)Личный чат пользователяОтвет администратора
Cabinet (БД)Веб-интерфейсВсе события (с отметками прочитано/непрочитано)
WebSocketCabinet в реальном времениНовый тикет, ответы

Защита от злоупотреблений

  • Один активный тикет — нельзя создать новый при наличии открытого
  • Глобальная блокировка — заблокированный в любом тикете пользователь не может создавать новые
  • Rate limiting — 1 сообщение в 2 секунды (через Redis)
  • Защита от дублей — проверка FSM-состояния + подавление на 6 секунд после создания
  • Автоудаление сообщений — пользовательские сообщения удаляются через 2 секунды для чистоты чата

Настройки поддержки

Основные переменные

ПеременнаяПо умолчаниюОписание
SUPPORT_USERNAME@supportКонтакт поддержки (username или URL)
SUPPORT_MENU_ENABLEDtrueПоказывать меню поддержки
SUPPORT_SYSTEM_MODEbothРежим: tickets, contact, both

Настройки из админ-панели (без перезапуска)

НастройкаОписание
system_modeРежим поддержки
menu_enabledПоказывать в главном меню
support_info_textsТекст описания поддержки (HTML, по языкам)
admin_ticket_notifications_enabledTelegram-уведомления для админов
user_ticket_notifications_enabledTelegram-уведомления для пользователей
ticket_sla_enabledSLA-мониторинг
ticket_sla_minutesПорог SLA
moderatorsСписок модераторов

Уведомления

ПеременнаяПо умолчаниюОписание
ADMIN_NOTIFICATIONS_CHAT_IDTelegram чат для уведомлений
ADMIN_NOTIFICATIONS_TICKET_TOPIC_IDID топика для тикетов

Cabinet и Web API

Тикет-система полностью доступна через Cabinet (веб-интерфейс) и Web API:
  • Пользователи: создание тикетов, ответы, просмотр уведомлений (текст до 4000 символов)
  • Администраторы: просмотр всех тикетов, ответы, смена статуса/приоритета, статистика
  • Web API: полный доступ через токен (статус, приоритет, блокировки, ответы, медиа)