API Telegram

Telegram

 

Telegram ofrece dos tipos de API: una es Bot API, que permite crear programas que usen bots y HTTPS como protocolo. Telegram API y TDLib permiten crear clientes Telegram personalizados y son mucho más potentes que la Bot API.

 

sgcWebSockets es compatible con TDLib a través de la biblioteca tdjson, lo que significa que puede crear su propio cliente de Telegram. TDLib se encarga de todos los detalles de implementación de red, cifrado y almacenamiento local de datos. TDLib admite todas las funciones de Telegram.

 

Ventajas de TDLib (Telegram Database Library)

 

 

Configuración

Windows

 

TDLib requiere otras bibliotecas de terceros: OpenSSL y ZLib. Estas bibliotecas deben desplegarse junto con la biblioteca tdjson.

 

* Las versiones de Windows requieren VCRuntime, que puede descargarse desde Microsoft: https://www.microsoft.com/en-us/download/details.aspx?id=52685. Si tras la instalación el problema persiste, intente copiar las siguientes DLL en la misma carpeta donde se encuentra su aplicación: VCRUNTIME140.dll y VCRUNTIME140_1.dll.

 

Copie las siguientes bibliotecas en el mismo directorio donde se encuentra su aplicación:

 

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

 

Despliegue la biblioteca libtdjson.dylib en su dispositivo y puede establecer dónde se encuentra la biblioteca usando SetTDJsonPath, por ejemplo:

 

si despliega en «Contents\MacOS\», debe establecer la ruta en la carpeta TPath.GetDirectoryName(ParamStr(0)).

 

OSXARM64

 

Despliegue la biblioteca libtdjson.dylib en su dispositivo y puede establecer dónde se encuentra la biblioteca usando SetTDJsonPath, por ejemplo:

 

si despliega en «Contents\MacOS\», debe establecer la ruta en la carpeta TPath.GetDirectoryName(ParamStr(0)).

 

Linux64

 

Implemente la biblioteca libtdjson.so en su dispositivo y establezca la ruta de la biblioteca llamando al método SetTDJsonPath.

 

Android

 

Despliegue la biblioteca libtdjsonandroid.so en su dispositivo. Ejemplo: si despliega una biblioteca Android64, establezca RemotePath en Project/Deployment como "library\lib\arm64-v8a\". Si es Android32, establezca RemotePath como "library\lib\armeabi-v7a\"

 

iOS64

 

Copie la biblioteca libtdjson.a en estos directorios:

 

 

Creación de su aplicación de Telegram

Para obtener un ID de API y desarrollar su propia aplicación usando la API de Telegram, debe hacer lo siguiente:

 

 

Estos valores deben establecerse en la propiedad Telegram.API del componente Telegram. Para autenticarse, puede hacerlo como usuario o como bot; hay 2 propiedades que puede configurar para iniciar sesión en Telegram:

 

 

Se pueden configurar los siguientes parámetros:

 

 

Opcionalmente, puede configurar la ruta donde se encuentra la biblioteca tdjson usando el método SetTDJsonPath. Solo pase la ruta antes de iniciar una nueva sesión de Telegram.

 

Una vez que haya configurado el componente de Telegram, puede establecer la propiedad Active en true y el programa intentará conectarse a Telegram.

 

Código de ejemplo


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;

 

Autorización

Hay dos eventos que puede invocar la biblioteca para obtener un código de autenticación (entregado en la aplicación Telegram, no por SMS) o para proporcionar una contraseña.

 

OnAuthenticationCode

 

Este evento se llama cuando Telegram envía un Código de Autorización a la aplicación de Telegram y el usuario debe copiar dicho código y establecerlo en el argumento Code de este evento.

 


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

 

En Android, el cuadro de diálogo de entrada no bloquea el hilo, por lo que en lugar de devolver el valor introducido por el usuario en el parámetro Code, use el método SetAuthenticationCode para establecer el valor del 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 se invoca cuando Telegram requiere que el usuario establezca una contraseña.

 

 

Estado de autorización

Una vez que la autorización ha comenzado, puede comprobar el estado de la autorización con el evento OnAuthorizationStatus; este evento se llama cada vez que hay un cambio en el estado de la autorización. Algunos valores de Status son:

 

 

Estado de la conexión

Una vez que la conexión se ha iniciado, puede comprobar el estado de la conexión mediante el evento OnConnectionStatus; este evento se llama cada vez que hay un cambio en el estado de la conexión. Algunos valores de Status son:

 

 

Métodos Principales

TsgcTDLib_Telegram API Component soporta varios métodos de Telegram; a continuación encontrará los más utilizados.

 

Método Parámetros Descripción
SendTextMessage

aChatId: Id del Chat al que se enviará el mensaje aText: Texto del Mensaje.

InlineKeyboard: botones opcionales (solo bots).

Envía un mensaje de texto a un chat
SendRichTextMessage

aChatId: Id del chat al que se enviará el mensaje aText: Texto del mensaje.

InlineKeyboard: botones opcionales (solo bots).

Envía un mensaje de texto enriquecido a un chat. Sintaxis Markdown:
  • Negrita: **bold**
  • Cursiva: __italic__
  • Tachado: --strike--
  • Subrayado: ~~underline~~
  • Código: ##code##
SendDocumentMessage aChatId: Id del Chat al que se enviará el mensaje aFilePath: ruta completa del archivo del documento aInlineKeyboard: Botones opcionales (solo bots). Envía un documento a un chat.
SendPhotoMessage

aChatId: Id del chat al que se enviará el mensaje aFilePath: ruta completa del archivo de foto

Width: ancho de la foto.

Height: anchura de la foto.

InlineKeyboard: botones opcionales (solo bots).

Envía una foto a un chat.
SendVideoMessage

aChatId: Id del chat al que se enviará el mensaje aFilePath: ruta completa del archivo de vídeo aWidth: ancho del vídeo.

Height: anchura del vídeo.

aDuration: duración del vídeo en segundos.

aInlineKeyboard: Botones opcionales (solo bots).

Envía un vídeo a un chat.
SendInvoiceMessage

aChatId: Id del chat al que se enviará el mensaje aInvoice: Texto del mensaje.

aInlineKeyboard: Botones opcionales (solo bots).

Envía una factura (solo disponible cuando es un bot y en canales privados).
EditTextMessage

aChatId: ID del chat al que se enviará el mensaje

aMessageId: Id del mensaje a modificar

Text: Texto del Mensaje.

InlineKeyboard: botones opcionales (solo bots).

ShowKeyboard: Botones opcionales (solo bots).

Edita el texto de un mensaje (o el texto de un mensaje de juego)
AddChatMember aChatId: Id del Chat al que se enviará el mensaje aUserId: Identificador del usuario. aForwardLimit: El número de mensajes anteriores del chat que se reenviarán al nuevo miembro; hasta 100. Se ignora para supergrupos y canales. Añade un nuevo miembro a un chat. No se pueden añadir miembros a chats privados o secretos. Los miembros no se añadirán hasta que el estado del chat se haya sincronizado con el servidor.
AddChatMembers aChatId: Id del chat al que se enviará el mensaje aUserIds: Identificadores de los usuarios que se añadirán al chat. Agrega varios miembros nuevos a un chat. Actualmente esta opción solo está disponible para supergrupos y canales. Esta opción no puede usarse para unirse a un chat. No se pueden agregar miembros a un canal si tiene más de 200 miembros. Los miembros no serán agregados hasta que el estado del chat se haya sincronizado con el servidor.
GetChatMember aChatId: Identificador de chat. aUserId: Identificador de usuario. Devuelve información sobre un único miembro de un chat.
GetBasicGroupFullInfo aGroupId: Identificador de Grupo Básico Devuelve información completa sobre un grupo básico por su identificador.
GetSupergroupMembers

aSuperGroupId: Identificador del supergrupo o canal.

aSupergroupMembersFilter: El tipo de usuarios a devolver. Por defecto null aOffset: Número de usuarios a omitir.

aLimit: El número máximo de usuarios que se devolverán; hasta 200.

Devuelve información sobre los miembros o los usuarios bloqueados en un supergrupo o canal.
JoinChatByInviteLink aLink: Enlace de invitación a importar; Usa un enlace de invitación para añadir al usuario actual al chat si es posible. El nuevo miembro no se añadirá hasta que el estado del chat se haya sincronizado con el servidor.
CreateNewSecretChat aUserId: Identificador del usuario. Crea un nuevo chat secreto.
CreateNewBasicGroupChat aUserIds: Identificadores de los usuarios que se añadirán al chat. aTitle: Título del nuevo grupo básico Crea un nuevo grupo básico
CreateNewSupergroupChat

aTitle: Título del nuevo SuperGrupo

aIsChannel: True, si se debe crear un chat de canal. aDescription: Descripción del chat.

Crea un nuevo supergrupo o canal.
CreatePrivateChat

aUserId: Identificador del usuario.

aForce: Si es true, el chat se creará sin solicitud de red. En este caso, toda la información sobre el chat excepto su tipo, título y foto puede ser incorrecta

Devuelve un chat existente correspondiente a un usuario dado
GetChats aOffsetOrder: Orden de chat desde el que devolver chats aOffsetChatId: Identificador de chat desde el que devolver chats aLimit: El número máximo de chats que se van a devolver. Devuelve una lista ordenada de chats. Los chats se ordenan por el par (order, chat_id) en orden decreciente (no puede usarse si está registrado como Bot)
GetChat aChatId: Identificador del chat Devuelve información sobre un chat mediante su identificador
GetChatHistory

aChatId: Identificador de chat

aFromMessageId: Identificador del mensaje a partir del cual se debe obtener el historial; use 0 para obtener resultados desde el último mensaje.

