Como criar um bot no telegram – chatbot DO ZERO

Como criar um bot no telegram

Por que ficar respondendo as mesmas coisas sempre? Deixe um bot fazer isso por você! Nesta postagem irei te ensinar como criar um bot no Telegram, ou seja como criar um chatbot do zero!(postagem ainda em construção)

O plano é criar um bot do zero usando o Python.

Pronto para automatizar isso? Vamos automatizar TUDO!

Pré-requisitos

Conta no telegram

Assim como como outro bot que já ensinei em uma postagem anterior, de “Como Criar um bot no WhatsApp”, temos que, antes de tudo, você precisa de uma conta no telegram. Se ainda não possui uma crie ela antes de realizar este tutorial, e depois navegue até https://web.telegram.org/ e se autentique no telegram web, iremos usar ele neste tutorial.

Após ter logado no telegram web, busque por Botfather no chat e clique nele

Telegram “Botfather”

Após ter clicado no BotFather, iremos usar ele para criar nosso novo bot. O BotFather é o Bot “Pai” responsável criado pela equipe do Telegram para criar todos os outros bots. Então para que você crie seu bot, aperte em /iniciar ou /start para começar o processo.

Após ter clicado em start, verá as seguintes opções:

Selecione a opção /newbot

Digite um nome para o seu bot e aperte enter

Agora digite um apelido para o seu bot(o apelido precisa finalizar com a palavra bot). Caso você digite um apelido já criado anteriormente, você receberá a seguinte mensangem:

Neste caso, tudo que você precisa fazer, é criar um nome único, feito isso você receberá uma mensangem de confirmação como a seguir. Tome nota das informações destacadas na imagem a seguir.

Agora é a hora de codar o nosso bot do zero

Conta no Repl.it

Para criar um bot, precisamos nos comunicar com o API do Telegram.

Entre no https://repl.it/ e crie uma conta

Após ter criado sua conta no https://repl.it/ e fazer o login você deve chegar a está página, onde você deve clicar no “+” para criar um novo projeto

Na janela que irá aparecer, selecione a linguagem de programação Python e dê um nome para seu projeto

Feito isso, sua tela deve estar assim:

Eu pessoalmente acho o tema escuro mais estéticamente interessante, então estarei alterano para ele

como receber mensagens

Nosso ambiente de desenvolvimento está pronto agora. Então a lógico por trás de um bot no telegram é a seguinte:

  1. Monitoro todas mensagens enviados ao meu bot
  2. Verifico as mensagens que estão chegando
  3. Respondo as mensagens de acordo com o que quero

Como monitorar mensagens enviadas

Para monitar as mensagensque estão chegando para o seu bot, podemos fazer uma requisição para https://api.telegram.org/bot{token}/getUpdates, substituindo {token} pelo token gerado dentro do botfather. Caso não se lembre, estou falando deste token aqui:

Vamos montar um pequeno código de teste que irá monitar a cada 10 segundos se o nosso bot está ou não recebendo novas mensagens.

Coloque o seguinte código no repl.it e altere a linha onde é inserido o token com o token que você anotou quando criou o bot, usando o BotFather

import requests
import time

while True:
    token = '1398883505:AAFmdmUTisAQ4Fkd-qw_kuI7fiGNrrrYryg'
    # Ler mensagens
    url_base = f'https://api.telegram.org/bot{token}/getUpdates'
    resultado = requests.get(url_base)
    # Imprimir Resultados
    print(resultado.json())
    time.sleep(10)

Aperte o PLAY(Botão verde) e agora o seu bot deve estar online.

Você pode confirmar isso navegando até o link do bot que foi gerado pelo botfather e clicando em /start ou /iniciar e depois enviando uma nova mensagem

Se tudo ocorreu corretamente, você deve ver a mensagem que seu bot recebeu, dentro do repl.it

Se isso funcionou, agora podemos então criar uma estrutura própria para o nosso bot, onde ele será capaz de:

  • Obter novas mensagens
  • Criar uma resposta personalizada
  • Enviar a resposta adequada, automaticamente

Iremos partir usando a estrutura a seguir

