Utilizando Inline Keyboard em um Bot para o Telegram

Aqui no blog eu fiz uma série de três posts mostrando como desenvolver e publicar um bot para o Telegram. O que eu não esperava era que eles fossem criar interesse em tantas pessoas. O número de comentários foi grande e várias dúvidas apareceram. Algumas eu consegui responder e outras não (mesmo tendo pesquisado bastante =[ ). Dentre os assuntos presentes nessas dúvidas, o que mais me chamou a atenção foi Inline Keyboard.

O que é um Inline Keyboard?

Para quem ainda não conhece, o Inline Keyboard é um tipo de teclado (é mesmo? kkk) que serve para o usuário interagir com o bot sem a necessidade de digitação de mensagens. O Inline Keyboard é vinculado às mensagens enviadas pelo bot e pode ser usado para dar acesso a um link ou para uma atualização da mensagem (o que na API do Telegram é chamado de on-the-fly updating ). As imagens abaixo mostram alguns exemplos de Inline Keyboards:

               

Implementando um Inline Keyboard

Agora que o Inline Keyboard foi apresentado, vamos ver como implementá-lo para o seu bot. Para isso, eu vou utilizar, como base para implementação, o código do bot da loteria que fiz nos primeiros posts sobre o Telegram.

Antes de partir para o código, precisamos entender como o Inline Keyboard está definido na API do Telegram. Basicamente, para se criar esse tipo de teclado, é preciso criar um objeto InlineKeyboardMarkup. Esse objeto é composto por um array e dentro dele são inseridos os arrays das linhas. Por sua vez, os botões do InlineKeyboardMarkup são especificados através de arrays do objeto InlineKeyboardButton, o qual contém o texto e outros parâmetros.

Eu sei que a definição é meio confusa, mas no código tudo ficará mais claro! (Pelo menos, é o que eu espero kkk)

Com a definição esclarecida podemos partir para a codificação. Logo a seguir está o trecho de código que deve ser utilizado para que um Inline Keyboard seja criado:

Como é possível ver no código acima, para se implementar um Inline Keyboard é preciso criar um campo reply_markup contendo um inline_keyboard como parâmetro. Como mencionei anteriormente, para cada linha do inline_keyboard é necessário um novo array. Além disso, inserido no array de cada linha, deve ser criado um array para cada botão. O botão, na forma mais simples, é constituído por um parâmetro text onde é definido o texto e outro url contendo o link a ser acessado no evento do clique.

A ideia do trecho de código citado acima foi gerar um teclado onde o usuário pudesse acessar os resultados jogos da loteria diretamente no site do G1. Dessa forma, o Inline Keyboard gerado terá duas linhas e cada linha terá dois botões que redirecionam o usuário para a página do respectivo resultado.

Com o teclado codificado, podemos inseri-lo no método sendMessage, o qual, como vimos nos posts anteriores, é usado para enviar a mensagem de resposta ao usuário. Sendo assim, o código fica da seguinte maneira:

Feito isso, o código final do bot, incluindo o Inline Keyboard, fica da seguinte forma:

Agora, com tudo pronto, podemos testar o nosso bot!

Para testar o bot, primeiro acesse https://telegram.me/loteriascaixabot e digite “g1”. Ao receber a mensagem, o bot irá responder com o novo teclado, como mostra a imagem abaixo:

telegram_inline_keyboard

Para visualizar o código-fonte completo do bot, acesse: Telegram Bot.

Qualquer dúvida, deixa um comentário.

4 Comment

  1. Renato says: Responder

    Depois que clicar em algum botão do inline_keyboard tem como remover os botões? Como?

    1. Luiz Marcus Luiz Marcus says: Responder

      E ae Renato, blz?
      Não achei nada mencionando remoção de botão na documentação da API. Mas você pode, assim que o usuário clicar num botão do inline_keyboard, enviar outro sem o botão que você deseja retirar. Não sei se dessa forma te ajuda, mas é uma possibilidade. =]

  2. Jhony Max says: Responder

    Luiz Marcos blz ? Preciso urgente dessa ajuda.. to fazendo um bot baseado no script que vc criou do bot Loteria (que ficou ótimo) , mas agr estou usando inline keyborard (no msm script) e preciso de retornos ( callback_query ) nesses botões, ja pesquisei e ta dificil achar algo que se adapta ao seu código.. poderia me ajudar ou criar um post sobre seguindo os posts ja feito..?
    aguardando resposta, obg..

    1. Luiz Marcus Luiz Marcus says: Responder

      E ae Jhony, blz?
      Eu não quis que o post ficasse muito longo, por isso não coloquei um exemplo com callback. xD

      Mas para resolver a sua dúvida e outras parecidas que possam surgir, eu criei um Gist no Github com um código de exemplo:
      https://gist.github.com/luizmarcus/06c182ec8a084a3f0d7adae18b79f76e

      Além disso, no Gist abaixo tem um exemplo do JSON retornado no callback:
      https://gist.github.com/luizmarcus/78f6e60dd49ba12b80d46bffae240600

      Boa sorte!

Deixe uma resposta