Leobreda.net

Web, .Net,
SQL, Cloud...

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:

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

Criando uma conta BOT

  1. Localize o usuário @botFather
  2. Execute o comando /newbot
  3. Preencha informações como o nome do Bot, alias. Após o cadastro, anote o Token, pois será utilizado para o disparo das APIs.
  4. 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/




Acessar todos os artigos »