Files
tg_zayavka/README.md
tikeev.k 4548a57f83 .
2026-06-01 17:38:44 +03:00

123 lines
8.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Telegram IT Ticket Bot
Бот создает IT-заявки по логике из блок-схемы: сотрудник выбирает направление, тему проблемы, получает короткую инструкцию, а если проблема не решена, бот собирает детали и сохраняет заявку в SQLite.
## Быстрый старт
1. Создайте бота в Telegram через BotFather и получите токен.
2. Скопируйте настройки:
```bash
cp .env.example .env
```
3. Заполните `.env`:
```env
BOT_TOKEN=ваш_токен
ADMIN_DEPARTMENTS=7350810301:IT;123456789:HR,Финансы
DATABASE_PATH=/app/data/tickets.db
SLA_MINUTES=60
```
`ADMIN_DEPARTMENTS` задает права администраторов по отделам:
```env
telegram_id:Отдел
telegram_id:Отдел1,Отдел2
```
Пример: `7350810301:IT` значит, что этот админ видит и управляет только заявками отдела `IT`.
4. Запустите:
```bash
docker compose up --build -d
```
5. Откройте Telegram и напишите боту `/start`.
## Команды
`/start` - главное меню сотрудника.
`/admin` - панель администратора: сводка по статусам и фильтры заявок.
`/find <номер>` - открыть конкретную заявку по номеру (только для администраторов).
## Для сотрудника
В разделе «Мои заявки» по активной заявке доступна кнопка **«💬 Добавить
комментарий»**: текст попадает в историю заявки и приходит уведомлением исполнителю
(а если заявку ещё не взяли — всем администраторам отдела). Внутренние заметки
администраторов сотруднику не показываются.
**Проверка дубликатов.** Если перед созданием у сотрудника уже есть открытая заявка
по той же теме, бот не плодит дубль, а предлагает выбор: **«Дополнить заявку #N»**
(введённое описание и вложение уходят комментарием к существующей заявке и
уведомлением исполнителю) или **«Создать новую заявку»**. Если старая заявка к этому
моменту уже закрыта, бот просто создаёт новую.
**Чат с поддержкой.** По активной заявке есть кнопка **«💬 Чат с поддержкой»** — это
живое общение, а не комментарии: сотрудник просто пишет сообщения, они идут исполнителю
(или администраторам отдела), «❌ Завершить чат» выходит из режима. Отдельная кнопка
**«💬 Добавить комментарий»** остаётся для заметок к заявке.
**Закрыть свою заявку.** По активной заявке сотрудник может нажать **«✅ Вопрос решён,
закрыть»** (с подтверждением) — если проблема решилась сама. Исполнителю уходит
уведомление; при необходимости администратор может переоткрыть заявку.
**Скриншот** запрашивается только для темы «Ошибка программы». Для остальных тем шаг
вложения пропускается. Шаг «удобное время визита» убран.
## Панель администратора
`/admin` открывает дашборд со счётчиками (открытые, новые, в работе, ожидание,
отложенные, просроченные) и кнопками-фильтрами, а также поиском по номеру и архивом.
Из карточки заявки доступны действия по всему жизненному циклу:
- **Взять в работу / Перехватить / Вернуть в работу** — назначение на себя.
- **Назначить** — передать заявку другому администратору отдела.
- **Закрыть** — со своим текстом решения (а не фиксированным «Выполнено»).
- **Отклонить** — с указанием причины.
- **В ожидание** — статус «ждём ответа заявителя» с уведомлением сотрудника.
- **Отложить** — с выбором причины из готового списка «быстрых ответов» (ждём
запчасти, согласуем время и т.д.) или своей причины; причина уходит заявителю
и пишется в историю.
- **Переоткрыть** — вернуть закрытую/отклонённую заявку в работу.
- **Приоритет** — низкий / средний / высокий / критичный.
- **Заметка** — внутренний комментарий (не виден заявителю).
- **Чат** — живая переписка с заявителем. Исполнитель пишет сообщения (текст/фото),
заявитель получает их и, нажав «💬 Ответить», входит в чат и просто пишет в ответ —
без оформления «комментариев». Сообщения с обеих сторон попадают в историю заявки
как переписка. «Закрыть чат» / «Завершить чат» завершает режим у каждой стороны.
- **История** — полный журнал изменений по заявке.
Статусы: `Новая`, `В работе`, `Ожидание ответа`, `Отложена`, `Закрыта`, `Отклонена`.
Новые заявки создаются с приоритетом «средний»; приоритет меняет администратор.
### SLA и эскалация
Дедлайн считается от времени создания плюс `SLA_MINUTES`. Просроченные заявки
помечаются 🔴 в списках и карточке. Фоновая задача раз в минуту находит просроченные
заявки и один раз отправляет администраторам отдела уведомление об эскалации.
## Данные
SQLite-база хранится в `./data/tickets.db`, каталог подключен в контейнер как volume.
При запуске на старой базе схема мигрирует автоматически (добавляются поля приоритета,
SLA и таблицы истории/пользователей) — данные не теряются.
Таблицы:
- `tickets` — заявки (статус, приоритет, исполнитель, время создания, SLA-флаг).
- `ticket_events` — журнал событий и комментарии по каждой заявке.
- `users` — имена пользователей/администраторов (для отображения исполнителя).
## Что удобно добавить перед интеграцией с сайтом
- Авторизацию по телефону, корпоративному ID или коду.
- Экспорт заявок и истории в API будущего сайта.
- Настраиваемый SLA и приоритет на уровне отдела/темы.
- Отчёты и выгрузку статистики по исполнителям.