Olá sedentos por conhecimento!
Hoje vou explicar um pouco sobre como criar e como utilizar um bot no Telegram. Pra vocês que ainda não conhecem, Telegram é um aplicativo similar ao Whats app (melhor…cof cof) porém com pequenas, e significativas, diferenças. Telegram é código aberto e foi criado com um foco muito forte em segurança e privacidade permitindo ao usuário mandar mensagens criptografadas e criar conversas autodestrutivas, também sendo possível enviar documentos em qualquer formato (O que utilizo bastante para mandar arquivos como .pdf e .gif).
A ideia inicial para criar o bot me apareceu porque eu queria poder conversar com minha casa (Acende a luz!, A porta está fechada?, Como está a temperatura no meu quarto hoje?, DEFCON4 Double take!). É comum encontrar na internet projetos similares usando arduino com shield wifi ou ethernet mas porque não fazer isso mais comodo e fácil para os usuarios? E é ai que entra o bot! Toda essa conversa de bots e bots…mas afinal o que é um bot? Um bot não é nada mais que uma conta de usuario controlada por um software. Então que tal ter o nosso proprio bot?
Vamos começar!
Começando pelo basico. Você precisa criar uma conta no Telegram. Pra isso basta instalar o aplicativo no seu dispositivo (Playstore/Itunes/TelegramDesktop).
Esse primeiro passo é bem fácil, basta cadastrar o seu numero de telefone, esperar o sms com o numero de confirmação e já podemos ir para o proximo passo.
Uma vez que sua conta esteja pronta devemos falar com BotFather. Pra isso basta acessar esse https://telegram.me/botfather ou buscar por “botfather” nos contatos que ele estará lá disponivel para conversar com você. Quando a primeira conversa for aberta com o BotFather lá em baixo terá um botão “/start”
Ao clicar no botão BotFather vai enviar as instruções e comandos disponíveis para conversar com ele. Como queremos criar um bot vamos enviar para BotFather
“/newbot”
Após isso basta informar como o bot (1)será chamado e qual o (2)nome de usuário do bot que estamos criando.
E pronto! Já temos um bot que podemos usar para enviar e receber mensagens.
Agora podemos começar a programar nosso bot. Para esse post vamos utilizar Python e antes de qualquer coisa deveremos instalar as ferramentas necessárias para programar o bot.
Lista de ferramentas necessárias:
$ sudo apt-get install python3
$ sudo apt-get install python3-pip
$ sudo pip3 install telepot
$ sudo pip3 install telepot –upgrade # UPGRADE
Após todas as ferramentas instaladas, mãos a obra. Iremos utilizar telepot ,um framework em python para acessar Telegram Bot API. Para mais detalhes sobre telepot você pode acessar a pagina do github onde será possivel encontrar mais detalhes sobre o framework, documentação e alguns códigos.
Vamos começar com um simples bot que responde “Olá, como você está hoje?” quando recebe um Olá.
#!/usr/bin/python import telepot, time def handle(msg): content_type, chat_type, chat_id = telepot.glance(msg) if (content_type == 'text'): command = msg['text'] print ('Got command: %s' % command) if '/Ola' in command: bot.sendMessage(chat_id, "Ola, como voce esta?") # Cria um bot com a API key disponibilizada pelo BotFather bot = telepot.Bot('16843XXXX:AAGGq99MLWOknqCx66V5s2XXXXXXXXXXXXX') # Adiciona a função handle para ser chamada sempre que uma nova mensagem for recebida bot.message_loop(handle) # Aguarda por novas mensagens while 1: time.sleep(20)
Salve com o nome de assistente.py.Rode o código utilizando
$ python3 assistente.py
Enquanto o código estiver rodando você é possivel testar o assistente pessoal mandando uma mensagem para o bot que acabamos de criar.
Nosso bot foi capaz de receber mensagens e responder mensagens pré definidas de acordo com nosso código. Onde na verdade o que aconteceu é que o código em python executou essas tarefas. O código para gerar o bot é bastante simples e fácil de entender.
Agora que temos nosso pequeno código funcionando, que tal extender as capacidades dele? Utilizando um arudino e um relê eu resolvi testar se meu bot seria capaz de controlar uma lâmpada remotamente na minha casa, e aqui o resultado. Para isso o seguinte esquemático foi utilizado para conectar o arduino o módulo relê e uma lâmpada (negra).
O código para o arduino é bastante simples.
const int lightPin=6; unsigned int data; void setup() { Serial.begin(9600); pinMode(lightPin,OUTPUT); } void loop() { while(Serial.available()>0){ data=Serial.read(); if(data=='Y')digitalWrite(lightPin,HIGH); if(data=='N')digitalWrite(lightPin,LOW); } }
Nesse código utilizamos a porta serial para receber informações que irão controlar a lâmpada. Caso o arduino receba pela porta serial o caractere “Y” ele define o nível lógico da porta conectada no relê como alto acendendo a lâmpada, caso receba “N” ele desliga o relê desligando também a lâmpada.
Uma vez que o arduino está devidamente conectado vamos atualizar o código que vamos utilizar em nosso bot.
#!/usr/bin/python import telepot, time, serial ser = serial.Serial('/dev/ttyACM0', 9600) def handle(msg): userName = msg['from']['first_name']+" "+msg['from']['last_name'] content_type, chat_type, chat_id = telepot.glance(msg) if (content_type == 'text'): command = msg['text'] print ('Got command: %s' % command) if '/hello' in command: bot.sendMessage(chat_id, "Ola "+userName+", como voce esta?") if '/lamp_on' in command: ser.write(b'Y') bot.sendMessage(chat_id, "A lampada esta ligada") if '/lamp_off' in command: ser.write(b'N') bot.sendMessage(chat_id, "A lampada esta desligada") # Cria um bot com a API key disponibilizada pelo BotFather bot = telepot.Bot('16843XXXX:AAGGq99MLWOknqCx66V5s2XXXXXXXXXXXXXX') # Adiciona a função hanldle para ser chamada sempre que uma nova mensagem for recebida bot.message_loop(handle) # Aguarda por novas mensagens while 1: time.sleep(20)
Importando a biblioteca Serial podemos comunicar o código em python com nosso arduino dando o controle sobre lampada para nosso bot. É importante notar que na linha #3 é especificada a porta serial que o arduino está conectado, o código deve ser editado de acordo com a necessidade.
Salve o código e execute novamente e estaremos prontos para testar!
Por o Telegram dar suporte a desenvolvedores, há algumas dezenas de bots internet a fora e com o codigo disponivel para que vocês possam se divertir.
Vou deixar linkado aqui por onde começar!
- Tabela com os melhores bots. Essa tabela foi criada a partir de um versiculo para namoro sobre bots do Telegram.
- https://dragaosemchama.com/thiago-servo-e-namorada/. Github do framework utilizado nesse artigo contendo referências, códigos e mais.
Gostou? Que funcionalidades você adicionaria a um bot? Crie o seu e compartilhe suas experiencias com a equipe do dragão!
Conhecimento vale ouro!
EDIT: Devido a atualização da API para trabalhar com bots, o código do dragão sem chama teve de ser atualizado. O código já está funcional novamente :D
Boa noite, parabéns pelo post muito bom porem ao tentar executar o seu código assitente.py ocorreu isso aqui e não estou conseguindo corrigir, lembrando que instalei conforme orientação:
Traceback (most recent call last):
File “assistente.py”, line 18, in
bot.notifyOnMessage(handle)
AttributeError: ‘Bot’ object has no attribute ‘notifyOnMessage’
Bom dia Rudrigo Lima,
A API de BOTs foi atualizada desde o post do dragão sem chama, isso pode ter gerado alguma incompatibilidade com o código do dragão. Atualmente estou bastante ocupado com as atividades na universidade, mas logo logo vou atualizar o post por aqui.
As mudanças para esse código serão as seguintes:
1) a função glace2() que é utilizada na linha 9 agora é apenas glace()
2) o método notifyOnMessage() agora é chamado de message_loop()
Por enquanto, para seu código funcionar basta substituir pelo seguinte código:
#!/usr/bin/python
import telepot, time
def handle(msg):
userName = msg[‘from’][‘first_name’]+” “+msg[‘from’][‘last_name’]
content_type, chat_type, chat_id = telepot.glance(msg)
if (content_type == ‘text’):
command = msg[‘text’]
print (‘Got command: %s’ % command)
if ‘/hello’ in command:
bot.sendMessage(chat_id, “Ola “+userName+”, como voce esta?”)
if ‘/lamp_on’ in command:
ser.write(b’Y’)
bot.sendMessage(chat_id, “A lampada esta ligada”)
if ‘/lamp_off’ in command:
ser.write(b’N’)
bot.sendMessage(chat_id, “A lampada esta desligada”)
# Cria um bot com a API key disponibilizada pelo BotFather
bot = telepot.Bot(‘*******TOKEN*******’)
# Adiciona a função hanldle para ser chamada sempre que uma nova mensagem for recebida
bot.message_loop(handle)
# Aguarda por novas mensagens
while 1:
time.sleep(20)
Onde coloco o arquivo que crio .py?
Boa noite AJURYCABA JUNIOR,
O arquivo que vc criou pode ser colocado em qualquer pasta, desde que você vá até o arquivo através do terminal para executa o mesmo.
Boa tarde. Alguem conhece este kit e pode indicar? https://produto.mercadolivre.com.br/MLB-951598031-kit-dimmer-rs485-hc06-hc05-esp8266-arduino-wifi-telegram-_JM
Obrigado.
Boa tarde Helio,
Nâo conhecemos esse kit, portanto, não há como recomendar ou desrecomendar.
Se você chegar a comprar o kit, deixa aqui um feedback de como ele funcionou para vocẽ o/