Introducción a MQL5 (Parte 27): Cómo dominar las API y la función WebRequest() en MQL5
Introducción
¡Bienvenidos de nuevo a la parte 27 de la serie Introducción a MQL5! ¿Te has preguntado alguna vez cómo MetaTrader 5 puede interactuar con otras plataformas? Si es así, debería leer este artículo.
Este artículo se centrará en comprender el funcionamiento de las API y cómo MetaTrader 5 puede comunicarse con servidores externos a través de la función WebRequest(). Para que el proceso de aprendizaje sea más práctico, trabajaremos en un pequeño proyecto en el que MetaTrader 5 se integra con Telegram. Con este proyecto, descubrirás cómo usar la API de Telegram para enviar, editar y eliminar mensajes desde MetaTrader 5.
El objetivo de este artículo es presentarle los conceptos básicos de la comunicación mediante WebRequest() en MQL5 y del uso de las API. En los próximos artículos, profundizaremos en el tema examinando casos de uso de API más complejos y aplicaciones reales de la función WebRequest().

Interfaz de programación de aplicaciones (API)
Una API es un conjunto de reglas y herramientas que permite la comunicación entre dos programas de software. Se puede comparar con un puente entre sistemas. En el sector del trading, las API permiten que su plataforma de trading (como MetaTrader 5) se comunique y reciba datos de sitios web, servidores de correo electrónico y otros servicios externos como Telegram.
MetaTrader 5 utiliza la API de Telegram para conectarse a los servidores de Telegram. Tras procesar su solicitud desde MetaTrader 5, el siguiente paso es que la API la reenvíe al destino correspondiente. Esto permite que dos sistemas se entiendan entre sí, lo que hace que este proceso se produzca de forma rápida y sin esfuerzo.
HTTP, el mismo protocolo que utilizan los navegadores web, es uno de los principales protocolos de comunicación empleados por las API. WebRequest() es una función MQL5 que actúa como intermediario entre su plataforma de trading y el servidor externo, gestionando dicha conexión. Comprenderemos mejor las API explorando el término en sus tres componentes: aplicación, programación e interfaz.
Aplicación
Cualquier programa informático que realiza funciones específicas se denomina aplicación. Puede tratarse de un sitio web, una aplicación móvil como Telegram o incluso MetaTrader 5. Cada programa gestiona sus propios datos y funciones internas.
Programación
Durante la programación se escribe código para permitir que los sistemas se comuniquen, y las API permiten a los desarrolladores utilizar las capacidades de una aplicación sin conocer completamente cómo funciona internamente.
Interfaz
Una interfaz es el punto donde dos sistemas se comunican entre sí. Describe la información que se puede compartir y la forma en que pueden comunicarse. Por ejemplo, aún puedes buscar y reproducir vídeos aunque no estén almacenados en tu equipo. Cuando haces clic en "Reproducir", YouTube se conecta a su servidor y comienza a reproducir el video. Al seleccionar "Reproducir", YouTube envía tu solicitud a su servidor y comienza a reproducir el video. Asimismo, MetaTrader 5 puede enviar y recibir mensajes cuando se conecta a una plataforma externa a través de una API.
Un sistema que permite la comunicación entre aplicaciones mediante instrucciones de programación bien definidas se denomina interfaz de programación de aplicaciones (API). Sirve de enlace entre tu plataforma de negociación y otras plataformas, como el correo electrónico o Telegram, lo que permite la automatización.
Analogía:
Imagina a Nikolai, un niño. Tiene mucha habilidad, pero a pesar de todo su talento, no puede hacerlo todo él solo. Puede que necesite ayuda, por ejemplo, con el canto. En lugar de adquirir todas estas habilidades, Nikolai tiene un compañero invisible llamado API. "API, por favor, pídele a mi amigo Iván que me cante esta canción" o "API, dile a Anastasia que me ayude a preparar la cena" son las frases que Nikolai usa para comunicarse con su amigo invisible siempre que necesita ayuda con algo que no puede hacer él mismo. Ivan o Anastasia se conectan rápidamente a través de la API, que luego envía la solicitud y devuelve el resultado.
No es imprescindible que Nikolai sepa cómo canta Ivan. Solo necesita saber qué pedir y cómo usar la API; así es precisamente como funcionan las API en el mundo digital.
Nikolai sirve como metáfora de la aplicación principal que se describe en esta historia, como MetaTrader 5. El puente que conecta MetaTrader 5 con otras plataformas, como el correo electrónico o Telegram, se llama "el amigo invisible" (API). MetaTrader 5 no necesita comprender cómo funciona el sistema interno de Telegram para enviar un mensaje a la aplicación de mensajería. Simplemente realiza una solicitud con la función WebRequest y Telegram la recibe.
Función WebRequest()
Analicemos la función WebRequest(), una de las herramientas más importantes de MQL5 que permite la comunicación con plataformas externas, ahora que sabemos qué es una API y cómo ayuda a MetaTrader 5 a lograrlo. En pocas palabras, WebRequest() actúa como un puente entre un servidor web externo y su terminal MetaTrader 5. Permite la transmisión y recepción de datos entre su EA e Internet. Esta función resulta útil tanto si desea comunicarse con una API personalizada como si desea recuperar datos de un servicio web.
Imagina el siguiente escenario: el servidor es una oficina al otro lado de la calle, y tu MetaTrader 5 es un operador sentado en una oficina. Los mensajes se transfieren entre las dos oficinas mediante la función WebRequest(). Por ejemplo, utilizando los métodos GET o POST, se puede indicar al mensajero qué mensaje enviar, dónde entregarlo y cómo entregarlo.
La función WebRequest() se utiliza para recuperar información de la web mediante la comunicación con un servidor externo, y puede utilizarse de diferentes maneras. Hay dos maneras de usar la función WebRequest().
La primera versión tiene este aspecto:
int WebRequest( const string method, // HTTP method const string url, // URL const string cookie, // cookie const string referer, // referer int timeout, // timeout const char &data[], // the array of the HTTP message body int data_size, // data[] array size in bytes char &result[], // an array containing server response data string &result_headers // headers of server response );
La segunda versión tiene este aspecto:
int WebRequest( const string method, // HTTP method const string url, // URL const string headers, // headers int timeout, // timeout const char &data[], // the array of the HTTP message body char &result[], // an array containing server response data string &result_headers // headers of server response );
La versión más común ofrece mayor versatilidad, especialmente al utilizar API contemporáneas como la de Telegram. Es perfecta para gestionar solicitudes que requieren algo más que una simple comunicación del tipo «clave=valor», ya que permite definir encabezados personalizados para adaptarse a las necesidades de la API. Dado que ofrece la flexibilidad necesaria para enviar, editar e incluso eliminar mensajes mediante la API de Telegram, esta segunda versión de la función WebRequest() será el tema principal de este artículo. Al comprender cómo funciona esta versión, podrás gestionar todos los aspectos de tu comunicación con otros servidores, desde el envío de tu primer mensaje a Telegram hasta la monitorización de las actualizaciones en tiempo real.
La función WebRequest() es especialmente fácil de usar porque MQL5 ha simplificado las cosas para los desarrolladores. No tienes que preocuparte por lo que ocurre en segundo plano durante la comunicación en línea. Lo más importante es comprender primero cómo funcionan los parámetros de la función, ya que cada uno de ellos es crucial para la forma en que se entrega la solicitud y se recibe la respuesta.
Método
El método HTTP es el primer parámetro de WebRequest() y ayuda a comunicar la acción deseada a un servidor remoto. En MQL5, usar "GET" o "POST" ayuda a tomar la decisión correcta, ya que afecta dónde se almacenan los datos y cómo se procesa la solicitud.
GET:
Esto se utiliza para solicitar datos de solo lectura.
POST:
En MQL5, dependiendo de cómo esté configurado el servidor, se puede utilizar POST para crear, eliminar o modificar datos, además de para enviarle datos.
URL
La URL es la dirección web que indica a MQL5 dónde debe enviar su solicitud.
Ejemplos:const string url = telegram_api_url + "/bot" + bot_token + "/sendMessage"; const string url = telegram_api_url + "/bot" + bot_token + "/editMessageText"; const string url = telegram_api_url + "/bot" + bot_token + "/deleteMessage";
Cada una de estas URL realiza una tarea específica en el servidor de Telegram. La función WebRequest() envía tus datos a la URL indicada, y la API de Telegram los procesa según el punto final que se haya elegido. Por ejemplo, puedes indicarle a Telegram que genere un nuevo mensaje en un chat utilizando el punto final sendMessage. Cuando utilizas editMessageText, le indicas que modifique un mensaje existente. Además, al usar deleteMessage le estás indicando que borre un mensaje.
telegram_api_url:
Este es el nombre de la variable que almacena la URL base de la API:
const string telegram_api_url = "https://api.telegram.org";
Todas las solicitudes del bot de Telegram se reenvían a esta URL base. Puede considerarse como el "edificio principal" en el que funcionan todos los bots de Telegram. Esta dirección principal es donde comienzan todas tus acciones, incluyendo el envío, la edición y la eliminación de mensajes.
/bot:
Gracias a esta sección, Telegram sabe que estás intentando contactar con un bot en lugar de con una cuenta de usuario normal. Las siguientes actividades serán gestionadas por el sistema de bots de Telegram, tal como lo indica esta palabra clave. En pocas palabras, /bot funciona como un aviso que indica que "esta solicitud está destinada al departamento de bots" dentro del edificio principal de Telegram.
bot_token:
El token del bot es una larga cadena de caracteres y números que se utiliza como clave de acceso del bot; es una de las partes más importantes de cualquier conexión API. Esta clave permite el contacto directo entre su programa MQL5 y el servidor. Cada vez que su EA envía una WebRequest, el token notifica a Telegram que "Esta solicitud proviene de mi bot y tengo permiso para realizar esta acción". También funciona como contraseña para acceder al bot.
El token de tu bot debe mantenerse siempre privado y seguro debido a su importancia, ya que cualquier persona con acceso a tu bot puede tomar el control de él y enviar mensajes en tu nombre. Por lo tanto, mantenerlo en un área segura, como un archivo de configuración diferente o como una variable de entrada externa en su EA, es un hábito inteligente. Para vincular tu programa MetaTrader 5 con Telegram, más adelante en este artículo te mostraré cómo obtener el token de tu bot directamente desde Telegram usando BotFather.
string url = telegram_api_url + "/bot" + bot_tokеn + "/sendMessage";
"Hola, quiero enviar un mensaje usando el punto final sendMessage", es esencialmente lo que le estás diciendo a Telegram. Este es mi token para demostrarlo.
Encabezados
El siguiente parámetro que vamos a analizar es el encabezado. Esto es más bien una instrucción o autorización que se añade a la solicitud.
Ejemplo:
const string headers = "";
Timeout
Este parámetro se utiliza para especificar cuánto tiempo debe esperar el EA para recibir una respuesta del servidor después de enviar una solicitud.
Ejemplo:
int timeout = 5000; // 5000 milliseconds = 5 seconds
En este caso, MetaTrader 5 esperará cinco segundos para obtener una respuesta. Transcurrido ese tiempo, MetaTrader 5 deja de intentar conectarse y la solicitud falla. El timeout puede compararse con esperar a que un amigo conteste el teléfono. Puedes optar por colgar si no responden en diez segundos. "Si el servidor no responde dentro del tiempo que he establecido, dejaré de esperar" es otra afirmación que hace su software MetaTrader 5.
Data
El mensaje que desea enviar desde MetaTrader 5 a la plataforma externa se almacena en una variable de tipo array de caracteres, lo cual es fundamental.
string body = "chat_id=" + chatID + "&text=Hello from MT5!"; StringToCharArray(body, data, 0);
Dado que los datos se transfieren como bytes en lugar de simplemente como texto, el mensaje se convierte de una cadena normal en un array de caracteres. Para determinar qué mensaje en particular debe modificarse, también se utiliza el ID del mensaje.
Ejemplo:
string body = "chat_id=" + chatID + "&message_id=" + MessageID + "&text=Hello from MT5!"; StringToCharArray(body, data, 0);
Y si quieres eliminar un mensaje que ya se ha enviado, puedes hacerlo así:
string body = "chat_id=" + chatID + "&message_id=" + MessageID; StringToCharArray(body, data, 0);
El chat_id es un identificador único para tu grupo o bot de Telegram, similar a tu nombre de usuario único. Proporciona al servidor la ubicación precisa a la que debe enviar su mensaje, y puede compararse con una dirección particular. Un chat_id incorrecto impedirá que el mensaje llegue al grupo de chats al que se espera que llegue. Cada grupo de Telegram tiene su propio ID distintivo, por lo que al agregarlo al cuerpo de tu mensaje, básicamente estás indicando que el mensaje debe enviarse a una dirección precisa.
Cada mensaje que envías tiene un message_id, que es un número de identificación único asociado. Este número único resulta útil cuando se desea eliminar o editar el mensaje en el código.
Por el contrario, el bot_token sirve como contraseña o clave de acceso de tu bot. Se trata de una clave de autenticación especial que vincula tu bot de Telegram con tu aplicación MetaTrader 5. Se puede comparar con la tarjeta de identificación de tu bot. Tu mensaje nunca se enviará, ya que Telegram no podrá identificar qué bot lo está solicitando sin este token.
Ahora, para que quede más claro:
- El ID del chat le indica al servidor dónde enviar el mensaje.
- A continuación, el ID del mensaje le indica qué mensaje específico debe modificar o eliminar.
- El token del bot le indica a Telegram quién está realizando la solicitud.
Más adelante en este artículo, explicaré cómo recuperar tu ID de chat, ID de mensaje y token de bot, y cómo utilizarlos correctamente en Telegram.
Examinemos ahora el array data[] con más detalle. La caja de entrega que transporta su mensaje desde MetaTrader 5 al servidor de Telegram se llama Data[]. Lo primero que debes hacer es insertar el texto que deseas enviar en una variable de cadena llamada "body". Por ejemplo, "¡Hola desde MT5!". Para garantizar que este mensaje viaje de forma segura por la red, debes empaquetarlo correctamente antes de enviarlo. Esto se logra utilizando StringToCharArray() para transformar su mensaje (cadena) en un array de caracteres que el mensajero WebRequest() pueda comprender.
Parámetro result
La variable result de la función WebRequest() contiene la respuesta del servidor, incluyendo información adicional como el ID del mensaje o la confirmación de que el mensaje se envió correctamente.
Ejemplo:char res[]; WebRequest("POST", url, "", 5000, data, res, resHeaders); Print(CharArrayToString(res));
Resultado:
{
"ok": true,
"result": {
"message_id": 24,
"from": {
"id": 9467412345,
"is_bot": true,
"first_name": "MQL5 API BOT",
"username": "MQL5APItest_bot"
},
"chat": {
"id": -400395312345,
"title": "Bot Testing Group",
"type": "supergroup"
},
"date": 1761412345,
"text": "Hello from MT5!"
}
}
El message_id es crucial en este caso. Posteriormente, podrá actualizar o eliminar el mensaje exacto utilizando este ID. Por lo tanto, utilizará ese message_id al realizar otra llamada WebRequest si decide cambiar el texto del mensaje o eliminarlo por completo.
Piénsalo de esta manera: Telegram te proporciona un recibo de entrega (almacenado dentro de res[]) al enviar un mensaje a través de MetaTrader 5, verificando la entrega y asignando un número de seguimiento (el ID del mensaje). Siempre podrá localizar, modificar o eliminar el mensaje posteriormente utilizando ese número.
Encabezados de respuesta
Los encabezados que el servidor devuelve después de procesar su solicitud se almacenan en este último parámetro de la función WebRequest(). Se declara como:
string resHeaders = ""; WebRequest("POST", url, "", 5000, data, res, resHeaders); Print(resHeaders);
Resultado:

Los encabezados y el cuerpo (o contenido) son los dos componentes principales que el servidor web suele proporcionar en respuesta a una solicitud enviada por su software MQL5. Estos datos de encabezado de la respuesta del servidor son capturados por el parámetro result_headers.
Estos encabezados frecuentemente incluyen información técnica crucial como:
- El tipo de contenido, que indica el formato de la respuesta.
- Nombre y versión del servidor.
- La fecha y hora de la respuesta.
- Tipo de conexión, que indica si la conexión permanece abierta o no.
Estos datos proporcionan información de seguridad y conexión, verifican que el servidor de Telegram recibió correctamente la solicitud e indican el tipo de contenido devuelto. Es fundamental tener en cuenta que la función WebRequest() utiliza encabezados y result_headers para diversos fines. Los datos que usted transmite al servidor con su solicitud están representados por el tercer argumento, los encabezados. Estos encabezados especifican el tipo de datos que se están enviando y, si es necesario, contienen información de autenticación.
En cambio, los datos que el servidor te devuelve se almacenan en el parámetro final (result_headers). Además de otra información técnica útil, explica cómo se tramitó la solicitud y qué tipo de contenido se devolvió. Este proceso se puede simplificar comparándolo con el intercambio de correo entre dos oficinas. Al igual que una etiqueta que se coloca en una carta antes de enviarla, el parámetro de encabezados describe el contenido y cómo debe tratarse. La opción result_headers indica el origen del sobre, la fecha de envío y el método de entrega, de forma similar a los sellos y marcas que aparecen en un sobre que se recibe de vuelta. Aunque cumplen funciones diferentes en la comunicación entre MetaTrader 5 y un servidor externo, ambas son cruciales.
Envío de mensajes desde MetaTrader 5 a un bot de Telegram
Ahora que ya comprende a fondo cómo funcionan las API de MQL5 y la función WebRequest(), es hora de aplicar lo aprendido. Esta parte nos enseñará cómo enviar un mensaje desde MetaTrader 5 a un bot de Telegram, poniendo la teoría en práctica. Aquí es donde todo lo que hemos comentado empieza a tener sentido. Para permitir que su software MetaTrader 5 envíe, actualice o elimine mensajes en un bot o grupo de Telegram.
Para acceder a la ventana de Opciones en su software MetaTrader 5, pulse Ctrl + O. A continuación, seleccione la pestaña de Asesores Expertos. La casilla de verificación "Permitir WebRequest para la URL indicada" se encuentra debajo de esta sección. Para activar la casilla, haga clic en ella.
A continuación, en el campo de abajo, escriba la siguiente URL:
https://api.telegram.org 
Buscar BotFather.

Selecciona /newbot para crear un nuevo bot.

Elige un nombre para mostrar a tu bot.

Elige un nombre de usuario, y este debe terminar en "bot" o "_bot".

Se le enviará un mensaje de inmediato, y este mensaje incluirá dos detalles importantes:
- Tu token de bot: esta es una clave única que te permite conectar tu bot con plataformas externas como MetaTrader 5. Lo usarás dentro de tu código MQL5 al enviar mensajes a través de la API de Telegram.
- Enlace a tu bot: este es el enlace a tu bot; haz clic en él para abrirlo directamente e iniciar un chat.

Introduce esta URL en la barra de direcciones de tu navegador.
https://api.telegram.org/bot<YourBotToken>/getUpdates Introduce el token real que has obtenido de BotFather en el campo «<YourBotToken>».
Por ejemplo, tu URL debería tener un aspecto similar a este si tu token es 123456789:ABCdefGhIJklMNopQRstuVWxyz:
https://api.telegram.org/bot123456789:ABCdefGhIJklMNopQRstuVWxyz/getUpdates 
Se abrirá una página con una respuesta en texto. Aparecerá un recuadro delante de "Pretty-print" en esa página. Haz clic en el enlace.
Vuelve a tu bot de Telegram y haz clic en el botón Iniciar.

Vuelve a tu navegador y actualiza la página.

La página mostrará una actualización reciente. Según esta actualización, tu bot se ha activado correctamente. Además, te ofrecerá datos útiles como tu ID de chat, que necesitarás para enviar mensajes a tu bot de Telegram desde MetaTrader 5. El siguiente paso es crear un nuevo archivo EA en MetaEditor 5 después de completar todas las etapas mencionadas anteriormente.
Utilizando tu ID de chat y tu token de bot, accederás a la API de Telegram en este EA. Desde allí, podrá enviar mensajes personalizados directamente desde MetaTrader 5. Este es el primer paso de la sección práctica, donde aplicarás todo lo que has aprendido sobre WebRequest() y la comunicación mediante API.
Ejemplo:const string method = "POST"; const string telegram_api_url = "https://api.telegram.org"; const string bot_chatID = "6972412345"; const string headers = ""; const int time_out = 5000; const string bot_token = "8345012345:AAHdAPtMQR6VHEQeHk1y_H9IuL3zc5abcde"; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- char data[]; char res[]; string resHeaders = ""; string body = "chat_id=" + bot_chatID + "&text=Hello from MT5!"; StringToCharArray(body, data, 0); string url = telegram_api_url + "/bot" + bot_token + "/sendMessage"; WebRequest(method,url,headers,time_out,data,res,resHeaders); //--- return(INIT_SUCCEEDED); }
Resultado:

Explicación:
El ID del chat, los encabezados, el tiempo de espera, el método HTTP, la URL de la API de Telegram y el token del bot se especificaron como constantes. El método POST indica a MetaTrader 5 que debe enviar datos al servidor. No se requieren otros encabezados; el ID del chat identifica el grupo o chat específico de Telegram, y MetaTrader 5 esperará cinco segundos para obtener una respuesta antes de que se agote el tiempo de espera.
Dentro de la función OnInit() se declaran tres variables: data, res y resHeaders. El array de datos contiene el formato de caracteres del mensaje que se va a transmitir, ya que WebRequest() necesita datos binarios. La respuesta del servidor se guarda en res, y resHeaders contiene datos adicionales del servidor, como la fecha y el tipo de contenido.
La función OnInit() declara tres variables: data, res y resHeaders. Dado que WebRequest() requiere datos binarios, la matriz de datos proporciona el formato de caracteres del mensaje. La respuesta del servidor se almacena en res, y resHeaders contiene información adicional del servidor, como la fecha y el tipo de contenido. El siguiente paso es construir la URL completa de la API de Telegram que gestionará la solicitud de mensajes. Esto se hace con la línea:
string url = telegram_api_url + "/bot" + bot_token + "/sendMessage";
Aquí, todas las partes se combinan para crear un enlace completo como este:
https://api.telegram.org/bot8345012345:AAHdAPtMQR6VHEQeHk1y_H9IuL3zc5abcde/sendMessage. Esta URL le indica al servidor que queremos enviar un mensaje utilizando el bot cuyo token se ha proporcionado.
WebRequest(method, url, headers, time_out, data, res, resHeaders); El método POST y la URL proporcionada se utilizan para enviar los datos del array de caracteres a la API de Telegram. Aunque aquí están vacíos, los encabezados pueden contener información adicional. El tiempo que MetaTrader 5 espera una respuesta viene determinado por el parámetro time_out. Si bien resHeaders recopila información adicional de la respuesta, como el tipo de servidor, la longitud del contenido, la fecha y los datos de conexión, la respuesta del servidor se almacena en el array res.
En resumen, este programa vincula MetaTrader 5 con tu bot de Telegram y envía un mensaje de saludo a tu chat de Telegram que dice: "¡Hola desde MetaTrader 5!".
Envío de mensajes desde MetaTrader 5 a un grupo de Telegram
El siguiente paso es aprender a enviar mensajes a un grupo de Telegram en lugar de a un bot de Telegram, y el proceso es similar, aunque con algunas diferencias, para los grupos que para los bots.
Haz clic en el icono de perfil del grupo después de crear un grupo de Telegram.

Navegue hasta “Administrar grupo” entre las opciones que aparecen y, a continuación, haga clic en “Administradores”.

Haz clic en "Añadir administrador" y usa la barra de búsqueda para encontrar el bot de Telegram que creaste anteriormente usando su nombre de usuario (por ejemplo, @MQL5APTtest_bot).

Tras seleccionar tu bot, otórgale los permisos necesarios para operar en el grupo.

Vuelve a tu grupo de Telegram y envía un mensaje.

Vuelve a tu navegador y abre de nuevo el enlace de la API de Telegram:
https://api.telegram.org/bot<YourBotToken>/getUpdates Tras recargar la página web, aparecerá una respuesta en formato JSON con información sobre el mensaje que acabas de enviar al grupo. El chat_id de tu grupo de Telegram se puede encontrar en el área de chat de esta respuesta. Para enviar mensajes directamente a ese grupo, deberá usar este chat_id en su código de MetaTrader 5.

Ahora puedes utilizar el ID de chat de tu grupo de Telegram en tu código MQL5, ya que has podido recuperarlo. Cualquier mensaje o notificación que envíe desde MetaTrader 5 ahora llegará directamente a ese grupo específico de Telegram, ya que tu programa puede identificar exactamente a qué chat deben enviarse los mensajes.
Ejemplo:const string method = "POST"; const string telegram_api_url = "https://api.telegram.org"; const string bot_chatID = "6972412345"; const string headers = ""; const int time_out = 5000; const string group_chatID = "-1003271234567"; const string bot_token = "8345012345:AAHdAPtMQR6VHEQeHk1y_H9IuL3zc5abcde"; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- char data[]; char res[]; string resHeaders = ""; string body = "chat_id=" + group_chatID + "&text=Hello from MT5!"; StringToCharArray(body, data, 0); string url = telegram_api_url + "/bot" + bot_token + "/sendMessage"; WebRequest(method,url,headers,time_out,data,res,resHeaders); //--- return(INIT_SUCCEEDED); }
Resultado:

Explicación:
Hemos declarado una variable de cadena para almacenar el ID del chat grupal. Sin embargo, utilice group_chatID si desea que el mensaje se entregue a su grupo de Telegram.
Además, utilizamos la línea Print(CharArrayToString(res)); para obtener la respuesta del servidor. Esta respuesta incluye información importante, en particular el message_id del mensaje transmitido. En la siguiente sección, aprenderemos cómo cambiar o eliminar el mensaje directamente desde MetaTrader 5; por lo tanto, este ID de mensaje será de gran ayuda.
Eliminar un mensaje con la función WebRequest()
Se puede enviar una solicitud de eliminación directamente al servidor de Telegram utilizando la función WebRequest(). Los bots pueden eliminar mensajes de los grupos siempre que conozcas el ID del mensaje que deseas eliminar. El bot puede eliminar mensajes del grupo, así como los mensajes que él mismo envía, porque es un administrador (dependiendo de los permisos que le hayas otorgado previamente).
Por este motivo, era fundamental que imprimiéramos los resultados cuanto antes. Recordemos que la respuesta del servidor fue la siguiente:
{
"ok": true,
"result": {
"message_id": 34,
"from": {
"id": 1234500523,
"is_bot": true,
"first_name": "MQL5 API Bot",
"username": "MQL5APItest_bot"
},
"chat": {
"id": -1234577012345,
"title": "Bot Testing Group",
"type": "supergroup"
},
"date": 1761498168,
"text": "Hello from MT5 to Telegram Group!"
}
}
Como se puede observar en esta respuesta, Telegram devuelve datos útiles, como el message_id. Gracias a este ID, puedes usar la función WebRequest para cambiar o eliminar ese mensaje en particular más adelante.
La única vez que recibirás el ID del mensaje es cuando lo envía el EA. Si enviaste el mensaje manualmente al grupo, entonces tendrás que ir a "https://api.telegram.org/bot<YourBotToken>/getUpdates" buscando el mensaje y copiando su ID.
https://api.telegram.org/bot<YourBotToken>/getUpdates Ejemplo:
const string method = "POST"; const string telegram_api_url = "https://api.telegram.org"; const string bot_chatID = "6972412345"; const string group_chatID = "-1003277012345"; const string headers = ""; const int time_out = 5000; const string bot_token = "8345012345:AAHdAPtMWR6VHEQeHk1y_H9IuL3zc5abcde"; const string MessageID = "34"; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- char data[]; char res[]; string resHeaders = ""; const string url = telegram_api_url + "/bot" + bot_token + "/deleteMessage"; string body = "chat_id=" + group_chatID +"&message_id=" + MessageID; StringToCharArray(body, data, 0); WebRequest(method,url,headers,time_out,data,res,resHeaders); // Print(CharArrayToString(res)); //--- return(INIT_SUCCEEDED); }
Explicación:
Se ha seleccionado la opción POST. La API de Telegram requiere el método POST para eliminar mensajes, aunque podría parecer que debería usarse el método DELETE. Se le indica a MQL5 que transmita datos al servidor en el cuerpo de la solicitud mediante el método POST. Consideremos el comando POST como el envío de una carta con instrucciones al servidor de Telegram. Aun así, debes escribir el mensaje en una carta y enviarlo, incluso si la orden es eliminarlo.
El mensaje que desea eliminar se identifica por su MessageID. Telegram asigna un ID de mensaje único a cada mensaje enviado por un humano o por el bot en un chat. Puedes indicarle al servidor de Telegram qué mensaje eliminar utilizando este ID. Este identificador de mensaje se suele obtener de la respuesta del servidor tras el envío de un mensaje.
Para crear el punto final completo para eliminar mensajes, la URL consta de varios componentes. La dirección API de Telegram es la URL base. La solicitud proviene de un bot, como lo indica el componente del bot. La clave de autenticación especial para tu bot se llama token del bot. Por último, si incluyes deleteMessage, el servidor sabrá que deseas eliminar algo. En conjunto, estas URL indican la ubicación precisa a la que debe enviar su solicitud de eliminación.
Los identificadores de chat y de mensaje se incluyen en el cuerpo de la solicitud. Telegram recibe información a partir del ID del mensaje sobre qué mensaje específico debe eliminar y del ID del chat sobre a qué chat o grupo pertenece dicho mensaje. El comando que le estás dando al servidor está básicamente incluido en este cuerpo.
Edición de mensajes con la función WebRequest()
El uso de la función WebRequest() para modificar un mensaje será nuestro último tema de discusión. Debes tener en cuenta que, a la hora de editar, solo puedes modificar los mensajes que hayan sido enviados por tu bot. El bot no puede modificar los mensajes enviados por otros usuarios directamente al grupo.
Enviar o eliminar un mensaje funciona de forma similar a editarlo. También estamos utilizando tanto el token del bot como el ID del mensaje.
Para utilizar la función WebRequest(), se requieren el método POST, el punto final URL correspondiente para la edición de mensajes y un cuerpo que incluya el ID del chat, el ID del mensaje y el texto actualizado que desea enviar. Esto mantiene constante el ID del mensaje, al tiempo que permite que su software MetaTrader 5 actualice el mensaje de forma dinámica.
Ejemplo:
const string method = "POST"; const string telegram_api_url = "https://api.telegram.org"; const string bot_chatID = "6972412345"; const string group_chatID = "-10032771234567"; const string headers = ""; const int time_out = 5000; const string bot_token = "345012345:AAHdAPtMWR6VHEQeHk1y_H9IuL3zc5abcde"; const string MessageID = "35"; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- char data[]; char res[]; string resHeaders = ""; string new_message = "Updated message text from MT5!"; string url = telegram_api_url + "/bot" + bot_token + "/editMessageText"; string body = "chat_id=" + group_chatID +"&message_id=" + MessageID + "&text=" + new_message; StringToCharArray(body, data, 0); WebRequest(method,url,headers,time_out,data,res,resHeaders); Print(CharArrayToString(res)); //--- return(INIT_SUCCEEDED); }
Explicación:
Primero se define el texto del nuevo mensaje que desea enviar. El mensaje original en el grupo o chat de Telegram será reemplazado por este material. La URL se crea combinando el endpoint /editMessageText, el token del bot y la URL base. Este endpoint indica a Telegram que la solicitud debe editar un mensaje existente. A continuación, se crea el cuerpo de la solicitud. El ID del mensaje indica qué mensaje específico se debe modificar, el ID del chat indica a qué conversación o grupo pertenece el mensaje, y el texto adicional que se desea agregar está contenido en él. Finalmente, se crea un array de caracteres a partir de la cadena del cuerpo del mensaje. Esto es necesario porque, para entregar el cuerpo del mensaje a través de la web, el método WebRequest lo necesita en formato de array de caracteres.
Conclusión
Este artículo te enseñó los conceptos básicos del uso de la función WebRequest() y las API de MQL5. Mediante un proyecto práctico, exploramos cómo MetaTrader 5 puede interactuar con una plataforma externa como Telegram. Aprendiste a enviar, editar o eliminar mensajes directamente desde MetaTrader 5, obtener identificadores de chat y de grupo, y crear un bot de Telegram. Para que comprendas mejor la integración práctica de API, en los próximos artículos daremos un paso más allá y aprenderemos a recibir y procesar datos de API externas.
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/17774
Advertencia: todos los derechos de estos materiales pertenecen a MetaQuotes Ltd. Queda totalmente prohibido el copiado total o parcial.
Este artículo ha sido escrito por un usuario del sitio web y refleja su punto de vista personal. MetaQuotes Ltd. no se responsabiliza de la exactitud de la información ofrecida, ni de las posibles consecuencias del uso de las soluciones, estrategias o recomendaciones descritas.
Utilizando redes neuronales en MetaTrader
Simulación de mercado: Position View (XIX)
Particularidades del trabajo con números del tipo double en MQL4
Del básico al intermedio: Colas, listas y árboles (VIII)
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso