{"id":1272,"date":"2025-12-17T20:07:59","date_gmt":"2025-12-17T17:07:59","guid":{"rendered":"http:\/\/api-sport.pro\/?p=1272"},"modified":"2025-12-17T20:07:59","modified_gmt":"2025-12-17T17:07:59","slug":"como-crear-un-bot-de-telegram-con-analisis-xg-de-partidos","status":"publish","type":"post","link":"https:\/\/api-sport.pro\/es\/como-crear-un-bot-de-telegram-con-analisis-xg-de-partidos\/","title":{"rendered":"\u00bfC\u00f3mo crear un bot de Telegram con an\u00e1lisis xG de partidos?"},"content":{"rendered":"<div class=\"table-of-contents\">\n<div class=\"table-of-contents-title\">Contenidos<\/div>\n<ul class=\"table-of-contents-ul\">\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-1\">\u00bfQu\u00e9 es xG en el f\u00fatbol y por qu\u00e9 necesitas un bot de Telegram con an\u00e1lisis de xG?<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-2\">Elegir una API de eventos deportivos para obtener estad\u00edsticas de xG de partidos.<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-3\">C\u00f3mo obtener claves y configurar el acceso a la API de estad\u00edsticas de f\u00fatbol.<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-4\">C\u00f3mo crear y registrar un bot de Telegram para an\u00e1lisis de f\u00fatbol.<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-5\">Conectando la API de an\u00e1lisis de xG al bot de Telegram: instrucciones paso a paso.<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-6\">Ejemplos de solicitudes de API y c\u00f3digo de bot de Telegram con an\u00e1lisis de xG de partidos.<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-7\">C\u00f3mo configurar notificaciones en Telegram para xG y otras m\u00e9tricas de partidos.<\/a><\/li>\n<\/ul>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-1\">\u00bfQu\u00e9 es xG en el f\u00fatbol y por qu\u00e9 necesitas un bot de Telegram con an\u00e1lisis de xG?<\/h2>\n<p>xG (goles esperados) es una m\u00e9trica que eval\u00faa la probabilidad de que un tiro espec\u00edfico a puerta resulte en un gol. Utiliza docenas de factores para el c\u00e1lculo: distancia a la porter\u00eda, \u00e1ngulo del tiro, tipo de pase (centro, globito, pase filtrado), posici\u00f3n de los defensores y el portero, tipo de tiro (cabeza, pie), situaci\u00f3n (penalti, jugada a bal\u00f3n parado, juego abierto) y mucho m\u00e1s. Como resultado, cada intento de ataque recibe un valor de 0 a 1, y el xG total del equipo muestra cu\u00e1ntos goles \u00abdeber\u00edan haber\u00bb anotado seg\u00fan la calidad de las oportunidades.<\/p>\n<p>A diferencia del contador de tiros y la posesi\u00f3n del bal\u00f3n, el xG responde a una pregunta m\u00e1s precisa: qui\u00e9n cre\u00f3 momentos verdaderamente peligrosos y qui\u00e9n simplemente control\u00f3 el bal\u00f3n sin una amenaza real. Por eso, la m\u00e9trica se utiliza ampliamente en an\u00e1lisis profesionales, scouting, medios y apuestas. Comparar el marcador real y el xG permite ver qui\u00e9n tuvo suerte y qui\u00e9n fall\u00f3 sus goles, evaluar la sostenibilidad de los resultados actuales y la calidad del juego del equipo a lo largo del tiempo.<\/p>\n<p>Un bot de Telegram con an\u00e1lisis de xG convierte estad\u00edsticas complejas en una herramienta conveniente que siempre est\u00e1 a mano para aficionados, analistas o apostadores. El usuario puede averiguar en un par de clics c\u00f3mo cambi\u00f3 el balance de oportunidades durante el partido, qui\u00e9n domina en t\u00e9rminos de calidad de oportunidades y en qu\u00e9 momento el riesgo o valor en las apuestas se vuelve m\u00e1s interesante. El bot puede enviar notificaciones push cuando hay un aumento brusco en el xG, aparece una serie de ataques peligrosos o hay una discrepancia entre el marcador y los goles esperados.<\/p>\n<p>La base de tal soluci\u00f3n es datos deportivos de alta calidad en modo en vivo. A trav\u00e9s de <a href=\"http:\/\/api-sport.pro\/es\/\">API de eventos deportivos<\/a> obtienes estad\u00edsticas detalladas de partidos de f\u00fatbol, incluyendo tiros, momentos, posesi\u00f3n, duelos y otras m\u00e9tricas clave. Basado en ellos, puedes construir tu propio modelo de c\u00e1lculo de xG e integrarlo en un bot de Telegram, ampliando la funcionalidad con otros deportes, esports y cuotas de apuestas a medida que el proyecto crece.<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-2\">Elegir una API de eventos deportivos para obtener estad\u00edsticas de xG de partidos.<\/h2>\n<p>Para que el bot de Telegram con an\u00e1lisis de xG funcione de manera confiable y proporcione a los usuarios pistas precisas, se necesita una fuente de datos confiable. Es cr\u00edtico que la API proporcione no solo el marcador del partido, sino tambi\u00e9n estad\u00edsticas extendidas: tiros a puerta y fuera de puerta, tiros desde dentro y fuera del \u00e1rea penal, \u00abgrandes oportunidades\u00bb, posesi\u00f3n, n\u00famero de pases y entradas en el tercio final. Tales indicadores se encuentran en el objeto <code>estad\u00edsticasDelPartido<\/code> en la API de Eventos Deportivos y permiten construir tus propios modelos de goles esperados.<\/p>\n<p>Un par\u00e1metro de selecci\u00f3n importante es el soporte para modo en vivo y la velocidad de actualizaci\u00f3n de datos. Para un bot que analiza xG \u00absobre la marcha\u00bb, es esencial que las estad\u00edsticas se actualicen durante el partido, no solo despu\u00e9s del pitido final. Los endpoints <code>\/v2\/f\u00fatbol\/partidos<\/code> \u0438 <code>\/v2\/f\u00fatbol\/partidos\/{matchId}<\/code> devuelven no solo informaci\u00f3n b\u00e1sica, sino tambi\u00e9n campos <code>minutoDelPartidoActual<\/code>, <code>eventosEnVivo<\/code> \u0438 <code>estad\u00edsticasDelPartido<\/code>, que permiten rastrear el curso del juego en tiempo real, la aparici\u00f3n de momentos peligrosos y la din\u00e1mica de la actividad ofensiva.<\/p>\n<p>Tambi\u00e9n vale la pena se\u00f1alar c\u00f3mo la API se escala bajo diferentes escenarios. La plataforma <a href=\"http:\/\/api-sport.pro\/es\/\">api-sport.pro<\/a> soporta f\u00fatbol, hockey, baloncesto, tenis, tenis de mesa, esports y otros deportes, y tambi\u00e9n contiene un bloque de datos sobre mercados de apuestas (<code>oddsBase<\/code>). Esto significa que puedes comenzar con un bot de Telegram para f\u00fatbol y xG, y luego expandir gradualmente la funcionalidad: a\u00f1adiendo an\u00e1lisis para otros deportes, combinando xG con la din\u00e1mica de las cuotas de las casas de apuestas, conectando capacidades futuras de WebSocket y modelos de IA sin una revisi\u00f3n completa de la arquitectura del bot.<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-3\">C\u00f3mo obtener claves y configurar el acceso a la API de estad\u00edsticas de f\u00fatbol.<\/h2>\n<p>El primer paso para crear un bot de Telegram con an\u00e1lisis xG es obtener acceso a la API de Eventos Deportivos. Para hacer esto, necesitas registrarte en <a href=\"https:\/\/app.api-sport.ru\">la cuenta personal.<\/a>, crear un proyecto y generar una clave API \u00fanica. La clave se utiliza para autorizar cada solicitud y se pasa en el encabezado <code>Autorizaci\u00f3n<\/code>. Este enfoque permite una gesti\u00f3n flexible de l\u00edmites, seguimiento transparente del tr\u00e1fico y restringir el acceso si es necesario.<\/p>\n<p>Despu\u00e9s de obtener la clave, puedes probar inmediatamente solicitudes b\u00e1sicas a la secci\u00f3n de f\u00fatbol de la API. Todos los deportes utilizan un formato de URL unificado con el par\u00e1metro <code>{sportSlug}<\/code>, as\u00ed que para f\u00fatbol, la ruta base ser\u00e1 la siguiente: <code>https:\/\/api.api-sport.ru\/v2\/football<\/code>. Para, por ejemplo, obtener una lista de partidos en vivo actuales con estad\u00edsticas b\u00e1sicas, es suficiente enviar una solicitud GET al endpoint <code>\/matches<\/code> con el par\u00e1metro <code>estado=enprogreso<\/code> y el encabezado de autorizaci\u00f3n.<\/p>\n<p>Un ejemplo de una solicitud simple a trav\u00e9s de <code>curl<\/code> podr\u00eda verse as\u00ed:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\" data-no-translation=\"\">curl -X GET &quot;https:\/\/api.api-sport.ru\/v2\/football\/matches?status=inprogress&quot; \\\n  -H &quot;Authorization: \u0412\u0410\u0428_API_\u041a\u041b\u042e\u0427&quot;<\/pre>\n<p>En respuesta, recibir\u00e1s un objeto JSON con el campo <code>totalMatches<\/code> y un array <code>partidos<\/code>. Cada elemento del array contiene el ID del partido, el marcador, el estado, el minuto actual, as\u00ed como un array <code>estad\u00edsticasDelPartido<\/code> si las estad\u00edsticas est\u00e1n disponibles. Estos datos se utilizar\u00e1n para calcular xG dentro de tu servidor o directamente en el c\u00f3digo del bot de Telegram. Es importante manejar correctamente los c\u00f3digos de error (por ejemplo, 401 por una clave incorrecta o por exceder el l\u00edmite) y proporcionar un registro de solicitudes; esto simplificar\u00e1 la depuraci\u00f3n y escalado del proyecto.<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-4\">C\u00f3mo crear y registrar un bot de Telegram para an\u00e1lisis de f\u00fatbol.<\/h2>\n<p>Una vez que se configure el acceso a la API deportiva, puedes proceder a crear el bot de Telegram. Para registrar un bot en Telegram, necesitas contactar al bot del servicio BotFather, ejecutar el comando para crear un nuevo bot, establecer un nombre y un @username \u00fanico. En respuesta, BotFather emitir\u00e1 un token en el formato <code>123456789:ABCDEF...<\/code> \u2014 debe ser guardado y utilizado en el lado del servidor para trabajar con la API del Bot.<\/p>\n<p>A continuaci\u00f3n, se elige un stack tecnol\u00f3gico para implementar la l\u00f3gica. A menudo, se utiliza Python para tales tareas (bibliotecas <code>aiogram<\/code>, <code>python-telegram-bot<\/code>) o Node.js (<code>node-telegram-bot-api<\/code>, <code>telegraf<\/code>). El lenguaje no es cr\u00edtico: lo principal es que el marco elegido permita un manejo conveniente de comandos, botones de callback, solicitudes en l\u00ednea y funcione de manera as\u00edncrona; esto es especialmente \u00fatil al acceder frecuentemente a la API externa de eventos deportivos.<\/p>\n<p>Un stack m\u00ednimo t\u00edpico para un proyecto en Python incluye la instalaci\u00f3n de la biblioteca cliente de Telegram y un cliente HTTP para trabajar con la API REST:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\" data-no-translation=\"\">pip install aiogram requests<\/pre>\n<p>Se recomienda almacenar el token del bot de Telegram y la clave de la API de Eventos Deportivos en variables de entorno o en un archivo de configuraci\u00f3n separado que no entre en el control de versiones. Este enfoque mejora la seguridad y simplifica la transferencia del bot entre los entornos de prueba y producci\u00f3n. En esta etapa, puedes implementar un comando simple, por ejemplo <code>\/start<\/code>, para asegurar que el bot responda a los usuarios, y solo entonces proceder a integrar an\u00e1lisis xG y solicitudes a la API de eventos deportivos.<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-5\">Conectando la API de an\u00e1lisis de xG al bot de Telegram: instrucciones paso a paso.<\/h2>\n<p>La integraci\u00f3n de an\u00e1lisis xG en el bot de Telegram se basa en una cadena clara: el bot recibe un comando del usuario, solicita los datos necesarios de la API de Eventos Deportivos, calcula xG basado en el modelo elegido y devuelve el resultado en un formato de texto o gr\u00e1fico conveniente. En la pr\u00e1ctica, esto significa varios pasos secuenciales que son f\u00e1cilmente escalables a medida que crece la funcionalidad.<\/p>\n<p>Primero, el bot determina qu\u00e9 partidos interesan al usuario: puede ser una liga espec\u00edfica, un equipo o simplemente una lista de todos los partidos en vivo actuales. Por ejemplo, al solicitar, <code>\/live<\/code>, el bot consulta el endpoint <code>\/v2\/f\u00fatbol\/partidos<\/code> con un filtro por estado o torneo. El usuario selecciona el partido deseado, despu\u00e9s de lo cual el bot solicita sus detalles a trav\u00e9s de <code>\/v2\/f\u00fatbol\/partidos\/{matchId}<\/code> y recibe un objeto <code>estad\u00edsticasDelPartido<\/code>, que contiene grupos de m\u00e9tricas (Tiros, Ataque, Pases, etc.).<\/p>\n<p>Basado en estas estad\u00edsticas, se puede implementar un modelo xG simplificado. Por ejemplo, asignar pesos base a los tiros desde dentro y fuera del \u00e1rea penal, as\u00ed como a las \u00abgrandes oportunidades\u00bb. Esto no reemplaza un modelo de m\u00e1quina avanzado, pero es excelente para el primer prototipo funcional de un bot de Telegram. A continuaci\u00f3n se muestra un ejemplo de una funci\u00f3n en Python que calcula xG condicional utilizando campos con claves <code>totalDisparosDentroDel\u00c1rea<\/code>, <code>totalTirosFueraDel\u00c1rea<\/code> \u0438 <code>granOportunidadCreada<\/code> de <code>estad\u00edsticasDelPartido<\/code>:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\" data-no-translation=\"\">def calculate_simple_xg(match_statistics: list) -&gt; dict:\n    &quot;&quot;&quot;\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439 xG \u0434\u043b\u044f \u0445\u043e\u0437\u044f\u0435\u0432 \u0438 \u0433\u043e\u0441\u0442\u0435\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439.\n    \u041e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f matchStatistics \u0438\u0437 \u043e\u0442\u0432\u0435\u0442\u0430 API.\n    &quot;&quot;&quot;\n    home_xg = 0.0\n    away_xg = 0.0\n    # \u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u044b \u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438\n    for period in match_statistics:\n        if period.get(&quot;period&quot;) != &quot;ALL&quot;:\n            continue\n        for group in period.get(&quot;groups&quot;, &#x5B;]):\n            for item in group.get(&quot;statisticsItems&quot;, &#x5B;]):\n                key = item.get(&quot;key&quot;)\n                hv = float(item.get(&quot;homeValue&quot;, 0) or 0)\n                av = float(item.get(&quot;awayValue&quot;, 0) or 0)\n                if key == &quot;totalShotsInsideBox&quot;:\n                    home_xg += hv * 0.10\n                    away_xg += av * 0.10\n                elif key == &quot;totalShotsOutsideBox&quot;:\n                    home_xg += hv * 0.03\n                    away_xg += av * 0.03\n                elif key == &quot;bigChanceCreated&quot;:\n                    home_xg += hv * 0.35\n                    away_xg += av * 0.35\n    return {&quot;home_xg&quot;: round(home_xg, 2), &quot;away_xg&quot;: round(away_xg, 2)}<\/pre>\n<p>Despu\u00e9s de calcular xG, el bot forma una respuesta: muestra el marcador, el minuto actual, los valores de xG de ambos equipos y, si es necesario, un comentario textual (\u00ablos locales est\u00e1n significativamente por debajo de lo esperado en goles\u00bb, \u00ablos visitantes dominan en la calidad de las oportunidades\u00bb). A medida que el proyecto avanza, puedes reemplazar la f\u00f3rmula simple por una m\u00e1s compleja entrenada con datos hist\u00f3ricos y usar campos adicionales de <code>estad\u00edsticasDelPartido<\/code>. La lista actual de estad\u00edsticas clave siempre se puede aclarar en la documentaci\u00f3n <a href=\"http:\/\/api-sport.pro\/es\/\">API de Eventos Deportivos<\/a>.<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-6\">Ejemplos de solicitudes de API y c\u00f3digo de bot de Telegram con an\u00e1lisis de xG de partidos.<\/h2>\n<p>Consideremos c\u00f3mo podr\u00eda verse un ciclo completo de procesamiento de un comando de usuario en un bot de Telegram: desde la consulta a la API de eventos deportivos hasta el env\u00edo de un informe xG listo. Para simplificar, tomemos Python y la biblioteca <code>aiogram<\/code>. El bot aceptar\u00e1 comandos de la forma <code>\/xg<\/code>, solicitar\u00e1 detalles del partido mediante este identificador y devolver\u00e1 un resumen de los goles esperados.<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\" data-no-translation=\"\">import os\nimport requests\nfrom aiogram import Bot, Dispatcher, executor, types\nAPI_KEY = os.getenv(&quot;SPORT_API_KEY&quot;)\nTELEGRAM_TOKEN = os.getenv(&quot;TELEGRAM_TOKEN&quot;)\nBASE_URL = &quot;https:\/\/api.api-sport.ru\/v2\/football&quot;\nbot = Bot(token=TELEGRAM_TOKEN)\ndp = Dispatcher(bot)\n\ndef get_match(match_id: int) -&gt; dict:\n    resp = requests.get(\n        f&quot;{BASE_URL}\/matches\/{match_id}&quot;,\n        headers={&quot;Authorization&quot;: API_KEY},\n        timeout=5,\n    )\n    resp.raise_for_status()\n    return resp.json()\n\n@dp.message_handler(commands=&#x5B;&quot;xg&quot;])\nasync def cmd_xg(message: types.Message):\n    parts = message.text.split()\n    if len(parts) != 2 or not parts&#x5B;1].isdigit():\n        await message.reply(&quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435: \/xg &amp;lt;match_id&gt;&quot;)\n        return\n    match_id = int(parts&#x5B;1])\n    data = get_match(match_id)\n    stats = data.get(&quot;matchStatistics&quot;, &#x5B;])\n    xg = calculate_simple_xg(stats)\n    home = data&#x5B;&quot;homeTeam&quot;]&#x5B;&quot;name&quot;]\n    away = data&#x5B;&quot;awayTeam&quot;]&#x5B;&quot;name&quot;]\n    minute = data.get(&quot;currentMatchMinute&quot;)\n    text = (\n        f&quot;\u041c\u0430\u0442\u0447: {home} \u2014 {away}&quot;\n        f&quot;\u041c\u0438\u043d\u0443\u0442\u0430: {minute}'&quot;\n        f&quot;xG \u0445\u043e\u0437\u044f\u0435\u0432: {xg&#x5B;'home_xg']}&quot;\n        f&quot;xG \u0433\u043e\u0441\u0442\u0435\u0439: {xg&#x5B;'away_xg']}&quot;\n    )\n    await message.reply(text)<\/pre>\n<p>Si deseas considerar adicionalmente el contexto de las apuestas, tambi\u00e9n puedes mostrar las cuotas actuales de los corredores de apuestas en la misma respuesta. Para hacer esto, es suficiente con leer el array <code>oddsBase<\/code> de la respuesta del endpoint del partido y encontrar el mercado 1X2. Un ejemplo de muestreo del mercado requerido en Python:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\" data-no-translation=\"\">def extract_1x2_odds(match: dict) -&gt; dict | None:\n    for market in match.get(&quot;oddsBase&quot;, &#x5B;]):\n        if market.get(&quot;group&quot;) == &quot;1X2&quot;:\n            choices = {c&#x5B;&quot;name&quot;]: c&#x5B;&quot;decimal&quot;] for c in market.get(&quot;choices&quot;, &#x5B;])}\n            return {\n                &quot;home&quot;: choices.get(&quot;1&quot;),\n                &quot;draw&quot;: choices.get(&quot;X&quot;),\n                &quot;away&quot;: choices.get(&quot;2&quot;),\n            }\n    return None<\/pre>\n<p>En la respuesta del bot, puedes comparar xG y las cuotas actuales: mostrando d\u00f3nde el mercado subestima al equipo que domina en t\u00e9rminos de oportunidades. Este enfoque convierte a un bot de informaci\u00f3n regular en una herramienta anal\u00edtica completa que combina datos del partido e informaci\u00f3n de los mercados de apuestas disponibles a trav\u00e9s de la API de Eventos Deportivos.<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-7\">C\u00f3mo configurar notificaciones en Telegram para xG y otras m\u00e9tricas de partidos.<\/h2>\n<p>Una de las caracter\u00edsticas clave de un bot deportivo inteligente son las notificaciones autom\u00e1ticas sin la intervenci\u00f3n del usuario. En el contexto de xG, estas pueden ser se\u00f1ales de un aumento brusco en los goles esperados para uno de los equipos, una serie de ataques peligrosos o una discrepancia seria entre el marcador y la calidad de las oportunidades. Para implementar tal l\u00f3gica, el bot consulta peri\u00f3dicamente la API de Eventos Deportivos o, a medida que se vuelven disponibles, se conecta a un canal WebSocket para recibir actualizaciones casi al instante.<\/p>\n<p>En la opci\u00f3n de sondeo, configuras una tarea peri\u00f3dica (cron, Celery beat, tarea en segundo plano en <code>asyncio<\/code>), que solicita datos actuales sobre los partidos de inter\u00e9s cada N segundos a trav\u00e9s de <code>\/v2\/f\u00fatbol\/partidos<\/code> or <code>\/v2\/f\u00fatbol\/partidos\/{matchId}<\/code>. Despu\u00e9s de recibir <code>estad\u00edsticasDelPartido<\/code> recalculas xG y lo comparas con el valor anterior almacenado en la base de datos o en la memoria de la aplicaci\u00f3n. Si el aumento supera un umbral especificado (por ejemplo, +0.5 xG en un corto per\u00edodo de tiempo) o uno de los equipos \u00abse queda corto\u00bb en sus goles esperados, el bot env\u00eda un mensaje a los suscriptores de este partido.<\/p>\n<p>Un ejemplo de una tarea en segundo plano en Python usando <code>asyncio<\/code>, que verifica cambios en xG cada minuto y env\u00eda notificaciones podr\u00eda verse as\u00ed:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\" data-no-translation=\"\">import asyncio\nasync def xg_watcher(match_id: int, chat_id: int):\n    last_xg = None\n    while True:\n        match = get_match(match_id)\n        stats = match.get(&quot;matchStatistics&quot;, &#x5B;])\n        xg = calculate_simple_xg(stats)\n        current = xg&#x5B;&quot;home_xg&quot;] + xg&#x5B;&quot;away_xg&quot;]\n        if last_xg is not None and current - last_xg &gt;= 0.5:\n            await bot.send_message(\n                chat_id,\n                f&quot;\u0420\u0435\u0437\u043a\u0438\u0439 \u0440\u043e\u0441\u0442 xG \u0432 \u043c\u0430\u0442\u0447\u0435 {match&#x5B;'homeTeam']&#x5B;'name']} \u2014 {match&#x5B;'awayTeam']&#x5B;'name']}: {current}&quot;,\n            )\n        last_xg = current\n        await asyncio.sleep(60)<\/pre>\n<p>Las alertas para otras m\u00e9tricas se pueden configurar de la misma manera: un aumento en el n\u00famero de tiros a puerta, un cambio brusco en la posesi\u00f3n del bal\u00f3n, un aumento en el n\u00famero de ataques en el tercio final, o cambios en los coeficientes en los arrays. <code>oddsBase<\/code>. A medida que el servicio se desarrolla <a href=\"http:\/\/api-sport.pro\/es\/\">api-sport.pro<\/a> podr\u00e1s transferir esta l\u00f3gica de sondeo peri\u00f3dico a conexiones WebSocket y mejorarla con modelos de IA que no solo registren eventos, sino que tambi\u00e9n eval\u00faen la probabilidad de un gol o un regreso en tiempo real.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Content What is xG in football and why do you need a Telegram bot with xG analytics<\/p>","protected":false},"author":1,"featured_media":1271,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","faq":"[{\"question\":\"\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 xG \u0432 \u0444\u0443\u0442\u0431\u043e\u043b\u0435 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430?\",\"answer\":\"xG (expected goals, \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0435 \u0433\u043e\u043b\u044b) \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0443\u0434\u0430\u0440 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u0433\u043e\u043b\u043e\u043c. \u0414\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u0432\u043e\u0440\u043e\u0442, \u0443\u0433\u043e\u043b \u0443\u0434\u0430\u0440\u0430, \u0442\u0438\u043f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f (\u043f\u0435\u043d\u0430\u043b\u044c\u0442\u0438, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442, \u0438\u0433\u0440\u0430 \u0441 \u0445\u043e\u0434\u0430) \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u044b. \u0421\u0443\u043c\u043c\u0430\u0440\u043d\u044b\u0439 xG \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u043b\u043e\u0432 \u043e\u043d\u0430 \u00ab\u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u043b\u0430\u00bb \u0437\u0430\u0431\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0443\u0434\u0430\u0447\u0438 \u0438 \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0438\u0433\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b.\"},{\"question\":\"\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f xG \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0447\u0435\u0440\u0435\u0437 API api-sport.ru?\",\"answer\":\"\u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435 Sport Events API \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043c\u0430\u0442\u0447\u0435\u0439: \u0443\u0434\u0430\u0440\u043e\u0432, \u00ab\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432\u00bb, \u0432\u0445\u043e\u0434\u043e\u0432 \u0432 \u0448\u0442\u0440\u0430\u0444\u043d\u0443\u044e, \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0435\u0442\u0440\u0438\u043a \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 matchStatistics. \u041d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0440\u0430\u0441\u0447\u0451\u0442\u0430 xG, \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u043b\u044c\u043d\u0443\u044e, \u0442\u0430\u043a \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0443\u044e ML-\u043c\u043e\u0434\u0435\u043b\u044c. \u041f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0441 xG \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043e \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430.\"},{\"question\":\"\u041f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 Sport Events API \u0434\u043b\u044f \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0438 \u0431\u0435\u0442\u0442\u0438\u043d\u0433-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432?\",\"answer\":\"\u0414\u0430, Sport Events API \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0437\u0430\u0434\u0430\u0447 \u043c\u0435\u0434\u0438\u0430\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0438 \u0431\u0435\u0442\u0442\u0438\u043d\u0433-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041f\u043e\u043c\u0438\u043c\u043e \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0432 \u043e\u0442\u0432\u0435\u0442\u0430\u0445 \u043c\u0430\u0442\u0447\u0435\u0432\u044b\u0445 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0431\u043b\u043e\u043a oddsBase \u0441 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u043f\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0440\u044b\u043d\u043a\u0430\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 1X2). \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0430\u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 Telegram-\u0431\u043e\u0442\u044b, \u0442\u0430\u043a \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u044e\u0442 xG-\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443 \u0441 \u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0438 \u0431\u0443\u043a\u043c\u0435\u043a\u0435\u0440\u0441\u043a\u0438\u0445 \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043e\u043a. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0442\u0430\u0440\u0438\u0444\u044b \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0443\u0442\u043e\u0447\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 api-sport.ru.\"},{\"question\":\"\u041a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e live-\u043c\u0430\u0442\u0447\u0430\u043c \u0432 Sport Events API?\",\"answer\":\"\u0414\u0430\u043d\u043d\u044b\u0435 live-\u043c\u0430\u0442\u0447\u0435\u0439 \u0432 Sport Events API \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u043e\u0432. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0443\u0440\u043d\u0438\u0440\u0430 \u0438 \u0442\u0438\u043f\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043d\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043e\u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f Telegram-\u0431\u043e\u0442\u0430 \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 xG-\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u0439 \u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f\u043c\u0438. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043b\u0438\u043c\u0438\u0442\u044b \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043e\u043f\u0440\u043e\u0441\u0430 API.\"},{\"question\":\"\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f WebSocket \u0438 AI-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u043e\u0433\u043e API?\",\"answer\":\"\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c WebSocket \u0438 AI-\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0430 \u043a\u0430\u043a \u043e\u0434\u043d\u043e \u0438\u0437 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b api-sport.ru. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043c\u0430\u0442\u0447\u0435\u0439 \u0431\u0435\u0437 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u043e\u0441\u0430 REST-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0440\u043e\u043a\u0438 \u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043b\u0443\u0447\u0448\u0435 \u0443\u0442\u043e\u0447\u043d\u044f\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u0443 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f.\"}]","footnotes":""},"categories":[1],"tags":[],"class_list":["post-1272","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"yoast_head":"<title>How to create a Telegram bot with xG match analytics \u2014 Sport Events API<\/title>\n<meta name=\"description\" content=\"Step by step, we will analyze how to create a Telegram bot with xG analytics based on the Sport Events API: data retrieval, xG calculation, notifications, and working with odds.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/api-sport.pro\/es\/como-crear-un-bot-de-telegram-con-analisis-xg-de-partidos\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to create a Telegram bot with xG match analytics \u2014 Sport Events API\" \/>\n<meta property=\"og:description\" content=\"Step by step, we will analyze how to create a Telegram bot with xG analytics based on the Sport Events API: data retrieval, xG calculation, notifications, and working with odds.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/api-sport.pro\/es\/como-crear-un-bot-de-telegram-con-analisis-xg-de-partidos\/\" \/>\n<meta property=\"og:site_name\" content=\"Sports Events API\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-17T17:07:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-telegram-bota-s-xg-analitikoi-matcha_posts.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1408\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/\",\"url\":\"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/\",\"name\":\"How to create a Telegram bot with xG match analytics \u2014 Sport Events API\",\"isPartOf\":{\"@id\":\"https:\/\/api-sport.pro\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-telegram-bota-s-xg-analitikoi-matcha_posts.jpg\",\"datePublished\":\"2025-12-17T17:07:59+00:00\",\"author\":{\"@id\":\"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601\"},\"description\":\"Step by step, we will analyze how to create a Telegram bot with xG analytics based on the Sport Events API: data retrieval, xG calculation, notifications, and working with odds.\",\"breadcrumb\":{\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/#primaryimage\",\"url\":\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-telegram-bota-s-xg-analitikoi-matcha_posts.jpg\",\"contentUrl\":\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-telegram-bota-s-xg-analitikoi-matcha_posts.jpg\",\"width\":1408,\"height\":768,\"caption\":\"\u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c Telegram-\u0431\u043e\u0442\u0430 \u0441 xG-\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u0439 \u043c\u0430\u0442\u0447\u0430?\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\",\"item\":\"https:\/\/api-sport.pro\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to create a Telegram bot with match xG analytics?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/api-sport.pro\/#website\",\"url\":\"https:\/\/api-sport.pro\/\",\"name\":\"Sports Events API\",\"description\":\"Sports Events API\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/api-sport.pro\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/api-sport.pro\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8f3dce32feb8659c1f1c917db74325481c6133714f03d5a9433ba6df23a857ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8f3dce32feb8659c1f1c917db74325481c6133714f03d5a9433ba6df23a857ab?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/api-sport.pro\"],\"url\":\"https:\/\/api-sport.pro\/es\/author\/admin\/\"}]}<\/script>","yoast_head_json":{"title":"C\u00f3mo crear un bot de Telegram con an\u00e1lisis de xG de partidos \u2014 API de Eventos Deportivos","description":"Paso a paso, analizaremos c\u00f3mo crear un bot de Telegram con an\u00e1lisis de xG basado en la API de Eventos Deportivos: recuperaci\u00f3n de datos, c\u00e1lculo de xG, notificaciones y trabajo con cuotas.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/api-sport.pro\/es\/como-crear-un-bot-de-telegram-con-analisis-xg-de-partidos\/","og_locale":"es_ES","og_type":"article","og_title":"How to create a Telegram bot with xG match analytics \u2014 Sport Events API","og_description":"Step by step, we will analyze how to create a Telegram bot with xG analytics based on the Sport Events API: data retrieval, xG calculation, notifications, and working with odds.","og_url":"https:\/\/api-sport.pro\/es\/como-crear-un-bot-de-telegram-con-analisis-xg-de-partidos\/","og_site_name":"Sports Events API","article_published_time":"2025-12-17T17:07:59+00:00","og_image":[{"width":1408,"height":768,"url":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-telegram-bota-s-xg-analitikoi-matcha_posts.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"admin","Tiempo de lectura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/","url":"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/","name":"C\u00f3mo crear un bot de Telegram con an\u00e1lisis de xG de partidos \u2014 API de Eventos Deportivos","isPartOf":{"@id":"https:\/\/api-sport.pro\/#website"},"primaryImageOfPage":{"@id":"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/#primaryimage"},"image":{"@id":"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/#primaryimage"},"thumbnailUrl":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-telegram-bota-s-xg-analitikoi-matcha_posts.jpg","datePublished":"2025-12-17T17:07:59+00:00","author":{"@id":"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601"},"description":"Paso a paso, analizaremos c\u00f3mo crear un bot de Telegram con an\u00e1lisis de xG basado en la API de Eventos Deportivos: recuperaci\u00f3n de datos, c\u00e1lculo de xG, notificaciones y trabajo con cuotas.","breadcrumb":{"@id":"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/#primaryimage","url":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-telegram-bota-s-xg-analitikoi-matcha_posts.jpg","contentUrl":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-telegram-bota-s-xg-analitikoi-matcha_posts.jpg","width":1408,"height":768,"caption":"\u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c Telegram-\u0431\u043e\u0442\u0430 \u0441 xG-\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u0439 \u043c\u0430\u0442\u0447\u0430?"},{"@type":"BreadcrumbList","@id":"https:\/\/api-sport.pro\/how-to-create-a-telegram-bot-with-match-xg-analytics\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/api-sport.pro\/"},{"@type":"ListItem","position":2,"name":"How to create a Telegram bot with match xG analytics?"}]},{"@type":"WebSite","@id":"https:\/\/api-sport.pro\/#website","url":"https:\/\/api-sport.pro\/","name":"API de Eventos Deportivos","description":"API de Eventos Deportivos","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/api-sport.pro\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601","name":"administrador","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/api-sport.pro\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8f3dce32feb8659c1f1c917db74325481c6133714f03d5a9433ba6df23a857ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8f3dce32feb8659c1f1c917db74325481c6133714f03d5a9433ba6df23a857ab?s=96&d=mm&r=g","caption":"admin"},"sameAs":["http:\/\/api-sport.pro"],"url":"https:\/\/api-sport.pro\/es\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts\/1272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/comments?post=1272"}],"version-history":[{"count":3,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts\/1272\/revisions"}],"predecessor-version":[{"id":1686,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts\/1272\/revisions\/1686"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/media\/1271"}],"wp:attachment":[{"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/media?parent=1272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/categories?post=1272"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/tags?post=1272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}