Telegram bietet zwei Arten von APIs an, eine ist die Bot API, mit der Sie Programme erstellen können, die Bots und HTTPs als Protokoll verwenden. Telegram API und TDLib ermöglichen es Ihnen, angepasste Telegram-Clients zu erstellen, und sind wesentlich leistungsfähiger als die Bot API.
sgcWebSockets unterstützt TDLib über die tdjson-Bibliothek, was bedeutet, dass Sie Ihren eigenen Telegram-Client erstellen können. TDLib kümmert sich um alle Details der Netzwerkimplementierung, Verschlüsselung und lokale Datenspeicherung. TDLib unterstützt alle Telegram-Funktionen.
TDLib (Telegram Database Library) – Vorteile
Plattformübergreifend: kann unter Windows, Android, iOS, MacOS, Linux... verwendet werden.
Einfach zu verwenden: verwendet JSON-Nachrichten zur Kommunikation zwischen Anwendung und Telegram.
Hochleistung: In der Telegram Bot API verwaltet jede TDLib-Instanz mehr als 24000 Bots.
Consistent: TDLib garantiert, dass alle Aktualisierungen in der richtigen Reihenfolge zugestellt werden.
Reliable: TDLib bleibt bei langsamen und unzuverlässigen Internetverbindungen stabil.
Secure: Alle lokalen Daten werden mit einem vom Benutzer bereitgestellten Verschlüsselungsschlüssel verschlüsselt.
Vollständig asynchron: Anfragen an TDLib blockieren sich nicht gegenseitig. Antworten werden gesendet, sobald sie verfügbar sind.
Windows
TDLib erfordert weitere Drittanbieter-Bibliotheken: OpenSSL und ZLib. Diese Bibliotheken müssen zusammen mit der tdjson-Bibliothek bereitgestellt werden.
* Windows-Versionen erfordern VCRuntime, das von Microsoft heruntergeladen werden kann: https://www.microsoft.com/en-us/download/details.aspx?id=52685. Wenn das Problem nach der Installation weiterhin besteht, versuchen Sie, die folgenden DLLs in denselben Ordner zu kopieren, in dem sich Ihre Anwendung befindet: VCRUNTIME140.dll und VCRUNTIME140_1.dll.
Kopieren Sie die folgenden Bibliotheken in dasselbe Verzeichnis, in dem sich Ihre Anwendung befindet:
| 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
Stellen Sie die Bibliothek libtdjson.dylib auf Ihrem Gerät bereit, und Sie können mit SetTDJsonPath festlegen, wo sich die Bibliothek befindet, Beispiel:
Wenn Sie nach "Contents\MacOS\" bereitstellen, müssen Sie den Pfad im Ordner TPath.GetDirectoryName(ParamStr(0)) festlegen.
OSXARM64
Stellen Sie die Bibliothek libtdjson.dylib auf Ihrem Gerät bereit, und Sie können mit SetTDJsonPath festlegen, wo sich die Bibliothek befindet, Beispiel:
Wenn Sie nach "Contents\MacOS\" bereitstellen, müssen Sie den Pfad im Ordner TPath.GetDirectoryName(ParamStr(0)) festlegen.
Linux64
Stellen Sie die Bibliothek libtdjson.so auf Ihrem Gerät bereit und legen Sie den Bibliothekspfad durch Aufruf der Methode SetTDJsonPath fest.
Android
Stellen Sie die Bibliothek libtdjsonandroid.so auf Ihrem Gerät bereit. Beispiel: Wenn Sie eine Android64-Bibliothek bereitstellen, setzen Sie RemotePath in Project/Deployment auf "library\lib\arm64-v8a\". Bei Android32 setzen Sie RemotePath auf "library\lib\armeabi-v7a\"
iOS64
Kopieren Sie die Bibliothek libtdjson.a in diese Verzeichnisse:
C:\Program Files (x86)\Embarcadero\Studio\<IDE Version>\lib\iosDevice64\debug
C:\Program Files (x86)\Embarcadero\Studio\<IDE-Version>\lib\iosDevice64\release
Um eine API-ID zu erhalten und Ihre eigene Anwendung mit der Telegram-API zu entwickeln, müssen Sie Folgendes tun:
Melden Sie sich mit einer beliebigen Anwendung bei Telegram an.
Melden Sie sich bei Ihrem Telegram-Core an: https://my.telegram.org.
Gehen Sie zu API development tools und füllen Sie das Formular aus.
Sie erhalten grundlegende Adressen sowie die Parameter api_id und api_hash, die für die Benutzerautorisierung erforderlich sind.
Im Moment kann jede Nummer nur eine mit ihr verbundene api_id haben.
Diese Werte müssen in der Eigenschaft Telegram.API der Telegram-Komponente gesetzt werden. Zur Authentifizierung können Sie sich als Benutzer oder als Bot anmelden; es gibt 2 Eigenschaften, die Sie zum Anmelden bei Telegram setzen können:
PhoneNumber: Wenn Sie sich als Benutzer anmelden, müssen Sie Ihre Telefonnummer (mit internationaler Vorwahl) festlegen, Beispiel: +34699123456
BotToken: wenn Sie sich als Bot anmelden, setzen Sie Ihr Token in dieser Eigenschaft (wie von Telegram bereitgestellt).
DatabaseDirectory: ermöglicht es Ihnen anzugeben, wo sich die tdlib-Datenbank befindet. Lassen Sie es leer, und es wird die Standardkonfiguration verwendet.
Die folgenden Parameter können konfiguriert werden:
ApplicationVersion: Anwendungsversion, Beispiel: 1.0
DeviceModel: Gerätemodell, Beispiel: desktop
LanguageCode: Sprachcode des Benutzers, Beispiel: en.
SystemVersion: Version des Betriebssystems, Beispiel: windows.
Optional können Sie den Pfad konfigurieren, unter dem sich die tdjson-Bibliothek befindet, mit der Methode SetTDJsonPath. Übergeben Sie einfach den Pfad, bevor Sie eine neue Telegram-Sitzung starten.
Sobald Sie die Telegram-Komponente konfiguriert haben, können Sie die Eigenschaft Active auf true setzen, und das Programm versucht, sich mit Telegram zu verbinden.
Beispielcode
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;
Es gibt zwei Ereignisse, die von der Bibliothek aufgerufen werden können, um einen Authentifizierungscode (in der Telegram-Anwendung zugestellt, nicht per SMS) zu erhalten oder ein Passwort bereitzustellen.
OnAuthenticationCode
Dieses Ereignis wird aufgerufen, wenn Telegram einen Autorisierungscode an die Telegram-Anwendung sendet und der Benutzer diesen Code kopieren und im Argument Code dieses Ereignisses setzen muss.
procedure OnAuthenticationCode(Sender: TObject; var Code: string);
begin
Code := InputBox('Telegram Code', 'Introduce code', '');
end;
In Android sperrt inputbox den Thread nicht, daher verwenden Sie anstelle der Rückgabe des vom Benutzer eingegebenen Werts im Parameter Code die Methode SetAuthenticationCode, um den Code-Wert festzulegen.
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
Dieses Ereignis wird aufgerufen, wenn Telegram verlangt, dass der Benutzer ein Passwort festlegt.
Sobald die Autorisierung gestartet wurde, können Sie den Status der Autorisierung im Ereignis OnAuthorizationStatus prüfen; dieses Ereignis wird jedes Mal aufgerufen, wenn sich der Autorisierungsstatus ändert. Einige Werte von Status sind:
Sobald die Verbindung gestartet wurde, können Sie den Verbindungsstatus über das Ereignis OnConnectionStatus prüfen; dieses Ereignis wird jedes Mal aufgerufen, wenn sich der Verbindungsstatus ändert. Einige Werte von Status sind:
Die API-Komponente TsgcTDLib_Telegram unterstützt mehrere Telegram-Methoden; nachfolgend finden Sie die am häufigsten verwendeten.
| Methode | Parameter | Beschreibung |
| SendTextMessage |
aChatId: ID des Chats, an den die Nachricht gesendet wird aText: Text der Nachricht. InlineKeyboard: Optionale Buttons (nur Bots). |
Sendet eine Textnachricht an einen Chat |
| SendRichTextMessage |
aChatId: ID des Chats, an den die Nachricht gesendet wird aText: Text der Nachricht. InlineKeyboard: Optionale Buttons (nur Bots). |
Sendet eine Rich-Text-Nachricht an einen Chat. Markdown-Syntax:
|
| SendDocumentMessage | aChatId: Id des Chats, an den die Nachricht gesendet wird aFilePath: vollständiger Dateipfad des Dokuments aInlineKeyboard: Optionale Buttons (nur Bots). | Sendet ein Dokument an einen Chat. |
| SendPhotoMessage |
aChatId: ID des Chats, an den die Nachricht gesendet wird aFilePath: vollständiger Dateipfad des Fotos Width: Breite des Fotos. Height: Breite des Fotos. InlineKeyboard: Optionale Buttons (nur Bots). |
Sendet ein Foto an einen Chat. |
| SendVideoMessage |
aChatId: ID des Chats, an den die Nachricht gesendet wird aFilePath: vollständiger Dateipfad des Videos aWidth: Breite des Videos. Height: Breite des Videos. aDuration: Dauer des Videos in Sekunden. aInlineKeyboard: Optionale Schaltflächen (nur Bots). |
Sendet ein Video an einen Chat. |
| SendInvoiceMessage |
aChatId: ID des Chats, an den die Nachricht gesendet wird aInvoice: Text der Nachricht. aInlineKeyboard: Optionale Schaltflächen (nur Bots). |
Sendet eine Rechnung (nur verfügbar, wenn es sich um einen Bot handelt und in privaten Kanälen). |
| EditTextMessage |
aChatId: ID des Chats, an den die Nachricht gesendet wird aMessageId: ID der zu ändernden Nachricht Text: Text der Nachricht. InlineKeyboard: Optionale Buttons (nur Bots). ShowKeyboard: Optionale Schaltflächen (nur Bots). |
Bearbeitet den Text einer Nachricht (oder den Text einer Spielnachricht) |
| AddChatMember | aChatId: ID des Chats, an den die Nachricht gesendet wird aUserId: Bezeichner des Benutzers. aForwardLimit: Die Anzahl früherer Nachrichten aus dem Chat, die an das neue Mitglied weitergeleitet werden sollen; bis zu 100. Bei Supergruppen und Channels ignoriert. | Fügt ein neues Mitglied zu einem Chat hinzu. Mitglieder können privaten oder geheimen Chats nicht hinzugefügt werden. Mitglieder werden erst hinzugefügt, wenn der Chat-Zustand mit dem Server synchronisiert wurde. |
| AddChatMembers | aChatId: ID des Chats, an den die Nachricht gesendet wird aUserIds: Bezeichner der Benutzer, die dem Chat hinzugefügt werden sollen. | Fügt einem Chat mehrere neue Mitglieder hinzu. Derzeit ist diese Option nur für Supergruppen und Kanäle verfügbar. Diese Option kann nicht verwendet werden, um einem Chat beizutreten. Mitglieder können einem Kanal nicht hinzugefügt werden, wenn er mehr als 200 Mitglieder hat. Mitglieder werden erst hinzugefügt, wenn der Chat-Zustand mit dem Server synchronisiert wurde. |
| GetChatMember | aChatId: Chat-Bezeichner. aUserId: Benutzer-Bezeichner. | Gibt Informationen über ein einzelnes Mitglied eines Chats zurück. |
| GetBasicGroupFullInfo | aGroupId: Basic-Group-Bezeichner | Gibt vollständige Informationen über eine Basisgruppe anhand ihres Bezeichners zurück. |
| GetSupergroupMembers |
aSuperGroupId: Bezeichner der Supergroup oder des Kanals. aSupergroupMembersFilter: Der Typ der zurückzugebenden Benutzer. Standardmäßig null aOffset: Anzahl der zu überspringenden Benutzer. aLimit: Die maximale Anzahl der zurückzugebenden Benutzer; bis zu 200. |
Gibt Informationen über Mitglieder oder gesperrte Benutzer in einer Supergruppe oder einem Channel zurück. |
| JoinChatByInviteLink | aLink: Einladungslink zum Importieren; | Verwendet einen Einladungslink, um den aktuellen Benutzer dem Chat hinzuzufügen, falls möglich. Das neue Mitglied wird erst hinzugefügt, wenn der Chat-Zustand mit dem Server synchronisiert wurde. |
| CreateNewSecretChat | aUserId: Bezeichner des Benutzers. | Erstellt einen neuen geheimen Chat. |
| CreateNewBasicGroupChat | aUserIds: Bezeichner der Benutzer, die zum Chat hinzugefügt werden sollen. aTitle: Titel der neuen Basisgruppe | Erstellt eine neue Basisgruppe |
| CreateNewSupergroupChat |
aTitle: Titel der neuen SuperGroup aIsChannel: True, wenn ein Kanal-Chat erstellt werden soll. aDescription: Chat-Beschreibung. |
Erstellt eine neue Supergruppe oder einen neuen Kanal. |
| CreatePrivateChat |
aUserId: Bezeichner des Benutzers. aForce: Wenn true, wird der Chat ohne Netzwerkanfrage erstellt. In diesem Fall können alle Informationen über den Chat außer Typ, Titel und Foto falsch sein |
Gibt einen vorhandenen Chat zurück, der einem bestimmten Benutzer entspricht |
| GetChats | aOffsetOrder: Chat-Reihenfolge, ab der Chats zurückgegeben werden aOffsetChatId: Chat-Bezeichner, ab dem Chats zurückgegeben werden aLimit: Die maximale Anzahl der zurückzugebenden Chats. | Gibt eine geordnete Liste von Chats zurück. Chats werden nach dem Paar (order, chat_id) in absteigender Reihenfolge sortiert (kann nicht verwendet werden, wenn als Bot angemeldet) |
| GetChat | aChatId: Chat-Bezeichner | Gibt Informationen über einen Chat anhand seines Bezeichners zurück |
| GetChatHistory |
aChatId: Chat-Bezeichner aFromMessageId: Kennung der Nachricht, ab der der Verlauf abgerufen werden muss; verwenden Sie 0, um Ergebnisse ab der letzten Nachricht zu erhalten. aOffset: Geben Sie 0 an, um Ergebnisse genau ab from_message_id zu erhalten, oder einen negativen Offset bis zu 99, um zusätzlich einige neuere Nachrichten zu erhalten. aLimit:Die maximale Anzahl an Nachrichten, die zurückgegeben werden |
Gibt Nachrichten in einem Chat zurück. Die Nachrichten werden in umgekehrter chronologischer Reihenfolge zurückgegeben |
| GetUser | aUserId: Benutzerbezeichner | Gibt Informationen über einen Benutzer anhand seines Bezeichners zurück. |
| AddProxyHTTP |
aServer: Servername des Proxys. aPort: Nummer des Proxy-Ports. aUserName: Benutzername für die Anmeldung; kann leer sein. aPassword: Passwort für die Anmeldung; kann leer sein. aHTTPOnly: Übergeben Sie true, wenn der Proxy nur HTTP-Anfragen unterstützt und keine transparenten TCP-Verbindungen über die HTTP-CONNECT-Methode unterstützt. |
Fügt einen HTTP-Proxy-Server für Netzwerk-Requests hinzu. Kann vor der Autorisierung aufgerufen werden. |
| AddProxyMTProto |
aServer: Servername des Proxys. aPort: Nummer des Proxy-Ports. aSecret: Das Secret des Proxys in hexadezimaler Kodierung. |
Fügt einen MTProto-Proxy-Server für Netzwerkanfragen hinzu. Kann vor der Autorisierung aufgerufen werden. |
| AddProxySocks5 |
aServer: Servername des Proxys. aPort: Nummer des Proxy-Ports. aUserName: Benutzername für die Anmeldung; kann leer sein. aPassword: Passwort für die Anmeldung; kann leer sein. |
Fügt einen Socks5-Proxy-Server für Netzwerkanfragen hinzu. Kann vor der Autorisierung aufgerufen werden. |
| EnableProxy | aId: ID des Proxys | Aktiviert einen Proxy. Es kann jeweils nur ein Proxy aktiviert werden. Kann vor der Autorisierung aufgerufen werden. |
| DisableProxy | Deaktiviert den derzeit aktivierten Proxy. Kann vor der Autorisierung aufgerufen werden. | |
| RemoveProxy | aId: ID des Proxys | Entfernt einen Proxy-Server. Kann vor der Autorisierung aufgerufen werden. |
| GetProxies | Gibt eine Liste der derzeit eingerichteten Proxys zurück. Kann vor der Autorisierung aufgerufen werden. | |
| getChatSponsoredMessage | aChatId: ID des Chats | Gibt eine gesponserte Nachricht zurück, die in einem Chat angezeigt werden soll; nur für Kanal-Chats. Gibt einen 404-Fehler zurück, wenn es keine gesponserte Nachricht im Chat gibt. |
| ViewMessage |
aSponsorChatId: ID des Sponsor-Chats aMessageId: ID der Nachricht |
Informiert TDLib, dass Nachrichten vom Benutzer angesehen werden. Viele nützliche Aktivitäten hängen davon ab, ob die Nachrichten gerade angesehen werden oder nicht |
| Logout | Meldet sich von Telegram ab. | |
| TDLibSend | aRequest: JSON-Anfrage. | Sendet eine beliebige Anfrage im JSON-Protokoll. |
Beispiel: So senden Sie eine Textnachricht
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');
Beispiel: Wie man "Methode nicht implementiert" sendet
Sie können jede beliebige JSON-Nachricht mit der TDLibSend-Methode senden, Beispiel: einem Telegram-Chat beitreten.
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
Dieses Ereignis wird aufgerufen, wenn eine JSON-Nachricht von der Telegram-API-Komponente empfangen wird und noch nicht verarbeitet wurde. Setzen Sie die Eigenschaft Handled auf True, wenn Sie dieses Ereignis manuell verarbeiten oder nicht möchten, dass das Ereignis von der Komponente verarbeitet wird. Sie können dieses Ereignis auch verwenden, um alle Nachrichten zu protokollieren.
OnMessageText
Dieses Ereignis wird aufgerufen, wenn eine neue Textnachricht empfangen wurde; lesen Sie den Parameter MessageText, um auf die Eigenschaften des Nachrichtentextes zuzugreifen.
OnMessageDocument
Dieses Ereignis wird aufgerufen, wenn eine neue Dokumentnachricht empfangen wird. Greifen Sie auf MessageDocument zu, um auf die Document-Eigenschaften zuzugreifen.
OnMessagePhoto
Dieses Ereignis wird aufgerufen, wenn eine neue Fotonachricht empfangen wird. Greifen Sie auf MessagePhoto zu, um auf die Photo-Eigenschaften zuzugreifen.
OnVideoPhoto
Dieses Ereignis wird aufgerufen, wenn eine neue Videonachricht empfangen wird. Greifen Sie auf MessageVideo zu, um Zugriff auf die Video-Eigenschaften zu erhalten.
OnMessageSponsored
Dieses Ereignis wird aufgerufen, wenn eine neue gesponserte Nachricht empfangen wurde (nach dem Aufruf der Methode getChatSponsoredMessage)
OnNewChat
Dieses Ereignis wird aufgerufen, wenn ein neuer Chat empfangen wird.
OnNewCallbackQuery
Dieses Ereignis wird aufgerufen, wenn eine neue eingehende Callback-Abfrage empfangen wird; nur für Bots.
OnEvent
Dieses Ereignis wird aufgerufen, wenn ein neues Ereignis von der API-Komponente empfangen wird. Es kann verwendet werden, um einige von der API-Komponente nicht implementierte Ereignisse zu verarbeiten.
OnException
Dieses Ereignis wird aufgerufen, wenn bei der Verarbeitung von Telegram-API-Daten eine Exception auftritt.
MyId: gibt den Benutzerbezeichner des aktuellen Benutzers zurück.
Sehen Sie sich das folgende Code-Beispiel an, das zeigt, wie eine Verbindung zur Telegram-API hergestellt wird, der Benutzer aufgefordert wird, einen Code einzugeben (falls von der Telegram-API erforderlich), eine Nachricht gesendet wird, wenn die Verbindung bereit ist, und empfangene Textnachrichten protokolliert werden.
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;