API Telegram

Telegram

 

O Telegram oferece dois tipos de APIs. Uma é a Bot API, que permite criar programas que usam Bots e HTTPs como protocolo. A Telegram API e TDLib permitem que você construa clientes Telegram personalizados e é muito mais poderosa que a Bot API.

 

O sgcWebSockets suporta o TDLib através da biblioteca tdjson, o que significa que você pode construir seu próprio cliente Telegram. O TDLib cuida de todos os detalhes de implementação de rede, criptografia e armazenamento local de dados. O TDLib suporta todos os recursos do Telegram.

 

TDLib (Telegram Database Library) Advantages

 

 

Configuração

Windows

 

O TDLib requer outras bibliotecas de terceiros: OpenSSL e ZLib. Essas bibliotecas devem ser implantadas com a biblioteca tdjson.

 

* As versões para Windows requerem o VCRuntime, que pode ser baixado da Microsoft: https://www.microsoft.com/en-us/download/details.aspx?id=52685, Se após a instalação o problema persistir, tente copiar as seguintes dll na mesma pasta onde sua aplicação está localizada: VCRUNTIME140.dll e VCRUNTIME140_1.dll.

 

Copie as seguintes bibliotecas para o mesmo diretório onde sua aplicação está localizada:

 

Windows 32 Windows 64
tdjson.dll tdjson.dll
libcrypto-1_1.dll libcrypto-1_1-x64.dll
libssl-1_1.dll libssl-1_1-x64.dll
zlib1.dll zlib1.dll

 

 

OSX64

 

Implante a biblioteca libtdjson.dylib no seu dispositivo e você pode definir onde a biblioteca está utilizando SetTDJsonPath, exemplo:

 

se você implantar em "Contents\MacOS\", deve definir o caminho na pasta TPath.GetDirectoryName(ParamStr(0)).

 

OSXARM64

 

Implante a biblioteca libtdjson.dylib no seu dispositivo e você pode definir onde a biblioteca está utilizando SetTDJsonPath, exemplo:

 

se você implantar em "Contents\MacOS\", deve definir o caminho na pasta TPath.GetDirectoryName(ParamStr(0)).

 

Linux64

 

Implante a biblioteca libtdjson.so no seu dispositivo e defina o caminho da biblioteca chamando o método SetTDJsonPath.

 

Android

 

Implante a biblioteca libtdjsonandroid.so no seu dispositivo. Exemplo: se você implantar uma biblioteca Android64, defina RemotePath em Project/Deployment como "library\lib\arm64-v8a\". Se for Android32, defina RemotePath como "library\lib\armeabi-v7a\"

 

iOS64

 

Copie a biblioteca libtdjson.a para estes diretórios:

 

 

Criando sua aplicação Telegram

Para obter um API id e desenvolver sua própria aplicação usando a Telegram API, você precisa fazer o seguinte:

 

 

Esses valores devem ser definidos na propriedade Telegram.API do componente Telegram. Para autenticar, você pode autenticar como usuário ou como bot; há 2 propriedades que você pode definir para fazer login no Telegram:

 

 

Os seguintes parâmetros podem ser configurados:

 

 

Opcionalmente, você pode configurar o caminho onde a biblioteca tdjson está localizada utilizando o método SetTDJsonPath. Basta passar o caminho antes de iniciar uma nova sessão telegram.

 

Uma vez que você tenha configurado o Componente Telegram, pode definir a propriedade Active como true e o programa tentará conectar ao Telegram.

 

Código de Exemplo


oTelegram := TsgcTDLib_Telegram.Create(nil);
oTelegram.Telegram.API.ApiHash := 'your api hash';
oTelegram.Telegram.API.ApiId := 'your api id';
oTelegram.PhoneNumber := 'your phone number';
oTelegram.ApplicationVersion := '1.0';
oTelegram.DeviceModel := 'Desktop';
oTelegram.LanguageCode := 'en';
oTelegram.SystemVersion := 'Windows';
oTelegram.Active := true;

 

Autorização

Há dois eventos que podem ser chamados pela biblioteca para obter um Código de Autenticação (entregue no aplicativo do Telegram, não por SMS) ou para fornecer uma senha.

 

OnAuthenticationCode

 

Este evento é chamado quando o Telegram envia um Código de Autorização para a Aplicação Telegram e o usuário deve copiar esse código e definir no argumento Code deste evento.

 


