Telegram-уведомления
Документация к Telegram доступна в ресурсе:
https://core.telegram.org/bots/api#authorizing-your-bot
Проверочная ссылка на валидность токена и идентификатора чата telegram:
https://api.telegram.org/<bot_token>/channels.getMessages?channel=<channel_id>
Проверочная ссылка на валидность токена:
https://api.telegram.org/<bot_token>/getme
Отправка сообщения в telegram-канал при создании задачи
- событие запуска: При создании
- Выполнить асинхронный скрипт:
bot_token = 'bot<telegram bot token>'
chat_id = <Chat Id>
escape_telegram_md = ->(s) \{ s.gsub( /([_*\[\]()~`>#+\-=|\{\}\.!])/, '\\\\\1') \}
task_link = "https://#\{Setting.host_name\}/tasks/#\{id\}"
task_data = [
\{ field: 'Проект', new_value: project.name \},
\{ field: 'Статус', new_value: status.name \},
\{ field: 'Исполнитель', new_value: (assigned_to.present? ? assigned_to.name : '-') \},
\{ field: 'Приоритет', new_value: priority.name \},
\{ field: 'Дата окончания', new_value: due_date.present? ? due_date.strftime("%d.%m.%Y") : '-' \},
]
msg_md = "Пользователь *#\{escape_telegram_md.call(User.current.name)\}* создал задачу:\n"
msg_md += "[__*#\{escape_telegram_md.call(type.name)\} \\##\{id\} #\{escape_telegram_md.call(subject)\}*__](#\{task_link\})\n"
task_data.each do |e|
msg_md += "#\{e[:field]\}: *#\{escape_telegram_md.call(e[:new_value])\}*\n"
end
msg_md += "[__Открыть задачу__](#\{task_link\})"
begin
RestClient.post("https://api.telegram.org/#\{bot_token\}/sendMessage",
\{
"chat_id": chat_id,
"parse_mode": "MarkdownV2",
"text": msg_md
\})
rescue
end
Отправка сообщения в telegram-канал при обновлении задачи
- событие запуска: При обновлении
- Выполнить скрипт перед:
bot_token = 'bot<telegram bot token>'
chat_id = <Chat Id>
escape_telegram_md = ->(s) \{ s.gsub( /([_*\[\]()~`>#+\-=|\{\}\.!])/, '\\\\\1') \}
date_format = ->(date) \{ date.present? ? date.strftime("%d.%m.%Y") : '-' \}
task_link = "https://#\{Setting.host_name\}/tasks/#\{id\}"
status_was = Status.find(status_id_was)
project_was = Project.find(project_id_was)
assigned_to_was = assigned_to_id_was.present? ? User.where(id: assigned_to_id_was).take || PlaceholderUser.where(id: assigned_to_id_was).take : nil
priority_was = IssuePriority.find(priority_id_was)
task_data = [
\{ field: 'Проект', changed: project_id_changed?, old_value: project_was.name, new_value: project.name \},
\{ field: 'Статус', changed: status_id_changed?, old_value: status_was.name, new_value: status.name \},
\{ field: 'Исполнитель', changed: assigned_to_id_changed?, old_value: (assigned_to_was.present? ? assigned_to_was.name : '-'), new_value: (assigned_to.present? ? assigned_to.name : '-') \},
\{ field: 'Приоритет', changed: priority_id_changed?, old_value: priority_was.name, new_value: priority.name \},
\{ field: 'Дата окончания', changed: due_date_changed?, old_value: date_format.call(due_date_was), new_value:date_format.call(due_date) \},
\{ field: 'Теги', changed: false, old_value: nil, new_value: tags.present? ? tags.map \{ |t| t.name \}.join(', ') : '-' \},
]
msg_md = "Пользователь *#\{escape_telegram_md.call(User.current.name)\}* обновил задачу:\n"
msg_md += "[__*#\{escape_telegram_md.call(type.name)\} \\##\{id\} #\{escape_telegram_md.call(subject)\}*__](#\{task_link\})\n"
task_data.each do |e|
msg_md += e[:field] + (e[:changed] ? " изменен: *#\{escape_telegram_md.call(e[:old_value])\}* ➡️" : ":") + " *#\{escape_telegram_md.call(e[:new_value])\}*\n"
end
if all_changes.include?(:cf_checklists) && cf_checklists.present? then
checklists = JSON.parse(cf_checklists)
checklists_md = "*Чеклисты*\n" + checklists.map\{|l|
"*#\{escape_telegram_md.call l['name']\}*\n" + l['checkboxes'].map\{|item| "#\{item['check'] ? '✅' : '⬜️'\} #\{escape_telegram_md.call item['name_checkbox']\}"\}.join("\n")
\}.join("\n")
msg_md += checklists_md + "\n"
end
msg_md += "[__Открыть задачу__](#\{task_link\})"
#show_error msg_md
# see docs - https://github.com/rest-client/rest-client
begin
RestClient.post("https://api.telegram.org/#\{bot_token\}/sendMessage",
\{
"chat_id": chat_id,
"parse_mode": "MarkdownV2",
"text": msg_md
\})
rescue
end
Отправка сообщения в telegram-канал при комментировании задачи
- событие запуска: При обновлении
- Условие запуска триггера:
journal_notes.present?
- Выполнить скрипт перед:
bot_token = 'bot<telegram bot token>'
chat_id = <Chat Id>
escape_telegram_md = ->(s) \{ s.gsub( /([_*\[\]()~`>#+\-=|\{\}\.!])/, '\\\\\1') \}
task_link = "https://#\{Setting.host_name\}/tasks/#\{id\}"
#show_error "sdf#123".gsub(escape_regex, escape_subst)
status_was = Status.find(status_id_was)
project_was = Project.find(project_id_was)
assigned_to_was = assigned_to_id_was.present? ? User.find(assigned_to_id_was) : nil
priority_was = IssuePriority.find(priority_id_was)
task_data = [
\{ field: 'Проект', new_value: project.name \},
\{ field: 'Статус', new_value: status.name \},
\{ field: 'Исполнитель', new_value: (assigned_to.present? ? assigned_to.name : '-') \},
\{ field: 'Приоритет', new_value: priority.name \},
]
msg_md = "Пользователь *#\{escape_telegram_md.call(User.current.name)\}* прокомментировал задачу:\n"
msg_md += "[__*#\{escape_telegram_md.call(type.name)\} \\##\{id\} #\{escape_telegram_md.call(subject)\}*__](#\{task_link\})"
msg_md += "``` #\{journal_notes\} ```"
task_data.each do |e|
msg_md += "#\{e[:field]\}: *#\{escape_telegram_md.call(e[:new_value])\}*\n"
end
msg_md += "[__Открыть задачу__](#\{task_link\})"
#show_error msg_md
RestClient.post("https://api.telegram.org/#\{bot_token\}/sendMessage",
\{
"chat_id": chat_id,
"parse_mode": "MarkdownV2",
"text": msg_md
\})
Отправка сообщения в telegram-канал при изменении статуса задачи
- событие запуска: При обновлении
- Поля задачи: Статус
- Выполнить скрипт перед:
bot_token = 'bot<telegram bot token>'
chat_id = <Chat Id>
escape_telegram_md = ->(s) \{ s.gsub( /([_*\[\]()~`>#+\-=|\{\}\.!])/, '\\\\\1') \}
task_link = "https://#\{Setting.host_name\}/tasks/#\{id\}"
status_was = Status.find(status_id_was)
old_status_name = escape_telegram_md.call(status_was.name)
new_status_name = escape_telegram_md.call(status.name)
msg_md = "Пользователь *#\{escape_telegram_md.call(User.current.name)\}* изменил статус с *#\{old_status_name\}* на *#\{new_status_name\}*:\n"
msg_md += "[__*#\{escape_telegram_md.call(type.name)\} \\##\{id\} #\{escape_telegram_md.call(subject)\}*__](#\{task_link\})"
begin
RestClient.post("https://api.telegram.org/#\{bot_token\}/sendMessage",
\{
"chat_id": chat_id,
"parse_mode": "MarkdownV2",
"text": msg_md
\})
rescue
end