Telegram está preparando un bot, @agent, al que se podrá conectar su propia clave API de un servicio de IA: Claude, ChatGPT, Gemini, Grok u OpenRouter. La pantalla de conexión apareció en las compilaciones beta de Telegram para macOS 13.1.0 la mañana del 23 de octubre y llegó sin cambios a la compilación 283392 del 27 de octubre. Según el esquema de la API en la beta, la clave permanece en los servidores de Telegram: el servidor solo devuelve al cliente los últimos cuatro caracteres de la clave y la fecha de conexión. Esto afecta a quienes ya pagan una suscripción con uno de los proveedores. En el servidor de producción, la lista de bots-agente está vacía: la clave agent_bot_ids apareció en la configuración del servidor de pruebas de Telegram a las 21:21 UTC del 22 de octubre, pero no estaba en el servidor de producción el 26 de octubre. Un video en las discusiones muestra un diálogo funcional con @agent en el servidor de pruebas.

Qué contiene la compilación

La beta de macOS se distribuye a través del feed de actualizaciones mac-updates.telegram.org; cada compilación es un archivo zip con la aplicación. En la 13.1.0.283359 del 21 de octubre no hay cadenas del agente. Aparecieron en la 13.1.0.283362, lanzada la mañana del 23 de octubre, y se mantienen en la 13.1.0.283391 del 26 de octubre y la 13.1.0.283392 del 27 de octubre.

Textos de la nueva pantalla:

  • «Use the API key from an AI service you have already purchased to set up your own AI chatbot» — la clave de un servicio de IA ya adquirido se convierte en su propio chatbot.
  • «Select the AI provider you have an account with» — se selecciona el proveedor con el que tiene una cuenta.
  • «Add Your AI API Key», «Enter your API key» y la sugerencia «Get your API key or API token in your AI provider's settings»: la clave se obtiene en la configuración del propio proveedor.
  • «This chatbot works only if you have an active subscription for an AI service» — sin una suscripción activa con el proveedor, el bot no funciona.
  • «Add Another Provider» y «Right-click a provider to delete it» — se pueden conectar varios proveedores y eliminarlos uno por uno.
  • «You can reconnect this provider with an API key later» — un proveedor desconectado puede ser restaurado con una nueva clave.
  • «Could not connect. Try again.» y «The provider is unavailable. Try again.» — mensajes de conexión fallida.
  • «You can now use @agent» — el mensaje final después de la conexión.

Hay cinco proveedores en el código: AgentProviderClaude, AgentProviderChatGPT, AgentProviderGemini, AgentProviderGrok y AgentProviderOpenRouter. Uno de ellos tiene la etiqueta «Hundreds of models». OpenRouter es un agregador que, con una sola clave, da acceso a modelos de diferentes compañías, y la etiqueta, al parecer, le corresponde.

Qué almacena el servidor

En el esquema MTProto, incrustado en la compilación, aparecieron cuatro tipos y una actualización. Sus campos son los siguientes:

TipoCamposQué significa
agentProvidervendor, keyUrl, iconEmojiId, modelsSearchabledescripción del proveedor: quién es, enlace a la página de claves, icono, si se pueden buscar sus modelos
providerKeyprovider, keyLast4, dateConnectedclave conectada: a qué proveedor, los últimos cuatro caracteres, fecha de conexión
settingsactiveProvidercuál de los proveedores conectados es actualmente responsable de @agent
providers / providersNotModified—lista de proveedores del servidor
updateAgentSettings—a juzgar por el nombre, una actualización que el servidor envía cuando cambian las configuraciones

