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
Platformonafhankelijk: kan worden gebruikt op Windows, Android, iOS, MacOS, Linux...
Eenvoudig te gebruiken: gebruikt JSON-berichten om te communiceren tussen toepassing en telegram.
Hoge prestaties: In de Telegram Bot API verwerkt elke TDLib-instantie meer dan 24.000 bots.
Consistent: TDLib garandeert dat alle updates in de juiste volgorde worden bezorgd.
Betrouwbaar: TDLib blijft stabiel op trage en onbetrouwbare internetverbindingen.
Secure: All local data is encrypted using a user-provided encryption key.
Volledig asynchroon: Verzoeken aan TDLib blokkeren elkaar niet. Reacties worden verzonden wanneer ze beschikbaar zijn.
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:
C:\Program Files (x86)\Embarcadero\Studio\<IDE Version>\lib\iosDevice64\debug
C:\Program Files (x86)\Embarcadero\Studio\<IDE Version>\lib\iosDevice64\release
Om een API-id te verkrijgen en uw eigen applicatie te ontwikkelen met de Telegram API, moet u het volgende doen:
Meld u aan voor Telegram via een willekeurige applicatie.
Log in op uw Telegram-kern: https://my.telegram.org.
Ga naar API-ontwikkelingstools en vul het formulier in.
U ontvangt basisadressen evenals de parameters api_id en api_hash die vereist zijn voor gebruikersautorisatie.
Momenteel kan elk nummer slechts één api_id eraan gekoppeld hebben.
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:
PhoneNumber: als u inlogt als gebruiker, moet u uw telefoonnummer instellen (met internationale code), voorbeeld: +34699123456
BotToken: als u zich aanmeldt als een bot, stelt u uw token in deze eigenschap in (zoals verstrekt door Telegram).
DatabaseDirectory: hiermee kunt u opgeven waar de tdlib-database zich bevindt. Laat leeg om de standaardconfiguratie te gebruiken.
De volgende parameters kunnen worden geconfigureerd:
ApplicationVersion: applicatieversie, voorbeeld: 1.0
DeviceModel: apparaatmodel, voorbeeld: desktop
LanguageCode: taalcode van de gebruiker, voorbeeld: nl.
SystemVersion: versie van het besturingssysteem, voorbeeld: windows.
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;
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.
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:
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:
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:
|
| 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"}');
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.
MyId: retourneert het gebruikersidentificator van de huidige gebruiker.
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;