Consumindo APIs do Telegram
Automatize o envio e recebimento de mensagens no Telegram com o uso de BOT através de APIs
Pouco difundido, o Telegram é um concorrente do WhatsApp. Trata-se de um mensageiro mais conhecido (e bastante utilizado) pelos profissionais de TI. São inúmeras funcionalidades, dentre elas o uso de BOTs, aliado a facilidade do consumo de APIs para o envio automático de mensagens.
Um dos motivos da utilização de BOT no Telegram é a simplicidade de implementação. Basta criar uma conta BOT e efetuar requisições restfull, diferente da API do WhatsApp, onde requer um alto investimento de infraestrutura, além de ser reservado a médias e grandes empresas
Com o uso de um BOT no Telegram, você pode:
- Automatizar o atendimento ao cliente, retendo o máximo possível de clientes no atendimento eletrônico.
- Enviar uma galeria de fotos e vídeos aos usuários.
- Solicitar o número do telefone ou localização por GPS, num único botão de resposta.
- Realizar pesquisas anônimas/identificadas, única/múltipla escolha e temporizada.
- Entre outros...
Este artigo é apenas um resumo. Caso queira acompanhar todas as funcionalidades da API do Telegram, consulte a documentação completa no link https://core.telegram.org/bots/api/
Pré-requisitos
- Postman instalado » https://www.postman.com/
- Collection Postman » https://github.com/leobreda/telegram/blob/main/Telegram-bot.postman_collection.json
Criando uma conta BOT
- Localize o usuário @botFather
- Execute o comando /newbot
- Preencha informações como o nome do Bot, alias. Após o cadastro, anote o Token, pois será utilizado para o disparo das APIs.
- Localize o usuário BOT criado e dê um "alô", para gerar o primeiro contato com o BOT.
Configurando o Postman
Com a Collection carregada no Postman, ...
... crie um Environment com o título Telegram, contendo variável denominada telegram_token, com o respectivo Token fornecido pelo @BotFather.
getMe
É o primeiro método a ser consumido. Consiste em recuperar informações relacionadas ao BOT
GET https://api.telegram.org/bot{{telegram_token}}/getMe
Retorno:
{ "ok": true, "result": { "id": 17745479, "is_bot": true, "first_name": "leobreda_bot", "username": "leobreda_bot", "can_join_groups": true, "can_read_all_group_messages": false, "supports_inline_queries": true } }
Conversando com o BOT
Você como usuário, faça o primeiro contato com o BOT.
A justificativa é que a API do Telegram lhe enxerga como um ID numérico, e esta é a única forma que o BOT identifica você na base de usuários.
Agora é hora de descobrir o ID de seu usuário, via método /getUpdates ;-)
getUpdates
É aqui que você recupera os usuários que estão conversando com o BOT e suas respectivas mensagens.
GET https://api.telegram.org/bot{{telegram_token}}/getUpdates
Retorno:
{ "ok": true, "result": [ { "update_id": 280024629, "message": { "message_id": 368, "from": { "id": 590401, "is_bot": false, "first_name": "Leobreda", "username": "Leobreda", "language_code": "pt-br" }, "chat": { "id": 590401, "first_name": "Leobreda", "username": "Leobreda", "type": "private" }, "date": 1622502442, "text": "Olá" } }, { "update_id": 280024630, "message": { "message_id": 369, "from": { "id": 590401, "is_bot": false, "first_name": "Leobreda", "username": "Leobreda", "language_code": "pt-br" }, "chat": { "id": 590401, "first_name": "Leobreda", "username": "Leobreda", "type": "private" }, "date": 1622502755, "text": "Boa noite, querido BOT" } } ] }
O ID 590401 corresponde ao usuário no qual fez o contato com o BOT.
Para facilitarmos os testes, faremos o retorno no Postman armazenar automaticamente o parâmetro message.from.id na variável {{user_id}}, necessário em todos os cenários explorados por aqui.
var json = pm.response.json(); pm.environment.set("user_id", json.result[0].message.from.id);
E assim, além da criação da variável {{user_id}}, gravamos o ID retornado.
getChat
O método retorna informações do usuário {{user_id}} que entrou em contato com o BOT. Lembre-se que atualizamos a variável via Postman na resposta do método /getUpdates.
POST https://api.telegram.org/bot{{telegram_token}}/getChat { "chat_id":"{{user_id}}" }Retorno:
{ "ok": true, "result": { "id": 590401, "first_name": "Leobreda", "username": "Leobreda", "type": "private", "photo": { "small_file_id": "AQADAQADuacxG4nhhAMACFQ33ikABAIAA4nhhAMABF651OUdlKmf", "small_file_unique_id": "AQADVDfeKQAE", "big_file_id": "AQADAQADuacxG4nhhAMACFQ33ikABAMAA4nhhAMABF651OUdlKmf", "big_file_unique_id": "AQADVDfeKQAE" } } }
sendLocation
Possibilita o envio de determinada localização ao usuário.
POST https://api.telegram.org/bot{{telegram_token}}/sendLocation { "chat_id":"{{user_id}}", "latitude":-23.5578519, "longitude":-46.617725 }
sendContact
Envia o contato telefônico/eletrônico no formato VCARD.
O código presente na variável vcard precisa estar na mesma tabulação do código abaixo, caso contrário, as informações não aparecerão no contato.
POST https://api.telegram.org/bot{{telegram_token}}/sendContact { "chat_id":"{{user_id}}", "phone_number":"+55 11 99999-8047", "first_name":"Leonardo Breda", "vcard":"BEGIN:VCARD VERSION:2.1 ORG:Tech Lead @ Itau Unibanco TITLE:Itau Unibanco TEL;WORK;VOICE:+55 11 2345-6789 TEL;HOME;VOICE:+55 11 99999-8888 ADR;WORK;PREF:;;Av do Estado, 3355;São Paulo;SP EMAIL:leobreda@email.com.br REV:20080424T195243Z END:VCARD"}
sendMessage
Envio de mensagem texto e diferentes formas, seja texto puro, no formato HTML, entre outras coisas.
Texto puro
POST https://api.telegram.org/bot{{telegram_token}}/sendMessage { "chat_id":"{{user_id}}", "text":"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book." }
Texto com HTML
"parse_mode":"HTML"
POST https://api.telegram.org/bot{{telegram_token}}/sendMessage { "chat_id":"{{user_id}}", "parse_mode":"HTML", "text":"<b>bold</b>\n<strong>strong</strong>\n <i>italic</i>\n<em>em</em>\n<u>underline</u>\n<ins>ins</ins>\n<strike>strike</strike>\n<a href=\"https://www.leobreda.net/\">https://www.leobreda.net/</a>\n<code>code</code>\n<pre>pre lorem ipsum samet dolor</pre>" }
inline_keyboard
Criam botões abaixo da caixa de texto, que ao clicá-los o valor é retornado ao chat como texto.
"one_time_keyboard":true para que os botões desapareçam após o clique
POST https://api.telegram.org/bot{{telegram_token}}/sendMessage { "chat_id":"{{user_id}}", "text":"Bom dia! Tudo bem com você?", "reply_markup": { "one_time_keyboard":true, "resize_keyboard":true, "inline_keyboard": [[ { "text": "Sim" }, { "text": "Não" } ] ] } }
inline_keyboard + url
É possível transformar o botão em um link. Para isso:
"url":"https://leobreda.net"
POST https://api.telegram.org/bot{{telegram_token}}/sendMessage { "chat_id":"{{user_id}}", "parse_mode":"HTML", "text":"Clique no botão abaixo para abrir o site", "reply_markup": { "resize_keyboard":true, "inline_keyboard": [[ { "text": "Abrir site", "url":"http://leobreda.net" }]] } }
request_contact
Faz um pedido ao usuário para o envio do contato telefônico, ao clicar no botão "Enviar contato".
POST https://api.telegram.org/bot{{telegram_token}}/sendMessage { "chat_id":"{{user_id}}", "parse_mode":"HTML", "text":"Qual o seu telefone?", "reply_markup": { "one_time_keyboard":true, "resize_keyboard":true, "keyboard": [[ { "request_contact":true, "text": "Enviar contato", "callback_data": "aaaaa" }, { "text": "Não desejo informar", "callback_data": "bbbbb" } ] ] } }
request_location
Faz um pedido ao usuário para o envio de sua localização, ao clicar no botão "Enviar localização"
POST https://api.telegram.org/bot{{telegram_token}}/sendMessage { "chat_id":"{{user_id}}", "parse_mode":"HTML", "text":"Qual o seu telefone?", "reply_markup": { "one_time_keyboard":true, "resize_keyboard":true, "keyboard": [[ { "request_contact":true, "text": "Enviar contato" }, { "text": "Não desejo informar" } ] ] } }
sendPool
São mensagens no formato de enquete, com possibilidade de resposta anônima, identificada, única/múltipla escolha e cronometrada.
Enquete anônima
Onde o BOT não consegue identificar quem respondeu o quê...
"is_anonymous":true
POST https://api.telegram.org/bot{{telegram_token}}/sendPoll { "chat_id":"{{user_id}}", "question":"Qual o seu Estado?", "options":["Acre","Minas Gerais","Paraná","Rio de Janeiro","São Paulo","Tocantins"], "is_anonymous":true, "allows_multiple_answers":false }
Enquete identificada
Onde o BOT consegue identificar quem respondeu o quê...
"is_anonymous":false
POST https://api.telegram.org/bot{{telegram_token}}/sendPoll { "chat_id":"{{user_id}}", "question":"Qual a sua cor favorita?", "options":["Preto","Amarelo","Azul","Branco","Cinza","Roxo"], "is_anonymous":false, "allows_multiple_answers":false }
Múltipla escolha
Onde o usuário possa responder mais de uma resposta.
"allows_multiple_answers":true
POST https://api.telegram.org/bot{{telegram_token}}/sendPoll { "chat_id":"{{user_id}}", "question":"Selecione as suas frutas favoritas?", "options":["Mamão","Pera","Maçã","Banana","Abacaxi","Kiwi"], "allows_multiple_answers":true }
Única escolha
Apenas uma resposta é aceita.
"allows_multiple_answers":false
POST https://api.telegram.org/bot{{telegram_token}}/sendPoll { "chat_id":"{{user_id}}", "question":"Qual o seu sexo?", "options":["Masculino","Feminino"], "allows_multiple_answers":false }
Cronometrada
O usuário tem 60 segundos para responder. Caso ultrapasse o tempo para responder, a questão é encerrada.
"open_period":"60"
POST https://api.telegram.org/bot{{telegram_token}}/sendPoll { "chat_id":"{{user_id}}", "question":"Qual o seu seu dia preferido? Esta pergunta encerra em 60 segundos", "options":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"], "allows_multiple_answers":false, "open_period":"60" }
sendDocument
Envio de arquivos ZIP, PDF, XLS, DOC, etc
O parâmetro caption é opcional
POST https://api.telegram.org/bot{{telegram_token}}/sendDocument { "chat_id":"{{user_id}}", "document":"https://leobreda.net/download/lorem-ipsum.pdf", "caption":"Lorem Ipsum samet dolor" }
sendMediaGroup
Possibilita o envio de conteúdo multimídia (imagem ou vídeo).
O parâmetro media é um array, portanto, é possível passar mais de um arquivo em uma única requisição.
Envio de imagem
"type":"photo"
POST https://api.telegram.org/bot{{telegram_token}}/sendMediaGroup { "chat_id":"{{user_id}}", "media":[{"type":"photo","media":"https://telegram.org/img/t_logo.png"}] }
Envio de múltiplas imagens
POST https://api.telegram.org/bot{{telegram_token}}/sendMediaGroup { "chat_id":"{{user_id}}", "media":[{"type":"photo","media":"https://telegram.org/img/t_logo.png"}, {"type":"photo","media":"https://core.telegram.org/file/811140934/1/tbDSLHSaijc/fdcc7b6d5fb3354adf"}, {"type":"photo","media":"https://telegram.org/file/464001796/3/RuL3KG9PxoQ.32309.png/9492993f15dad7ef3c"}] }
Envio de vídeo
"type":"video"
POST https://api.telegram.org/bot{{telegram_token}}/sendMediaGroup { "chat_id":"{{user_id}}", "media":[{"type":"video","media":"https://leobreda.net/download/nodemcu-hello-world.mp4"}] }
Enfim, os métodos apresentados por aqui é apenas um resumo das principais funcionalidades disponibilizadas pela API do Telegram. A relação completa se encontra no link https://core.telegram.org/bots/api/