Como fazer um bot telegram no Raspberry

Esse não é um simples recurso para reportar status; com um bot Telegram você poderá controlar completamente o Raspberry, dependendo apenas de sua implementação.

O que é o Telegram?

Telegram é um mensageiro como o Whatsapp, mas muito melhor, na minha opinião. Primeiro porque ele não fica armazenando todas as mídias que as tias ficam mandando na mensagem, mas tem outros valores. O Telegram permite criar mensagens com auto-destruição, não deixando vestígios. Também é possível fazer grupos com mais de 250 pessoas, enquanto o Whatsapp tem um limite de pessoas por grupo. Mas ele ainda vai além!

Instale o Telegram em seu smartphone

Esse é o primeiro passo. Você deverá necessariamente instalá-lo em seu celular. Ele está disponível na Play Store, para quem tem smartphones Android. Também possui versão para iPhone.

Instale o Telegram no notebook / PC

Copiar o token do smartphone para o Raspberry não seria uma tarefa muito prática. Para facilitar um pouco, instale a versão para desktop.

Solicite um bot ao botFather

O processo é simples e guiado. Abra o Telegram e digite /newbot (começando com barra mesmo) no botFather:

bot Telegram

Depois ele pedirá um nome para seu bot, então solicitará um username.  Ao final será fornecido um token para acessar a API HTTP. Guarde esse token em segurança!

bot Telegram

 

Instale o Telepot no Raspberry

Podemos fazer uma conexão direta com teclado e mouse no Raspberry ou acessar por outro meio como Teamviewer, DWagent ou ssh. Para instalar o Telepot, abra um terminal do Raspberry e digite:

sudo su
apt-get update
apt-get install python-pip
pip install telepot

Eu gosto de usar o bpython para teste em fluxo. Uma das vantagens é acesso direto à documentação e informação explícita dos construtores dos métodos. Se desejar instalá-lo:

pip install bpython

Se estiver com o sistema atualizado, provavelmente já não terá mais a opção do bpython para a versão 2.7. Veremos isso em outro artigo.

Abra um terminal Python digitando python (ou se o instalou, digite bpython). Nele, digite os comandos:

import telepot
bot = telepot.Bot('seuTokenRecebidoNoApp')
bot.getMe()

Se retornar um dicionário python, então está tudo ok. Pode sair digitando exit() e sigamos. De outro modo, resolva o problema e siga daqui.

Enviar e receber mensagens do bot Telegram no Raspberry

Agora podemos receber mensagens e tratá-las como comandos no Raspberry. Também podemos receber alertas a partir de um script que esteja monitorando o sistema, e com isso podemos receber status do Raspberry de onde quer que estejamos!

Eis um script de exemplo. Abra um editor qualquer e escreva ou copie esse código:

import time
import datetime
import telepot
import sys
import os

def handle(msg):
    chat_id = msg['chat']['id']
    comm    = msg['text']

    if comm == '/clock':
        bot.sendMessage(chat_id, str(datetime.datetime.now()))
    if comm == '/temp':
        bot.sendMessage(chat_id, str(os.system('vcgencmd measure_temp')))

bot = telepot.Bot('seu token aqui')
bot.message_loop(handle)
print("Started.")

while True:
    time.sleep(10)

Inicie o bot no smartphone ou no Telegram desktop e troque mensagens com ele:

bot Telegram

Ops. Ele jogou a temperatura para stdout e pegou o código de retorno do comando system. O system é uma maneira porca e preguiçosa de acessar o sistema, mas funciona para acionar comandos. Para pegar informações do sistema e trazer para dentro do programa, será necessário elaborar um pouco mais, mas fiquemos nos conceitos.

Outros recursos

Algumas coisas não são possíveis, como mandar mensagens para todos os bots simultaneamente. O limite de mensagem é de 30 por segundo, o que já é um valor bastante alto. Problemas de notificação em massa podem bloquear seu bot, por isso é aconselhável um intervalo de 8 a 12 horas.

Podemos baixar ou enviar arquivos. O bot pode receber e enviar mensagens, pode receber mensagens de chats privados com usuários, e todas as mensagens de canais que ele seja membro. Para ele enviar mensagens de forma autônoma, primeiramente é necessário saber a quem mandar. Já fiz aqui um “workaround” (vulgo “gambiarra”) e funcionou bem, a princípio. Mas fica pra outro artigo!

 

Revisão: Ricardo Amaral de Andrade

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.