procedure OnAuthenticationCode(Sender: TObject; var Code: string);
begin
  Code := InputBox('Telegram Code', 'Introduce code', '');
end;

 

No Android, o inputbox não bloqueia a thread, então, em vez de retornar o valor introduzido pelo usuário no parâmetro Code, use o método SetAuthenticationCode para definir o valor do código.

 


procedure OnAuthenticationCode(Sender: TObject; var Code:string);
begin
  InputBox('Telegram', 'Introduce Telegram Code', '',
    procedure(const AResult: TModalResult; const AValue: string)
    begin
      sgcTelegram.SetAuthenticationCode(AValue);
    end
    );
end;

 

OnAuthenticationPassword

 

Este evento é chamado quando o Telegram exige que o usuário defina uma senha.

 

 

Status de Autorização

Uma vez iniciada a autorização, você pode verificar o status da autorização no evento OnAuthorizationStatus; este evento é chamado toda vez que há uma mudança no status da autorização. Alguns valores de Status são:

 

 

Connection Status

Uma vez que a conexão tenha começado, você pode verificar o status da conexão no evento OnConnectionStatus; este evento é chamado toda vez que há uma mudança no status da conexão. Alguns valores de Status são:

 

 

Métodos Principais

O Componente da API TsgcTDLib_Telegram suporta vários métodos do Telegram, encontre abaixo os mais usados.

 

Method Parâmetros Descrição
SendTextMessage

aChatId: Id do Chat para o qual a mensagem será enviada aText: Texto da Mensagem.

InlineKeyboard: Botões opcionais (somente bots).

Envia uma Mensagem de Texto para um Chat
SendRichTextMessage

aChatId: Id do Chat para o qual a mensagem será enviada aText: Texto da Mensagem.

InlineKeyboard: Botões opcionais (somente bots).

Envia uma mensagem de Rich Text para um Chat. Sintaxe Markdown:
  • Negrito: **bold**
  • Itálico: __italic__
  • Tachado: --strike--
  • Sublinhado: ~~underline~~
  • Code: ##code##
SendDocumentMessage aChatId: Id do Chat ao qual a mensagem será enviada aFilePath: caminho completo do arquivo do documento aInlineKeyboard: Botões opcionais (apenas bots). Envia um Documento a um Chat.
SendPhotoMessage

aChatId: Id do Chat para o qual a mensagem será enviada aFilePath: caminho completo do arquivo da foto

Width: largura da foto.

Height: largura da foto.

InlineKeyboard: Botões opcionais (somente bots).

Envia uma Foto para um Chat.
SendVideoMessage

aChatId: Id do Chat para o qual a mensagem será enviada aFilePath: caminho completo do arquivo de vídeo aWidth: largura do vídeo.

Height: largura do vídeo.

aDuration: duração do vídeo em segundos.

aInlineKeyboard: Botões opcionais (somente bots).

Envia um Vídeo a um Chat.
SendInvoiceMessage

aChatId: Id do Chat para o qual a mensagem será enviada aInvoice: Texto da Mensagem.

aInlineKeyboard: Botões opcionais (somente bots).

Envia uma Invoice (disponível apenas quando é um Bot e em Canais Privados).
EditTextMessage

aChatId: Id do Chat ao qual a mensagem será enviada

aMessageId: Id da Mensagem a modificar

Text: Texto da Mensagem.

InlineKeyboard: Botões opcionais (somente bots).

ShowKeyboard: Botões opcionais (apenas bots).

Edita o texto de uma mensagem (ou o texto de uma mensagem de jogo)
AddChatMember aChatId: Id do Chat ao qual a mensagem será enviada aUserId: Identificador do usuário. aForwardLimit: O número de mensagens anteriores do chat a serem encaminhadas ao novo membro; até 100. Ignorado para supergrupos e canais. Adiciona um novo membro a um chat. Membros não podem ser adicionados a chats privados ou secretos. Os membros não serão adicionados até que o estado do chat tenha sido sincronizado com o servidor.
AddChatMembers aChatId: Id do Chat para o qual a mensagem será enviada aUserIds: Identificadores dos usuários a serem adicionados ao chat. Adiciona múltiplos novos membros a um chat. Atualmente esta opção só está disponível para supergrupos e canais. Esta opção não pode ser utilizada para entrar em um chat. Os membros não podem ser adicionados a um canal se ele tiver mais de 200 membros. Os membros não serão adicionados até que o estado do chat tenha sido sincronizado com o servidor.
GetChatMember aChatId: Identificador do Chat. aUserId: Identificador do Usuário. Retorna informações sobre um único membro de um chat.
GetBasicGroupFullInfo aGroupId: Basic Group Identifier Retorna informações completas sobre um grupo básico pelo seu identificador.
GetSupergroupMembers

