Telegram propose deux types d'API : l'une est la Bot API qui vous permet de créer des programmes utilisant des bots et HTTPS comme protocole. La Telegram API et TDLib vous permettent de créer des clients Telegram personnalisés et sont bien plus puissantes que la Bot API.
sgcWebSockets prend en charge TDLib via la bibliothèque tdjson, ce qui signifie que vous pouvez construire votre propre client Telegram. TDLib prend en charge tous les détails d'implémentation réseau, le chiffrement et le stockage des données locales. TDLib supporte toutes les fonctionnalités de Telegram.
Avantages de TDLib (Telegram Database Library)
Multiplateforme : peut être utilisé sur Windows, Android, iOS, MacOS, Linux...
Facile à utiliser : utilise des messages JSON pour communiquer entre l'application et Telegram.
Haute performance : Dans l'API Bot Telegram, chaque instance TDLib gère plus de 24 000 bots.
Consistent : TDLib garantit que toutes les mises à jour seront livrées dans le bon ordre.
Fiable : TDLib reste stable sur les connexions internet lentes et peu fiables.
Secure: Toutes les données locales sont chiffrées à l'aide d'une clé de chiffrement fournie par l'utilisateur.
Entièrement asynchrone : Les requêtes vers TDLib ne se bloquent pas mutuellement. Les réponses seront envoyées lorsqu'elles sont disponibles.
Windows
TDLib nécessite d'autres bibliothèques tierces : OpenSSL et ZLib. Ces bibliothèques doivent être déployées avec la bibliothèque tdjson.
* Les versions Windows nécessitent VCRuntime, téléchargeable depuis Microsoft : https://www.microsoft.com/en-us/download/details.aspx?id=52685. Si le problème persiste après l'installation, essayez de copier les dll suivantes dans le même dossier que votre application : VCRUNTIME140.dll et VCRUNTIME140_1.dll.
Copiez les bibliothèques suivantes dans le même répertoire que votre application :
| 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
Déployez la bibliothèque libtdjson.dylib sur votre appareil et vous pouvez définir l'emplacement de la bibliothèque à l'aide de SetTDJsonPath, exemple :
si vous déployez vers "Contents\MacOS\", vous devez définir le chemin dans le dossier TPath.GetDirectoryName(ParamStr(0)).
OSXARM64
Déployez la bibliothèque libtdjson.dylib sur votre appareil et vous pouvez définir l'emplacement de la bibliothèque à l'aide de SetTDJsonPath, exemple :
si vous déployez vers "Contents\MacOS\", vous devez définir le chemin dans le dossier TPath.GetDirectoryName(ParamStr(0)).
Linux64
Déployez la bibliothèque libtdjson.so sur votre appareil et définissez le chemin de la bibliothèque en appelant la méthode SetTDJsonPath.
Android
Déployez la bibliothèque libtdjsonandroid.so sur votre appareil. Exemple : si vous déployez une bibliothèque Android64, définissez RemotePath dans Project/Deployment sur « library\lib\arm64-v8a\ ». Si c'est Android32, définissez RemotePath sur « library\lib\armeabi-v7a\ »
iOS64
Copiez la bibliothèque libtdjson.a dans ces répertoires :
C:\Program Files (x86)\Embarcadero\Studio\<IDE Version>\lib\iosDevice64\debug
C:\Program Files (x86)\Embarcadero\Studio\<IDE Version>\lib\iosDevice64\release
Pour obtenir un identifiant d'API et développer votre propre application en utilisant l'API Telegram, vous devez effectuer les opérations suivantes :
Inscrivez-vous à Telegram en utilisant n'importe quelle application.
Connectez-vous à votre cœur Telegram : https://my.telegram.org.
Allez dans Outils de développement d'API et remplissez le formulaire.
Vous obtiendrez des adresses de base ainsi que les paramètres api_id et api_hash requis pour l'autorisation utilisateur.
Pour l'instant, chaque numéro ne peut avoir qu'un seul api_id connecté.
Ces valeurs doivent être définies dans la propriété Telegram.API du composant Telegram. Pour s'authentifier, vous pouvez vous authentifier en tant qu'utilisateur ou en tant que bot ; il y a 2 propriétés que vous pouvez définir pour vous connecter à Telegram :
PhoneNumber : si vous vous connectez en tant qu'utilisateur, vous devez définir votre numéro de téléphone (avec indicatif international), exemple : +34699123456
BotToken : si vous vous connectez en tant que bot, définissez votre jeton dans cette propriété (tel que fourni par Telegram).
DatabaseDirectory : permet de spécifier l'emplacement de la base de données tdlib. Laissez vide pour utiliser la configuration par défaut.
Les paramètres suivants peuvent être configurés :
ApplicationVersion : version de l'application, exemple : 1.0
DeviceModel: modèle d'appareil, exemple : desktop
LanguageCode: code de langue de l'utilisateur, exemple : fr.
SystemVersion : version du système d'exploitation, exemple : windows.
Optionnellement, vous pouvez configurer le chemin où se trouve la bibliothèque tdjson en utilisant la méthode SetTDJsonPath. Passez simplement le chemin avant de démarrer une nouvelle session Telegram.
Une fois le composant Telegram configuré, vous pouvez définir la propriété Active à true et le programme tentera de se connecter à Telegram.
Exemple de code
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;
Il existe deux événements que la bibliothèque peut appeler afin d'obtenir un code d'authentification (livré dans l'application Telegram, pas par SMS) ou de fournir un mot de passe.
OnAuthenticationCode
Cet événement est appelé lorsque Telegram envoie un code d'autorisation à l'application Telegram et que l'utilisateur doit copier ce code et le définir dans l'argument Code de cet événement.
procedure OnAuthenticationCode(Sender: TObject; var Code: string);
begin
Code := InputBox('Telegram Code', 'Introduce code', '');
end;
Sur Android, la boîte de saisie ne bloque pas le thread ; par conséquent, au lieu de retourner la valeur saisie par l'utilisateur dans le paramètre Code, utilisez la méthode SetAuthenticationCode pour définir la valeur du code.
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
Cet événement est appelé lorsque Telegram demande à l'utilisateur de définir un mot de passe.
Une fois l'autorisation démarrée, vous pouvez vérifier le statut de l'autorisation via l'événement OnAuthorizationStatus ; cet événement est appelé chaque fois qu'il y a un changement de statut d'autorisation. Certaines valeurs de Status sont :
Une fois la connexion démarrée, vous pouvez vérifier le statut de la connexion via l'événement OnConnectionStatus ; cet événement est appelé chaque fois qu'il y a un changement de statut de connexion. Quelques valeurs de Status :
Le composant API TsgcTDLib_Telegram prend en charge plusieurs méthodes Telegram ; retrouvez ci-dessous les plus utilisées.
| Méthode | Paramètres | Description |
| SendTextMessage |
aChatId : Id du chat auquel le message sera envoyé aText : Texte du message. InlineKeyboard : Boutons optionnels (bots uniquement). |
Envoie un message texte à un chat |
| SendRichTextMessage |
aChatId : Identifiant du chat auquel le message sera envoyé aText : Texte du message. InlineKeyboard : Boutons optionnels (bots uniquement). |
Envoie un message texte enrichi dans un chat. Syntaxe Markdown :
|
| SendDocumentMessage | aChatId : Id du chat auquel le message sera envoyé aFilePath : chemin complet du fichier document aInlineKeyboard : Boutons optionnels (bots uniquement). | Envoie un document à un chat. |
| SendPhotoMessage |
aChatId : Identifiant du chat auquel le message sera envoyé aFilePath : chemin complet du fichier photo Width : largeur de la photo. Hauteur : largeur de la photo. InlineKeyboard : Boutons optionnels (bots uniquement). |
Envoie une photo dans un chat. |
| SendVideoMessage |
aChatId : Id du Chat auquel le message sera envoyé aFilePath : chemin complet du fichier vidéo aWidth : largeur de la vidéo. Height : largeur de la vidéo. aDuration : durée de la vidéo en secondes. aInlineKeyboard : Boutons optionnels (uniquement pour les bots). |
Envoie une vidéo à un chat. |
| SendInvoiceMessage |
aChatId : Identifiant du chat auquel le message sera envoyé aInvoice : Texte du message. aInlineKeyboard : Boutons optionnels (uniquement pour les bots). |
Envoie une facture (disponible uniquement lorsqu'il s'agit d'un Bot et dans les canaux privés). |
| EditTextMessage |
aChatId : identifiant du chat auquel le message sera envoyé aMessageId : Identifiant du message à modifier Text : Texte du message. InlineKeyboard : Boutons optionnels (bots uniquement). ShowKeyboard : Boutons optionnels (bots uniquement). |
Modifie le texte d'un message (ou le texte d'un message de jeu) |
| AddChatMember | aChatId : Identifiant du chat auquel le message sera envoyé aUserId : Identifiant de l'utilisateur. aForwardLimit : Le nombre de messages précédents du chat à transmettre au nouveau membre ; jusqu'à 100. Ignoré pour les supergroupes et les canaux. | Ajoute un nouveau membre à un chat. Les membres ne peuvent pas être ajoutés aux chats privés ou secrets. Les membres ne seront pas ajoutés tant que l'état du chat n'aura pas été synchronisé avec le serveur. |
| AddChatMembers | aChatId : Id du chat auquel le message sera envoyé aUserIds : Identifiants des utilisateurs à ajouter au chat. | Ajoute plusieurs nouveaux membres à un chat. Actuellement, cette option n'est disponible que pour les supergroupes et les canaux. Cette option ne peut pas être utilisée pour rejoindre un chat. Les membres ne peuvent pas être ajoutés à un canal s'il a plus de 200 membres. Les membres ne seront pas ajoutés tant que l'état du chat n'a pas été synchronisé avec le serveur. |
| GetChatMember | aChatId : Identifiant de chat. aUserId : Identifiant d'utilisateur. | Renvoie les informations sur un seul membre d'un chat. |
| GetBasicGroupFullInfo | aGroupId : Identifiant de groupe de base | Retourne les informations complètes sur un groupe de base par son identifiant. |
| GetSupergroupMembers |
aSuperGroupId : Identifiant du supergroupe ou du canal. aSupergroupMembersFilter : Le type d'utilisateurs à retourner. Par défaut null aOffset : Nombre d'utilisateurs à ignorer. aLimit: Le nombre maximum d'utilisateurs à renvoyer ; jusqu'à 200. |
Retourne des informations sur les membres ou les utilisateurs bannis d'un supergroupe ou d'un canal. |
| JoinChatByInviteLink | aLink : lien d'invitation à importer ; | Utilise un lien d'invitation pour ajouter l'utilisateur actuel au chat si possible. Le nouveau membre ne sera pas ajouté tant que l'état du chat n'aura pas été synchronisé avec le serveur. |
| CreateNewSecretChat | aUserId : Identifiant de l'utilisateur. | Crée un nouveau chat secret. |
| CreateNewBasicGroupChat | aUserIds : Identifiants des utilisateurs à ajouter au chat. aTitle : Titre du nouveau groupe de base | Crée un nouveau groupe de base |
| CreateNewSupergroupChat |
aTitle : Titre du nouveau SuperGroupe aIsChannel : True, si une discussion de canal doit être créée. aDescription : Description de la discussion. |
Crée un nouveau supergroupe ou canal. |
| CreatePrivateChat |
aUserId : Identifiant de l'utilisateur. aForce: Si true, le chat sera créé sans requête réseau. Dans ce cas, toutes les informations sur le chat, à l'exception de son type, de son titre et de sa photo, peuvent être incorrectes |
Retourne une discussion existante correspondant à un utilisateur donné |
| GetChats | aOffsetOrder : Ordre de chat à partir duquel retourner les chats aOffsetChatId : Identifiant de chat à partir duquel retourner les chats aLimit : Le nombre maximum de chats à retourner. | Renvoie une liste ordonnée de chats. Les chats sont triés par la paire (order, chat_id) par ordre décroissant (ne peut pas être utilisé si connecté en tant que Bot) |
| GetChat | aChatId: Identifiant du chat | Retourne des informations sur un chat par son identifiant |
| GetChatHistory |
aChatId : Identifiant du chat aFromMessageId : Identifiant du message à partir duquel l'historique doit être récupéré ; utilisez 0 pour obtenir les résultats à partir du dernier message. aOffset : Spécifiez 0 pour obtenir les résultats à partir exactement du from_message_id ou un décalage négatif jusqu'à 99 pour obtenir également quelques messages plus récents. aLimit:Le nombre maximum de messages à retourner |
Retourne les messages d'un chat. Les messages sont retournés dans l'ordre chronologique inverse. |
| GetUser | aUserId : Identifiant utilisateur | Retourne des informations sur un utilisateur par son identifiant. |
| AddProxyHTTP |
aServer: Nom du serveur proxy. aPort : Numéro du port proxy. aUserName : Nom d'utilisateur pour la connexion ; peut être vide. aPassword : Mot de passe pour la connexion ; peut être vide. aHTTPOnly : Passez true si le proxy ne prend en charge que les requêtes HTTP et ne prend pas en charge les connexions TCP transparentes via la méthode HTTP CONNECT. |
Ajoute un serveur proxy HTTP pour les requêtes réseau. Peut être appelé avant l'autorisation. |
| AddProxyMTProto |
aServer: Nom du serveur proxy. aPort : Numéro du port proxy. aSecret : Le secret du proxy en encodage hexadécimal. |
Ajoute un serveur proxy MTProto pour les requêtes réseau. Peut être appelé avant l'autorisation. |
| AddProxySocks5 |
aServer: Nom du serveur proxy. aPort : Numéro du port proxy. aUserName : Nom d'utilisateur pour la connexion ; peut être vide. aPassword : Mot de passe pour la connexion ; peut être vide. |
Ajoute un serveur proxy Socks5 pour les requêtes réseau. Peut être appelé avant l'autorisation. |
| EnableProxy | aId : identifiant du proxy | Active un proxy. Un seul proxy peut être activé à la fois. Peut être appelé avant l'autorisation. |
| DisableProxy | Désactive le proxy actuellement activé. Peut être appelé avant l'autorisation. | |
| RemoveProxy | aId : identifiant du proxy | Supprime un serveur proxy. Peut être appelé avant l'autorisation. |
| GetProxies | Retourne la liste des proxies actuellement configurés. Peut être appelé avant l'autorisation. | |
| getChatSponsoredMessage | aChatId : identifiant du chat | Retourne le message sponsorisé à afficher dans un chat ; uniquement pour les chats de canaux. Retourne une erreur 404 s'il n'y a pas de message sponsorisé dans le chat. |
| ViewMessage |
aSponsorChatId : Identifiant du chat sponsor aMessageId : ID du message |
Informe TDLib que des messages sont en cours de consultation par l'utilisateur. De nombreuses activités utiles dépendent du fait que les messages sont actuellement consultés ou non |
| Déconnexion | Déconnexions de Telegram. | |
| TDLibSend | aRequest : Requête JSON. | Envoyer n'importe quelle requête au format JSON. |
Exemple d'envoi d'un message texte
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');
Exemple d'envoi d'une méthode non implémentée
Vous pouvez envoyer n'importe quel message JSON en utilisant la méthode TDLibSend, exemple : rejoindre un chat 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"}');
OnBeforeReadEvent
Cet événement est appelé lorsqu'un message JSON est reçu par le composant API Telegram et n'a pas encore été traité. Définissez la propriété Handled sur True si vous traitez cet événement manuellement ou si vous ne souhaitez pas que l'événement soit traité par le composant. Vous pouvez également utiliser cet événement pour journaliser tous les messages.
OnMessageText
Cet événement est appelé lorsqu'un nouveau message texte a été reçu ; lisez le paramètre MessageText pour accéder aux propriétés du texte du message.
OnMessageDocument
Cet événement est appelé lorsqu'un nouveau message Document est reçu. Accédez à MessageDocument pour obtenir les propriétés du document.
OnMessagePhoto
Cet événement est appelé lorsqu'un nouveau message photo est reçu. Accédez à MessagePhoto pour accéder aux propriétés de la photo.
OnVideoPhoto
Cet événement est appelé lorsqu'un nouveau message vidéo est reçu. Accédez à MessageVideo pour obtenir les propriétés vidéo.
OnMessageSponsored
Cet événement est appelé lorsqu'un nouveau message sponsorisé a été reçu (après avoir appelé la méthode getChatSponsoredMessage)
OnNewChat
Cet événement est appelé lorsqu'un nouveau chat est reçu.
OnNewCallbackQuery
Cet événement est appelé lorsqu'une nouvelle requête de callback entrante est reçue ; pour les bots uniquement.
OnEvent
Cet événement est appelé lorsqu'un nouvel événement est reçu par le composant API. Il peut être utilisé pour traiter certains événements non implémentés par le composant API.
OnException
Cet événement est appelé s'il y a une exception lors du traitement des données de l'API Telegram.
MyId : retourne l'identifiant d'utilisateur de l'utilisateur actuel.
Consultez l'exemple de code suivant qui montre comment se connecter à l'API Telegram, demander à l'utilisateur de saisir un Code (si requis par l'API Telegram), envoyer un message lorsque la connexion est prête et journaliser les messages texte reçus.
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;