class TelegramBot:
    def __init__(self):
        token = '1374813849:AAHauYQ2ikM4E-fTYOsZDNFZ-uOf39TecEM'
        url_base = f'https://api.telegram.org/bot{token}/getUpdates?timeout=100'
    # Obter mensagens
    # Criar uma resposta
    # Enviar Mensangem(responder)

Como obter novas mensagens

# Explain OS import 
# Explain logic to get check if first message
import requests
import time
import json
import os


class TelegramBot:
    def __init__(self):
        token = '1374813849:AAHauYQ2ikM4E-fTYOsZDNFZ-uOf39TecEM'
        self.url_base = f'https://api.telegram.org/bot{token}/'

    def Iniciar(self):
        update_id = None
        while True:
            atualizacao = self.obter_novas_mensagens(update_id)
            dados = atualizacao["result"]
            if dados:
                for dado in dados:
                    update_id = dado['update_id']
                    mensagem = str(dado["message"]["text"])
                    chat_id = dado["message"]["from"]["id"]
                    eh_primeira_mensagem = int(
                        dado["message"]["message_id"]) == 1
                    resposta = self.criar_resposta(
                        mensagem, eh_primeira_mensagem)
                    self.responder(resposta, chat_id)

    # Obter mensagens
    def obter_novas_mensagens(self, update_id):
        link_requisicao = f'{self.url_base}getUpdates?timeout=100'
        if update_id:
            link_requisicao = f'{link_requisicao}&offset={update_id + 1}'
        resultado = requests.get(link_requisicao)
        return json.loads(resultado.content)

bot = TelegramBot()
bot.Iniciar()

Como criar um resposta

import requests
import time
import json
import os


class TelegramBot:
    def __init__(self):
        token = '1374813849:AAHauYQ2ikM4E-fTYOsZDNFZ-uOf39TecEM'
        self.url_base = f'https://api.telegram.org/bot{token}/'

    def Iniciar(self):
        update_id = None
        while True:
            atualizacao = self.obter_novas_mensagens(update_id)
            dados = atualizacao["result"]
            if dados:
                for dado in dados:
                    update_id = dado['update_id']
                    mensagem = str(dado["message"]["text"])
                    chat_id = dado["message"]["from"]["id"]
                    eh_primeira_mensagem = int(
                        dado["message"]["message_id"]) == 1
                    resposta = self.criar_resposta(
                        mensagem, eh_primeira_mensagem)
                    self.responder(resposta, chat_id)

    # Obter mensagens
    def obter_novas_mensagens(self, update_id):
        link_requisicao = f'{self.url_base}getUpdates?timeout=100'
        if update_id:
            link_requisicao = f'{link_requisicao}&offset={update_id + 1}'
        resultado = requests.get(link_requisicao)
        return json.loads(resultado.content)

    # Criar uma resposta
    def criar_resposta(self, mensagem, eh_primeira_mensagem):
        if eh_primeira_mensagem == True or mensagem in ('menu', 'Menu'):
            return f'''Olá bem vindo a nossa lanchonete Digite o número do hamburguer gostaria de pedir:{os.linesep}1 - Queijo MAX{os.linesep}2 - Duplo Burguer Bacon{os.linesep}3 - Triple XXX'''
        if mensagem == '1':
            return f'''Queijo MAX - R$20,00{os.linesep}Confirmar pedido?(s/n)
            '''
        elif mensagem == '2':
            return f'''Duplo Burguer Bacon - R$25,00{os.linesep}Confirmar pedido?(s/n)
            '''
        elif mensagem == '3':
            return f'''Triple XXX - R$30,00{os.linesep}Confirmar pedido?(s/n)'''

        elif mensagem.lower() in ('s', 'sim'):
            return ''' Pedido Confirmado! '''
        elif mensagem.lower() in ('n', 'não'):
            return ''' Pedido Confirmado! '''
        else:
            return 'Gostaria de acessar o menu? Digite "menu"'

    # Responder
    def responder(self, resposta, chat_id):
        link_requisicao = f'{self.url_base}sendMessage?chat_id={chat_id}&text={resposta}'
        requests.get(link_requisicao)


bot = TelegramBot()
bot.Iniciar()

considerações finais

