Criando um bot com Telegram na Intel Edison

No dia 5 de Novembro de 2015 aconteceu o Intel Innovation Week 2015, evento organizado pela Intel no Brasil para divulgar novas tecnologias, estudos e tendências do mercado, além de novos produtos e soluções tanto da própria Intel como de seus parceiros. Para este evento fui convidado para apresentar uma demonstração de aplicação de Internet das Coisas com a Intel Edison. Em um ambiente onde fazemos tanto uso de mídias sociais, pensei... Por que não juntar mídias sociais com Internet das Coisas? Isso nos levaria a algo como Social Things, já pensou? 

 

Assim, meu exemplo tratou de demonstrar um bot implementado em Telegram capaz de controlar elementos da Intel Edison, fazer leitura de sensores, contar a quantidade de pessoas em vista e até mesmo atuar como sistema de segurança por imagem. 

 

Nesse artigo irei então apresentar um tutorial de como criar o bot com Telegram na Intel Edison, nos moldes do que eu apresentei no Intel Innovation Week 2015. Não irei aprofundar muito, senão o artigo ficaria demasiadamente extenso. Dessa forma, apresentarei os conceitos em partes.

 

Bot com Telegram: Intel-Edison no Intel Innovation Week
Figura 1 - Apresentação do Bot Telegram com Intel Edison no Intel Innovation Week

 

O motivo fundamental de eu ter escolhido o Telegram é que o mesmo possui uma API bem aberta e bem documentada, facilitando a integração do mesmo com linguagens tais como Python, Java, C#, dentre outras. Além disso, o Telegram também já possui uma estrutura específica para trabalhar com bots!

 

Bot com Telegram
Figura 2 - Telegram - uma nova era de comunicação.

 

 

Bot com Telegram

 

Um bot é basicamente uma aplicação capaz de simular ações humanas, e até mesmo interagir por meio de sistemas de mensagens instantâneas, tal como Telegram, e assim responder a perguntas, comandos, e desempenhar ações específicas. O interessante da estrutura do Telegram para bots é que eles não dependem de números de celular para operarem. Basicamente você realiza um processo de registro, obtém uma chave de acesso e utiliza essa chave para controlar o seu bot. Isso será melhor apresentado adiante.

 

Todo o mecanismo de criação e gestão de bots em Telegram pode ser visto em detalhes na área de bots do Telegram. Inclusive, eles mesmos já fornecem toda uma base de códigos-fontes com exemplos para interação com bots Telegram em diversas linguagens neste link

 

Para criar um bot no Telegram, é preciso falar com o "The Botfather"! Uma icônica alusão ao Poderoso Chefão. E aqui fica uma consideração pessoal: Além de terem uma API aberta, ainda possuem uma boa dose de humor!

 

 

The BotFather

 

Bot com Telegram: the botfather
Figura 3 - The Botfather

 

Outra coisa legal do Telegram é que o mesmo não tem limitações quanto à forma de acesso. Ou seja, você pode acessar sua conta do Telegram pelo seu navegador mesmo com seu celular desligado, pelo link do Web Telegram. Isso, obviamente, depois de ter validado o seu computador com o sistema. Com isso, pude fazer todo o setup do bot conversando com o The Botfather pelo navegador, em meu computador. Para conversar com o The BotFather, você deve acessar este link, estar logado no Telegram, e assim que a janela foi propriamente carregada, inicie o processo com o comando /start, a partir do qual o BotFather irá então exibir uma lista dos comandos suportados para dar início à criação e setup do seu bot Telegram. Veja como é na Figura 4.

 

Bot com Telegram: BotFather
Figura 4 - Imagem do bate-papo com o Botfather 1

 

Viu então os comandos listados? Para você criar seu bot, então precisa agora digitar o comando /newbot e enviar. Com isso, ele irá lhe pedir o nome do seu novo bot. Coloquei para o meu o nome edisongram, pois pensei em uma mistura de Edison com Telegram. E após enviar o nome desejado, ele irá lhe pedir então o username do seu bot, e lhe avisa que o username deve finalizar com a palavra bot. No meu caso, ficou edisongram_bot. Veja o "bate-papo" na Figura 5.

 

Bot com Telegram: Setup Bot
Figura 5 - Configuração do bot com o The BotFather.


Feito isso, seu bot está configurado e ele irá então lhe informar um token, uma chave de acesso que você deverá usar com a API do Telegram para fazer interface com o seu bot, e assim poder ler e enviar mensagens por meio dele, tal como mostrado na Figura 6.

 

Bot com Telegram: Setup Bot 2
Figura 6 - The BotFather liberando token de acesso ao Bot.

 

Guarde o token de acesso em um arquivo *.txt. Ele será usado na Intel Edison para o devido funcionamento do bot com o Telegram.

 

 

Configurando sua Edison para Python com Telegram

 

Como linguagem para a escrita do programa do bot, será usado Python pelo fato de ser uma linguagem elegante. Simples, objetiva e direta, além de intuitiva. Para continuar daqui pra frente, garanta que a sua Intel Edison esteja devidamente configurada com Poky Linux. Em caso de dúvida, veja o material de imagens da Intel para instalar em sua Edison neste link e também o Intel Edison - Guias e Truques, escrito pelo Diego Sueiro aqui no Embarcados.

 

Considerando agora que sua Intel Edison está com Poky Linux instalado e configurado, e com acesso à internet, esteja também com acesso ao terminal da mesma, tanto via USB ou via SSH. Vamos instalar o Python PIP para gestão de pacotes Python com o seguinte comando:

 

 

Terminado o processo, agora vamos instalar uma biblioteca de suporte para uso do Bot Telegram, por meio do seguinte comando:

 

 

O repositório oficial dessa biblioteca está neste link do GitHub, onde são fornecidos detalhes mais aprofundados e todo o código-fonte e estrutura da biblioteca, além de algumas dicas de utilização e exemplo de bot implementado com ela. Esse material me ajudou bastante durante o processo.

 

 

Seu primeiro Bot com Telegram na Edison

 

Então, após instalada a biblioteca via Python-PIP, podemos criar um primeiro código de exemplo para testar o bot. Vamos então criar um exemplo simples, do tipo echo, em que a mensagem que for enviada ao bot será desenvolvida para você.

 

Para escrever o código na Intel Edison, digite o seguinte comando para iniciar o editor vi com um nome de arquivo sugerido como edisonGram.py:

 

 

Obs: Caso preferir, use outro editor de sua preferência que já esteja instalado no Linux da Intel Edison, tal como Nano ou o próprio Vim, por exemplo.

 

No editor, coloque então o seguinte código Python apresentado abaixo. Coloquei em cada linha de código comentários acerca da funcionalidade de cada trecho. Espero que assim fique mais intuitivo. Neste código, coloquei o meu Token de acesso, que foi obtido anteriormente na conversa com o BotFather, para servir de base. Mude para o Token gerado pela sua conversa com o The BotFather. (Após esse post eu criei outro Token, então não haverá problemas em termos de segurança a exibição deste dado).

 

 

Vamos testar a aplicação? Então salve o código e saia do editor vi ou qualquer outro editor que você estiver usando. Assim, para executar o nosso código Python devemos proceder com o seguinte comando:

 

 

Se tudo correr certo, a aplicação será iniciada e você poderá então também iniciar a conversa com o seu Bot via Telegram. Veja adiante o meu exemplo para este código-modelo. Primeiro, eu exibo o console de acesso ao terminal Linux da Intel Edison. E depois eu mostro a janela de conversa com o Bot, que basicamente irá me retornar tudo que eu enviar para ele, ou seja, simplesmente é um "echo".

 

