Emparejamiento
Solución de problemas de canales
Configuración del Gateway
Configuración rápida
Crear el token del bot en BotFather
- Flujo de chat: abra Telegram, inicie un chat con @BotFather (confirme que el identificador sea exactamente
@BotFather), ejecute/newbot, siga las indicaciones y guarde el token. - Flujo web: abra la aplicación web de BotFather, que funciona en todos los clientes de Telegram, incluido web.telegram.org; cree el bot en la interfaz y copie su token.
Configurar el token y la política de mensajes directos
TELEGRAM_BOT_TOKEN (solo para la cuenta predeterminada; las cuentas con nombre deben usar botToken o tokenFile).
Telegram no utiliza openclaw channels login telegram; establezca el token en la configuración o el entorno y, después, inicie el Gateway.Iniciar el Gateway y aprobar el primer mensaje directo
Añadir el bot a un grupo
- su ID de usuario de Telegram, para
allowFrom/groupAllowFrom - el ID del chat de grupo de Telegram, como clave en
channels.telegram.groups
openclaw logs --follow, un bot de ID reenviados o getUpdates de la API de bots. Una vez permitido el grupo, /whoami@<bot_username> confirma los ID de usuario y grupo.Los ID negativos de supergrupos que comienzan por -100 son ID de chats de grupo. Se colocan en channels.telegram.groups, no en groupAllowFrom.tokenFile prevalece sobre botToken, que prevalece sobre el entorno, y la configuración siempre prevalece sobre TELEGRAM_BOT_TOKEN (que solo se resuelve para la cuenta predeterminada). Después de un inicio correcto, OpenClaw almacena en caché la identidad del bot durante un máximo de 24 horas para que los reinicios omitan una llamada adicional a getMe; cambiar o eliminar el token borra esa caché.Configuración en Telegram
Modo de privacidad y visibilidad en grupos
Modo de privacidad y visibilidad en grupos
- desactive el modo de privacidad mediante
/setprivacy, o - convierta el bot en administrador del grupo.
Permisos del grupo
Permisos del grupo
Opciones útiles de BotFather
Opciones útiles de BotFather
/setjoingroups— permitir o denegar que se añada el bot a grupos/setprivacy— comportamiento de visibilidad en grupos
Miniaplicación del panel
Ejecute/dashboard en un mensaje directo con el bot para abrir el panel de OpenClaw dentro de Telegram.
Requisitos:
gateway.tailscale.mode: "serve"o"funnel"para la URL HTTPS publicada de la miniaplicación.- Su ID numérico de usuario de Telegram debe estar en el valor efectivo de
allowFromde la cuenta seleccionada o encommands.ownerAllowFrom. - Utilice un mensaje directo. En los grupos,
/dashboardresponde conopen this in a DM with the boty no envía ningún botón. - Instalaciones con Docker: los modos Serve/Funnel requieren que el Gateway se vincule a la interfaz de bucle invertido junto a
tailscaled, algo que las redes de puente con puertos publicados no pueden satisfacer. Ejecute el contenedor del Gateway connetwork_mode: hosty monte en el contenedor el sockettailscaleddel host (/var/run/tailscale), además de la CLItailscale.
Control de acceso y activación
Identidad del bot en grupos
En grupos y temas de foros, una mención explícita del identificador configurado del bot (por ejemplo,@my_bot) se dirige al agente de OpenClaw seleccionado, aunque el nombre de la identidad del agente sea distinto del nombre de usuario de Telegram. La política de silencio del grupo sigue aplicándose al tráfico no relacionado, pero el identificador del bot nunca se considera «otra persona».
- Política de mensajes directos
- Política de grupos y listas de permitidos
- Comportamiento de las menciones
channels.telegram.dmPolicy controla el acceso a los mensajes directos:pairing(predeterminado)allowlist(requiere al menos un ID de remitente enallowFrom)open(requiere queallowFromincluya"*")disabled
dmPolicy: "open" con allowFrom: ["*"] permite que cualquier cuenta de Telegram que encuentre o adivine el nombre de usuario del bot le envíe comandos. Úselo solo para bots deliberadamente públicos con herramientas muy restringidas; los bots de un solo propietario deben usar allowlist con ID numéricos de usuario.channels.telegram.allowFrom acepta ID numéricos de usuarios de Telegram. Se aceptan y normalizan los prefijos telegram: / tg:.
En configuraciones con varias cuentas, un valor restrictivo de nivel superior para channels.telegram.allowFrom constituye un límite de seguridad: un valor allowFrom: ["*"] a nivel de cuenta no hace pública esa cuenta a menos que la lista de permitidos efectiva combinada siga conteniendo un comodín explícito.
dmPolicy: "allowlist" con allowFrom vacío bloquea todos los mensajes directos y la validación de la configuración lo rechaza.
La configuración solo solicita ID numéricos de usuario. Si la configuración contiene entradas de la lista de permitidos @username procedentes de una configuración anterior, ejecute openclaw doctor --fix para resolverlas como ID numéricos (en la medida de lo posible; requiere un token de bot de Telegram).
Si anteriormente se dependía de archivos de listas de permitidos del almacén de emparejamientos, openclaw doctor --fix puede recuperar las entradas en channels.telegram.allowFrom para los flujos de listas de permitidos (por ejemplo, cuando dmPolicy: "allowlist" todavía no tiene ID explícitos).Para los bots de un solo propietario, es preferible usar dmPolicy: "allowlist" con ID numéricos allowFrom explícitos en lugar de depender de aprobaciones de emparejamiento anteriores.Confusión habitual: aprobar el emparejamiento de mensajes directos no significa que «este remitente esté autorizado en todas partes». El emparejamiento solo concede acceso a los mensajes directos. Si todavía no existe un propietario de comandos, el primer emparejamiento aprobado también establece commands.ownerAllowFrom, lo que proporciona una cuenta de operador explícita para los comandos exclusivos del propietario y las aprobaciones de ejecución. La autorización de remitentes de grupos sigue procediendo de las listas de permitidos explícitas de la configuración.
Para autorizar una misma identidad tanto en mensajes directos como en comandos de grupo, coloque su ID numérico de usuario de Telegram en channels.telegram.allowFrom y, para los comandos exclusivos del propietario, asegúrese de que commands.ownerAllowFrom contenga telegram:<your user id>.Cómo encontrar su ID de usuario de Telegram
Método más seguro (sin bots de terceros): envíe un mensaje directo a su bot, ejecuteopenclaw logs --follow y consulte from.id.Método oficial mediante la API de bots:@userinfobot o @getidsbot.Comportamiento en tiempo de ejecución
- Telegram se ejecuta dentro del proceso del Gateway.
- El enrutamiento es determinista: las respuestas a mensajes entrantes de Telegram vuelven a Telegram (el modelo no elige los canales).
- Los mensajes entrantes se normalizan en el contenedor compartido del canal con metadatos de respuesta, marcadores de posición de contenido multimedia y contexto persistente de la cadena de respuestas para las respuestas que el Gateway ha observado.
- Las sesiones de grupo se aíslan por ID de grupo. Los temas del foro añaden
:topic:<threadId>. - Los mensajes directos pueden incluir
message_thread_id; OpenClaw lo conserva para las respuestas. Las sesiones de temas de mensajes directos solo se dividen cuandogetMede Telegram indicahas_topics_enabled: truepara el bot; de lo contrario, los mensajes directos permanecen en la sesión plana. - El sondeo largo utiliza el ejecutor de grammY con secuenciación por chat y por hilo. La concurrencia del receptor del ejecutor utiliza
agents.defaults.maxConcurrent. - El inicio multicuenta limita las sondas
getMesimultáneas para que las grandes flotas de bots no ejecuten a la vez la sonda de cada cuenta. - Cada proceso del Gateway protege el sondeo largo para que solo un sondeador activo pueda usar un token de bot a la vez. Los conflictos 409 persistentes de
getUpdatesindican que otro Gateway de OpenClaw, script o sondeador externo está usando el mismo token. - El supervisor del sondeo se reinicia tras 120 segundos sin que se complete la comprobación de actividad de
getUpdates. - La API de bots de Telegram no admite confirmaciones de lectura (
sendReadReceiptsno se aplica).
channels.telegram.dm.threadReplies y channels.telegram.direct.<chatId>.threadReplies. Ejecute openclaw doctor --fix después de actualizar si la configuración aún contiene esas claves. El enrutamiento de temas de mensajes directos ahora sigue getMe.has_topics_enabled de Telegram (controlado por el modo de hilos de BotFather): los bots con temas habilitados usan sesiones de mensajes directos delimitadas por hilo cuando Telegram envía message_thread_id; los demás mensajes directos permanecen en la sesión plana.Referencia de funcionalidades
Vista previa de transmisión en directo (ediciones de mensajes)
Vista previa de transmisión en directo (ediciones de mensajes)
editMessageText repetidamente, finalizándolo en el mismo lugar.channels.telegram.streamingesoff | partial | block | progress(valor predeterminado:partial)- las vistas previas breves de la respuesta inicial se retrasan mediante antirrebote y luego se materializan tras una demora limitada si la ejecución sigue activa
progressmantiene un único borrador de estado editable para el progreso de las herramientas, muestra la etiqueta de estado estable cuando se produce actividad de respuesta antes que progreso de herramientas, lo borra al finalizar y envía la respuesta final como un mensaje normalstreaming.preview.toolProgresscontrola si las actualizaciones de herramientas o progreso reutilizan el mismo mensaje de vista previa editado (valor predeterminado:truecuando la transmisión de la vista previa está activa)streaming.preview.commandTextcontrola los detalles de comandos y ejecución dentro de esas líneas:raw(valor predeterminado) ostatus(solo la etiqueta de la herramienta)streaming.progress.commentary(valor predeterminado:false) habilita el texto de comentarios o preámbulo del asistente en el borrador temporal de progreso- se detectan el valor heredado
channels.telegram.streamMode, los valores booleanos destreamingy las claves retiradas de vista previa de borradores nativos; ejecuteopenclaw doctor --fixpara migrarlos
v2026.4.22+).Mantenga las ediciones de la vista previa de la respuesta, pero oculte las líneas de progreso de herramientas:progress muestra el progreso de las herramientas sin editar la respuesta final en ese mensaje. Coloque la política de texto de comandos en streaming.progress:streaming.mode: "off" desactiva las ediciones de vista previa y suprime los mensajes genéricos de herramientas o progreso en lugar de enviarlos como mensajes de estado independientes; las solicitudes de aprobación, el contenido multimedia y los errores siguen la entrega final normal. streaming.preview.toolProgress: false conserva únicamente las ediciones de la vista previa de la respuesta.replyToMode es first, all o batched y el mensaje entrante contiene texto de cita seleccionado, OpenClaw envía la respuesta final mediante la ruta nativa de respuesta a citas de Telegram en lugar de editar la vista previa de la respuesta, por lo que streaming.preview.toolProgress no puede mostrar líneas de estado durante ese turno. Las respuestas al mensaje actual sin texto de cita seleccionado siguen transmitiéndose. Configure replyToMode: "off" cuando la visibilidad del progreso de herramientas sea más importante que las respuestas nativas a citas, o streaming.preview.toolProgress: false para aceptar esa concesión./reasoning stream transmite el razonamiento a la vista previa en directo durante la generación y luego elimina la vista previa del razonamiento después de la entrega final (use /reasoning on para mantenerla visible). La respuesta final se envía sin el texto del razonamiento.Formato enriquecido de mensajes
Formato enriquecido de mensajes
$400-600K no se interpreten como fórmulas matemáticas. El texto enriquecido largo se divide automáticamente según los límites de Telegram. Las tablas que superan el límite de 20 columnas recurren a un bloque de código.Valor predeterminado: desactivado, por compatibilidad con los clientes; algunos clientes actuales de escritorio, web, Android y de terceros muestran como no compatibles los mensajes enriquecidos aceptados. Mantenga esta opción desactivada a menos que todos los clientes utilizados con el bot puedan representarlos. /status muestra si los mensajes enriquecidos están activados o desactivados en la sesión actual.Las vistas previas de enlaces están activadas de forma predeterminada. channels.telegram.linkPreview: false desactiva la detección automática de entidades en el texto enriquecido.Comandos nativos y comandos personalizados
Comandos nativos y comandos personalizados
setMyCommands. commands.native: "auto" habilita los comandos nativos para Telegram.Añada entradas personalizadas al menú de comandos:/ inicial y se convierten a minúsculas); patrón válido a-z, 0-9, _, longitud de 1 a 32; los comandos personalizados no pueden reemplazar los comandos nativos; los conflictos y duplicados se omiten y se registran.Los comandos personalizados son únicamente entradas de menú: no implementan ningún comportamiento automáticamente. Los comandos de plugins o Skills pueden seguir funcionando al escribirlos aunque no aparezcan en el menú de Telegram. Si se desactivan los comandos nativos, se eliminan los integrados; los comandos personalizados o de plugins aún pueden registrarse si están configurados.Errores habituales de configuración:setMyCommands failedconBOT_COMMANDS_TOO_MUCHdespués de un reintento de recorte significa que el menú sigue superando el límite; reduzca los comandos de plugins, Skills o personalizados, o desactivechannels.telegram.commands.native.- Si
deleteWebhook,deleteMyCommandsosetMyCommandsfallan con404: Not Foundmientras los comandos curl directos de la API de bots funcionan, suele significar quechannels.telegram.apiRootse configuró con el endpoint completo/bot<TOKEN>.apiRootdebe ser únicamente la raíz de la API de bots;openclaw doctor --fixelimina un/bot<TOKEN>final accidental. getMe returned 401significa que Telegram rechazó el token de bot configurado. ActualicebotToken,tokenFileoTELEGRAM_BOT_TOKEN(cuenta predeterminada) con el token actual de BotFather; OpenClaw se detiene antes del sondeo, por lo que esto no se notifica como un fallo de limpieza del Webhook.setMyCommands failedcon errores de red o recuperación suele significar que el DNS o HTTPS saliente haciaapi.telegram.orgestá bloqueado.
Comandos de emparejamiento de dispositivos (plugin device-pair)
Cuando está instalado:/pairgenera un código de configuración- pegue el código en la aplicación de iOS
/pair pendingmuestra las solicitudes pendientes (incluidos el rol y los ámbitos)- para aprobar:
/pair approve <requestId>,/pair approve(única solicitud pendiente) o/pair approve latest
requestId; vuelva a ejecutar /pair pending antes de aprobarla.Más información: Emparejamiento.Botones integrados
Botones integrados
off, dm, group, all, allowlist (valor predeterminado). El valor heredado capabilities: ["inlineButtons"] se asigna a "all".Ejemplo de acción de mensaje:web_app solo funcionan en chats privados entre un usuario y el bot.Los clics en devoluciones de llamada que ningún controlador interactivo de un plugin registrado reclame se envían al agente como texto: callback_data: <value>.Acciones de mensajes de Telegram para agentes y automatización
Acciones de mensajes de Telegram para agentes y automatización
sendMessage(to,content,mediaUrlopcional,replyToMessageId,messageThreadId)react(chatId,messageId,emoji)deleteMessage(chatId,messageId)editMessage(chatId,messageId,contentocaption, botones integradospresentationopcionales; las ediciones que solo afectan a botones actualizan el marcado de respuesta)createForumTopic(chatId,name,iconColoropcional,iconCustomEmojiId)
send, react, delete, edit, sticker, sticker-search, topic-create.Habilitación: channels.telegram.actions.sendMessage, deleteMessage, reactions, sticker (valor predeterminado: deshabilitado). edit, createForumTopic y editForumTopic están habilitados de forma predeterminada y no tienen un conmutador específico.
Los envíos en tiempo de ejecución usan la instantánea activa de configuración y secretos obtenida al iniciar o recargar, por lo que las rutas de acción no vuelven a resolver los valores de SecretRef en cada envío.Semántica de eliminación de reacciones: /tools/reactions.Etiquetas de hilos de respuesta
Etiquetas de hilos de respuesta
[[reply_to_current]]— responde al mensaje que activó la acción[[reply_to:<id>]]— responde a un ID de mensaje específico
channels.telegram.replyToMode: off (valor predeterminado), first, all.Cuando los hilos de respuesta están habilitados y el texto o pie de foto original está disponible, OpenClaw añade automáticamente un fragmento de cita nativo. Telegram limita el texto de las citas nativas a 1024 unidades de código UTF-16; los mensajes más largos se citan desde el principio y se recurre a una respuesta simple si Telegram rechaza la cita.off solo deshabilita los hilos de respuesta implícitos; las etiquetas explícitas [[reply_to_*]] siguen respetándose.Temas de foros y comportamiento de los hilos
Temas de foros y comportamiento de los hilos
:topic:<threadId>; las respuestas y el indicador de escritura se dirigen al hilo del tema; la ruta de configuración del tema es channels.telegram.groups.<chatId>.topics.<threadId>.El tema general (threadId=1) es un caso especial: los envíos de mensajes omiten message_thread_id (Telegram rechaza sendMessage(...thread_id=1) con “thread not found”), pero las acciones de escritura siguen incluyendo message_thread_id (se ha comprobado empíricamente que es necesario para que aparezca el indicador de escritura).Las entradas de temas heredan la configuración del grupo salvo que se sobrescriba (requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy). agentId solo se aplica al tema y no se hereda de los valores predeterminados del grupo. topics."*" establece los valores predeterminados de todos los temas de ese grupo; los ID de tema exactos siguen teniendo prioridad sobre "*".Enrutamiento de agentes por tema: cada tema puede dirigirse a un agente diferente mediante agentId en la configuración del tema, lo que le proporciona su propio espacio de trabajo, memoria y sesión:agent:zu:telegram:group:-1001234567890:topic:3.Vinculación persistente de temas ACP: los temas de foros pueden fijar sesiones del arnés ACP mediante vinculaciones tipadas de nivel superior (bindings[] con type: "acp", match.channel: "telegram", peer.kind: "group" y un ID que incluya el tema, como -1001234567890:topic:42). Actualmente, el alcance se limita a los temas de foros de grupos y supergrupos. Consulte Agentes ACP.Creación de ACP vinculada al hilo desde el chat: /acp spawn <agent> --thread here|auto vincula el tema actual a una nueva sesión ACP; los mensajes posteriores se dirigen directamente a ella y OpenClaw fija la confirmación de creación en el tema. Se controla mediante session.threadBindings.spawnSessions (valor predeterminado: true).El contexto de plantilla expone MessageThreadId y IsForum. Los chats de mensajes directos con message_thread_id conservan los metadatos de respuesta, pero solo usan claves de sesión compatibles con hilos cuando getMe de Telegram informa de has_topics_enabled: true.
Las sustituciones retiradas dm.threadReplies y direct.*.threadReplies ya no existen; el modo de hilos de BotFather es la única fuente de verdad. Ejecute openclaw doctor --fix para eliminar las claves de configuración obsoletas.Audio, vídeo y stickers
Audio, vídeo y stickers
Mensajes de audio
Telegram distingue las notas de voz de los archivos de audio. Valor predeterminado: comportamiento de archivo de audio; incluya la etiqueta[[audio_as_voice]] en la respuesta del agente para forzar el envío como nota de voz. Las transcripciones de notas de voz entrantes se presentan en el contexto del agente como texto no fiable generado por una máquina, pero la detección de menciones sigue usando la transcripción sin procesar para que los mensajes de voz condicionados por menciones sigan funcionando.Mensajes de vídeo
Telegram distingue los archivos de vídeo de las notas de vídeo. Las notas de vídeo no admiten pies de foto; el texto proporcionado en el mensaje se envía por separado.Ubicaciones y lugares
Use la acciónsend existente con un objeto location independiente. Las coordenadas envían un marcador nativo; añadir tanto name como address envía una tarjeta de lugar nativa. Los envíos de ubicaciones no pueden combinarse con texto de mensaje ni contenido multimedia.Stickers
Entrantes: los archivos WEBP estáticos se descargan y procesan (marcador de posición<media:sticker>); los archivos TGS animados y WEBM de vídeo se omiten.Campos de contexto de stickers: Sticker.emoji, Sticker.setName, Sticker.fileId, Sticker.fileUniqueId, Sticker.cachedDescription. Las descripciones se almacenan en caché en el estado SQLite del plugin de OpenClaw para reducir las llamadas de visión repetidas.Habilite las acciones de stickers:Notificaciones de reacciones
Notificaciones de reacciones
message_reaction, separadas de las cargas útiles de los mensajes. Cuando se habilitan, OpenClaw pone en cola eventos del sistema como Telegram reaction added: 👍 by Alice (@alice) on msg 42.channels.telegram.reactionNotifications:off | own | all(valor predeterminado:own)channels.telegram.reactionLevel:off | ack | minimal | extensive(valor predeterminado:minimal)
own significa que solo se incluyen las reacciones de usuarios a mensajes enviados por el bot (se aplica el mejor esfuerzo mediante una caché de mensajes enviados). Los eventos de reacción siguen respetando los controles de acceso de Telegram (dmPolicy, allowFrom, groupPolicy, groupAllowFrom); los remitentes no autorizados se descartan.Telegram no proporciona ID de hilo en las actualizaciones de reacciones: los grupos que no son foros se dirigen a la sesión del chat grupal; los grupos con foro se dirigen a la sesión del tema general (:topic:1), no al tema exacto de origen.allowed_updates para sondeo o Webhook incluye message_reaction automáticamente.Reacciones de confirmación
Reacciones de confirmación
ackReaction envía un emoji de confirmación mientras OpenClaw procesa un mensaje entrante. messages.ackReactionScope determina cuándo se envía.Orden de resolución de emojis:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- emoji alternativo de la identidad del agente (
agents.entries.*.identity.emoji; de lo contrario, ”👀”)
"" para deshabilitar la reacción en un canal o una cuenta.Ámbito (messages.ackReactionScope, valor predeterminado "group-mentions"; actualmente no existe ninguna sustitución para cuentas ni canales de Telegram):all (mensajes directos y grupos, incluidos los eventos ambientales de sala), direct (solo mensajes directos), group-all (todos los mensajes de grupo excepto los eventos ambientales de sala, sin mensajes directos), group-mentions (grupos cuando se menciona al bot; sin mensajes directos — valor predeterminado), off / none (deshabilitado).group-mentions) no activa reacciones de confirmación en mensajes directos ni en eventos ambientales de sala. Use direct o all para los mensajes directos; solo all confirma los eventos ambientales de sala. Este valor se lee al iniciar el proveedor de Telegram, por lo que es necesario reiniciar el Gateway para que el cambio surta efecto.Escrituras de configuración desde eventos y comandos de Telegram
Escrituras de configuración desde eventos y comandos de Telegram
configWrites !== false). Las escrituras activadas por Telegram incluyen eventos de migración de grupos (migrate_to_chat_id, actualiza channels.telegram.groups) y /config set / /config unset (requiere habilitar los comandos).Para deshabilitarlas:Sondeo prolongado frente a Webhook
Sondeo prolongado frente a Webhook
channels.telegram.webhookUrl y channels.telegram.webhookSecret; opcionalmente, webhookPath (valor predeterminado /telegram-webhook), webhookHost (valor predeterminado 127.0.0.1), webhookPort (valor predeterminado 8787) y webhookCertPath (certificado PEM autofirmado para configuraciones con IP directa o sin dominio).En el modo de sondeo prolongado, OpenClaw conserva su marca de reinicio solo después de que una actualización se distribuya correctamente; si un controlador falla, esa actualización puede volver a intentarse en el mismo proceso en lugar de marcarse como completada.El receptor local se vincula de forma predeterminada a 127.0.0.1:8787. Para el acceso público, coloque un proxy inverso delante del puerto local o establezca webhookHost: "0.0.0.0" de forma intencionada.El modo Webhook valida las protecciones de la solicitud, el token secreto de Telegram y el cuerpo JSON y, a continuación, confirma la actualización en su cola de entrada duradera antes de devolver una respuesta 200 vacía. La adopción duradera correcta incluye x-openclaw-delivery-accepted: durable; las respuestas de estado, enrutamiento, autenticación, validación y error de almacenamiento omiten este encabezado. Los proxies inversos y los controladores del host pueden exigir el encabezado para distinguir la adopción por parte de OpenClaw de una respuesta 200 vacía genérica sin deducir la aceptación a partir del tiempo de respuesta.Después de la escritura duradera, OpenClaw reclama y procesa las actualizaciones mediante el drenaje de entrada de canales del núcleo (carriles por chat y por tema, finalización al adoptar el turno y tiempo de espera por bloqueo previo a la adopción). Los turnos lentos del agente no retienen el ACK de entrega de Telegram.Límites y destinos de la CLI
Límites y destinos de la CLI
channels.telegram.textChunkLimittiene un valor predeterminado de 4000;streaming.chunkMode="newline"prioriza los límites de párrafo (líneas en blanco) antes de dividir por longitud.channels.telegram.mediaMaxMb(valor predeterminado: 100) limita el tamaño de los archivos multimedia entrantes y salientes.- el historial de contexto de grupo usa
channels.telegram.historyLimitomessages.groupChat.historyLimit(valor predeterminado: 50);0lo desactiva. - el contexto complementario de respuestas, citas y reenvíos se normaliza en una única ventana de contexto de conversación seleccionada cuando el Gateway ha observado los mensajes principales; la caché de mensajes observados reside en el estado SQLite del plugin de OpenClaw, y
openclaw doctor --fiximporta los archivos auxiliares heredados. Telegram solo incluye unreply_to_messagesuperficial por actualización, por lo que las cadenas anteriores a la caché se limitan a esa carga útil. - las listas de permitidos de Telegram controlan principalmente quién puede activar el agente, no constituyen un límite completo de ocultación del contexto complementario.
- historial de mensajes directos:
channels.telegram.dmHistoryLimit,channels.telegram.dms["<user_id>"].historyLimit.
openclaw message poll y admiten temas de foro:--poll-duration-seconds (5-600), --poll-anonymous, --poll-public, --thread-id (o un destino :topic:). --poll-option se repite entre 2 y 12 veces (el límite de opciones de Telegram).El envío de Telegram también admite --presentation con bloques buttons para teclados en línea (cuando channels.telegram.capabilities.inlineButtons lo permite), --pin o --delivery '{"pin":true}' para solicitar la entrega fijada cuando el bot puede fijar mensajes en ese chat, y --force-document para enviar imágenes, GIF y vídeos salientes como documentos en lugar de cargas comprimidas, animadas o de vídeo.Control de acciones: channels.telegram.actions.sendMessage=false desactiva todos los mensajes salientes, incluidas las encuestas; channels.telegram.actions.poll=false desactiva la creación de encuestas, pero mantiene habilitados los envíos normales.Aprobaciones de ejecución en Telegram
Aprobaciones de ejecución en Telegram
channels.telegram.execApprovals.enabled("auto"las habilita cuando se puede resolver al menos un aprobador)channels.telegram.execApprovals.approvers(recurre a los ID numéricos de propietarios decommands.ownerAllowFrom)channels.telegram.execApprovals.target:dm(valor predeterminado) |channel|bothagentFilter,sessionFilter
channels.telegram.allowFrom, groupAllowFrom y defaultTo controlan quién puede comunicarse con el bot y dónde envía este las respuestas normales; no convierten a nadie en aprobador de ejecución. El primer emparejamiento aprobado por mensaje directo inicializa commands.ownerAllowFrom cuando todavía no existe un propietario de comandos, por lo que las configuraciones con un único propietario funcionan sin duplicar ID en execApprovals.approvers.La entrega en el canal muestra el texto del comando en el chat; habilite channel o both únicamente en grupos o temas de confianza. Cuando la solicitud llega a un tema de foro, OpenClaw conserva el tema para la solicitud de aprobación y el seguimiento. Las aprobaciones de ejecución caducan después de 30 minutos de forma predeterminada.Los botones de aprobación en línea también requieren que channels.telegram.capabilities.inlineButtons permita la superficie de destino (dm, group o all). Los ID de aprobación con el prefijo plugin: se resuelven mediante las aprobaciones del plugin; los demás se resuelven primero mediante las aprobaciones de ejecución.Consulte Aprobaciones de ejecución.Controles de respuestas de error
Cuando el agente encuentra un error de entrega o del proveedor, la política de errores controla si los mensajes de error llegan al chat de Telegram:Solución de problemas
El bot no responde a los mensajes de grupo sin mención
El bot no responde a los mensajes de grupo sin mención
- Si
requireMention=false, el modo de privacidad de Telegram debe permitir la visibilidad completa: BotFather/setprivacy-> Disable; después, elimine el bot del grupo y vuelva a añadirlo. openclaw channels statusmuestra una advertencia cuando la configuración espera mensajes de grupo sin mención.openclaw channels status --probecomprueba ID numéricos de grupo explícitos; no se puede comprobar la pertenencia con el comodín"*".- Prueba rápida de sesión:
/activation always.
El bot no recibe ningún mensaje de grupo
El bot no recibe ningún mensaje de grupo
- Cuando existe
channels.telegram.groups, el grupo debe aparecer en la lista (o incluir"*"). - Verifique que el bot pertenezca al grupo.
- Revise
openclaw logs --followpara conocer los motivos de omisión.
Los comandos funcionan parcialmente o no funcionan
Los comandos funcionan parcialmente o no funcionan
- Autorice la identidad del remitente (mediante emparejamiento o el valor numérico
allowFrom); la autorización de comandos sigue aplicándose incluso cuando la política del grupo esopen. setMyCommands failedconBOT_COMMANDS_TOO_MUCHsignifica que el menú nativo tiene demasiadas entradas; reduzca los comandos de plugins, Skills o personalizados, o desactive los menús nativos.- Las llamadas de inicio
deleteMyCommands/setMyCommandsy las llamadas de escriturasendChatActiontienen límites y vuelven a intentarse una vez mediante el transporte alternativo de Telegram cuando la solicitud agota el tiempo de espera. Los errores persistentes de red o recuperación suelen significar que no se puede acceder mediante DNS/HTTPS aapi.telegram.org.
El inicio informa de un token no autorizado
El inicio informa de un token no autorizado
getMe returned 401es un fallo de autenticación de Telegram para el token de bot configurado. Vuelva a copiar o generar el token en BotFather y, a continuación, actualicechannels.telegram.botToken,tokenFile,accounts.<id>.botTokenoTELEGRAM_BOT_TOKEN(cuenta predeterminada).deleteWebhook 401 Unauthorizeddurante el inicio también es un fallo de autenticación; tratarlo como «no existe ningún Webhook» solo aplazaría el mismo fallo del token incorrecto hasta una llamada posterior a la API.
Inestabilidad del sondeo o de la red
Inestabilidad del sondeo o de la red
- Node 22+ con una implementación personalizada de recuperación o proxy puede provocar cancelaciones inmediatas si los tipos de
AbortSignalno coinciden. - Algunos hosts resuelven primero
api.telegram.orgcomo IPv6; una salida IPv6 defectuosa provoca fallos intermitentes de la API. - Los registros con
TypeError: fetch failedoNetwork request for 'getUpdates' failed!se vuelven a intentar como errores de red recuperables. - Durante el inicio del sondeo, OpenClaw reutiliza para grammY la comprobación de inicio
getMecompletada correctamente, de modo que el ejecutor no necesite un segundogetMeantes del primergetUpdates. - Si
deleteWebhookfalla con un error de red transitorio durante el inicio del sondeo, OpenClaw continúa con el sondeo prolongado en lugar de realizar otra llamada al plano de control previa al sondeo. Un Webhook aún activo aparece entonces como un conflictogetUpdates; OpenClaw reconstruye el transporte y vuelve a intentar la limpieza del Webhook. Polling stall detecteden los registros significa que OpenClaw reinicia el sondeo y reconstruye el transporte después de 120 segundos sin completar la comprobación de actividad del sondeo prolongado de forma predeterminada.openclaw channels status --probeyopenclaw doctormuestran una advertencia cuando una cuenta de sondeo en ejecución no ha completadogetUpdatesdespués del período de gracia de inicio, una cuenta de Webhook en ejecución no ha completadosetWebhookdespués del período de gracia de inicio, o la última actividad correcta del transporte de sondeo está obsoleta.- Telegram respeta las variables de entorno de proxy del proceso para el transporte de la API del bot:
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYy sus variantes en minúsculas.NO_PROXY/no_proxyaún pueden omitirapi.telegram.org. - Si
OPENCLAW_PROXY_URLestá establecido para un entorno de servicio y no existe ninguna variable de entorno de proxy estándar, Telegram también usa esa URL para el transporte de la API del bot. - En hosts VPS con salida directa o TLS inestables, enrute las llamadas a la API de Telegram mediante un proxy:
- Node 22+ usa
autoSelectFamily=truede forma predeterminada (excepto en WSL2). El orden de los resultados DNS de Telegram respetaOPENCLAW_TELEGRAM_DNS_RESULT_ORDER, despuéschannels.telegram.network.dnsResultOrdery, por último, el valor predeterminado del proceso (por ejemplo,NODE_OPTIONS=--dns-result-order=ipv4first); si ninguno se aplica, recurre aipv4firsten Node 22+. - En WSL2, o cuando el comportamiento exclusivo de IPv4 funciona mejor, fuerce la selección de familia:
- Las respuestas del intervalo de referencia de RFC 2544 (
198.18.0.0/15) ya se permiten de forma predeterminada para las descargas de contenido multimedia de Telegram. Si un proxy de IP falsa o transparente de confianza reescribeapi.telegram.orgcomo alguna otra dirección privada, interna o de uso especial durante las descargas de contenido multimedia, habilite la omisión exclusiva de Telegram:
- La misma opción está disponible por cuenta en
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Si el proxy resuelve los hosts de contenido multimedia de Telegram dentro de
198.18.x.x, mantenga primero desactivada la opción peligrosa: ese intervalo ya se permite de forma predeterminada.
- Anulaciones temporales del entorno:
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1,OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1,OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first. - Valide las respuestas DNS:
Referencia de configuración
Referencia principal: Referencia de configuración: Telegram.Campos de Telegram más relevantes
Campos de Telegram más relevantes
- inicio/autenticación:
enabled,botToken,tokenFile(debe ser un archivo normal; se rechazan los enlaces simbólicos),accounts.* - control de acceso:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*,bindings[]de nivel superior (type: "acp") - valores predeterminados de los temas:
groups.<chatId>.topics."*"se aplica a los temas del foro sin coincidencia; los ID de tema exactos lo anulan - aprobaciones de ejecución:
execApprovals,accounts.*.execApprovals - comandos/menú:
commands.native,commands.nativeSkills,customCommands - hilos/respuestas:
replyToMode,threadBindings - transmisión:
streaming(modosoff | partial | block | progress),streaming.preview.toolProgress - formato/entrega:
textChunkLimit,streaming.chunkMode,richMessages,markdown.tables(off | bullets | code | block),linkPreview,responsePrefix - contenido multimedia/red:
mediaMaxMb,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - raíz de API personalizada:
apiRoot(solo la raíz de la API de bots; no incluya/bot<TOKEN>),trustedLocalFileRoots(raícesfile_pathabsolutas de la API de bots autoalojada) - Webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost,webhookPort,webhookCertPath - acciones/capacidades:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker|createForumTopic|editForumTopic - reacciones:
reactionNotifications,reactionLevel - errores:
errorPolicy,silentErrorReplies - escrituras/historial:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit
channels.telegram.defaultAccount (o incluya channels.telegram.accounts.default) para que el enrutamiento predeterminado sea explícito. De lo contrario, OpenClaw recurre al primer ID de cuenta normalizado y openclaw doctor muestra una advertencia. Las cuentas con nombre heredan channels.telegram.allowFrom / groupAllowFrom, pero no los valores de accounts.default.*.