Acabamos de ver muitas coisas novas hoje, e caso você ainda não tenha conhecimento de programação em Python, API’s e automação. Tudo pode ter parecido tudo muito complexo ou desconexo, mas lembre-se o processo de aprendizado é assim mesmo, inicialmente com a curiosidade e exploração, gradualmente vamos adquirindo conhecimento.

Como se tornar um mestre da automação

  • Criar robôs que trabalham por você?
  • Usar a programação ao seu favor?
  • Economizar dezenas de horas?
  • Monetizar seu conhecimento?

É exatamente isso que ensino no curso Mestres da Automação, saiba mais clicando aqui.

Prefere assistir vídeo? Veja a explicação completa no vídeo abaixo:

.

Marcações:

11 comentários em “Como criar um bot no telegram – chatbot DO ZERO”

  1. Que show!
    Obrigado!
    Aqui deu quase tudo certo, recebeu as mensagens em tempo real.

    Mas porque o bot não respondeu aos comandos?

    1. na verdade, agora o erro é esse:

      Traceback (most recent call last):
      File “main.py”, line 63, in
      bot.Iniciar()
      File “main.py”, line 20, in Iniciar
      mensagem = str(dado[“message”][“text”])
      KeyError: ‘text’

  2. Fábio Coutinho

    Jhonatan fiz o seu BOT e ele está funcionando. Quando o coloquei no meu grupo qualquer pessoa que pergunta o BOT só responde no grupo do BOT ao invés de responder no grupo onde o coloquei. Pode me ajudar nessa?

  3. Boa noite!
    Estou com uma pequena duvida eu criei o bot para telegram porem como faço para este mesmo bo gerenciar um grupo como faço essa integração alguem pode me ajuda?

  4. Eduardo Felipe Souza

    Muito boa as aulas, poderia me ajudar, não estou conseguindo fazer rodar ja e revisei e revisei e não acho nada, coloquei o link no navegador e ele puxou os dados do grupo certo.

    Fica dando esse erro
    Traceback (most recent call last):
    File “main.py”, line 44, in
    bot.Iniciar()
    File “main.py”, line 16, in Iniciar
    atualizacao = self.obter_mensagens(update_id)
    File “main.py”, line 27, in obter_mensagens
    link_requisicao = f'{self.url_base}getUpdates?timeout=100′
    AttributeError: ‘TelegramBotFin’ object has no attribute ‘url_base’

    import requests
    import time
    import json

    class TelegramBotFin:
    def __init____(self):
    token = ‘1411783764:AAHttibKaxv5QitO3LTbSjjw5DEfiC-uZS8′
    self.url_base = f’api.telegram.org/bot{token}/’

    #Iniciar o Bot

    def Iniciar(self):
    update_id = None
    while True:
    atualizacao = self.obter_mensagens(update_id)
    mensagens = atualizacao[‘result’]
    if mensagens:
    for mensagem in mensagens:
    update_id = mensagem[‘update_id’]
    chat_id = mensagem[‘message’][‘from’][‘id’]
    resposta = self.criar_resposta()
    self.responder(resposta, chat_id)

    #Obter Mensagens
    def obter_mensagens(self, update_id):
    link_requisicao = f'{self.url_base}getUpdates?timeout=100′
    if update_id:
    link_requisicao = f'{link_requisicao}&offset={update_id + 1}’
    resultado = requests.get(link_requisicao)
    return json.loads(resultado.content)

    #Criar Resposta
    def criar_resposta(self):
    return ‘Ola teste’

    #Responder
    def responder(self, resposta, chat_id):
    #enviar
    link_de_envio = f'{self.url_base}sendMessage?chat_id={chat_id}&text={resposta}’
    requests.get(link_de_envio)

    bot = TelegramBotFin()
    bot.Iniciar()

    Traceback (most recent call last):
    File “main.py”, line 44, in
    bot.Iniciar()
    File “main.py”, line 16, in Iniciar
    atualizacao = self.obter_mensagens(update_id)
    File “main.py”, line 27, in obter_mensagens
    link_requisicao = f'{self.url_base}getUpdates?timeout=100′
    AttributeError: ‘TelegramBotFin’ object has no attribute ‘url_base’

    KeyboardInterrupt

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *