A audiência do Telegram cresce diariamente em progressão geométrica, facilitado pela conveniência do mensageiro, pela presença de canais, chats e, é claro, pela possibilidade de criar bots.
Bots podem ser utilizados para diversas finalidades, desde a automação da comunicação com seus clientes até a gestão de suas próprias tarefas.
Na prática, através de um bot é possível realizar qualquer operação no Telegram: enviar ou solicitar dados, iniciar tarefas em um servidor, coletar informações em um banco de dados, enviar e-mails e muito mais.
Eu pretendo escrever uma série de artigos sobre como trabalhar com , e desenvolver bots para atender às suas necessidades.

Neste primeiro artigo, vamos abordar como criar um bot do Telegram e enviar notificações por meio dele.
Como resultado, teremos um bot que verificará o status da última execução de todas as tarefas no agendador de tarefas do Windows e enviará notificações se alguma delas falhar.
Mas o objetivo desta série de artigos não é apenas ensinar a escrever um bot para uma tarefa específica e restrita, mas sim familiarizá-lo com a sintaxe do pacote telegram.bot, e exemplos de código que permitirão que você escreva bots para resolver suas próprias questões.
Conteúdo
youtube e O processo de construção do bot
Criando um bot do Telegram
Para começar, precisamos criar um bot. Isso é feito por meio de um bot especial BotFather, acesse e envie uma mensagem para o bot /start.
Após isso, você receberá uma mensagem com uma lista de comandos:
Mensagem do BotFather
Posso ajudá-lo a criar e gerenciar bots do Telegram. Se você é novo na API do Bot, consulte o manual (https://core.telegram.org/bots).
Você pode me controlar enviando esses comandos:
/newbot - criar um novo bot
/mybots - editar seus bots [beta]
Editar Bots
/setname - mudar o nome de um bot
/setdescription - mudar a descrição do bot
/setabouttext - mudar informações sobre o bot
/setuserpic - mudar a foto de perfil do bot
/setcommands - mudar a lista de comandos
/deletebot - excluir um bot
Configurações do Bot
/token - gerar token de autorização
/revoke - revogar token de acesso do bot
/setinline - alternar modo inline (https://core.telegram.org/bots/inline)
/setinlinegeo - alternar solicitações de localização inline (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - mudar configurações de feedback inline (https://core.telegram.org/bots/inline#collecting-feedback)
/setjoingroups - seu bot pode ser adicionado a grupos?
/setprivacy - alternar modo de privacidade (https://core.telegram.org/bots#privacy-mode) em grupos
Jogos
/mygames - editar seus jogos (https://core.telegram.org/bots/games) [beta]
/newgame - criar um novo jogo (https://core.telegram.org/bots/games)
/listgames - obter uma lista dos seus jogos
/editgame - editar um jogo
/deletegame - excluir um jogo existentePara criar um novo bot, envie o comando /newbot.
O BotFather pedirá que você insira o nome e o login do bot.
BotFather, [25.07.20 09:39]
Certo, um novo bot. Como vamos chamá-lo? Por favor, escolha um nome para o seu bot.
Alexey Seleznev, [25.07.20 09:40]
Meu Bot de Teste
BotFather, [25.07.20 09:40]
Bom. Agora vamos escolher um nome de usuário para o seu bot. Deve terminar com `bot`. Como isso, por exemplo: TetrisBot ou tetris_bot.
Alexey Seleznev, [25.07.20 09:40]
@meu_bot_de_testeVocê pode inserir um nome aleatório, mas o login deve terminar com bot.
Se você fez tudo corretamente, receberá a seguinte mensagem:
Pronto! Parabéns pelo seu novo bot. Você o encontrará em t.me/meu_bot_de_teste. Agora você pode adicionar uma descrição, seção sobre e foto de perfil para o seu bot, veja /help para uma lista de comandos. A propósito, quando você terminar de criar seu bot incrível, entre em contato com o nosso Suporte a Bots se quiser um nome de usuário melhor para ele. Apenas certifique-se de que o bot esteja totalmente operacional antes de fazer isso.
Use este token para acessar a API HTTP:
123456789:abcdefghijklmnopqrstuvwxyz
Para uma descrição da API do Bot, veja esta página: https://core.telegram.org/bots/apiEm seguida, você precisará do token da API recebido, no meu exemplo isso é 123456789:abcdefghijklmnopqrstuvwxyz.
Nesta etapa, os trabalhos preparatórios para a criação do bot estão concluídos.
Instalação do pacote para trabalhar com o bot do Telegram em R
Eu presumo que você já tenha o idioma R instalado e o ambiente de desenvolvimento RStudio. Se não tiver, você pode assistir a este sobre como instalá-los.
Para trabalhar com a API do Telegram Bot, usaremos o pacote R .
A instalação de pacotes em R é feita pela função install.packages(), então, para instalar o pacote que precisamos, use o comando install.packages("telegram.bot").
Para obter mais informações sobre a instalação de vários pacotes, você pode consultar .
Após a instalação do pacote, ele deve ser carregado:
library(telegram.bot)Enviando mensagens de R para o Telegram
O bot que você criou pode ser encontrado no Telegram pelo login definido ao criá-lo, no meu caso é @meu_bot_de_teste.
Envie qualquer mensagem para o bot, como "Olá bot". Por enquanto, precisamos disso para obter o ID do seu chat com o bot.
Agora, no R, escreva o seguinte código.
library(telegram.bot)
# criamos uma instância do bot
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Solicita informações sobre o bot
print(bot$getMe())
# Obtém as atualizações do bot, ou seja, a lista de mensagens enviadas a ele
updates <- bot$getUpdates()
# Solicita o identificador do chat
# Nota: antes de solicitar atualizações, você deve enviar uma mensagem ao bot
chat_id <- updates[[1L]]$from_chat_id()Inicialmente, criamos uma instância do nosso bot com a função Bot(), onde é necessário passar o token obtido anteriormente como argumento.
Armazenar o token no código não é considerado uma boa prática, portanto, você pode armazená-lo em uma variável de ambiente e lê-lo a partir dela. Por padrão, o pacote telegram.bot implementa suporte para variáveis de ambiente com o seguinte nome: R_TELEGRAM_BOT_NOME_DO_SEU_BOT. Em vez de NOME_DO_SEU_BOT substitua pelo nome que você definiu ao criar; no meu caso, a variável será R_TELEGRAM_BOT_My Test Bot.
Você pode criar uma variável de ambiente de várias formas; vou contar sobre a mais universal e multiplataforma. Crie um arquivo de texto em seu diretório pessoal (você pode descobrir qual é usando o comando path.expand("~")) com o nome .Renviron. Isso também pode ser feito usando o comando file.edit(path.expand(file.path("~", ".Renviron"))).
E adicione a seguinte linha a ele.
R_TELEGRAM_BOT_NOME_DO_SEU_BOT=123456789:abcdefghijklmnopqrstuvwxyzDepois, você pode usar o token armazenado na variável de ambiente com a função bot_token(), ou seja, assim:
bot <- Bot(token = bot_token("My Test Bot"))Método getUpdates()nos permite obter as atualizações do bot, ou seja, as mensagens que foram enviadas a ele. O método from_chat_id(), permite obter o ID do chat do qual a mensagem foi enviada. Esse ID é necessário para enviar mensagens do bot.
Além do ID do chat do objeto obtido pelo método getUpdates() , você obtém algumas outras informações úteis. Por exemplo, informações sobre o usuário que enviou a mensagem.
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"Assim, neste estágio, já temos tudo o que precisamos para enviar uma mensagem do bot no Telegram. Vamos usar o método sendMessage(), que deve receber o identificador do chat, o texto da mensagem e o tipo de formatação do texto da mensagem. O tipo de formatação pode ser Markdown ou HTML e é definido pelo argumento parse_mode.
# Отправка сообщения
bot$sendMessage(chat_id,
text = "Привет, *жирный текст* _курсив_",
parse_mode = "Markdown"
)Fundamentos da formatação Markdown:
- O texto em negrito é destacado com o asterisco *:
- exemplo:
*texto em negrito* - resultado: texto em negrito
- exemplo:
- O itálico é definido com o sublinhado:
- exemplo:
_itálico_ - resultado: itálico
- exemplo:
- A fonte monoespaçada, normalmente usada para destacar código, é definida com apóstrofos — `:
- exemplo: `fonte monoespaçada`
- resultado:
fonte monoespaçada
Fundamentos da formatação HTML:
No HTML, você envolve a parte do texto que deseja destacar com tags, exemplo texto.
- — tag de abertura
- — tag de fechamento
Tags de formatação HTML
<b>— texto em negrito- exemplo:
<b>negrito</b> - o resultado negrito
- exemplo:
— itálico- exemplo:
itálico - resultado: itálico
- exemplo:
— fonte monoespaçada- exemplo:
fonte monoespaçada - resultado:
fonte monoespaçada
- exemplo:
Além de texto, você pode enviar outros conteúdos usando métodos especiais:
# Отправить изображение
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"
)Ou seja, por exemplo, com o método sendPhoto() você pode enviar um gráfico salvo como imagem, que você construiu usando o pacote ggplot2.
Verificando o agendador de tarefas do Windows e enviando notificações sobre tarefas que falharam
Para trabalhar com o agendador de tarefas do Windows, você precisa instalar o pacote taskscheduleR, e para facilitar o trabalho com os dados, instalaremos o pacote dplyr.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)Em seguida, com a função taskscheduler_ls() solicitamos informações sobre as tarefas do nosso agendador. Com a função filter() do pacote dplyr removemos da lista de tarefas aquelas que foram bem-sucedidas e têm status de resultado final 0, e aquelas que nunca foram executadas e têm status 267011, tarefas desativadas e tarefas que estão em execução no 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")No objeto task agora temos uma lista de tarefas que falharam, essa lista precisa ser enviada para o Telegram.
Se olharmos para cada comando em mais detalhes, podemos ver que:
filter()— filtra a lista de tarefas com base nas condições descritas acimaselect()— mantém na tabela apenas um campo com o nome das tarefasunique()— remove duplicatas nos nomesunlist()— transforma a coluna selecionada da tabela em um vetorpaste0()— une os nomes das tarefas em uma única string, usando como separador a quebra de linha, ou seja,n.
Tudo o que nos resta fazer é enviar esse resultado para o Telegram.
bot$sendMessage(chat_id,
text = tarefa,
parse_mode = "Markdown"
)Então, até agora, o código do bot está assim:
Código do bot que verifica as tarefas
# Подключение пакета
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"
)
}Ao usar o exemplo acima, insira no código o token do seu bot e seu identificador de chat.
Você pode adicionar condições de filtragem para as tarefas, por exemplo, verificando apenas aquelas que foram criadas por você, excluindo as sistêmicas.
Você também pode separar diferentes configurações em um arquivo de configuração, armazenando nele o id do chat e o token. É possível ler o config, por exemplo, usando o pacote configr.
Exemplo de configuração ini
[telegram_bot]
;configurações do bot do telegram e do chat para onde as notificações serão enviadas
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"Exemplo de leitura de variáveis do config em R
library(configr)
# leitura do config
config <- read.config('C:/caminho_para_config/config.cfg', rcmd.parse = TRUE)
bot_token <- config$telegram_bot$bot_token
chat_id <- config$telegram_bot$chat_idConfigurando o cronograma para verificar as tarefas
O processo de configurar a execução de scripts em um cronograma é descrito em detalhes neste . Aqui, apenas descreverei os passos que precisam ser executados. Se algum passo não estiver claro, consulte o artigo ao qual eu indiquei o link.
Suponha que salvamos o código do nosso bot no arquivo check_bot.R. Para agendar a execução regular deste arquivo, siga os passos abaixo:
- Adicione na variável de sistema Path o caminho para a pasta onde o R está instalado; em Windows, o caminho será aproximadamente assim:
C:Program FilesRR-4.0.2bin. - Crie um arquivo bat executável que conterá apenas uma linha:
R CMD BATCH C:rscriptscheck_botcheck_bot.R. SubstituaC:rscriptscheck_botcheck_bot.Rpelo caminho completo do seu arquivo R. - Em seguida, configure usando o agendador de tarefas do Windows o cronograma de execução, por exemplo, a cada meia hora.
Conclusão
Neste artigo, abordamos como criar um bot e enviar várias notificações através dele para o Telegram.
Descrevi a tarefa de monitoramento do agendador de tarefas do Windows, mas você pode usar o material deste artigo para enviar qualquer tipo de notificação, desde previsões do tempo até cotações de ações na bolsa, já que o R permite que você se conecte a uma enorme quantidade de fontes de dados.
No próximo artigo, vamos aprender como adicionar comandos e um teclado ao bot, para que ele possa não apenas enviar notificações, mas também realizar ações mais complexas.
Fonte: habr.com
