La audiencia de telegram crece diariamente de manera geométrica, gracias a la facilidad del mensajero, la existencia de canales, chats y, por supuesto, la posibilidad de crear bots.
Los bots pueden utilizarse para diferentes fines, desde automatizar la comunicación con sus clientes hasta gestionar sus propias tareas.
En esencia, a través de un bot se pueden realizar cualquier operación utilizando telegram: enviar o solicitar datos, ejecutar tareas en el servidor, recopilar información en una base de datos, enviar correos electrónicos, y más.
Planeo escribir una serie de artículos sobre cómo trabajar con el , y crear bots para sus necesidades.

En este primer artículo, vamos a ver cómo crear un bot de telegram y enviar notificaciones a través de él.
Al final, tendremos un bot que verificará el estado de la última ejecución de todas las tareas en el programador de tareas de Windows y le enviará notificaciones si alguna ha fallado.
Pero el objetivo de esta serie de artículos no es enseñarle a escribir un bot para una tarea específica y limitada, sino en general familiarizarse con la sintaxis del paquete telegram.bot, y ejemplos de código que le permitirán crear bots para resolver sus propias tareas.
Contenido
canales de youtube. La mayor parte del contenido está dedicado al lenguaje R. y Estructura del proyecto del bot
Creación de un bot de telegram
Primero, necesitamos crear un bot. Esto se hace a través de un bot especial BotFather, accedemos a y escribimos al bot /start.
Después de lo cual recibirá un mensaje con la lista de comandos:
Mensaje de BotFather
Puedo ayudarte a crear y gestionar bots de Telegram. Si eres nuevo en la API de Bots, por favor consulta el manual (https://core.telegram.org/bots).
Puedes controlarme enviando estos comandos:
/newbot - crear un nuevo bot
/mybots - editar tus bots [beta]
Editar Bots
/setname - cambiar el nombre de un bot
/setdescription - cambiar la descripción del bot
/setabouttext - cambiar la información sobre el bot
/setuserpic - cambiar la foto de perfil del bot
/setcommands - cambiar la lista de comandos
/deletebot - eliminar un bot
Configuraciones del Bot
/token - generar un token de autorización
/revoke - revocar el token de acceso del bot
/setinline - alternar el modo inline (https://core.telegram.org/bots/inline)
/setinlinegeo - alternar las solicitudes de ubicación inline (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - cambiar los ajustes de feedback inline (https://core.telegram.org/bots/inline#collecting-feedback)
/setjoingroups - ¿puede tu bot ser añadido a grupos?
/setprivacy - alternar el modo de privacidad (https://core.telegram.org/bots#privacy-mode) en grupos
Juegos
/mygames - editar tus juegos (https://core.telegram.org/bots/games) [beta]
/newgame - crear un nuevo juego (https://core.telegram.org/bots/games)
/listgames - obtener una lista de tus juegos
/editgame - editar un juego
/deletegame - eliminar un juego existentePara crear un nuevo bot, envía el comando /newbot.
BotFather te pedirá que ingreses el nombre y el nombre de usuario del bot.
BotFather, [25.07.20 09:39]
Bien, un nuevo bot. ¿Cómo lo llamaremos? Por favor, elige un nombre para tu bot.
Alexey Seleznev, [25.07.20 09:40]
Mi Bot de Prueba
BotFather, [25.07.20 09:40]
Bien. Ahora elijamos un nombre de usuario para tu bot. Debe terminar en `bot`. Así, por ejemplo: TetrisBot o tetris_bot.
Alexey Seleznev, [25.07.20 09:40]
@mi_bot_de_pruebaPuedes ingresar un nombre cualquiera, pero el nombre de usuario debe terminar con ) de todos los bots de Telegram deben terminar con la palabra.
Si hiciste todo correctamente, recibirás el siguiente mensaje:
¡Hecho! Felicitaciones por tu nuevo bot. Lo encontrarás en t.me/my_test_bot. Ahora puedes añadir una descripción, una sección acerca de y una foto de perfil para tu bot, consulta /help para una lista de comandos. Por cierto, cuando termines de crear tu genial bot, contacta a nuestro Soporte de Bots si deseas un mejor nombre de usuario para él. Solo asegúrate de que el bot esté completamente operativo antes de hacerlo.
Usa este token para acceder a la API HTTP:
123456789:abcdefghijklmnopqrstuvwxyz
Para una descripción de la API de Bots, consulta esta página: https://core.telegram.org/bots/apiA continuación, necesitarás el token de API recibido, en mi ejemplo es 123456789:abcdefghijklmnopqrstuvwxyz.
En este paso, los trabajos preparatorios para crear el bot están completos.
Instalación del paquete para trabajar con un bot de telegram en R
Supongo que ya tienes instalado el lenguaje R y el entorno de desarrollo RStudio. Si no es así, puedes ver este sobre cómo instalarlos.
Para trabajar con la API de Telegram Bot utilizaremos el paquete R .
La instalación de paquetes en R se realiza con la función install.packages(), así que para instalar el paquete que necesitamos, utiliza el comando install.packages("telegram.bot").
Para saber más sobre la instalación de varios paquetes, puedes consultar .
Después de instalar el paquete, es necesario cargarlo:
library(telegram.bot)Envío de mensajes de R a Telegram
Puedes encontrar el bot que creaste en Telegram utilizando el nombre de usuario establecido al crearlo, en mi caso es @mi_bot_de_prueba.
Envía cualquier mensaje al bot, como "Hola bot". Por ahora, esto lo necesitamos para obtener el id de tu chat con el bot.
Ahora en R escribimos el siguiente código.
library(telegram.bot)
# creamos una instancia del bot
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Solicitamos información sobre el bot
print(bot$getMe())
# Obtenemos las actualizaciones del bot, es decir, la lista de mensajes enviados a él
updates <- bot$getUpdates()
# Solicitamos el identificador del chat
# Nota: antes de solicitar actualizaciones, debes enviar un mensaje al bot
chat_id <- updates[[1L]]$from_chat_id()Inicialmente, creamos una instancia de nuestro bot mediante la función Bot(), como argumento es necesario pasar el token obtenido anteriormente.
Almacenar el token en el código no se considera una buena práctica, por lo que puedes almacenarlo en una variable de entorno y leerlo desde allí. Por defecto, el paquete telegram.bot implementa el soporte para variables de entorno con el siguiente nombre: R_TELEGRAM_BOT_NOMBRE_DE_TU_BOT. En lugar de NOMBRE_DE_TU_BOT sustituye por el nombre que asignaste al crearlo, en mi caso será la variable R_TELEGRAM_BOT_My Test Bot.
Puedes crear una variable de entorno de varias maneras; te contaré sobre la más universal y multiplataforma. Crea en tu directorio personal (puedes averiguarlo usando el comando path.expand("~")) un archivo de texto llamado .Renviron. Esto también se puede hacer usando el comando file.edit(path.expand(file.path("~", ".Renviron"))).
Y añade la siguiente línea en él.
R_TELEGRAM_BOT_NOMBRE_DE_TU_BOT=123456789:abcdefghijklmnopqrstuvwxyzLuego puedes usar el token guardado en la variable de entorno mediante la función bot_token(), es decir, así:
bot <- Bot(token = bot_token("My Test Bot"))El método getUpdates()nos permite obtener actualizaciones del bot, es decir, los mensajes que le han sido enviados. El método from_chat_id(), permite obtener el identificador del chat desde el cual se envió el mensaje. Este identificador es necesario para enviar mensajes desde el bot.
Además del id del chat del objeto obtenido mediante el método getUpdates() también obtienes otra información útil. Por ejemplo, la información sobre el usuario que envió el mensaje.
updates[[1L]]$message$from$id
[1] 000000000
$is_bot
[1] FALSE
$first_name
[1] "Alexey"
$last_name
[1] "Seleznev"
$username
[1] "AlexeySeleznev"
$language_code
[1] "ru"Así que, en este punto, ya tenemos todo lo necesario para enviar un mensaje desde el bot en Telegram. Usaremos el método sendMessage(), que debe transmitir el identificador del chat, el texto del mensaje y el tipo de formato del texto del mensaje. El tipo de formato puede ser Markdown o HTML y se establece mediante un argumento modo_de_análisis.
# Отправка сообщения
bot$sendMessage(chat_id,
text = "Привет, *жирный текст* _курсив_",
parse_mode = "Markdown"
)Conceptos básicos de formato Markdown:
- El texto en negrita se destaca con el signo *:
- ejemplo:
*texto en negrita* - resultado: texto en negrita
- ejemplo:
- La cursiva se establece con guiones bajos:
- ejemplo:
_cursiva_ - resultado: cursiva
- ejemplo:
- El texto en monoespaciado, que generalmente se usa para resaltar código, se establece con acentos graves `:
- ejemplo: `texto en monoespaciado`
- resultado:
texto en monoespaciado
Conceptos básicos de formato HTML:
En HTML, envuelves parte del texto que debe destacarse en etiquetas, por ejemplo, texto.
- — etiqueta de apertura
- — etiqueta de cierre
Etiquetas de formato HTML
<b>— texto en negrita- ejemplo:
<b>negrita</b> - resultado negrita
- ejemplo:
— cursiva- ejemplo:
cursiva - resultado: cursiva
- ejemplo:
— texto en monoespaciado- ejemplo:
texto en monoespaciado - resultado:
texto en monoespaciado
- ejemplo:
Además del texto, también puedes enviar otro contenido utilizando métodos especiales:
# Отправить изображение
bot$sendPhoto(chat_id,
photo = "https://telegram.org/img/t_logo.png"
)
# Отправка голосового сообщения
bot$sendAudio(chat_id,
audio = "http://www.largesound.com/ashborytour/sound/brobob.mp3"
)
# Отправить документ
bot$sendDocument(chat_id,
document = "https://github.com/ebeneditos/telegram.bot/raw/gh-pages/docs/telegram.bot.pdf"
)
# Отправить стикер
bot$sendSticker(chat_id,
sticker = "https://www.gstatic.com/webp/gallery/1.webp"
)
# Отправить видео
bot$sendVideo(chat_id,
video = "http://techslides.com/demos/sample-videos/small.mp4"
)
# Отправить gif анимацию
bot$sendAnimation(chat_id,
animation = "https://media.giphy.com/media/sIIhZliB2McAo/giphy.gif"
)
# Отправить локацию
bot$sendLocation(chat_id,
latitude = 51.521727,
longitude = -0.117255
)
# Имитация действия в чате
bot$sendChatAction(chat_id,
action = "typing"
)Es decir, por ejemplo, mediante el método sendPhoto() puedes enviar una gráfica guardada como imagen, que has creado utilizando el paquete ggplot2.
Comprobación del programador de tareas de Windows y envío de notificaciones sobre tareas cuya ejecución ha fallado
Para trabajar con el programador de tareas de Windows, necesitas instalar el paquete taskscheduleR, y para facilitar el trabajo con los datos, instalaremos el paquete dplyr.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)Luego, mediante la función taskscheduler_ls() solicitamos información sobre las tareas de nuestro programador. Usando la función filter() del paquete dplyr eliminamos de la lista de tareas aquellas que se han completado satisfactoriamente y tienen un estado de resultado final 0, así como las que nunca se han ejecutado y tienen un estado 267011, las tareas desactivadas y las tareas que se están ejecutando en ese momento.
# запрашиваем список задач
task <- task <- taskscheduler_ls() %>%
filter(! `Last Result` %in% c("0", "267011") &
`Scheduled Task State` == "Enabled" &
Status != "Running") %>%
select(TaskName) %>%
unique() %>%
unlist() %>%
paste0(., collapse = "n")En el objeto tarea ahora tenemos una lista de tareas cuya ejecución ha fallado, esta lista debe enviarse a Telegram.
Si examinamos cada comando con más detalle, podemos ver que:
filter()— filtra la lista de tareas según las condiciones descritas anteriormenteselect()— deja en la tabla solo un campo con el nombre de la tareaunique()— elimina las repeticiones de los nombresunlist()— convierte la columna seleccionada de la tabla en un vectorpaste0()— une los nombres de las tareas en una sola cadena, usando como separador el carácter de nueva línea, es decir,n.
Todo lo que nos queda por hacer es enviar este resultado a Telegram.
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)Así que, actualmente el código del bot se ve así:
Código del bot que verifica tareas
# Подключение пакета
library(telegram.bot)
library(taskscheduleR)
library(dplyr)
# инициализируем бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# идентификатор чата
chat_id <- 123456789
# запрашиваем список задач
task <- taskscheduler_ls() %>%
filter(! `Last Result` %in% c("0", "267011") &
`Scheduled Task State` == "Enabled" &
Status != "Running") %>%
select(TaskName) %>%
unique() %>%
unlist() %>%
paste0(., collapse = "n")
# если есть проблемные задачи отправляем сообщение
if ( task != "" ) {
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)
}Al usar el ejemplo anterior, inserte en el código el token de su bot y su identificador de chat.
Puede agregar condiciones de filtrado de tareas, por ejemplo, verificando solo aquellas tareas que usted ha creado, excluyendo las del sistema.
También puede extraer varias configuraciones a un archivo de configuración separado y almacenar en él el id del chat y el token. Puede leer la configuración, por ejemplo, utilizando el paquete configr.
Ejemplo de archivo de configuración ini
[telegram_bot]
; configuraciones del bot de telegram y del chat al que se enviarán las notificaciones
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"Ejemplo de lectura de variables de la configuración en R
library(configr)
# lectura de la configuración
config <- read.config('C:/ruta_a_la_configuracion/config.cfg', rcmd.parse = TRUE)
bot_token <- config$telegram_bot$bot_token
chat_id <- config$telegram_bot$chat_idConfiguramos el horario para la verificación de tareas
El proceso de configuración de la ejecución de scripts programados está descrito con más detalle en este artículo. Aquí solo describiré los pasos que es necesario seguir. Si alguno de los pasos no le queda claro, consulte el artículo al que mencioné.
Supongamos que hemos guardado el código de nuestro bot en el archivo check_bot.R. Para programar la ejecución regular de este archivo, realice los siguientes pasos:
- Escriba en la variable de sistema Path la ruta a la carpeta en la que está instalado R, en Windows la ruta sería aproximadamente así:
C:Program FilesRR-4.0.2bin. - Cree un archivo bat ejecutable, el cual tendrá solo una línea
R CMD BATCH C:rscriptscheck_botcheck_bot.R. ReemplaceC:rscriptscheck_botcheck_bot.Ral camino completo hacia su archivo R. - Luego configure mediante el programador de tareas de Windows el horario de ejecución, por ejemplo, cada media hora.
Conclusión
En este artículo hemos entendido cómo crear un bot y enviar diversas notificaciones a través de él en Telegram.
He descrito la tarea de controlar el programador de tareas de Windows, pero puede utilizar el material de este artículo para enviar cualquier tipo de notificaciones, desde pronósticos del clima hasta cotizaciones de acciones en la bolsa, dado que R le permite conectarse a una gran cantidad de fuentes de datos.
En el siguiente artículo examinaremos cómo agregar comandos y un teclado al bot, para que no solo pueda enviar notificaciones, sino también realizar acciones más complejas.
Fuente: habr.com