Bot com Telegram: EdisonGram (Console)
Figura 7 - Console Shell do Linux da Intel Edison iniciando o programa edisonGram.py

 

Bot com Telegram: EdisonGram (Echo)
Figura 8 - Exemplo do bate-papo com o Bot na Intel Edison - Programa de Echo.

 

 

Algumas considerações adicionais

 

Somente a funcionalidade de "echo" não agrega nada, não é mesmo? Só serviu para testarmos que a aplicação escrita é capaz de ler e enviar mensagens. Agora vamos agregar mais um pouco de funcionalidade. Podemos tratar os textos recebidos pelo Bot e programar ações específicas para determinadas mensagens. Pense nas seguintes situações: 

  • Temperatura - O Bot responde a temperatura do ambiente, obtida por meio da leitura do correpondente sensor;
  • Luminosidade - O Bot responde a luminosidade do ambiente, também obtida por meio da leitura do correspondente sensor;
  • Acender luz - Imagine que um relé esteja ligado a uma lâmpada, por exemplo. Com este comando, a Edison poderia então acionar o relé e acender a lâmpada;
  • Apagar luz - Correspondentemente, poderia também apagar a lâmpada.

 

Dentre outros. As possibilidades são infinitas.

 

Para isso, temos que tratar a parte de código que recebe a mensagem, de modo a analisar o conteúdo da mensagem para então proceder com comandos/ações específicos.

 

Uma das coisas bem interessantes a respeito do Telegram é a possibilidade de mandar Stickers, que são imagens bem humorísticas baseadas em personagens consagrados da história, tais como Einstein, Tesla, Freddie Mercury, dentre outros. Para isso, existe a função da biblioteca sendSticker capaz de enviar uma imagem Sticker em formato *.webp

 

E se quiser enviar uma foto, uma imagem? Basta usar a função sendPhoto devidamente parametrizada, passando o caminho do arquivo de foto/imagem a ser enviado. 

 

 

Um Bot mais aprimorado

 

De modo a agregar um pouco mais de funcionalidade ao Bot modelo, irei agora mostrar como exibir a mensagem enviada ao Bot no display LCD do Kit Groove da Intel Edison, além de 2 easter eggs, ou seja, surpresas no código. Caso queira reproduzir o código abaixo em sua Intel Edison, lembre-se de substituir o Token pelo seu próprio, e também de estar com o Display LCD do Kit Groove devidamente conectado na porta I2C. Coloque o código no mesmo arquivo, edisonGram.py, usando seu editor favorito (vinano, etc).

 

Observação: Para reproduzir fielmente o exemplo abaixo, garanta que o arquivo de imagem *.png da logo do Embarcados e o arquivo de sticker *.webp estejam no mesmo diretório do arquivo-fonte python do bot para execução! 

 

 

 Para executar o código, basta seguir o procedimento padrão, chamando o interpretador Python seguido do nome do arquivo:

 

 

 E o resultado vemos a seguir:

 

Bot com Telegram: Intel Edison Embedded
Figura 9 - Interação com Bot - Envia mensagem para Display LCD.

 

 

E logo adiante o resultado no display LCD da Intel Edison:

 

Bot com Telegram: LCD
Figura 10 - Exibição da mensagem no Display LCD.

 

E como citei, e não deveria faltar: 2 "easter eggs" sensacionais!

 

Bot com Telegram: Tecnologia
Figura 11 - Easter Egg - Tecnologia? Embarcados!

 

Bot com Telegram: Intel Edison We Can
Figura 12 - Easter Egg - Intel? Edison!

 

Em breve pretendo também apresentar um artigo mostrando com detalhes como implementar um Bot de monitoramento com Intel Edison, capaz de tirar fotos, contar pessoas em vista, etc. Fique atento!

 

Não aguenta esperar até lá? Bom, então veja o código-fonte completo no repositório GitHub do EdisonGram neste link. Bom proveito!