aOffset: Especifique 0 para obtener resultados exactamente desde from_message_id o un desplazamiento negativo de hasta 99 para obtener además algunos mensajes más recientes.

aLimit:El número máximo de mensajes que se devolverán

Devuelve los mensajes de un chat. Los mensajes se devuelven en orden cronológico inverso
GetUser aUserId: Identificador de usuario Devuelve información sobre un usuario a partir de su identificador.
AddProxyHTTP

aServer: Nombre del servidor proxy.

aPort: Número del puerto del proxy.

aUserName: Nombre de usuario para iniciar sesión; puede estar vacío.

aPassword: Contraseña para iniciar sesión; puede estar vacía.

aHTTPOnly: Pase true si el proxy solo admite solicitudes HTTP y no admite conexiones TCP transparentes mediante el método HTTP CONNECT.

Añade un servidor proxy HTTP para las solicitudes de red. Puede llamarse antes de la autorización.
AddProxyMTProto

aServer: Nombre del servidor proxy.

aPort: Número de puerto del proxy. aSecret: El secreto del proxy en codificación hexadecimal.

Agrega un servidor proxy MTProto para solicitudes de red. Se puede llamar antes de la autorización.
AddProxySocks5

aServer: Nombre del servidor proxy.

aPort: Número del puerto del proxy.

aUserName: Nombre de usuario para iniciar sesión; puede estar vacío.

aPassword: Contraseña para iniciar sesión; puede estar vacía.

Agrega un servidor proxy Socks5 para las solicitudes de red. Puede llamarse antes de la autorización.
EnableProxy aId: ID del proxy Habilita un proxy. Solo se puede habilitar un proxy a la vez. Puede llamarse antes de la autorización.
DisableProxy   Deshabilita el proxy habilitado actualmente. Se puede llamar antes de la autorización.
RemoveProxy aId: ID del proxy Elimina un servidor proxy. Puede llamarse antes de la autorización.
GetProxies   Devuelve la lista de proxies configurados actualmente. Se puede llamar antes de la autorización.
getChatSponsoredMessage aChatId: ID del chat Devuelve el mensaje patrocinado que se mostrará en un chat; solo para chats de canales. Devuelve un error 404 si no hay ningún mensaje patrocinado en el chat.
ViewMessage

aSponsorChatId: ID del Chat del patrocinador

aMessageId: ID del mensaje

Informa a TDLib que el usuario está viendo los mensajes. Muchas actividades útiles dependen de si los mensajes se están viendo en ese momento o no
Cerrar sesión   Cierra la sesión de Telegram.
TDLibSend aRequest: Solicitud JSON. Envía cualquier solicitud en protocolo JSON.

 

 

Ejemplo de cómo enviar un mensaje de texto


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

Ejemplo de cómo enviar un método no implementado

 

Puede enviar cualquier mensaje JSON usando el método TDLibSend, por ejemplo: unirse a un chat de 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 se llama cuando el componente Telegram API recibe un mensaje JSON que aún no ha sido procesado. Establezca la propiedad Handled en True si procesa este evento manualmente o si no desea que el componente lo procese. También puede usar este evento para registrar todos los mensajes.

 

OnMessageText

Este evento se invoca cuando se ha recibido un nuevo mensaje de texto; lea el parámetro MessageText para acceder a las propiedades del texto del mensaje.

 

 

OnMessageDocument

Este evento se llama cuando se recibe un nuevo mensaje de documento. Acceda a MessageDocument para obtener acceso a las propiedades del documento.

 

 

OnMessagePhoto

Este evento se activa cuando se recibe un nuevo mensaje con foto. Acceda a MessagePhoto para obtener las propiedades de la foto.

 

 

OnVideoPhoto

Este evento se llama cuando se recibe un nuevo mensaje de vídeo. Acceda a MessageVideo para acceder a las propiedades del vídeo.

 

 

OnMessageSponsored

Este evento se activa cuando se recibe un Nuevo Mensaje Patrocinado (después de llamar al método getChatSponsoredMessage)

 

 

OnNewChat

Este evento se llama cuando se recibe un nuevo chat.

 

 

OnNewCallbackQuery

Este evento se llama cuando se recibe una nueva consulta de retrollamada entrante; solo para bots.

 

 

OnEvent

Este evento se llama cuando el componente de API recibe un nuevo Evento. Puede usarse para procesar algunos eventos no implementados por el componente de API.

 

 

OnException

Este evento se activa si se produce alguna excepción al procesar datos de la API de Telegram.

 

Propiedades

MyId: devuelve el identificador de usuario del usuario actual.

 

Ejemplo de código completo

Consulte el siguiente ejemplo de código que muestra cómo conectarse a la API de Telegram, solicitar al usuario que introduzca un código (si la API de Telegram lo requiere), enviar un mensaje cuando la conexión esté lista y registrar los mensajes de texto recibidos.


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;