Telegram бот для рассылки сообщений от System Center Operation Manager.

Рассылки почтовых сообщений от SCOM - это здорово, конечно, но всегда хочется большего. Назрел вопрос получения сообщений от SCOM в Telegram с использованием скрипта PowerShell. Эта статья - агрегация статей и скриптов, написанных другими людьми, за что им большое спасибо и плюс немного отсебятинки.


Во-первых, нам нужно создать своего бота. Для этого надо найти @BotFather, нажимаем кнопку Start и вводим команду /newbot. После этого нужно дать боту имя и в итоге мы получим токен нашего бота. Записываем его себе куда-нибудь.

Поздравляю, наш бот создан.

Теперь нам нужно создать канал или группу, куда наш бот будет отправлять сообщения или использовать уже существующие.

Чтобы бот мог отправлять сообщения ему потребуется ID этого канала, группы или пользователя.

Т.к. я буду слать сообщения в специальный канал, то опишу пример того, как узнать ID канала. Для этого можно воспользоваться web-версией Telegram. Переходим на https://web.telegram.org и входим под своим аккаунтом. Открываем наш канал.
В адресной строке видим что-то вроде https://web.telegram.org/#/im?p=c55446633_10969387161577795241

Из этого можно собрать ID нашего канала. Берём из адреса 55446633 и дописываем в начале -100. В итоге получаем -10055446633 - это и есть ID нашего канала. Тоже записываем себе в блокнот.

Теперь нам нужно дать права нашему боту на публикацию сообщений в нашем канале. Для этого открываем наш канал и добавляем бота, как администратора:

Даём права боту:

Для того, чтобы отсылать сообщения нам потребуется скрипт:
param(
[string]$id,
[string]$message
)
$bot_token = "ВАШ_ТОКЕН"
$uri = "https://api.telegram.org/bot$bot_token/sendMessage"

Invoke-WebRequest -Method Post -Uri $uri -ContentType "application/json;charset=utf-8" -Body (ConvertTo-Json -Compress -InputObject @{chat_id=$id; text=$message})
Проверим, всё ли у нас работает, как надо и отправим тестовое сообщение из PowerShell (в команде указываем наш реальный токен и ID канала):

Invoke-WebRequest -Method Post -Uri https://api.telegram.org/bot4823543543543843536zAdM/sendMessage -ContentType "application/json;charset=utf-8" -Body (ConvertTo-Json -Compress -InputObject @{chat_id=-10055446633; text=1234})

Получаем вот такого вида ответ:

А вот и наше сообщение в канале:

Вот так будет выглядеть наш скрипт:
########################################
######SCOM Telegram Notifications#######
########by Dmitry Panin#################
#########https://t.me/Panin#############
########################################
#Какие параметры принимает скрипт
Param (
[String]$AlertName,
[String]$AlertDescription,
[String]$AlertSource,
[String]$AlertTime
)

#Токен бота
$token = "ВАШ_ТОКЕН"
#ID чата, группы или лички
$сhatid = "-100xxxxxxxxxx"
#Замена кавычек
$AlertName = $AlertName.Replace("'",'"')
#Нормальный перенос строк
$AlertDescription = $AlertDescription.Replace("\n","`n")
#Удаление двойных процентов
#$AlertDescription = $AlertDescription.Replace("%%","")
#Удаление знака &
#$AlertDescription = $AlertDescription.Replace("&","")
#Собираем переменные в одну и переносим строки
$Message = $AlertName + "`n" + "`n" + "Status: " + $AlertResolutionState + "`n" + "Alert Time: " + $AlertTime + "`n" + "`n" + $AlertDescription + "`n" + "`n" + $AlertSource
#Тип данных Markdown
$payload = @{ "parse_mode" = "Markdown"; "disable_web_page_preview" = "True" }
#
$URL = "https://api.telegram.org/bot$token/sendMessage?chat_id=$сhatid&text=$Message"
#
$request = Invoke-WebRequest -Uri $URL -Method Post `
-ContentType "application/json; charset=utf-8" `
-Body (ConvertTo-Json -Compress -InputObject $payload)

Теперь нам нужно всё это дело прикрутить к нашему SCOMу. Сохраняем наш скрипт в какой-нибудь папке на сервере SCOM. Например, "D:\Scripts\telegram_bot.ps1".

Переходим на вкладку Администрирование - Каналы.


Создаём новый канал:
Указываем все необходимые параметры для запуска скрипта PowerShell:
Путь к командному файлу:
c:\windows\system32\windowspowershell\v1.0\powershell.exe
Параметры командной стоки (указываем необходимые значения нужных нам переменных):
"D:\Scripts\telegram_bot.ps1" -executionpolicy bypass -AlertName "*'$Data[Default='Not Present']/Context/DataItem/AlertName$'*" -AlertDescription "'$Data[Default='Not Present']/Context/DataItem/AlertDescription$'" -AlertResolutionState "'$Data[Default='Not Present']/Context/DataItem/ResolutionStateName$'" -AlertSource "'$Data[Default='Not Present']/Context/DataItem/ManagedEntityPath$\$Data[Default='Not Present']/Context/DataItem/ManagedEntityDisplayName$'" -AlertTime "'$Data[Default='Not Present']/Context/DataItem/TimeRaisedLocal$'"
Исходная папка:
c:\windows\system32\windowspowershell\v1.0\
Наш канал создан.
Теперь добавляем подписчика.
Выбираем наш канал

Канал и подписчик созданы и теперь нужно собственно создать саму подписку.


Выбираем конкретные предупреждения или по умолчанию оставляем "получать все".

Выбираем нашего подписчика:
И наш канал

Можно проверять!)

Использованные источники:
masyan.ru
culham.net
OpsMgr

Отдельное спасибо masyan и Panin!

2 комментария:

  1. Добавлю вам полезную ссылку для определения параметров бота:
    https://api.telegram.org/botТОКЕН_ВСТАВИТЬ_СЮДА/getMe
    Можно вызвать из браузера, выдаст что-то типа этого:
    id 49534282
    is_bot true
    first_name "test_swk"
    username "test_swk_bot"

    ОтветитьУдалить