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://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: