Telegram + PowerShell
Я бы наверное обходил эту тему с ботами стороной довольно таки долго, пока бы и дальше не осознал, что это удобно! А чем может быть удобно? Мессенджер находится онлайн 24 часа в сутки — а это значит хороший способ уведомить о проблеме.
Для начала потребуется завести учетку в телеграмме, после найти в списках главного бота — @BotFather. Используя подсказки бота, можно легко создать своего бота, назначить ему имя и получить токен для доступа к HTTP API.
Так как пока у нас только в понимании PowerShell, то берем простой код:
1 2 3 4 5 6 7 8 9 |
param( [string]$id, [string]$message ) $bot_token = "КЛЮЧ-ТОКЕН" $uri = "https://api.telegram.org/bot$bot_token/sendMessage" $id = "КОМУ СЛАТЬ" Invoke-WebRequest -Method Post -Uri $uri -ContentType "application/json;charset=utf-8" ` -Body (ConvertTo-Json -Compress -InputObject @{chat_id=$id; text=$message}) |
Который в последствии может быть изменен, а именно можно будет добавить переменную с картинкой (для отсылки картинки). Но это отдельный проект 🙂 Плюс, возникла у меня проблема с кодировкой. Работают боты с utf-8 и пока как его обучить работать с win-1251 я не понял.
А использовать я стал его в следующей работе.
В планировщике созданы три задачи: ошибки с дисками + отключение/включение UPS.
Запускаю скрипт командой
1 2 |
powershell -noprofile -File C:\Users\Администратор\Documents\Telegram-sender\Telegram.ps1 -message ~ "UPS Enable - Из-за отключения электроэнергии источник бесперебойного питания переведен на питание от батареи." |
В планах прикрепить к скрипту возможность отправки фото + объединить все это с вебкой. Но, чуть позже…
7 комментариев
Emil
Здравствуйте!
Вставил этот скрипт в скрипт для бэкапа данных, но приходит сообщение с вопросительными знаками.
Пробовал сохранять и cp1251 и UTF8 — все равно русский язык не принимает.
kanitelka
Я бы рекомендовал посмотреть в сторону Markdown
Он частично отвечает за эту часть на сколько я понял!
killerjem
Юзайте свежую версию PS и будет Вам счастье!
kanitelka
Кстати, killerjem прав, проверил сейчас в версии 5, русский язык работает!
Виктор
Чтобы не было проблем с кодировками при отправке, в начало скрипта нужно добавить следующую строку:
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(«utf-8»)
ну и сам скрипт должен быть сохранен в кодировке 1251.
Работает даже на Windows XP.
Alex
Invoke-WebRequest : Базовое соединение закрыто: Непредвиденная ошибка при передаче.
Не могу победить!!!
kanitelka
Может проблема связана с тем, что Telegram заблокировали на территории РФ?