script that tracks the of specialist assignation time, specialist has not been appointed, sends notification in a telegram.
Скрипт предназначен для автоматического мониторинга заявок в системе GLPI и отправки уведомлений в Telegram о заявках, которые остаются без назначенного специалиста дольше указанного времени.
- Мониторинг заявок в указанных категориях
- Проверка времени бездействия заявок
- Отправка уведомлений в Telegram-чат
- Сохранение истории отправленных уведомлений
- Рекомендации по ответственным специалистам
- Загрузка конфигурации из переменных в начале скрипта
- Установка соединения с GLPI API (
initSession) - Настройка логирования
sequenceDiagram
Скрипт->>GLPI API: Запрос заявок по критериям
GLPI API-->>Скрипт: Список заявок
Критерии выборки:
- Категории из
ITIL_CATEGORY_IDS - Статус "Новая" (значение 1)
- Обязательные поля: ID, дата создания, назначенные пользователи/группы и др.
Для каждой заявки выполняется:
- Заявки фильтруются по
ITIL_CATEGORY_IDS - Для несоответствующих категорий заявка пропускается
- Вычисляется время с момента создания заявки
- Если время превышает
WAIT_MINUTESминут → обработка дальше - Иначе → заявка пропускается
- Если нет назначенного пользователя (
users_id_assign= 0) - И группа не в исключениях (
EXCLUDED_GROUP_IDS) - И уведомление еще не отправлялось → готовим уведомление
Для каждой подходящей заявки:
-
Получение дополнительной информации:
- Название категории
- Местоположение
- Данные инициатора
- Возможные ответственные (из
CATEGORY_RESPONSIBLES)
-
Формирование сообщения в формате:
⚠️ <Название заявки> (#<ID заявки>)
Категория: <Название категории>
Приоритет: <Уровень приоритета>
Инициатор: <ФИО/логин>
Местоположение: <Локация>
Создана: <Дата создания>
Прошло времени: <Время с создания>
Статус: Без назначенного специалиста более X мин.
Возможные ответственные: <Список ответственных>
- Используется Telegram Bot API
- Реализована обработка ограничения запросов (ошибка 429)
- 3 попытки отправки с задержкой
- Отправленные уведомления сохраняются в
SENT_TICKETS_FILE - Предотвращение дублирования уведомлений
GLPI_API_URL = "https://help.domain.com/apirest.php"
GLPI_USER_TOKEN = "ваш_токен"
GLPI_APP_TOKEN = "ваш_токен"
TELEGRAM_BOT_TOKEN = "токен_бота"
TELEGRAM_CHAT_ID = "ID_чата"ITIL_CATEGORY_IDS = [1, 2, 3] # ID категорий для мониторинга
WAIT_MINUTES = 9 # Максимальное время без назначенияLOG_FILE = "glpi_ticket_checker.log" # Основной файл лога
maxBytes=5*1024*1024 # Макс. размер 5 MB
backupCount=5 # 5 резервных файловCATEGORY_RESPONSIBLES = {
1: [101, 102], # ID категории: [ID пользователей]
2: [201, 202]
}-
Работа с пользователями:
- Поддержка как локальных пользователей GLPI, так и AD
- Автоматическое определение формата идентификатора
- Получение ФИО для локальных пользователей
-
Обработка ошибок:
- Подробное логирование всех операций
- Повторные попытки при сбоях
- Корректное завершение сессии GLPI
-
Производительность:
- Задержки между запросами (
REQUEST_DELAY) - Пакетная обработка заявок
- Кэширование данных категорий
- Задержки между запросами (
- Python 3.6+
- Установленные пакеты:
requests - Доступ к API GLPI
- Права бота Telegram
Все действия записываются в файл glpi_ticket_checker.log с указанием:
- Временной метки
- Уровня важности (INFO, ERROR, DEBUG)
- Выполняемого действия
- Результата операции
- Максимальный размер файла: 5 МБ
- Количество резервных копий: 5
- Формат записей: Дата Время - Уровень - Сообщение
- Уровни логирования: DEBUG, INFO, WARNING, ERROR
- glpi_ticket_checker.log - текущий лог
- glpi_ticket_checker.log.1 - последний архив
- glpi_ticket_checker.log.2 - предпоследний архив
- ... и т.д. (до 5 файлов)
- Самый старый файл (glpi_ticket_checker.log.5) удаляется
- Файлы переименовываются (.1 → .2, .2 → .3 и т.д.)
- Текущий лог сохраняется в .1
- Создается новый чистый лог-файл