aSuperGroupId: Identificador do supergrupo ou canal.

aSupergroupMembersFilter: O tipo de usuários a serem retornados. Por padrão null aOffset: Número de usuários a serem ignorados.

aLimit: O número máximo de usuários a serem retornados; até 200.

Retorna informações sobre membros ou usuários banidos em um supergrupo ou canal.
JoinChatByInviteLink aLink: Invite link a importar; Usa um link de convite para adicionar o usuário atual ao chat, se possível. O novo membro não será adicionado até que o estado do chat tenha sido sincronizado com o servidor.
CreateNewSecretChat aUserId: Identificador do usuário. Cria um novo secret chat.
CreateNewBasicGroupChat aUserIds: Identificadores dos usuários a serem adicionados ao chat. aTitle: Título do novo grupo básico Cria um novo grupo básico
CreateNewSupergroupChat

aTitle: Título do novo SuperGrupo

aIsChannel: True, se um chat de canal deve ser criado. aDescription: Descrição do Chat.

Cria um novo supergrupo ou canal.
CreatePrivateChat

aUserId: Identificador do usuário.

aForce: Se true, o chat será criado sem requisição de rede. Neste caso, todas as informações sobre o chat, exceto seu tipo, título e foto, podem estar incorretas

Retorna um chat existente correspondente a um determinado usuário
GetChats aOffsetOrder: Ordem dos chats a partir da qual retornar os chats aOffsetChatId: Identificador do chat a partir do qual retornar os chats aLimit: O número máximo de chats a serem retornados. Retorna uma lista ordenada de chats. Os chats são ordenados pelo par (order, chat_id) em ordem decrescente (não pode ser utilizado quando logado como Bot)
GetChat aChatId: Identificador do chat Retorna informações sobre um chat pelo seu identificador
GetChatHistory

aChatId: Identificador do Chat

aFromMessageId: Identificador da mensagem a partir da qual o histórico deve ser buscado; use 0 para obter resultados a partir da última mensagem.

aOffset: Especifique 0 para obter resultados a partir exatamente do from_message_id ou um offset negativo de até 99 para obter adicionalmente algumas mensagens mais recentes.

aLimit:O número máximo de mensagens a serem retornadas

Retorna as mensagens em um chat. As mensagens são retornadas em ordem cronológica inversa
GetUser aUserId: Identificador do Usuário Retorna informações sobre um usuário pelo seu identificador.
AddProxyHTTP

aServer: Nome do servidor do proxy.

aPort: Número da porta do proxy.

aUserName: Nome de usuário para fazer login; pode estar vazio.

aPassword: Senha para fazer login; pode ser vazia.

aHTTPOnly: Passe true, se o proxy suportar apenas requisições HTTP e não suportar conexões TCP transparentes via método HTTP CONNECT.

Adiciona um servidor proxy HTTP para requisições de rede. Pode ser chamado antes da autorização.
AddProxyMTProto

aServer: Nome do servidor do proxy.

aPort: Número da porta do proxy. aSecret: O segredo do proxy em codificação hexadecimal.

Adiciona um servidor proxy MTProto para requisições de rede. Pode ser chamado antes da autorização.
AddProxySocks5

aServer: Nome do servidor do proxy.

aPort: Número da porta do proxy.

aUserName: Nome de usuário para fazer login; pode estar vazio.

aPassword: Senha para login; pode estar vazia.

Adiciona um proxy Socks5 para requisições de rede. Pode ser chamado antes da autorização.
EnableProxy aId: ID do proxy Habilita um proxy. Apenas um proxy pode estar habilitado por vez. Pode ser chamado antes da autorização.
DisableProxy   Desabilita o proxy atualmente habilitado. Pode ser chamado antes da autorização.
RemoveProxy aId: ID do proxy Remove um servidor proxy. Pode ser chamado antes da autorização.
GetProxies   Retorna a lista de proxies que estão atualmente configurados. Pode ser chamado antes da autorização.
getChatSponsoredMessage aChatId: ID do chat Retorna a mensagem patrocinada a ser exibida em um chat; apenas para chats de canal. Retorna um erro 404 se não houver mensagem patrocinada no chat.
ViewMessage

aSponsorChatId: ID do Chat patrocinador

aMessageId: ID da mensagem

Informa ao TDLib que as mensagens estão sendo visualizadas pelo usuário. Muitas atividades úteis dependem de se as mensagens estão sendo visualizadas no momento ou não
Logout   Faz logout do Telegram.
TDLibSend aRequest: Requisição JSON. Envia qualquer Requisição no protocolo JSON.

 

 

Example How to send a Text Message


oTelegram := TsgcTDLib_Telegram.Create(nil);
oTelegram.Telegram.API.ApiHash := 'your api hash';
oTelegram.Telegram.API.ApiId := 'your api id';
oTelegram.PhoneNumber := 'your phone number';
oTelegram.Active := true;
...
oTelegram.SendTextMessage('1234', 'My First Message from sgcWebSockets');

Exemplo Como enviar um método não implementado

 

Você pode enviar qualquer mensagem JSON utilizando o método TDLibSend, exemplo: entrar em um chat do telegram.


oTelegram := TsgcTDLib_Telegram.Create(nil);
oTelegram.Telegram.API.ApiHash := 'your api hash';
oTelegram.Telegram.API.ApiId := 'your api id';
oTelegram.PhoneNumber := 'your phone number';
oTelegram.Active := true;
...
oTelegram.TDLibSend('{"@type": "joinChat", "chat_id": "1234"}');

 

 

Eventos

OnBeforeReadEvent

Este evento é chamado quando uma mensagem JSON é recebida pelo componente da Telegram API e ainda não foi processada. Defina a propriedade Handled como True se você processar este evento manualmente ou não quiser que o evento seja processado pelo componente. Você também pode utilizar este evento para registrar todas as mensagens.

 

OnMessageText

Este evento é chamado quando um Novo Texto de Mensagem foi recebido, leia o parâmetro MessageText para acessar as propriedades do texto da mensagem.

 

 

OnMessageDocument

Este evento é chamado quando uma Nova Mensagem de Documento é recebida. Acesse MessageDocument para ter acesso às propriedades do Document.

 

 

OnMessagePhoto

Este evento é chamado quando uma Nova Mensagem com Foto é recebida. Acesse MessagePhoto para obter acesso às propriedades da Foto.

 

 

OnVideoPhoto

Este evento é chamado quando uma Nova Video Message é recebida. Acesse MessageVideo para obter acesso às propriedades do Video.

 

 

OnMessageSponsored

Este evento é chamado quando uma Nova Mensagem Patrocinada foi recebida (após chamar o método getChatSponsoredMessage)

 

 

OnNewChat

Este evento é chamado quando um novo chat é recebido.

 

 

OnNewCallbackQuery

Este evento é chamado quando uma nova callback query é recebida; somente para bots.

 

 

OnEvent

Este evento é chamado quando um novo Event é recebido pelo Componente API. Pode ser utilizado para processar alguns eventos não implementados pelo Componente API.

 

 

OnException

Este evento é chamado se houver alguma exceção ao processar os dados da Telegram API.

 

Properties

MyId: retorna o Identificador de Usuário do usuário atual.

 

Exemplo de Código Completo

Verifique o seguinte exemplo de código que mostra como conectar à API do Telegram, pedir ao usuário para introduzir um Code (se exigido pela API do Telegram), enviar uma mensagem quando a conexão estiver pronta e registrar as Mensagens de Texto recebidas.


oTelegram := TsgcTDLib_Telegram.Create(nil);
oTelegram.Telegram.API.ApiHash := 'your api hash';
oTelegram.Telegram.API.ApiId := 'your api id';
oTelegram.PhoneNumber := 'your phone number';
oTelegram.ApplicationVersion := '1.0';
oTelegram.DeviceModel := 'Desktop';
oTelegram.LanguageCode := 'en';
oTelegram.SystemVersion := 'Windows';
oTelegram.Active := true;
procedure OnAuthenticationCode(Sender: TObject; var Code: string);
begin
  Code := InputBox('Telegram Code', 'Introduce code', '');
end;
procedure OnMessageText(Sender: TObject; MessageText: TsgcTelegramMessageText);
begin
  Log('Message Received: ' + MessageText.Text);
end;
procedure OnConnectionStatus(Sender: TObject; const Status: string);
begin
  if Status = 'connectionStateReady' then
    oTelegram.SendTextMessage('1234', 'Hello Telegram!');
end;