El par «lista y NotModified» en la API de Telegram significa una lista que el cliente solicita al servidor y almacena en caché por hash, como los temas (account.themes/account.themesNotModified) o los fondos de pantalla. Por lo tanto, la lista de proveedores, junto con los iconos y los enlaces a las páginas de claves, proviene del servidor y puede actualizarse sin una nueva compilación. Las direcciones de las páginas con claves no están en la aplicación; hay un fragmento de cadena «Get your API key in [», en el que, a juzgar por el campo keyUrl, se inserta un enlace del servidor.

La clave completa no se almacena en la descripción de la conexión, solo keyLast4. Los errores se registran en el formato en que el servidor de Telegram responde a las solicitudes: AGENT_KEY_INVALID, AGENT_KEY_MISSING, AGENT_NOT_AVAILABLE, AGENT_PROVIDER_UNAVAILABLE. A juzgar por el esquema, la clave es verificada por el servidor de Telegram, y es en él donde la clave, al parecer, permanece después de la conexión. Si las propias solicitudes al modelo pasan por el mismo servidor, no se puede ver en el esquema. Las direcciones de la API de Claude, OpenAI, Google, xAI u OpenRouter no están en la compilación, por lo que la aplicación, al parecer, no se comunica directamente con el proveedor. La actualización updateAgentSettings, a juzgar por el nombre, es necesaria para que el cambio de proveedor activo en un dispositivo llegue a los demás.

Dónde reside la pantalla en el cliente

La cadena de conexión se llama AgentConnectRowItem y se encuentra en el módulo PeerInfoUI, que dibuja las páginas de perfil de usuarios, bots y canales. Cerca están AgentProfileRow, AgentConnections y el servicio TelegramAgentService. En la descripción del perfil apareció el indicador isAgent, y en el botón del perfil, junto al indicador launchApp que marca el lanzamiento de una miniaplicación, está el indicador agentSetup. Parece que la configuración se abre desde la página del propio bot-agente mediante un botón, y no desde la configuración general de la aplicación, pero esta es una interpretación basada en los nombres.

Cómo se conversa con @agent después de la conexión no se ve en la compilación. En las discusiones se muestra un video donde el modelo responde en un diálogo separado con @agent en el servidor de pruebas.

Qué hay en el servidor de pruebas

A las 21:21 UTC del 22 de octubre, en la respuesta de help.getAppConfig del servidor de pruebas apareció la clave agent_bot_ids con dos valores: 5000448925 y 2202931014; en la instantánea anterior del archivo, del 20 de octubre a las 19:09 UTC, no estaba. Hasta el 26 de octubre no cambió. En la configuración del servidor de producción no existe tal clave el 26 de octubre. El servidor de pruebas de Telegram es un entorno separado con sus propias cuentas, por lo que estos identificadores no permiten saber qué bots son en el Telegram habitual.

En la misma configuración y en el servidor de producción, desde el 20 de octubre, se encuentra bot_allowed_suffixes, que son los sufijos agent, ai, app, game y gay, con los que un bot puede obtener un segundo nombre de usuario. Los bots del tipo «…agent» y @agent son cosas diferentes: el sufijo está disponible para cualquier propietario de bot con Premium, mientras que @agent es una cuenta específica.

El nombre de usuario @agent está ocupado: fue vendido en la subasta Fragment el 27 de noviembre de 2022 por 70 000 TON; la página t.me/agent está vacía el 27 de octubre. No se puede determinar a partir de los datos públicos si la mención de @agent en la beta está relacionada con esta cuenta.

Dónde no están las funciones todavía

El 27 de octubre, el agente no está ni en el esquema público de la API —ni en api.tl de Telegram Desktop (capa 232), ni en td_api.tl de TDLib—, ni en el código abierto de los clientes. En el Info.plist del repositorio telegram-macos, abierto el 23 de octubre, la compilación es la 283357, cinco números antes de aquella en la que apareció el agente; no hay archivos del agente en el repositorio. El código compartido con iOS en Telegram-iOS tampoco lo contiene, aunque en la beta de macOS los errores AGENT_* se encuentran precisamente en la parte común, TelegramCore.

En las mismas betas de macOS se está trabajando en los widgets en los mensajes que escriben al bot; estos, al igual que el agente, aún no están ni en el esquema público ni en la Bot API.

En qué se diferencia esto de la IA actual en Telegram

Telegram ya tiene sus propias funciones de IA para texto: en la configuración del servidor de producción se encuentran los parámetros aicompose_tone_* —número de ejemplos de tono, longitud de su nombre y del prompt, límite de tonos guardados.