No terceiro post sobre como desenvolver um bot para o Telegram, eu demonstrei como fazer com que o bot respondesse aos comandos enviados pelo usuário de forma automática, fazendo uso do Webhook do Telegram. Porém, apesar de estar finalizado e funcionando, existem muitas outras funcionalidades que podem ser acrescentadas a ele. Sendo assim, neste post irei mostrar como implementar o envio e recebimento de uma foto pelo bot.
Vou utilizar, como base para implementação do exemplo deste post, o mesmo código do bot que responde com o resultado da loteria de acordo com a solicitação do usuário (Ou seja, o exemplo de sempre kkk). Lembrando que esse código já foi usado como exemplo em outros posts sobre bots para o Telegram aqui do blog. Dessa forma, iremos modificar o código de modo que o bot, ao receber uma imagem enviada pelo usuário, responda com a mesma imagem recebida.
Sabendo disso, vamos ao código!
Inicialmente, vamos implementar o recebimento da imagem pelo bot. Essa funcionalidade consiste em fazer o bot obter a imagem enviada pelo usuário por meio da API do Telegram. Para isso, precisamos entender qual é a mensagem recebida pelo bot quando o usuário realiza o envio da imagem através do aplicativo do Telegram. Um exemplo dessa mensagem no formato JSON pode ser visto abaixo:
Como é possível notar no código acima, na mensagem existe um atributo photo
. Esse atributo é constituído por um array com três objetos. Cada um desses objetos representa a imagem enviada pelo usuário em um determinado tamanho, uma vez que o Telegram realiza a compressão dessa imagem. Além disso, cada um desses objetos possui um atributo file_id
. No file_id fica armazenado o identificador da imagem gerado pelo servidor do Telegram ao recebê-la e é ele que iremos utilizar para obter a imagem e retorna-la como resposta ao usuário.
É importante observar também que a mensagem possui um atributo caption
, no qual fica armazenada a legenda da imagem, caso tenha sido digitada pelo usuário.
Agora que já sabemos com identificar a imagem no servidor do Telegram, o próximo passo é entender o método sendPhoto da API. A tabela abaixo exibe os principais parâmetros desse método:
No método sendPhoto
, os parâmetros chat_id
e photo
são obrigatórios, como mostra a tabela acima. O parâmetro photo
é onde atribuímos a imagem que será enviada pelo bot ao usuário. Esse parâmetro aceita a imagem no formato de URL simples, o file_id
(Aquele atributo que vimos anteriormente, o qual é obtido na mensagem recebida) ou via POST HTTP. Para o exemplo deste post, usaremos o file_id
, porém este pode ser substituído, com a finalidade de teste, por qualquer URL de imagem, por exemplo. Além disso, o parâmetro caption
do método sendPhoto
pode ser usado para o envio de um texto junto com a imagem.
Com o entendimento de como obter o file_id
e da estrutura do sendPhoto
, já podemos customizar o nosso código de exemplo do bot para receber a mensagem do usuário, extrair o file_id
e responder com a imagem enviada pelo usuário.
No trecho de código acima é feita uma checagem para verificar se existe uma imagem associada à mensagem (Linha 3). Caso exista, será obtido o objeto contido no array do atributo photo
que representa a imagem recebida no tamanho original (Linha 4). Feito isso, o método sendPhoto
é executado recebendo como parâmetro o chat_id
da conversa, o file_id
da imagem e o caption
recibo na mensagem (Linha 6).
Para ficar mais claro, abaixo é possível visualizar o código completo e já modificado do bot:
Com o bot pronto, o funcionamento será semelhante ao exposto a seguir:
Bom, é isso! =)
Para testar o bot desenvolvido neste post, procure por “loteriascaixabot” no app do Telegram ou acesse o seguinte link: https://telegram.me/loteriascaixabot. Ao iniciar uma conversa com o bot, basta enviar uma imagem.
Para visualizar o código-fonte do bot que foi desenvolvido neste tutorial, acesse: Telegram Bot.
O bot desenvolvido neste tutorial foi hospedado na Umbler.
Ficou com alguma dúvida? Então, deixa um comentário.
e para repetir varias imagens e videos juntos na mesma mensagem?
Olá,
Dá uma olhada no método
sendMediaGroup
da API do Telegram:https://core.telegram.org/bots/api#sendmediagroup