Найти в Дзене
Записки сисадмина

Python. Telegram bot. Redmine. Создаем задачи через мессенджер.

"Да как ты задолбал со своими ботами" - скажете вы. "Да я сам не в восторге от этого" - отвечу я. Но, как в старом видео: "Миша, скажи, чё ты такой умный? Твоя задача здесь - извини". Спустя несколько лет создания задач через письма, возник запрос на создание задач через telegram. Ну а моя задача здесь - поехали настраивать. Права администратора пользователю бота понадобятся в том случае, если вы захотите идентифицировать сотрудника в redmine. Если этого не потребуется, просто добавьте ему необходимые права в тех проектах, в которых он будет создавать задачи. Для интеграции с redmine мы будем использовать библиотеку python-redmine На вывод мы получаем объект Redmine (<redminelib.Redmine object at 0x7ab52a862350>), с которым уже и будем работать. project_id - Проект, в котором мы создаем задачу subject - Название задачи description - Описание задачи Как мы видим, задача создается с трекером "Ошибка". Мы также можем передавать id трекера при создании задачи. По умолчанию: 1 - Ошиб
Оглавление

"Да как ты задолбал со своими ботами" - скажете вы. "Да я сам не в восторге от этого" - отвечу я.

Но, как в старом видео: "Миша, скажи, чё ты такой умный? Твоя задача здесь - извини".

Спустя несколько лет создания задач через письма, возник запрос на создание задач через telegram. Ну а моя задача здесь - поехали настраивать.

Подготавливаем наш redmine

  • Переходим в Настройки -> API и включаем REST
-2
  • Создаем пользователя Telegram bot и выдаем ему права администратора:
-3

Права администратора пользователю бота понадобятся в том случае, если вы захотите идентифицировать сотрудника в redmine. Если этого не потребуется, просто добавьте ему необходимые права в тех проектах, в которых он будет создавать задачи.

  • Авторизуемся под этим пользователем, заходим в "Мой аккаунт" и копируем себе "API access key"
-4

Начинаем писать код

Подключаемся по API к Redmine

Для интеграции с redmine мы будем использовать библиотеку python-redmine

  • Для начала создадим файл config.py, в который мы поместим полученный API token:
-5
  • Создаем файл rm_connector.py и прописываем в него данные для авторизации в redmine:
-6

На вывод мы получаем объект Redmine (<redminelib.Redmine object at 0x7ab52a862350>), с которым уже и будем работать.

  • Получаем id проекта в редмайне:
-7
-8
  • Создаем задачу:
-9

project_id - Проект, в котором мы создаем задачу

subject - Название задачи

description - Описание задачи

  • Проверяем, что задача создалась:
-10

Как мы видим, задача создается с трекером "Ошибка". Мы также можем передавать id трекера при создании задачи.

По умолчанию: 1 - Ошибка, 2 - Улучшение, 3 - Поддержка.

  • Обернем все это в отдельный класс:
-11

Пробуем еще раз создать задачу, но уже с трекером "Поддержка"

-12
-13

Теперь мы можем создавать задачи с разными трекерами. Пора начинать писать бота, который будет принимать задачи.

Настраиваем бота

Как обычно, используем библиотеку pytelegrambotapi.

Сразу обозначим ТЗ: говорим пользователю, что ему нужно будет использовать хештеги #Ошибка, #Улучшение и #Поддержка.

  • Обозначим это:
-14
  • Создадим обработчик текстовых сообщений, который будет создавать задачу:
-15
  • Запускаем и пробуем создать задачу:
-16
-17

Задача создается, но непонятно, кто же ее автор. Давайте для этого сделаем связь по telegram id пользователя.

Дорабатываем идентификацию автора задачи

  • Заходим в Настраиваемые поля -> Пользователи и добавляем новое поле Telegram ID
-18
  • В Настраиваемые поля -> Задачи добавляем новое поле "Заказчик"
-19
  • В настройках проекта включаем это поле для задач:
-20
  • В rm_connector.py добавляем поиск пользователя по telegram id:
-21
  • И последним штрихом добавляем подстановку заказчика в нужное поле:
-22
  • Проверяем, как это все работает:
-23
-24

Для корректной работы не забудьте проставить Telegram ID пользователям в самом Redmine:

-25

Дополнительные фишки

  • Можно получить всю информацию о задаче по ID
-26
  • Повысить, либо понизить приоритет задачи:
-27

Само собой, у моего production бота функционал намного шире, но не факт, что он вам пригодится. Да и не вижу смысла расписывать все по второму кругу. Вы всегда можете почитать остальные мои статьи по телеграм ботам и расширить возможности своего бота.

Весь код из статьи выложил тут