Construindo um ChatBot para Telegram com R


O Chatbot é um programa de computador que simula uma conversa humana em um chat. Dessa forma, é possível automatizar tarefas repetitivas e burocráticas, como dúvidas frequentes, na forma de diálogo pré-definido entre o usuário e um ‘robô’. Essa tecnologia automatiza conversas e já é usada por diversas empresas e organizações para atender clientes, dar informações sobre serviços, vender produtos, entregar conteúdo, entre outras funções.

Essas ferramentas usam inteligência artificial e estão cada vez mais aperfeiçoadas. Ou seja, você não sabe, mas provavelmente já conversou com um robô.

Neste post vamos criar um ChatBot para o Telegram e controlado com software R.

Criando o Bot no Telegram

Primeiro passo é criar o Bot no Telegram, para esse passo crie uma conta no Telegram e em seguida procure o usuário @BotFather e inicie uma conversa da seguinte forma com o seguinte comando para criar um novo bot:

/newbot

Você deve obter uma resposta instantânea:

Alright, a new bot. How are we going to call it? Please choose a name for your bot.

que pede para você escolher um nome para o seu Bot. Você deve enviar então o nome que deseja para o bot, que pode ser qualquer um, por exemplo:

JFRBot

Em seguida receberá a seguinte mensagem:

Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

O BotFather agora pedirá que você escolha um nome de usuário para o seu Bot. Este nome de usuário deve terminar em bot e ser globalmente único. Neste tutorial, vou alterar um pouco o nome, mas levando em consideração que seja parecido como nome escolhido anteriormente. Envie seu nome de usuário escolhido para BotFather:

J_frbot

Depois de fazer isso, o BotFather enviará a você uma mensagem de “Parabéns”, que incluirá um token.

Done! Congratulations on your new bot. You will find it at t.me/J_frbot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

Use this token to access the HTTP API:
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
Keep your token secure and store it safely, it can be used by anyone to control your bot.

For a description of the Bot API, see this page: https://core.telegram.org/bots/api

eu substituí o token pois ele é único, este acima é apenas um exemplo.

O token é esta parte: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

Alguns comandos do @BotFather podem ser encontrados https://core.telegram.org/bots#6-botfather.

Para o restante deste tutorial, indicaremos onde você precisa colocar seu token usando <your-bot-token> ou apenas TOKEN. Anote o token, pois você precisará dele no código que está prestes a escrever.

Iniciando código no R

Com a criação do Bot pelo Telegram concluído, vamos agora configurar o R para que consigamos consevar com o Bot e assim criar esse robô que está cada vez mais ganhando espaço.

O primeiro passo é instalar e chamar a biblioteca no qual usaremos:

# Pacote Necessário
# install.packages(telegram.bot)

library(telegram.bot) #Pacote para Telegram

Com o pacote instalado, é o momento de utilização do Token:

#Token do Bot:
bot <- Bot(token = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11")
updater <- Updater(token = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11")

print(bot$getMe())
## $id
## [1] 1406230646
## 
## $is_bot
## [1] TRUE
## 
## $first_name
## [1] "JFRBot"
## 
## $username
## [1] "J_frbot"
## 
## $can_join_groups
## [1] TRUE
## 
## $can_read_all_group_messages
## [1] FALSE
## 
## $supports_inline_queries
## [1] FALSE

Pelo resultado anterior é possível verificar que estamos conectados ao nosso Bot corretamente.

A seguir vamos criar algumas funções e verificar se obtemos respostas quando conversarmos com nosso Bot pelo Telegram.

#Funcao start
start <- function(bot, update)
{
  bot$sendMessage(chat_id = update$message$chat_id,
                  text = sprintf("Olá %s, se estiver recebendo está mensagem, significa que eu existo e estou aqui!",
                                 update$message$from$first_name))
}
start_handler <- CommandHandler("start", start)
updater <- updater + start_handler

#Funcao hoje
hoje <- function(bot, update)
{
  bot$sendMessage(chat_id = update$message$chat_id,
                  text = sprintf("A data de hoje é %s",
                                 format(Sys.Date(), "%d-%b-%Y")))
}
hoje_handler <- CommandHandler("hoje", hoje)
updater <- updater + hoje_handler

#Funcao echo
echo <- function(bot, update){
  bot$sendMessage(chat_id = update$message$chat_id, text = update$message$text)
}

updater <- updater + MessageHandler(echo, MessageFilters$text)

#Funcao histograma de uma normal
historama_normal <- function(bot, update)
{
  png("my_plot.png")
  hist(rnorm(1000))
  dev.off()
  bot$sendPhoto(chat_id = update$message$chat_id, photo = 'my_plot.png')
}

hist_norm_handler <- CommandHandler("hist_norm", historama_normal)
updater <- updater + hist_norm_handler

Para iniciar o chatBot utilize a função abaixo:

updater$start_polling()

Nosso Bot atualmente possui 4 funções, que podem ser acessadas com /start/hoje/hist_norm e a quarta função é repetir tudo que é digitado.

Abaixo segue uma imagem das funções funcionando no Telegram:

Menu de itens

Será mostrado a seguir como criar um menu de itens como destacado na imagem abaixo. Este menu ajuda a definir e mostrar aos usuários os comandos prontos e existentes no Bot.

Para criar o menu de itens, acesse o chat do @BotFather que é quem comanda os Bot, e exeute o seguinte comando:

/setcommands

Você receberá a mensagem abaixo se possuir mais de um Bot

Choose a bot to change the list of commands.

ao escolher o Bot desejado será novamente emitida uma mensagem

OK. Send me a list of commands for your bot. Please use this format:

command1 - Description
command2 - Another description

Send /empty to keep the list empty.

A seguir pode colocar a lista com todos os comandos e as descrições, no nosso exemplo, como possui 3 funções, /start/hoje/hist_norm foram colocadas essas funções como mostrados abaixo.

start - inicio do Bot
hoje - data atual
hist_norm - Histograma da distribuição Normal

Se conseguiu chegar aqui e com o código em R mostrado estando em execução, o seu ChatBot deve estar funcionando e respondendo a seus comandos pelo Telegram.

O Bot só funciona se o arquivo estiver rodando no R, ou, uma outra forma é colocar num servidor que suporte códigos em R. Eu possuo o shiny-server instalado em minha máquina local, e dessa forma foi possível criar um arquivo, no qual, quando este aberto, o ChatBot fica funcionando, ou seja, quando eu estiver com o notebook ligado, esse Bot ensinado nesse post está funcionando e voê pode conversar com ele pesquisado-o no Telegram por JFRBot ou @J_frbot.

O artigo Como Instalar o shiny server em seu Próprio Servidor do Marcus Nunes mostra como instalar um servidor Shiny, o artigo é encontrado no link: https://marcusnunes.me/posts/como-instalar-o-shiny-em-seu-proprio-servidor/.

Fontes:

https://www.techtudo.com.br/noticias/2018/03/o-que-e-chatbot-entenda-como-funciona-o-robo-que-conversa-com-voce.ghtml

https://cran.r-project.org/web/packages/telegram.bot/vignettes/telegrambot-introduction.html

https://chatbotsmagazine.com/building-a-telegram-chatbot-with-r-2754cb75759f

“Post gerado com framework HUGO (http://gohugo.io/), R Markdown (http://rmarkdown.rstudio.com/), no qual os resultados são gerados na geração da página.”

Post original:

https://jodavid.github.io/post/construindo-um-chatbot-para-telegram-com-r/

LinkedIndo autor:

https://www.linkedin.com/in/jodavidferreira/