Puedes utilizar tu mensajero de Telegram como una herramienta de notificación para recibir informes instantáneos sobre diversos eventos de infraestructura, resultados de ejecución de scripts o tareas programadas.
Este artículo te muestra cómo usar PowerShell para enviar una notificación de texto a un canal o grupo de Telegram a través de la API de Bot.
Pasos para Enviar Mensajes de Telegram con PowerShell
Primero, crea un nuevo bot de Telegram usando @BotFather
. Encuéntralo en tu cliente de Telegram y envíale los siguientes comandos:
/start
/newbot
Especifica el nombre de usuario y el nombre del bot. BotFather generará un token HTTP que debes copiar y guardar.
Para enviar un mensaje a un chat de Telegram o a un usuario específico, necesitas conocer su ID. En este ejemplo, enviaré notificaciones a mí mismo, así que usa @my_id_bot
para encontrar mi ID de Telegram:
/start
Tu ID de usuario: YYYYYYYYY
También puedes obtener el ID de tu usuario de Telegram desde PowerShell. Ejecuta el siguiente comando y reemplaza tu token:
$tg_token="TU_BOT_TOKEN"
$Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$tg_token/getUpdates"
$Response.result.message.chat.id
Para enviar un mensaje a cualquier chat de Telegram, necesitas especificar el token del bot y la ID del usuario (o chat) objetivo:
$tg_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" $tg_chat_id="YYYYYYYYY"
El protocolo TLS 1.2 es necesario para conectarse a la API de Telegram. Asegúrate de que la versión del protocolo TLS 1.2 esté habilitada en Windows. Por defecto, PowerShell utiliza los protocolos SSL 3.0, TLS 1.0 o TLS 1.1 para las conexiones. Ejecuta el siguiente comando para usar la versión TLS 1.2 en la sesión actual de PowerShell:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Y aquí tienes un comando para enviar un mensaje a Telegram:
$message="Mensaje de prueba de alerta desde PowerShell" $Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$($tg_token)/sendMessage?chat_id=$($tg_chat_id)&text=$($Message)"
Una vez que ejecutes ese comando, deberías recibir un mensaje del bot.
Es importante iniciar el bot (/start
) previamente creado para que se establezca una comunicación.
Puedes usar emojis y formato de texto HTML para hacer las notificaciones más visualmente atractivas y legibles:
$message= $currend_data + "⚠️ Actualización EsGeeks <b>Nuevo_Post</b> ha sido publicado"
$Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$($tg_token)/sendMessage?chat_id=$($tg_chat_id)&text=$($Message)&parse_mode=html"
Para trabajar con scripts de PowerShell, recomiendo usar el editor de VS Code.
Si estás accediendo a Internet a través de un servidor proxy, puedes utilizar el parámetro -Proxy
del cmdlet Invoke-WebRequest
para especificar la configuración del proxy. Usa el argumento -ProxyCredential
para autenticarte en un proxy.
$Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$($Telegramtoken)/sendMessage?chat_id=$($Telegramchatid)&text=$($Message)" –Proxy "http://192.168.1.155:3128"
En la versión PowerShell Core 7.x+, el cmdlet Invoke-WebRequest
utiliza la configuración del proxy especificada en las variables de entorno.
Puedes crear una función a partir de un script que envía un mensaje a Telegram y agregarla al archivo de perfil de PowerShell en Windows:
function Send-Telegram {
[CmdletBinding()]
param(
[Parameter()]
[string] $Message
)
$tg_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$tg_chat_id="YYYYYYY"
[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
}
Abre un archivo de texto con un perfil de PowerShell que se aplique automáticamente cuando se inicia powershell.exe/pwsh.exe
:
notepad $PSHOME\Profile.ps1
Ahora es posible enviar un mensaje a un canal de Telegram desde cualquier script de PowerShell.
Send-Telegram "Mi mensaje de prueba"
Si utilizas Teams como tu mensajero principal, también puedes usar PowerShell para enviar un mensaje a un canal de Teams (pronto).