Мессенджер Telegram можно использовать как средство мгновенного оповещения о различных событиях в инфраструктуре, результатах выполнения скриптов или заданий планировщика. В этой статье мы покажем, как отправить текстовое уведомление в канал или группу Telegram с помощью PowerShell через API бота.
Сначала нужно создать новый бот в Telegram с помощью @BotFather. Найдите этого бота в клиенте Telegram и отправьте ему команды:
/start
/newbot
Укажите название бота и имя пользователя. BotFather сгенерирует для вам HTTP токен, который нужно скопировать и сохранить.
Для оправки уведомления в чат Telegram или конкретному пользователю нужно получить его ID. В данном случае я будут отправлять уведомления себе, поэтому с помощью @my_id_bot я получу свой ID:
/start
Your user ID: 987654321
Для отправки сообщения в Telegram нужно указать токен бота и имя вашего пользователя (группы):
$tg_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$tg_chat_id="987654321"
Для подключения к API Telegram нужно обязательно использовать протокол TLS 1.2. Убедитесь, что TLS 1.2 включен в вашей операционной системе Windows. PowerShell по умолчанию может использовать для подключения устаревшие протоколы SSL 3.0, TLS 1.0, или TLS 1.1. Чтобы использовать TLS 1.2 в текущей сессии, выполните команду:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Чтобы отправить сообщение в Telegram, выполните команду:
$message="Тестовое сообщение в Telegram из PowerShell"
$Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$($Telegramtoken)/sendMessage?chat_id=$($Telegramchatid)&text=$($Message)"
Вы должны получить сообщение от бота.
Чтобы сделать уведомления более наглядными и красочными, можно использовать символы emoji и HTML форматирование:
$message= $currend_data + "⚠️ Скрипт обновления <b>Update1C</b> завершен с ошибками"
$Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$($tg_token)/sendMessage?chat_id=$($tg_chat_id)&text=$($Message)&parse_mode=html"
Если в вашей сети доступ в интернет выполняется через прокси сервер, вы можете указать есть с помощью параметра
-Proxy
командлета Invoke-WebRequest. Для аутентификации на прокси можно использовать аргумент
-ProxyCredential
.
$Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$($Telegramtoken)/sendMessage?chat_id=$($Telegramchatid)&text=$($Message)" –Proxy "http://192.168.31.55:3128"
В PowerShell 7.x командлет Invoke-WebRequest использует настройки прокси, заданные в переменных окружения. Подробнее об использовании прокси в PowerShell.
Скрипт отправки сообщения в телеграм можно оформить в функцию и добавить ее в файл профиля PowerShell в Windows:
function Send-Telegram { [CmdletBinding()] param( [Parameter()] [string] $Message ) $tg_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" $tg_chat_id="987654321" [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$($tg_token)/sendMessage?chat_id=$($tg_chat_id)&text=$($Message)&parse_mode=html" return $Response }
notepad $PSHOME\Profile.ps1
Теперь вы можете использовать функцию отправки сообщения в канал Telegram из любого скрипта PowerShell. Достаточно выполнить команду:
Send-Telegram "My test message"