Enviando e Recebendo Imagens através de um Bot para o Telegram

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.

Deixe um comentário