Enviar comandos a tu sistema con Telegram

En este post veremos como con Telegram podemos enviar comando a nuestro sistema y recibir la salida de los mismos en nuestro chat de Telegram.

¿Aún no sabes como crear un Bot?

Visita nuestro post en el que explicamos como crear un Bot de Telegram con Bash, te será de ayuda para seguir este tutorial. Ir al post

Teniendo ya nuestro Bot creado y obtenido el chat_id de nuestro perfil vamos a crear el archivo «bot_send.sh» para nuestro Bot que recibe comandos.

La funcionalidad que tendrá este Bot es la de enviarnos salidas de comando a nuestro Telegram, es decir, nosotros escribimos en Telegram «ls» y nuestro Bot nos devuelve la salida del comando ls en nuestra conversación de Telegram sin tener que estar delante del servidor. Esto nos sirve para poder administrar un servidor de manera remota.

Código

En nuestro archivo bot_send.sh vamos a empezar añadiendo las siguientes líneas de código:

#!/bin/bash

token_bot="tu_token_aqui"
chat_id="tu_id_de_chat_aqui"
URL="https://api.telegram.org/bot$TOKEN/sendMessage"

function send_message() {
  local message="$1"
  curl -s -X POST https://api.telegram.org/bot$token_bot/sendMessage -d chat_id=$chat_id  -d text="$message" &>/dev/null
}

En este fragmento de código lo que hemos hecho a sido crear una función la cual envía las salidas de los comando que posteriormente realizaremos.

El siguiente código nos dará la posibilidad de mandar mensajes desde Telegram, el Bot leerá el ultimo mensaje enviado y procesara el comando que hayamos introducido:

while true; do
  # Obtiene los últimos mensajes enviados al chat.
  lastmsg=$(curl -s https://api.telegram.org/bot$token_bot/getUpdates)

  # Find the last command.
  command=$(echo $lastmsg | grep -o '"text":"[^"]\+"' | sed 's/"text":"\([^"]\+\)"/\1/' | tail -n 1)

if [[ $command != $equal ]]
then
echo $command
output=$(eval $command)
send_message "$output"
fi

equal=$command
  sleep 1
done

Este bucle es el que permite que el programa este siempre a la espera de comandos. las variables «lastmsg» y «command» son las que se encargan de obtener el ultimo mensaje del chat y procesarlo para ejecutarlo.

La variable «equal» es una variable que se encarga de evitar bucles infinitos ya que si esta comprobando siempre el ultimo mensaje siempre estará mandándonos el output de el mismo mensaje, la función que tiene es almacenar el ultimo mensaje y antes de procesar uno nuevo comprueba que no sea igual al mensaje anterior así evitamos este bucle.

Con estas indicaciones podrás tener creado tu Bot que reciba comando en un plis plas y tener una administración y gestión del sistema totalmente remota y desde cualquier dispositivo.

Para saber más sobre la API de Telegram visita este enlace.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *