API Telegram

Telegram

 

Telegram biedt twee soorten API's: de Bot API waarmee u programma's kunt maken die Bots en HTTPs als protocol gebruiken. Telegram API en TDLib stellen u in staat aangepaste Telegram-clients te bouwen en zijn veel krachtiger dan de Bot API.

 

sgcWebSockets ondersteunt TDLib via de tdjson-bibliotheek, wat betekent dat u uw eigen Telegram-client kunt bouwen. TDLib verzorgt alle netwerkimplementatiedetails, versleuteling en lokale gegevensopslag. TDLib ondersteunt alle Telegram-functies.

 

TDLib (Telegram Database Library) voordelen

 

 

Configuratie

Windows

 

TDLib vereist andere externe bibliotheken: OpenSSL en ZLib. Deze bibliotheken moeten worden geïmplementeerd met de tdjson-bibliotheek.

 

* Windows-versies vereisen VCRuntime, dat kan worden gedownload van Microsoft: https://www.microsoft.com/en-us/download/details.aspx?id=52685. Als het probleem na de installatie aanhoudt, kopieer dan de volgende DLL naar dezelfde map waar uw toepassing staat: VCRUNTIME140.dll en VCRUNTIME140_1.dll.

 

Kopieer de volgende bibliotheken naar dezelfde map waar uw applicatie zich bevindt:

 

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

 

Implementeren de bibliotheek libtdjson.dylib to uw device and u kunt set where is de bibliotheek using SetTDJsonPath, example:

 

als u implementeert in "Contents\MacOS\", moet u het pad instellen in de map TPath.GetDirectoryName(ParamStr(0)).

 

OSXARM64

 

Implementeren de bibliotheek libtdjson.dylib to uw device and u kunt set where is de bibliotheek using SetTDJsonPath, example:

 

als u implementeert in "Contents\MacOS\", moet u het pad instellen in de map TPath.GetDirectoryName(ParamStr(0)).

 

Linux64

 

Implementeer de bibliotheek libtdjson.so op uw apparaat en stel het bibliotheekpad in door de methode SetTDJsonPath aan te roepen.

 

Android

 

Implementeer de bibliotheek libtdjsonandroid.so op uw apparaat. Voorbeeld: als u een Android64-bibliotheek implementeert, stel RemotePath in Project/Deployment in op "library\lib\arm64-v8a\". Als het Android32 is, stel RemotePath in op "library\lib\armeabi-v7a\"

 

iOS64

 

Kopieer de bibliotheek libtdjson.a naar deze mappen:

 

 

Uw Telegram-toepassing aanmaken

Om een API-id te verkrijgen en uw eigen applicatie te ontwikkelen met de Telegram API, moet u het volgende doen:

 

 

Deze waarden moeten worden ingesteld in de eigenschap Telegram.API van het Telegram-component. Om te authenticeren kunt u inloggen als gebruiker of als bot; er zijn 2 eigenschappen waarmee u kunt inloggen bij Telegram:

 

 

De volgende parameters kunnen worden geconfigureerd:

 

 

Optioneel kunt u het pad configureren waar de tdjson-bibliotheek zich bevindt met de methode SetTDJsonPath. Geef het pad door voordat u een nieuwe Telegram-sessie start.

 

Zodra u de Telegram-component heeft geconfigureerd, kunt u de eigenschap Active instellen op true en het programma zal proberen verbinding te maken met Telegram.

 

Voorbeeldcode


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;

 

Autorisatie

Er zijn twee gebeurtenissen die door de bibliotheek kunnen worden aangeroepen om een authenticatiecode op te halen (afgeleverd in de Telegram-applicatie, niet per sms) of om een wachtwoord op te geven.

 

OnAuthenticationCode

 

Deze gebeurtenis wordt aangeroepen wanneer Telegram een autorisatiecode stuurt naar de Telegram-applicatie en de gebruiker deze code moet kopiëren en instellen in het Code-argument van deze gebeurtenis.

 


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

 

In Android vergrendelt het invoervak de thread niet, dus in plaats van de waarde die door de gebruiker is ingevoerd terug te geven in de parameter Code, gebruikt u de methode SetAuthenticationCode om de codewaarde in te stellen.

 


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

 

Deze gebeurtenis wordt aangeroepen wanneer Telegram vereist dat de gebruiker een wachtwoord instelt.

 

 

Autorisatiestatus

Zodra de autorisatie is gestart, kunt u de status van autorisatie controleren via de gebeurtenis OnAuthorizationStatus; deze gebeurtenis wordt telkens aangeroepen wanneer de autorisatiestatus verandert. Enkele waarden van Status zijn:

 

 

Connection Status

Zodra de verbinding is gestart, kunt u de verbindingsstatus controleren via de gebeurtenis OnConnectionStatus. Deze gebeurtenis wordt gegenereerd elke keer dat er een statuswijziging is in de verbinding. Enkele statuswaarden zijn:

 

 

Hoofdmethoden

TsgcTDLib_Telegram API-component ondersteunt diverse Telegram-methoden; hieronder vindt u de meest gebruikte.

 

Methode Parameters Beschrijving
SendTextMessage

aChatId: Id van Chat waarnaar het bericht wordt verzonden aText: Tekst van het bericht.

InlineKeyboard: Optionele knoppen (alleen bots).

Sends a Text Message to a Chat
SendRichTextMessage

aChatId: Id van de chat waarnaar het bericht wordt verzonden aText: Tekst van het bericht.

InlineKeyboard: Optionele knoppen (alleen bots).

Stuurt een Rich Text-bericht naar een chat. Markdown-syntaxis:
  • Vet: **bold**
  • Cursief: __italic__
  • Doorhalen: --strike--
  • Onderstrepen: ~~underline~~
  • Code: ##code##
SendDocumentMessage aChatId: Id van de chat waarnaar het bericht wordt verzonden aFilePath: volledig bestandspad van het document aInlineKeyboard: Optionele knoppen (alleen bots). Verzendt een document naar een chat.
SendPhotoMessage

aChatId: Id van de chat waarnaar het bericht wordt verzonden aFilePath: volledig bestandspad van de foto

Width: breedte van foto.

Height: breedte van foto.

InlineKeyboard: Optionele knoppen (alleen bots).

Verzendt een foto naar een chat.
SendVideoMessage

aChatId: Id van Chat waarnaar het bericht wordt verzonden aFilePath: volledig bestandspad van video aWidth: breedte van video.

Height: breedte van de video.

aDuration: duur van video in seconden.

aInlineKeyboard: Optionele knoppen (alleen bots).

Verzendt een video naar een chat.
SendInvoiceMessage

aChatId: ID van de chat waarnaar het bericht wordt verzonden aInvoice: Tekst van het bericht.

aInlineKeyboard: Optionele knoppen (alleen bots).

Verstuurt een factuur (alleen beschikbaar wanneer het een bot is en in privékanalen).
EditTextMessage

aChatId: ID van de chat waarnaar het bericht wordt verzonden

aMessageId: ID van het te wijzigen bericht

Text: Tekst van het bericht.

InlineKeyboard: Optionele knoppen (alleen bots).

ShowKeyboard: Optionele knoppen (alleen bots).

Bewerkt de tekst van een bericht (of een tekst van een spelletjesbericht)
AddChatMember aChatId: Id van de chat waarnaar het bericht wordt verzonden aUserId: Identificator van de gebruiker. aForwardLimit: Het aantal eerdere berichten uit de chat dat wordt doorgestuurd naar het nieuwe lid; maximaal 100. Genegeerd voor supergroepen en kanalen. Voegt een nieuw lid toe aan een chat. Leden kunnen niet worden toegevoegd aan privé- of geheime chats. Leden worden niet toegevoegd totdat de chatstatus met de server is gesynchroniseerd.
AddChatMembers aChatId: Id van Chat waarnaar het bericht wordt verzonden aUserIds: Identifiers van de gebruikers die aan de chat worden toegevoegd. Voegt meerdere nieuwe leden toe aan een chat. Deze optie is momenteel alleen beschikbaar voor supergroepen en kanalen. Deze optie kan niet worden gebruikt om deel te nemen aan een chat. Leden kunnen niet worden toegevoegd aan een kanaal als het meer dan 200 leden heeft. Leden worden pas toegevoegd nadat de chatstatus is gesynchroniseerd met de server.
GetChatMember aChatId: Chat-identificatie. aUserId: Gebruikersidentificatie. Retourneert informatie over één lid van een chat.
GetBasicGroupFullInfo aGroupId: Basisgroepidentificator Retourneert volledige informatie over een basisgroep op basis van het identifier.
GetSupergroupMembers

aSuperGroupId: Identificator van de supergroep of het kanaal.

aSupergroupMembersFilter: Het type te retourneren gebruikers. Standaard null aOffset: Aantal te overslaan gebruikers.

aLimit: Het maximale aantal gebruikers dat wordt geretourneerd; maximaal 200.

Retourneert informatie over leden of verbannen gebruikers in een supergroep of kanaal.
JoinChatByInviteLink aLink: Uitnodigingslink om te importeren; Gebruikt een uitnodigingslink om de huidige gebruiker indien mogelijk aan de chat toe te voegen. Het nieuwe lid wordt pas toegevoegd nadat de chatstatus is gesynchroniseerd met de server.
CreateNewSecretChat aUserId: Identificator van de gebruiker. Maakt een nieuwe geheime chat aan.
CreateNewBasicGroupChat aUserIds: Identificatoren van de gebruikers die aan de chat moeten worden toegevoegd. aTitle: Titel van de nieuwe basisgroep Maakt een nieuwe basisgroep aan
CreateNewSupergroupChat

aTitle: Titel van de nieuwe SuperGroep

aIsChannel: True, als er een kanaalgesprek moet worden aangemaakt. aDescription: Chatbeschrijving.

Maakt een nieuwe supergroep of kanaal aan.
CreatePrivateChat

aUserId: Identifier van de gebruiker.

aForce: Als true, wordt de chat aangemaakt zonder netwerkverzoek. In dat geval kan alle informatie over de chat, behalve het type, de titel en de foto, onjuist zijn

Retourneert een bestaande chat voor een bepaalde gebruiker.
GetChats aOffsetOrder: Chatvolgorde van waaruit chats worden geretourneerd aOffsetChatId: Chat-identifier van waaruit chats worden geretourneerd aLimit: Het maximale aantal chats dat wordt geretourneerd. Retourneert een geordende lijst van chats. Chats worden gesorteerd op het paar (order, chat_id) in aflopende volgorde (kan niet worden gebruikt als ingelogd als Bot)
GetChat aChatId: Chat identifier Retourneert informatie over een chat op basis van zijn identificator
GetChatHistory

aChatId: Chat-identificator

aFromMessageId: Identifier van het bericht waarvanaf de geschiedenis moet worden opgehaald; gebruik 0 om resultaten vanaf het laatste bericht te krijgen.

aOffset: Geef 0 op om resultaten te verkrijgen exact vanaf de from_message_id of een negatieve offset tot 99 om ook enkele nieuwere berichten te verkrijgen.

aLimit:Het maximale aantal te retourneren berichten

Retourneert berichten in een chat. De berichten worden geretourneerd in omgekeerd chronologische volgorde
GetUser aUserId: Gebruikers-ID Retourneert informatie over een gebruiker via hun identificatie.
AddProxyHTTP

aServer: Servernaam van de proxy.

aPort: Nummer van de proxypoort.

aUserName: Gebruikersnaam voor aanmelding; kan leeg zijn.

aPassword: Wachtwoord voor aanmelding; mag leeg zijn.

aHTTPOnly: Geef true door als de proxy alleen HTTP-verzoeken ondersteunt en geen transparante TCP-verbindingen via de HTTP CONNECT-methode ondersteunt.

Voegt een HTTP-proxyserver toe voor netwerkverzoeken. Kan worden aangeroepen vóór autorisatie.
AddProxyMTProto

aServer: Servernaam van de proxy.

aPort: Nummer van de proxypoort. aSecret: Het geheim van de proxy in hexadecimale codering.

Voegt een MTProto-proxyserver toe voor netwerkverzoeken. Kan worden aangeroepen vóór autorisatie.
AddProxySocks5

aServer: Servernaam van de proxy.

aPort: Nummer van de proxypoort.

aUserName: Gebruikersnaam voor aanmelding; kan leeg zijn.

aPassword: Wachtwoord om in te loggen; mag leeg zijn.

Voegt een Socks5-proxyserver toe voor netwerkaanvragen. Kan worden aangeroepen vóór autorisatie.
EnableProxy aId: ID van proxy Schakelt een proxy in. Er kan slechts één proxy tegelijk worden ingeschakeld. Kan worden aangeroepen vóór autorisatie.
DisableProxy   Schakelt de momenteel ingeschakelde proxy uit. Kan vóór autorisatie worden aangeroepen.
RemoveProxy aId: ID van proxy Verwijdert een proxyserver. Kan worden aangeroepen vóór autorisatie.
GetProxies   Retourneert een lijst van proxy's die momenteel zijn ingesteld. Kan worden aangeroepen vóór autorisatie.
getChatSponsoredMessage aChatId: ID van de chat Retourneert gesponsord bericht dat in een chat moet worden weergegeven; alleen voor kanaalgesprekken. Retourneert een 404-fout als er geen gesponsord bericht in de chat is.
ViewMessage

aSponsorChatId: ID van de sponsor-chat

aMessageId: ID van het bericht

Informeert TDLib dat berichten door de gebruiker worden bekeken. Veel nuttige activiteiten zijn afhankelijk van of de berichten momenteel worden bekeken of niet
Uitloggen   Uitloggen bij Telegram.
TDLibSend aRequest: JSON-verzoek. Stuur een willekeurig verzoek in JSON-protocol.

 

 

Voorbeeld van het verzenden van een tekstbericht


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');

Voorbeeld hoe een niet geïmplementeerde methode te verzenden

 

U kunt elk JSON-bericht verzenden met de methode TDLibSend, bijvoorbeeld: deelnemen aan een Telegram-chat.


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"}');

 

 

Gebeurtenissen

OnBeforeReadEvent

Dit event wordt aangeroepen wanneer een JSON-bericht door het Telegram API-component wordt ontvangen en nog niet is verwerkt. Stel de Handled-property in op True als u dit event handmatig verwerkt of niet wilt dat het event door het component wordt verwerkt. U kunt dit event ook gebruiken om alle berichten te loggen.

 

OnMessageText

Deze gebeurtenis wordt aangeroepen wanneer een nieuw berichttekst is ontvangen; lees de parameter MessageText om toegang te krijgen tot de berichtteksteigenschappen.

 

 

OnMessageDocument

Deze gebeurtenis wordt aangeroepen wanneer een nieuw documentbericht wordt ontvangen. Gebruik MessageDocument om toegang te krijgen tot documenteigenschappen.

 

 

OnMessagePhoto

Dit evenement wordt aangeroepen wanneer een nieuw fotobericht wordt ontvangen. Gebruik MessagePhoto om toegang te krijgen tot foto-eigenschappen.

 

 

OnVideoPhoto

Deze gebeurtenis wordt aangeroepen wanneer een nieuw videobericht wordt ontvangen. Toegang tot MessageVideo om toegang te krijgen tot video-eigenschappen.

 

 

OnMessageSponsored

Deze gebeurtenis wordt aangeroepen wanneer een nieuw gesponsord bericht is ontvangen (na het aanroepen van de methode getChatSponsoredMessage)

 

 

OnNewChat

Deze gebeurtenis wordt aangeroepen wanneer een nieuwe chat wordt ontvangen.

 

 

OnNewCallbackQuery

Dit event wordt aangeroepen wanneer er een nieuwe inkomende callback-query wordt ontvangen; alleen voor bots.

 

 

OnEvent

Deze gebeurtenis wordt aangeroepen wanneer een nieuwe Gebeurtenis wordt ontvangen door het API-component. Kan worden gebruikt om sommige gebeurtenissen te verwerken die niet zijn geïmplementeerd door het API-component.

 

 

OnException

Deze gebeurtenis wordt aangeroepen als er een uitzondering optreedt bij het verwerken van Telegram API-gegevens.

 

Eigenschappen

MyId: retourneert het gebruikersidentificator van de huidige gebruiker.

 

Volledig codevoorbeeld

Bekijk het volgende codevoorbeeld dat laat zien hoe u verbinding maakt met de Telegram API, de gebruiker vraagt een code in te voeren (indien vereist door de Telegram API), een bericht verzendt wanneer de verbinding gereed is en ontvangen tekstberichten logt.


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;