diff --git a/docs/es/channels/discord.md b/docs/es/channels/discord.md index 7e62671d9..c298dbca5 100644 --- a/docs/es/channels/discord.md +++ b/docs/es/channels/discord.md @@ -1,39 +1,39 @@ --- read_when: - - Trabajando en funciones del canal de Discord -summary: Estado del soporte del bot de Discord, capacidades y configuración + - Trabajando en las funciones del canal de Discord +summary: Estado de compatibilidad, capacidades y configuración del bot de Discord title: Discord x-i18n: - generated_at: "2026-04-09T01:29:29Z" + generated_at: "2026-04-21T17:45:42Z" model: gpt-5.4 provider: openai - source_hash: 3cd2886fad941ae2129e681911309539e9a65a2352b777b538d7f4686a68f73f + source_hash: 1681315a6c246c4b68347f5e22319e132f30ea4e29a19e7d1da9e83dce7b68d0 source_path: channels/discord.md workflow: 15 --- # Discord (API de bot) -Estado: listo para mensajes directos y canales de servidor mediante la gateway oficial de Discord. +Estado: listo para MD y canales de servidor mediante el gateway oficial de Discord. - - Los mensajes directos de Discord usan el modo de emparejamiento de forma predeterminada. + + Los MD de Discord usan el modo de vinculación de forma predeterminada. - + Comportamiento nativo de comandos y catálogo de comandos. - Diagnóstico y flujo de reparación entre canales. + Diagnóstico entre canales y flujo de reparación. ## Configuración rápida -Necesitarás crear una aplicación nueva con un bot, añadir el bot a tu servidor y emparejarlo con OpenClaw. Recomendamos añadir tu bot a tu propio servidor privado. Si todavía no tienes uno, [crea uno primero](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (elige **Create My Own > For me and my friends**). +Necesitarás crear una nueva aplicación con un bot, agregar el bot a tu servidor y vincularlo con OpenClaw. Recomendamos agregar tu bot a tu propio servidor privado. Si todavía no tienes uno, [crea uno primero](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (elige **Create My Own > For me and my friends**). - + Ve al [Portal para desarrolladores de Discord](https://discord.com/developers/applications) y haz clic en **New Application**. Ponle un nombre como "OpenClaw". Haz clic en **Bot** en la barra lateral. Establece el **Username** con el nombre que uses para tu agente de OpenClaw. @@ -41,7 +41,7 @@ Necesitarás crear una aplicación nueva con un bot, añadir el bot a tu servido - Aún en la página **Bot**, desplázate hacia abajo hasta **Privileged Gateway Intents** y habilita: + Todavía en la página **Bot**, desplázate hacia abajo hasta **Privileged Gateway Intents** y habilita: - **Message Content Intent** (obligatorio) - **Server Members Intent** (recomendado; obligatorio para listas de permitidos por rol y coincidencia de nombre a ID) @@ -50,25 +50,25 @@ Necesitarás crear una aplicación nueva con un bot, añadir el bot a tu servido - Vuelve a subir en la página **Bot** y haz clic en **Reset Token**. + Vuelve hacia arriba en la página **Bot** y haz clic en **Reset Token**. A pesar del nombre, esto genera tu primer token; no se está "restableciendo" nada. - Copia el token y guárdalo en algún lugar. Este es tu **Bot Token** y lo necesitarás en breve. + Copia el token y guárdalo en algún lugar. Este es tu **Bot Token** y lo necesitarás dentro de poco. - - Haz clic en **OAuth2** en la barra lateral. Generarás una URL de invitación con los permisos adecuados para añadir el bot a tu servidor. + + Haz clic en **OAuth2** en la barra lateral. Generarás una URL de invitación con los permisos correctos para agregar el bot a tu servidor. Desplázate hacia abajo hasta **OAuth2 URL Generator** y habilita: - `bot` - `applications.commands` - Debajo aparecerá una sección **Bot Permissions**. Habilita: + Aparecerá una sección **Bot Permissions** debajo. Habilita: - View Channels - Send Messages @@ -81,26 +81,26 @@ Necesitarás crear una aplicación nueva con un bot, añadir el bot a tu servido - - De vuelta en la app de Discord, debes habilitar el modo desarrollador para poder copiar IDs internas. + + De vuelta en la aplicación de Discord, necesitas habilitar el Developer Mode para poder copiar IDs internos. 1. Haz clic en **User Settings** (icono de engranaje junto a tu avatar) → **Advanced** → activa **Developer Mode** 2. Haz clic derecho en el **icono de tu servidor** en la barra lateral → **Copy Server ID** - 3. Haz clic derecho en tu **propio avatar** → **Copy User ID** + 3. Haz clic derecho en **tu propio avatar** → **Copy User ID** Guarda tu **Server ID** y **User ID** junto con tu Bot Token; enviarás los tres a OpenClaw en el siguiente paso. - - Para que el emparejamiento funcione, Discord debe permitir que tu bot te envíe mensajes directos. Haz clic derecho en el **icono de tu servidor** → **Privacy Settings** → activa **Direct Messages**. + + Para que la vinculación funcione, Discord debe permitir que tu bot te envíe MD. Haz clic derecho en el **icono de tu servidor** → **Privacy Settings** → activa **Direct Messages**. - Esto permite que los miembros del servidor (incluidos los bots) te envíen mensajes directos. Mantén esto habilitado si quieres usar mensajes directos de Discord con OpenClaw. Si solo planeas usar canales de servidor, puedes desactivar los mensajes directos después del emparejamiento. + Esto permite que los miembros del servidor (incluidos los bots) te envíen MD. Mantén esto habilitado si quieres usar los MD de Discord con OpenClaw. Si solo piensas usar canales de servidor, puedes deshabilitar los MD después de la vinculación. - - El token de tu bot de Discord es un secreto (como una contraseña). Establécelo en la máquina que ejecuta OpenClaw antes de enviar mensajes a tu agente. + + El token de tu bot de Discord es un secreto (como una contraseña). Configúralo en la máquina que ejecuta OpenClaw antes de enviar mensajes a tu agente. ```bash export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN" @@ -110,17 +110,17 @@ openclaw config set channels.discord.enabled true --strict-json openclaw gateway ``` - Si OpenClaw ya se está ejecutando como servicio en segundo plano, reinícialo mediante la app OpenClaw para Mac o deteniendo y reiniciando el proceso `openclaw gateway run`. + Si OpenClaw ya se está ejecutando como servicio en segundo plano, reinícialo mediante la app de OpenClaw para Mac o deteniendo y reiniciando el proceso `openclaw gateway run`. - + Chatea con tu agente de OpenClaw en cualquier canal existente (por ejemplo, Telegram) y díselo. Si Discord es tu primer canal, usa en su lugar la pestaña de CLI / config. - > "Ya configuré el token de mi bot de Discord en la configuración. Completa la configuración de Discord con User ID `` y Server ID ``." + > "Ya configuré mi token de bot de Discord en la configuración. Por favor, termina la configuración de Discord con User ID `` y Server ID ``." Si prefieres una configuración basada en archivos, establece: @@ -140,27 +140,27 @@ openclaw gateway } ``` - Respaldo por variable de entorno para la cuenta predeterminada: + Respaldo mediante variable de entorno para la cuenta predeterminada: ```bash DISCORD_BOT_TOKEN=... ``` - Se admiten valores `token` en texto plano. También se admiten valores SecretRef para `channels.discord.token` en proveedores env/file/exec. Consulta [Secrets Management](/es/gateway/secrets). + Se admiten valores `token` en texto sin formato. También se admiten valores SecretRef para `channels.discord.token` en proveedores env/file/exec. Consulta [Secrets Management](/es/gateway/secrets). - - Espera hasta que la gateway esté en ejecución y luego envía un mensaje directo a tu bot en Discord. Responderá con un código de emparejamiento. + + Espera hasta que el gateway esté en ejecución y luego envía un MD a tu bot en Discord. Responderá con un código de vinculación. - Envía el código de emparejamiento a tu agente en tu canal existente: + Envía el código de vinculación a tu agente en tu canal existente: - > "Aprueba este código de emparejamiento de Discord: ``" + > "Aprueba este código de vinculación de Discord: ``" @@ -172,29 +172,29 @@ openclaw pairing approve discord - Los códigos de emparejamiento caducan después de 1 hora. + Los códigos de vinculación caducan después de 1 hora. - Ahora deberías poder chatear con tu agente en Discord mediante mensaje directo. + Ahora deberías poder chatear con tu agente en Discord mediante MD. -La resolución del token tiene en cuenta la cuenta. Los valores del token en la configuración tienen prioridad sobre el respaldo por variable de entorno. `DISCORD_BOT_TOKEN` solo se usa para la cuenta predeterminada. -Para llamadas salientes avanzadas (acciones de canal/herramienta de mensajes), se usa un `token` explícito por llamada para esa llamada. Esto se aplica a acciones de envío y de lectura/sondeo (por ejemplo read/search/fetch/thread/pins/permissions). La política de cuenta y la configuración de reintentos siguen viniendo de la cuenta seleccionada en la instantánea activa del runtime. +La resolución de tokens reconoce las cuentas. Los valores de token en la configuración tienen prioridad sobre el respaldo mediante variable de entorno. `DISCORD_BOT_TOKEN` solo se usa para la cuenta predeterminada. +Para llamadas salientes avanzadas (herramienta de mensajes/acciones de canal), se usa un `token` explícito por llamada para esa llamada. Esto se aplica a acciones de envío y de lectura/sondeo (por ejemplo read/search/fetch/thread/pins/permissions). La configuración de política de cuenta/reintentos sigue viniendo de la cuenta seleccionada en la instantánea activa del runtime. ## Recomendado: configurar un espacio de trabajo de servidor -Una vez que los mensajes directos funcionen, puedes configurar tu servidor de Discord como un espacio de trabajo completo donde cada canal obtiene su propia sesión de agente con su propio contexto. Esto se recomienda para servidores privados donde solo estáis tú y tu bot. +Una vez que los MD funcionen, puedes configurar tu servidor de Discord como un espacio de trabajo completo donde cada canal obtiene su propia sesión de agente con su propio contexto. Esto se recomienda para servidores privados donde solo están tú y tu bot. - - Esto permite que tu agente responda en cualquier canal de tu servidor, no solo en mensajes directos. + + Esto permite que tu agente responda en cualquier canal de tu servidor, no solo en MD. - > "Añade mi Server ID de Discord `` a la lista de permitidos de servidores" + > "Agrega mi Server ID de Discord `` a la lista de permitidos de servidores" @@ -220,11 +220,11 @@ Una vez que los mensajes directos funcionen, puedes configurar tu servidor de Di - De forma predeterminada, tu agente solo responde en canales de servidor cuando se le menciona con @. En un servidor privado, probablemente quieras que responda a todos los mensajes. + De forma predeterminada, tu agente solo responde en canales de servidor cuando se le menciona con @. Para un servidor privado, probablemente quieras que responda a todos los mensajes. - > "Permite que mi agente responda en este servidor sin necesidad de que se le mencione con @" + > "Permite que mi agente responda en este servidor sin necesidad de que se le haga @mention" Establece `requireMention: false` en la configuración de tu servidor: @@ -248,40 +248,40 @@ Una vez que los mensajes directos funcionen, puedes configurar tu servidor de Di - - De forma predeterminada, la memoria a largo plazo (MEMORY.md) solo se carga en sesiones de mensajes directos. Los canales de servidor no cargan automáticamente MEMORY.md. + + De forma predeterminada, la memoria a largo plazo (MEMORY.md) solo se carga en sesiones de MD. Los canales de servidor no cargan MEMORY.md automáticamente. > "Cuando haga preguntas en canales de Discord, usa memory_search o memory_get si necesitas contexto a largo plazo de MEMORY.md." - Si necesitas contexto compartido en cada canal, coloca las instrucciones estables en `AGENTS.md` o `USER.md` (se inyectan en cada sesión). Mantén las notas a largo plazo en `MEMORY.md` y accede a ellas bajo demanda con herramientas de memoria. + Si necesitas contexto compartido en todos los canales, coloca las instrucciones estables en `AGENTS.md` o `USER.md` (se inyectan en cada sesión). Mantén las notas a largo plazo en `MEMORY.md` y accede a ellas cuando haga falta con herramientas de memoria. -Ahora crea algunos canales en tu servidor de Discord y empieza a chatear. Tu agente puede ver el nombre del canal, y cada canal obtiene su propia sesión aislada, por lo que puedes configurar `#coding`, `#home`, `#research` o lo que mejor se adapte a tu flujo de trabajo. +Ahora crea algunos canales en tu servidor de Discord y empieza a chatear. Tu agente puede ver el nombre del canal, y cada canal obtiene su propia sesión aislada, así que puedes configurar `#coding`, `#home`, `#research` o lo que mejor se adapte a tu flujo de trabajo. ## Modelo de runtime -- La gateway es propietaria de la conexión de Discord. +- El Gateway es dueño de la conexión de Discord. - El enrutamiento de respuestas es determinista: las respuestas entrantes de Discord vuelven a Discord. - De forma predeterminada (`session.dmScope=main`), los chats directos comparten la sesión principal del agente (`agent:main:main`). -- Los canales de servidor usan claves de sesión aisladas (`agent::discord:channel:`). -- Los mensajes directos de grupo se ignoran de forma predeterminada (`channels.discord.dm.groupEnabled=false`). -- Los comandos nativos de barra inclinada se ejecutan en sesiones de comando aisladas (`agent::discord:slash:`), mientras siguen llevando `CommandTargetSessionKey` a la sesión de conversación enrutada. +- Los canales de servidor son claves de sesión aisladas (`agent::discord:channel:`). +- Los MD de grupo se ignoran de forma predeterminada (`channels.discord.dm.groupEnabled=false`). +- Los comandos slash nativos se ejecutan en sesiones de comando aisladas (`agent::discord:slash:`), mientras siguen llevando `CommandTargetSessionKey` a la sesión de conversación enrutada. ## Canales de foro -Los canales de foro y multimedia de Discord solo aceptan publicaciones en hilos. OpenClaw admite dos formas de crearlos: +Los canales de foro y multimedia de Discord solo aceptan publicaciones en hilos. OpenClaw admite dos formas de crearlas: -- Envía un mensaje al padre del foro (`channel:`) para crear automáticamente un hilo. El título del hilo usa la primera línea no vacía de tu mensaje. +- Envía un mensaje al foro padre (`channel:`) para crear automáticamente un hilo. El título del hilo usa la primera línea no vacía de tu mensaje. - Usa `openclaw message thread create` para crear un hilo directamente. No pases `--message-id` para canales de foro. -Ejemplo: enviar al padre del foro para crear un hilo +Ejemplo: enviar al foro padre para crear un hilo ```bash openclaw message send --channel discord --target channel: \ @@ -295,7 +295,7 @@ openclaw message thread create --channel discord --target channel: \ --thread-name "Topic title" --message "Body of the post" ``` -Los padres de foro no aceptan componentes de Discord. Si necesitas componentes, envíalos al propio hilo (`channel:`). +Los foros padre no aceptan componentes de Discord. Si necesitas componentes, envía al propio hilo (`channel:`). ## Componentes interactivos @@ -311,19 +311,19 @@ De forma predeterminada, los componentes son de un solo uso. Establece `componen Para restringir quién puede hacer clic en un botón, establece `allowedUsers` en ese botón (IDs de usuario de Discord, etiquetas o `*`). Cuando está configurado, los usuarios que no coincidan reciben una denegación efímera. -Los comandos de barra inclinada `/model` y `/models` abren un selector interactivo de modelo con menús desplegables de proveedor y modelo, además de un paso Submit. La respuesta del selector es efímera y solo el usuario que lo invocó puede usarla. +Los comandos slash `/model` y `/models` abren un selector de modelo interactivo con menús desplegables de proveedor y modelo, además de un paso de envío. La respuesta del selector es efímera y solo el usuario que lo invoca puede usarla. Archivos adjuntos: - Los bloques `file` deben apuntar a una referencia de adjunto (`attachment://`) - Proporciona el adjunto mediante `media`/`path`/`filePath` (archivo único); usa `media-gallery` para varios archivos -- Usa `filename` para reemplazar el nombre de carga cuando deba coincidir con la referencia del adjunto +- Usa `filename` para sobrescribir el nombre de carga cuando deba coincidir con la referencia del adjunto Formularios modales: -- Añade `components.modal` con hasta 5 campos +- Agrega `components.modal` con hasta 5 campos - Tipos de campo: `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select` -- OpenClaw añade un botón disparador automáticamente +- OpenClaw agrega automáticamente un botón de activación Ejemplo: @@ -332,45 +332,45 @@ Ejemplo: channel: "discord", action: "send", to: "channel:123456789012345678", - message: "Optional fallback text", + message: "Texto alternativo opcional", components: { reusable: true, - text: "Choose a path", + text: "Elige una ruta", blocks: [ { type: "actions", buttons: [ { - label: "Approve", + label: "Aprobar", style: "success", allowedUsers: ["123456789012345678"], }, - { label: "Decline", style: "danger" }, + { label: "Rechazar", style: "danger" }, ], }, { type: "actions", select: { type: "string", - placeholder: "Pick an option", + placeholder: "Elige una opción", options: [ - { label: "Option A", value: "a" }, - { label: "Option B", value: "b" }, + { label: "Opción A", value: "a" }, + { label: "Opción B", value: "b" }, ], }, }, ], modal: { - title: "Details", - triggerLabel: "Open form", + title: "Detalles", + triggerLabel: "Abrir formulario", fields: [ - { type: "text", label: "Requester" }, + { type: "text", label: "Solicitante" }, { type: "select", - label: "Priority", + label: "Prioridad", options: [ - { label: "Low", value: "low" }, - { label: "High", value: "high" }, + { label: "Baja", value: "low" }, + { label: "Alta", value: "high" }, ], }, ], @@ -382,28 +382,28 @@ Ejemplo: ## Control de acceso y enrutamiento - - `channels.discord.dmPolicy` controla el acceso a mensajes directos (heredado: `channels.discord.dm.policy`): + + `channels.discord.dmPolicy` controla el acceso por MD (heredado: `channels.discord.dm.policy`): - `pairing` (predeterminado) - `allowlist` - `open` (requiere que `channels.discord.allowFrom` incluya `"*"`; heredado: `channels.discord.dm.allowFrom`) - `disabled` - Si la política de mensajes directos no está abierta, los usuarios desconocidos se bloquean (o se les solicita emparejamiento en modo `pairing`). + Si la política de MD no es abierta, los usuarios desconocidos se bloquean (o se les solicita vinculación en modo `pairing`). - Precedencia en múltiples cuentas: + Precedencia de varias cuentas: - `channels.discord.accounts.default.allowFrom` se aplica solo a la cuenta `default`. - - Las cuentas con nombre heredan `channels.discord.allowFrom` cuando su propio `allowFrom` no está definido. + - Las cuentas con nombre heredan `channels.discord.allowFrom` cuando su propio `allowFrom` no está establecido. - Las cuentas con nombre no heredan `channels.discord.accounts.default.allowFrom`. - Formato de destino de mensajes directos para la entrega: + Formato de destino de MD para la entrega: - `user:` - mención `<@id>` - Los ID numéricos sin prefijo son ambiguos y se rechazan a menos que se proporcione un tipo de destino explícito de usuario/canal. + Los IDs numéricos sin formato son ambiguos y se rechazan a menos que se proporcione un tipo de destino explícito de usuario/canal. @@ -414,16 +414,16 @@ Ejemplo: - `allowlist` - `disabled` - La línea base segura cuando existe `channels.discord` es `allowlist`. + La base segura cuando existe `channels.discord` es `allowlist`. Comportamiento de `allowlist`: - - el servidor debe coincidir con `channels.discord.guilds` (`id` preferido, slug aceptado) - - listas de permitidos opcionales para remitentes: `users` (se recomiendan IDs estables) y `roles` (solo IDs de rol); si cualquiera está configurado, los remitentes están permitidos cuando coinciden con `users` O `roles` - - la coincidencia directa por nombre/etiqueta está desactivada de forma predeterminada; habilita `channels.discord.dangerouslyAllowNameMatching: true` solo como modo de compatibilidad de emergencia + - el servidor debe coincidir con `channels.discord.guilds` (se prefiere `id`, se acepta slug) + - listas de remitentes permitidos opcionales: `users` (se recomiendan IDs estables) y `roles` (solo IDs de rol); si se configura cualquiera de las dos, los remitentes se permiten cuando coinciden con `users` O `roles` + - la coincidencia directa por nombre/etiqueta está deshabilitada de forma predeterminada; habilita `channels.discord.dangerouslyAllowNameMatching: true` solo como modo de compatibilidad de emergencia - se admiten nombres/etiquetas para `users`, pero los IDs son más seguros; `openclaw security audit` advierte cuando se usan entradas de nombre/etiqueta - - si un servidor tiene `channels` configurado, los canales no listados se deniegan - - si un servidor no tiene bloque `channels`, todos los canales de ese servidor en la lista de permitidos están permitidos + - si un servidor tiene `channels` configurado, se deniegan los canales no listados + - si un servidor no tiene bloque `channels`, se permiten todos los canales de ese servidor incluido en la lista de permitidos Ejemplo: @@ -449,33 +449,33 @@ Ejemplo: } ``` - Si solo configuras `DISCORD_BOT_TOKEN` y no creas un bloque `channels.discord`, el respaldo del runtime es `groupPolicy="allowlist"` (con una advertencia en los registros), incluso si `channels.defaults.groupPolicy` es `open`. + Si solo estableces `DISCORD_BOT_TOKEN` y no creas un bloque `channels.discord`, el respaldo en runtime es `groupPolicy="allowlist"` (con una advertencia en los registros), incluso si `channels.defaults.groupPolicy` es `open`. - - Los mensajes de servidor están restringidos por mención de forma predeterminada. + + Los mensajes de servidor están limitados por mención de forma predeterminada. - La detección de mención incluye: + La detección de menciones incluye: - - mención explícita del bot - - patrones de mención configurados (`agents.list[].groupChat.mentionPatterns`, respaldo `messages.groupChat.mentionPatterns`) - - comportamiento implícito de respuesta al bot en los casos compatibles + - mención explícita al bot + - patrones de mención configurados (`agents.list[].groupChat.mentionPatterns`, con respaldo `messages.groupChat.mentionPatterns`) + - comportamiento implícito de respuesta al bot en casos compatibles `requireMention` se configura por servidor/canal (`channels.discord.guilds...`). - `ignoreOtherMentions` descarta opcionalmente mensajes que mencionan a otro usuario/rol pero no al bot (excepto @everyone/@here). + `ignoreOtherMentions` descarta opcionalmente mensajes que mencionan a otro usuario/rol pero no al bot (excluyendo @everyone/@here). - Mensajes directos de grupo: + MD de grupo: - - predeterminado: ignorados (`dm.groupEnabled=false`) - - lista de permitidos opcional mediante `dm.groupChannels` (IDs o slugs de canal) + - predeterminado: se ignoran (`dm.groupEnabled=false`) + - lista de permitidos opcional mediante `dm.groupChannels` (IDs de canal o slugs) ### Enrutamiento de agentes basado en roles -Usa `bindings[].match.roles` para enrutar miembros de servidores de Discord a distintos agentes por ID de rol. Las vinculaciones basadas en rol aceptan solo IDs de rol y se evalúan después de las vinculaciones de par o par padre y antes de las vinculaciones solo de servidor. Si una vinculación también establece otros campos de coincidencia (por ejemplo `peer` + `guildId` + `roles`), todos los campos configurados deben coincidir. +Usa `bindings[].match.roles` para enrutar miembros de servidores de Discord a distintos agentes por ID de rol. Los bindings basados en roles aceptan solo IDs de rol y se evalúan después de los bindings peer o parent-peer y antes de los bindings solo de servidor. Si un binding también establece otros campos de coincidencia (por ejemplo `peer` + `guildId` + `roles`), todos los campos configurados deben coincidir. ```json5 { @@ -499,10 +499,10 @@ Usa `bindings[].match.roles` para enrutar miembros de servidores de Discord a di } ``` -## Configuración del portal para desarrolladores +## Configuración del Portal para desarrolladores - + 1. Discord Developer Portal -> **Applications** -> **New Application** 2. **Bot** -> **Add Bot** @@ -516,12 +516,12 @@ Usa `bindings[].match.roles` para enrutar miembros de servidores de Discord a di - Message Content Intent - Server Members Intent (recomendado) - Presence intent es opcional y solo es obligatorio si quieres recibir actualizaciones de presencia. Configurar la presencia del bot (`setPresence`) no requiere habilitar actualizaciones de presencia para los miembros. + El intent de presencia es opcional y solo es obligatorio si quieres recibir actualizaciones de presencia. Configurar la presencia del bot (`setPresence`) no requiere habilitar actualizaciones de presencia para miembros. - Generador de URL OAuth: + Generador de URL de OAuth: - scopes: `bot`, `applications.commands` @@ -534,33 +534,33 @@ Usa `bindings[].match.roles` para enrutar miembros de servidores de Discord a di - Attach Files - Add Reactions (opcional) - Evita `Administrator` salvo que sea explícitamente necesario. + Evita `Administrator` a menos que sea explícitamente necesario. - Habilita Discord Developer Mode y luego copia: + Habilita el Developer Mode de Discord y luego copia: - ID del servidor - ID del canal - ID del usuario - Prefiere IDs numéricos en la configuración de OpenClaw para auditorías y sondeos fiables. + Prefiere IDs numéricos en la configuración de OpenClaw para auditorías y sondeos confiables. ## Comandos nativos y autenticación de comandos -- `commands.native` usa `"auto"` de forma predeterminada y está habilitado para Discord. -- Reemplazo por canal: `channels.discord.commands.native`. -- `commands.native=false` borra explícitamente comandos nativos de Discord registrados anteriormente. +- `commands.native` tiene como valor predeterminado `"auto"` y está habilitado para Discord. +- Anulación por canal: `channels.discord.commands.native`. +- `commands.native=false` borra explícitamente los comandos nativos de Discord registrados previamente. - La autenticación de comandos nativos usa las mismas listas de permitidos/políticas de Discord que el manejo normal de mensajes. -- Los comandos pueden seguir siendo visibles en la interfaz de Discord para usuarios que no están autorizados; la ejecución sigue aplicando la autenticación de OpenClaw y devuelve "no autorizado". +- Los comandos pueden seguir siendo visibles en la interfaz de Discord para usuarios no autorizados; la ejecución sigue aplicando la autenticación de OpenClaw y devuelve "no autorizado". -Consulta [Slash commands](/es/tools/slash-commands) para el catálogo y el comportamiento de los comandos. +Consulta [Comandos slash](/es/tools/slash-commands) para ver el catálogo de comandos y su comportamiento. -Configuración predeterminada de comandos de barra inclinada: +Configuración predeterminada de comandos slash: - `ephemeral: true` @@ -580,26 +580,27 @@ Configuración predeterminada de comandos de barra inclinada: - `all` - `batched` - Nota: `off` desactiva el encadenamiento implícito de respuestas. Las etiquetas explícitas `[[reply_to_*]]` siguen respetándose. - `first` siempre adjunta la referencia implícita de respuesta nativa al primer mensaje saliente de Discord del turno. - `batched` solo adjunta la referencia implícita de respuesta nativa de Discord cuando el - turno entrante fue un lote con antirrebote de varios mensajes. Esto es útil - cuando quieres respuestas nativas principalmente para chats ambiguos con ráfagas, no para cada - turno de un solo mensaje. + Nota: `off` deshabilita el hilo de respuesta implícito. Las etiquetas explícitas `[[reply_to_*]]` siguen respetándose. + `first` siempre adjunta la referencia de respuesta nativa implícita al primer mensaje saliente de Discord del turno. + `batched` solo adjunta la referencia de respuesta nativa implícita de Discord cuando el + turno entrante era un lote con debounce de varios mensajes. Esto es útil + cuando quieres respuestas nativas principalmente para chats ambiguos y ráfagas, no para + todos los turnos de un solo mensaje. - Los IDs de mensaje se muestran en el contexto/historial para que los agentes puedan dirigirse a mensajes concretos. + Los IDs de mensaje se muestran en el contexto/historial para que los agentes puedan apuntar a mensajes específicos. - OpenClaw puede transmitir borradores de respuesta enviando un mensaje temporal y editándolo a medida que llega texto. + OpenClaw puede transmitir borradores de respuestas enviando un mensaje temporal y editándolo a medida que llega el texto. - `channels.discord.streaming` controla la transmisión de vista previa (`off` | `partial` | `block` | `progress`, predeterminado: `off`). - - El valor predeterminado sigue siendo `off` porque las ediciones de vista previa de Discord pueden alcanzar rápidamente los límites de tasa, especialmente cuando varios bots o gateways comparten la misma cuenta o tráfico de servidor. - - `progress` se acepta por consistencia entre canales y se asigna a `partial` en Discord. + - El valor predeterminado sigue siendo `off` porque las ediciones de vista previa de Discord pueden alcanzar rápidamente los límites de velocidad, especialmente cuando varios bots o gateways comparten la misma cuenta o el mismo tráfico de servidor. + - `progress` se acepta para mantener coherencia entre canales y se mapea a `partial` en Discord. - `channels.discord.streamMode` es un alias heredado y se migra automáticamente. - - `partial` edita un único mensaje de vista previa a medida que llegan los tokens. - - `block` emite fragmentos del tamaño del borrador (usa `draftChunk` para ajustar tamaño y puntos de corte). + - `partial` edita un único mensaje de vista previa a medida que llegan tokens. + - `block` emite fragmentos del tamaño de borrador (usa `draftChunk` para ajustar tamaño y puntos de corte). + - `streaming.preview.toolProgress` controla si las actualizaciones de herramientas/progreso reutilizan el mismo mensaje de vista previa del borrador (predeterminado: `true`). Establece `false` para mantener mensajes separados de herramientas/progreso. Ejemplo: @@ -613,7 +614,7 @@ Configuración predeterminada de comandos de barra inclinada: } ``` - Valores predeterminados de fragmentación del modo `block` (limitados a `channels.discord.textChunkLimit`): + Valores predeterminados de fragmentación para el modo `block` (limitados por `channels.discord.textChunkLimit`): ```json5 { @@ -630,21 +631,21 @@ Configuración predeterminada de comandos de barra inclinada: } ``` - La transmisión de vista previa es solo de texto; las respuestas con archivos multimedia vuelven a la entrega normal. + La transmisión de vista previa es solo de texto; las respuestas multimedia vuelven a la entrega normal. - Nota: la transmisión de vista previa es independiente de la transmisión por bloques. Cuando la transmisión por bloques está explícitamente - habilitada para Discord, OpenClaw omite la vista previa para evitar transmisión doble. + Nota: la transmisión de vista previa es independiente de la transmisión por bloques. Cuando la + transmisión por bloques está habilitada explícitamente para Discord, OpenClaw omite la transmisión de vista previa para evitar una transmisión doble. - Contexto del historial de servidores: + Contexto del historial de servidor: - `channels.discord.historyLimit` predeterminado `20` - respaldo: `messages.groupChat.historyLimit` - - `0` desactiva + - `0` lo deshabilita - Controles del historial de mensajes directos: + Controles del historial de MD: - `channels.discord.dmHistoryLimit` - `channels.discord.dms[""].historyLimit` @@ -652,25 +653,25 @@ Configuración predeterminada de comandos de barra inclinada: Comportamiento de hilos: - los hilos de Discord se enrutan como sesiones de canal - - los metadatos del hilo padre pueden usarse para el enlace de sesión padre - - la configuración del hilo hereda la configuración del canal padre, salvo que exista una entrada específica para el hilo + - los metadatos del hilo padre pueden usarse para el enlace con la sesión padre + - la configuración del hilo hereda la configuración del canal padre a menos que exista una entrada específica del hilo - Los temas de canal se inyectan como contexto **no confiable** (no como prompt del sistema). - El contexto de respuestas y mensajes citados actualmente permanece tal como se recibe. - Las listas de permitidos de Discord controlan principalmente quién puede activar el agente, no son un límite completo de redacción de contexto suplementario. + Los temas del canal se inyectan como contexto **no confiable** (no como prompt del sistema). + El contexto de respuestas y mensajes citados actualmente se mantiene tal como se recibe. + Las listas de permitidos de Discord controlan principalmente quién puede activar al agente, no un límite completo de redacción de contexto suplementario. - Discord puede vincular un hilo a un destino de sesión para que los mensajes posteriores en ese hilo sigan enrutándose a la misma sesión (incluidas sesiones de subagentes). + Discord puede vincular un hilo a un destino de sesión para que los mensajes posteriores en ese hilo sigan enroutándose a la misma sesión (incluidas sesiones de subagentes). Comandos: - `/focus ` vincula el hilo actual/nuevo a un destino de subagente/sesión - `/unfocus` elimina la vinculación del hilo actual - - `/agents` muestra ejecuciones activas y estado de la vinculación - - `/session idle ` inspecciona/actualiza el desenfoque automático por inactividad para vinculaciones enfocadas - - `/session max-age ` inspecciona/actualiza la antigüedad máxima estricta para vinculaciones enfocadas + - `/agents` muestra ejecuciones activas y estado de vinculación + - `/session idle ` inspecciona/actualiza la desvinculación automática por inactividad para bindings enfocados + - `/session max-age ` inspecciona/actualiza la antigüedad máxima estricta para bindings enfocados Configuración: @@ -698,18 +699,18 @@ Configuración predeterminada de comandos de barra inclinada: Notas: - - `session.threadBindings.*` establece los valores predeterminados globales. - - `channels.discord.threadBindings.*` reemplaza el comportamiento de Discord. - - `spawnSubagentSessions` debe ser true para crear/vincular automáticamente hilos para `sessions_spawn({ thread: true })`. - - `spawnAcpSessions` debe ser true para crear/vincular automáticamente hilos para ACP (`/acp spawn ... --thread ...` o `sessions_spawn({ runtime: "acp", thread: true })`). - - Si las vinculaciones de hilos están deshabilitadas para una cuenta, `/focus` y las operaciones relacionadas no están disponibles. + - `session.threadBindings.*` establece valores predeterminados globales. + - `channels.discord.threadBindings.*` anula el comportamiento de Discord. + - `spawnSubagentSessions` debe ser true para crear/vincular hilos automáticamente para `sessions_spawn({ thread: true })`. + - `spawnAcpSessions` debe ser true para crear/vincular hilos automáticamente para ACP (`/acp spawn ... --thread ...` o `sessions_spawn({ runtime: "acp", thread: true })`). + - Si los bindings de hilos están deshabilitados para una cuenta, `/focus` y las operaciones relacionadas de vinculación de hilos no están disponibles. Consulta [Sub-agents](/es/tools/subagents), [ACP Agents](/es/tools/acp-agents) y [Configuration Reference](/es/gateway/configuration-reference). - - Para espacios de trabajo ACP estables "siempre activos", configura vinculaciones ACP tipadas de nivel superior dirigidas a conversaciones de Discord. + + Para espacios de trabajo ACP estables "siempre activos", configura bindings ACP tipados de nivel superior dirigidos a conversaciones de Discord. Ruta de configuración: @@ -765,15 +766,15 @@ Configuración predeterminada de comandos de barra inclinada: Notas: - - `/acp spawn codex --bind here` vincula el canal o hilo actual de Discord en el lugar y mantiene los mensajes futuros enrutados a la misma sesión ACP. - - Esto todavía puede significar "iniciar una sesión ACP nueva de Codex", pero no crea por sí solo un hilo nuevo de Discord. El canal existente sigue siendo la superficie de chat. - - Codex puede seguir ejecutándose en su propio `cwd` o espacio de trabajo de backend en disco. Ese espacio de trabajo es estado de runtime, no un hilo de Discord. - - Los mensajes del hilo pueden heredar la vinculación ACP del canal padre. - - En un canal o hilo vinculado, `/new` y `/reset` restablecen la misma sesión ACP en el lugar. - - Las vinculaciones temporales de hilos siguen funcionando y pueden reemplazar la resolución de destino mientras estén activas. + - `/acp spawn codex --bind here` vincula el canal o hilo actual de Discord en ese mismo lugar y mantiene los mensajes futuros enrutados a la misma sesión ACP. + - Eso todavía puede significar "iniciar una sesión ACP de Codex nueva", pero no crea por sí mismo un nuevo hilo de Discord. El canal existente sigue siendo la superficie de chat. + - Codex todavía puede ejecutarse en su propio `cwd` o espacio de trabajo del backend en disco. Ese espacio de trabajo es estado del runtime, no un hilo de Discord. + - Los mensajes del hilo pueden heredar el binding ACP del canal padre. + - En un canal o hilo vinculado, `/new` y `/reset` restablecen la misma sesión ACP en ese mismo lugar. + - Los bindings temporales de hilos siguen funcionando y pueden anular la resolución de destino mientras estén activos. - `spawnAcpSessions` solo es obligatorio cuando OpenClaw necesita crear/vincular un hilo hijo mediante `--thread auto|here`. No es obligatorio para `/acp spawn ... --bind here` en el canal actual. - Consulta [ACP Agents](/es/tools/acp-agents) para obtener detalles sobre el comportamiento de las vinculaciones. + Consulta [ACP Agents](/es/tools/acp-agents) para ver los detalles del comportamiento de binding. @@ -789,29 +790,29 @@ Configuración predeterminada de comandos de barra inclinada: - - `ackReaction` envía un emoji de confirmación mientras OpenClaw procesa un mensaje entrante. + + `ackReaction` envía un emoji de acuse mientras OpenClaw procesa un mensaje entrante. Orden de resolución: - `channels.discord.accounts..ackReaction` - `channels.discord.ackReaction` - `messages.ackReaction` - - respaldo al emoji de identidad del agente (`agents.list[].identity.emoji`, o "👀" si no existe) + - respaldo de emoji de identidad del agente (`agents.list[].identity.emoji`, o `"👀"` si no existe) Notas: - - Discord acepta emoji unicode o nombres de emoji personalizados. - - Usa `""` para desactivar la reacción para un canal o cuenta. + - Discord acepta emojis unicode o nombres de emojis personalizados. + - Usa `""` para deshabilitar la reacción para un canal o cuenta. Las escrituras de configuración iniciadas desde el canal están habilitadas de forma predeterminada. - Esto afecta a los flujos `/config set|unset` (cuando las funciones de comandos están habilitadas). + Esto afecta a los flujos `/config set|unset` (cuando las funciones de comando están habilitadas). - Desactivar: + Deshabilitar: ```json5 { @@ -825,8 +826,8 @@ Configuración predeterminada de comandos de barra inclinada: - - Enruta el tráfico WebSocket de la gateway de Discord y las búsquedas REST de inicio (ID de aplicación + resolución de lista de permitidos) mediante un proxy HTTP(S) con `channels.discord.proxy`. + + Enruta el tráfico WebSocket del gateway de Discord y las búsquedas REST de inicio (ID de aplicación + resolución de lista de permitidos) a través de un proxy HTTP(S) con `channels.discord.proxy`. ```json5 { @@ -838,7 +839,7 @@ Configuración predeterminada de comandos de barra inclinada: } ``` - Reemplazo por cuenta: + Anulación por cuenta: ```json5 { @@ -856,8 +857,8 @@ Configuración predeterminada de comandos de barra inclinada: - - Habilita la resolución de PluralKit para asignar mensajes proxificados a la identidad del miembro del sistema: + + Habilita la resolución de PluralKit para mapear mensajes proxificados a la identidad del miembro del sistema: ```json5 { @@ -875,14 +876,14 @@ Configuración predeterminada de comandos de barra inclinada: Notas: - las listas de permitidos pueden usar `pk:` - - los nombres visibles de miembro coinciden por nombre/slug solo cuando `channels.discord.dangerouslyAllowNameMatching: true` - - las búsquedas usan el ID del mensaje original y están limitadas por una ventana temporal - - si la búsqueda falla, los mensajes proxificados se tratan como mensajes de bot y se descartan salvo que `allowBots=true` + - los nombres visibles de miembros coinciden por nombre/slug solo cuando `channels.discord.dangerouslyAllowNameMatching: true` + - las búsquedas usan el ID del mensaje original y están restringidas por ventana de tiempo + - si la búsqueda falla, los mensajes proxificados se tratan como mensajes de bot y se descartan a menos que `allowBots=true` - Las actualizaciones de presencia se aplican cuando estableces un campo de estado o actividad, o cuando habilitas presencia automática. + Las actualizaciones de presencia se aplican cuando estableces un campo de estado o actividad, o cuando habilitas la presencia automática. Ejemplo solo de estado: @@ -902,7 +903,7 @@ Configuración predeterminada de comandos de barra inclinada: { channels: { discord: { - activity: "Focus time", + activity: "Tiempo de concentración", activityType: 4, }, }, @@ -915,7 +916,7 @@ Configuración predeterminada de comandos de barra inclinada: { channels: { discord: { - activity: "Live coding", + activity: "Programación en vivo", activityType: 1, activityUrl: "https://twitch.tv/openclaw", }, @@ -932,7 +933,7 @@ Configuración predeterminada de comandos de barra inclinada: - 4: Custom (usa el texto de actividad como estado; el emoji es opcional) - 5: Competing - Ejemplo de presencia automática (señal de estado de salud del runtime): + Ejemplo de presencia automática (señal de salud del runtime): ```json5 { @@ -942,14 +943,14 @@ Configuración predeterminada de comandos de barra inclinada: enabled: true, intervalMs: 30000, minUpdateIntervalMs: 15000, - exhaustedText: "token exhausted", + exhaustedText: "token agotado", }, }, }, } ``` - La presencia automática asigna la disponibilidad del runtime al estado de Discord: healthy => online, degraded o unknown => idle, exhausted o unavailable => dnd. Reemplazos de texto opcionales: + La presencia automática mapea la disponibilidad del runtime al estado de Discord: saludable => online, degradado o desconocido => idle, agotado o no disponible => dnd. Reemplazos de texto opcionales: - `autoPresence.healthyText` - `autoPresence.degradedText` @@ -958,40 +959,40 @@ Configuración predeterminada de comandos de barra inclinada: - Discord admite manejo de aprobaciones con botones en mensajes directos y puede, de forma opcional, publicar solicitudes de aprobación en el canal de origen. + Discord admite el manejo de aprobaciones con botones en MD y opcionalmente puede publicar solicitudes de aprobación en el canal de origen. Ruta de configuración: - `channels.discord.execApprovals.enabled` - - `channels.discord.execApprovals.approvers` (opcional; usa `commands.ownerAllowFrom` como respaldo cuando es posible) + - `channels.discord.execApprovals.approvers` (opcional; usa `commands.ownerAllowFrom` como respaldo cuando sea posible) - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, predeterminado: `dm`) - `agentFilter`, `sessionFilter`, `cleanupAfterResolve` - Discord habilita automáticamente las aprobaciones nativas de ejecución cuando `enabled` no está definido o es `"auto"` y al menos un aprobador puede resolverse, ya sea desde `execApprovals.approvers` o desde `commands.ownerAllowFrom`. Discord no infiere aprobadores de ejecución desde `allowFrom` del canal, `dm.allowFrom` heredado ni `defaultTo` de mensajes directos. Establece `enabled: false` para desactivar Discord explícitamente como cliente de aprobación nativo. + Discord habilita automáticamente las aprobaciones nativas de ejecución cuando `enabled` no está establecido o es `"auto"` y se puede resolver al menos un aprobador, ya sea desde `execApprovals.approvers` o desde `commands.ownerAllowFrom`. Discord no infiere aprobadores de ejecución a partir de `allowFrom` del canal, `dm.allowFrom` heredado ni `defaultTo` de mensajes directos. Establece `enabled: false` para deshabilitar explícitamente Discord como cliente nativo de aprobación. - Cuando `target` es `channel` o `both`, la solicitud de aprobación es visible en el canal. Solo los aprobadores resueltos pueden usar los botones; otros usuarios reciben una denegación efímera. Las solicitudes de aprobación incluyen el texto del comando, así que habilita la entrega en canal solo en canales de confianza. Si el ID del canal no puede derivarse de la clave de sesión, OpenClaw vuelve a la entrega por mensaje directo. + Cuando `target` es `channel` o `both`, la solicitud de aprobación es visible en el canal. Solo los aprobadores resueltos pueden usar los botones; otros usuarios reciben una denegación efímera. Las solicitudes de aprobación incluyen el texto del comando, así que habilita la entrega en canal solo en canales de confianza. Si no se puede derivar el ID del canal a partir de la clave de sesión, OpenClaw vuelve a la entrega por MD. - Discord también renderiza los botones de aprobación compartidos usados por otros canales de chat. El adaptador nativo de Discord añade principalmente enrutamiento por mensaje directo para aprobadores y difusión al canal. - Cuando esos botones están presentes, son la experiencia principal de aprobación; OpenClaw - solo debería incluir un comando manual `/approve` cuando el resultado de la herramienta indique + Discord también muestra los botones de aprobación compartidos usados por otros canales de chat. El adaptador nativo de Discord añade principalmente el enrutamiento de MD para aprobadores y la distribución en canal. + Cuando esos botones están presentes, son la UX principal de aprobación; OpenClaw + solo debe incluir un comando manual `/approve` cuando el resultado de la herramienta indique que las aprobaciones por chat no están disponibles o que la aprobación manual es la única vía. - La autenticación de gateway para este manejador usa el mismo contrato compartido de resolución de credenciales que otros clientes de Gateway: + La autenticación de Gateway para este manejador usa el mismo contrato compartido de resolución de credenciales que otros clientes de Gateway: - - autenticación local con prioridad a entorno (`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD` y luego `gateway.auth.*`) - - en modo local, `gateway.remote.*` puede usarse como respaldo solo cuando `gateway.auth.*` no está configurado; los SecretRef locales configurados pero no resueltos fallan en modo cerrado - - soporte de modo remoto mediante `gateway.remote.*` cuando corresponda - - los reemplazos de URL son seguros para reemplazo: los reemplazos de CLI no reutilizan credenciales implícitas, y los reemplazos de entorno usan solo credenciales del entorno + - autenticación local con prioridad al entorno (`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD` y luego `gateway.auth.*`) + - en modo local, `gateway.remote.*` puede usarse como respaldo solo cuando `gateway.auth.*` no está establecido; los SecretRef locales configurados pero no resueltos fallan en modo cerrado + - compatibilidad con modo remoto mediante `gateway.remote.*` cuando corresponde + - las anulaciones de URL son seguras ante anulaciones: las anulaciones de CLI no reutilizan credenciales implícitas, y las anulaciones de entorno usan solo credenciales del entorno - Comportamiento de resolución de aprobación: + Comportamiento de resolución de aprobaciones: - Los IDs con prefijo `plugin:` se resuelven mediante `plugin.approval.resolve`. - - Otros IDs se resuelven mediante `exec.approval.resolve`. - - Discord no realiza aquí un salto adicional de respaldo de exec a plugin; el - prefijo del ID decide qué método de gateway llama. + - Los demás IDs se resuelven mediante `exec.approval.resolve`. + - Discord no hace aquí un salto adicional de respaldo de exec a plugin; el + prefijo del id decide qué método de gateway llama. Las aprobaciones de ejecución caducan después de 30 minutos de forma predeterminada. Si las aprobaciones fallan con - IDs de aprobación desconocidos, verifica la resolución de aprobadores, la habilitación de funciones y + IDs de aprobación desconocidos, verifica la resolución de aprobadores, la habilitación de la función y que el tipo de ID de aprobación entregado coincida con la solicitud pendiente. Documentación relacionada: [Exec approvals](/es/tools/exec-approvals) @@ -1010,26 +1011,26 @@ Ejemplos principales: - moderación: `timeout`, `kick`, `ban` - presencia: `setPresence` -La acción `event-create` acepta un parámetro `image` opcional (URL o ruta de archivo local) para establecer la imagen de portada del evento programado. +La acción `event-create` acepta un parámetro opcional `image` (URL o ruta de archivo local) para establecer la imagen de portada del evento programado. -Los controles de acciones están en `channels.discord.actions.*`. +Los controles de acciones viven en `channels.discord.actions.*`. Comportamiento predeterminado de los controles: -| Grupo de acciones | Predeterminado | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------- | +| Grupo de acciones | Predeterminado | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | | reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | habilitado | -| roles | deshabilitado | -| moderation | deshabilitado | -| presence | deshabilitado | +| roles | deshabilitado | +| moderation | deshabilitado | +| presence | deshabilitado | -## Interfaz Components v2 +## IU de componentes v2 -OpenClaw usa Discord components v2 para aprobaciones de ejecución y marcadores entre contextos. Las acciones de mensajes de Discord también pueden aceptar `components` para una interfaz personalizada (avanzado; requiere construir una carga útil de componentes mediante la herramienta de Discord), mientras que los `embeds` heredados siguen estando disponibles, pero no se recomiendan. +OpenClaw usa componentes v2 de Discord para aprobaciones de ejecución y marcadores entre contextos. Las acciones de mensajes de Discord también pueden aceptar `components` para IU personalizada (avanzado; requiere construir una carga útil de componente mediante la herramienta de Discord), mientras que los `embeds` heredados siguen disponibles pero no se recomiendan. -- `channels.discord.ui.components.accentColor` establece el color de acento usado por los contenedores de componentes de Discord (hex). +- `channels.discord.ui.components.accentColor` establece el color de acento usado por los contenedores de componentes de Discord (hexadecimal). - Establécelo por cuenta con `channels.discord.accounts..ui.components.accentColor`. -- `embeds` se ignoran cuando hay components v2 presentes. +- `embeds` se ignora cuando hay componentes v2 presentes. Ejemplo: @@ -1049,15 +1050,15 @@ Ejemplo: ## Canales de voz -OpenClaw puede unirse a canales de voz de Discord para conversaciones continuas en tiempo real. Esto es independiente de los adjuntos de mensajes de voz. +OpenClaw puede unirse a canales de voz de Discord para conversaciones en tiempo real y continuas. Esto es independiente de los adjuntos de mensajes de voz. Requisitos: -- Habilita comandos nativos (`commands.native` o `channels.discord.commands.native`). +- Habilita los comandos nativos (`commands.native` o `channels.discord.commands.native`). - Configura `channels.discord.voice`. -- El bot necesita permisos Connect + Speak en el canal de voz de destino. +- El bot necesita permisos de Connect + Speak en el canal de voz de destino. -Usa el comando nativo exclusivo de Discord `/vc join|leave|status` para controlar sesiones. El comando usa el agente predeterminado de la cuenta y sigue las mismas reglas de lista de permitidos y política de grupo que otros comandos de Discord. +Usa el comando nativo exclusivo de Discord `/vc join|leave|status` para controlar sesiones. El comando usa el agente predeterminado de la cuenta y sigue las mismas reglas de lista de permitidos y política de servidor que otros comandos de Discord. Ejemplo de unión automática: @@ -1087,23 +1088,23 @@ Ejemplo de unión automática: Notas: -- `voice.tts` reemplaza `messages.tts` solo para la reproducción de voz. -- Los turnos de transcripción de voz derivan el estado de propietario desde `allowFrom` de Discord (o `dm.allowFrom`); los hablantes que no son propietarios no pueden acceder a herramientas exclusivas del propietario (por ejemplo `gateway` y `cron`). -- La voz está habilitada de forma predeterminada; establece `channels.discord.voice.enabled=false` para desactivarla. -- `voice.daveEncryption` y `voice.decryptionFailureTolerance` se pasan directamente a las opciones de unión de `@discordjs/voice`. +- `voice.tts` anula `messages.tts` solo para la reproducción de voz. +- Los turnos de transcripción de voz derivan el estado de propietario de `allowFrom` de Discord (o `dm.allowFrom`); los hablantes que no son propietarios no pueden acceder a herramientas solo para propietarios (por ejemplo `gateway` y `cron`). +- La voz está habilitada de forma predeterminada; establece `channels.discord.voice.enabled=false` para deshabilitarla. +- `voice.daveEncryption` y `voice.decryptionFailureTolerance` se transfieren a las opciones de unión de `@discordjs/voice`. - Los valores predeterminados de `@discordjs/voice` son `daveEncryption=true` y `decryptionFailureTolerance=24` si no se establecen. - OpenClaw también supervisa los fallos de descifrado de recepción y se recupera automáticamente saliendo y volviendo a unirse al canal de voz después de fallos repetidos en una ventana corta. -- Si los registros de recepción muestran repetidamente `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, esto puede ser el error upstream de recepción de `@discordjs/voice` rastreado en [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419). +- Si los registros de recepción muestran repetidamente `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, esto puede ser el error de recepción ascendente de `@discordjs/voice` rastreado en [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419). ## Mensajes de voz -Los mensajes de voz de Discord muestran una vista previa de forma de onda y requieren audio OGG/Opus más metadatos. OpenClaw genera la forma de onda automáticamente, pero necesita que `ffmpeg` y `ffprobe` estén disponibles en el host de la gateway para inspeccionar y convertir archivos de audio. +Los mensajes de voz de Discord muestran una vista previa de forma de onda y requieren audio OGG/Opus más metadatos. OpenClaw genera la forma de onda automáticamente, pero necesita que `ffmpeg` y `ffprobe` estén disponibles en el host del gateway para inspeccionar y convertir archivos de audio. Requisitos y restricciones: -- Proporciona una **ruta de archivo local** (las URLs se rechazan). +- Proporciona una **ruta de archivo local** (las URL se rechazan). - Omite el contenido de texto (Discord no permite texto + mensaje de voz en la misma carga útil). -- Se acepta cualquier formato de audio; OpenClaw convierte a OGG/Opus cuando es necesario. +- Se acepta cualquier formato de audio; OpenClaw lo convierte a OGG/Opus cuando es necesario. Ejemplo: @@ -1114,19 +1115,19 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a ## Solución de problemas - + - habilita Message Content Intent - - habilita Server Members Intent cuando dependas de la resolución de usuario/miembro - - reinicia la gateway después de cambiar intents + - habilita Server Members Intent cuando dependas de la resolución de usuarios/miembros + - reinicia el gateway después de cambiar los intents - + - verifica `groupPolicy` - verifica la lista de permitidos del servidor en `channels.discord.guilds` - - si existe el mapa `guild.channels`, solo se permiten los canales listados + - si existe el mapa `channels` del servidor, solo se permiten los canales listados - verifica el comportamiento de `requireMention` y los patrones de mención Comprobaciones útiles: @@ -1139,11 +1140,11 @@ openclaw logs --follow - + Causas comunes: - - `groupPolicy="allowlist"` sin una lista de permitidos de servidor/canal que coincida - - `requireMention` configurado en el lugar equivocado (debe estar en `channels.discord.guilds` o en la entrada del canal) + - `groupPolicy="allowlist"` sin una lista de permitidos de servidor/canal coincidente + - `requireMention` configurado en el lugar incorrecto (debe estar en `channels.discord.guilds` o en la entrada del canal) - remitente bloqueado por la lista de permitidos `users` del servidor/canal @@ -1156,18 +1157,18 @@ openclaw logs --follow - `Slow listener detected ...` - `discord inbound worker timed out after ...` - Ajuste del presupuesto del listener: + Ajuste de presupuesto del listener: - cuenta única: `channels.discord.eventQueue.listenerTimeout` - - múltiples cuentas: `channels.discord.accounts..eventQueue.listenerTimeout` + - varias cuentas: `channels.discord.accounts..eventQueue.listenerTimeout` - Ajuste del tiempo límite de ejecución del worker: + Ajuste de tiempo de espera de ejecución del worker: - cuenta única: `channels.discord.inboundWorker.runTimeoutMs` - - múltiples cuentas: `channels.discord.accounts..inboundWorker.runTimeoutMs` - - predeterminado: `1800000` (30 minutos); establece `0` para desactivar + - varias cuentas: `channels.discord.accounts..inboundWorker.runTimeoutMs` + - predeterminado: `1800000` (30 minutos); establece `0` para deshabilitar - Línea base recomendada: + Base recomendada: ```json5 { @@ -1188,23 +1189,23 @@ openclaw logs --follow } ``` - Usa `eventQueue.listenerTimeout` para una configuración lenta del listener y `inboundWorker.runTimeoutMs` - solo si quieres una válvula de seguridad independiente para turnos del agente en cola. + Usa `eventQueue.listenerTimeout` para la configuración lenta del listener y `inboundWorker.runTimeoutMs` + solo si quieres una válvula de seguridad separada para los turnos de agente en cola. - Las comprobaciones de permisos de `channels status --probe` solo funcionan con IDs numéricos de canal. + Las comprobaciones de permisos de `channels status --probe` solo funcionan para IDs numéricos de canal. - Si usas claves slug, la coincidencia en runtime aún puede funcionar, pero el sondeo no puede verificar completamente los permisos. + Si usas claves slug, la coincidencia en runtime puede seguir funcionando, pero el sondeo no puede verificar completamente los permisos. - + - - mensajes directos deshabilitados: `channels.discord.dm.enabled=false` - - política de mensajes directos deshabilitada: `channels.discord.dmPolicy="disabled"` (heredado: `channels.discord.dm.policy`) - - esperando aprobación de emparejamiento en modo `pairing` + - MD deshabilitados: `channels.discord.dm.enabled=false` + - política de MD deshabilitada: `channels.discord.dmPolicy="disabled"` (heredado: `channels.discord.dm.policy`) + - esperando aprobación de vinculación en modo `pairing` @@ -1216,15 +1217,15 @@ openclaw logs --follow - + - mantén OpenClaw actualizado (`openclaw update`) para que esté presente la lógica de recuperación de recepción de voz de Discord - confirma `channels.discord.voice.daveEncryption=true` (predeterminado) - - empieza con `channels.discord.voice.decryptionFailureTolerance=24` (valor predeterminado upstream) y ajústalo solo si es necesario + - comienza con `channels.discord.voice.decryptionFailureTolerance=24` (predeterminado ascendente) y ajústalo solo si hace falta - observa los registros para: - `discord voice: DAVE decrypt failures detected` - `discord voice: repeated decrypt failures; attempting rejoin` - - si los fallos continúan después de volver a unirse automáticamente, recopila registros y compáralos con [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) + - si los fallos continúan después de la reanudación automática, recopila registros y compáralos con [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) @@ -1233,37 +1234,37 @@ openclaw logs --follow Referencia principal: -- [Configuration reference - Discord](/es/gateway/configuration-reference#discord) +- [Referencia de configuración - Discord](/es/gateway/configuration-reference#discord) -Campos de Discord de alta señal: +Campos de Discord de alta relevancia: - inicio/autenticación: `enabled`, `token`, `accounts.*`, `allowBots` - política: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*` -- comandos: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*` +- comando: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*` - cola de eventos: `eventQueue.listenerTimeout` (presupuesto del listener), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` -- worker entrante: `inboundWorker.runTimeoutMs` +- worker de entrada: `inboundWorker.runTimeoutMs` - respuesta/historial: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` - entrega: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` -- transmisión: `streaming` (alias heredado: `streamMode`), `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` -- multimedia/reintentos: `mediaMaxMb`, `retry` +- transmisión: `streaming` (alias heredado: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` +- medios/reintentos: `mediaMaxMb`, `retry` - `mediaMaxMb` limita las subidas salientes a Discord (predeterminado: `100MB`) - acciones: `actions.*` - presencia: `activity`, `status`, `activityType`, `activityUrl` -- UI: `ui.components.accentColor` +- IU: `ui.components.accentColor` - funciones: `threadBindings`, `bindings[]` de nivel superior (`type: "acp"`), `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix` ## Seguridad y operaciones -- Trata los tokens de bot como secretos (`DISCORD_BOT_TOKEN` es lo preferido en entornos supervisados). +- Trata los tokens de bot como secretos (se prefiere `DISCORD_BOT_TOKEN` en entornos supervisados). - Otorga permisos de Discord con privilegios mínimos. -- Si el despliegue/estado de comandos está desactualizado, reinicia la gateway y vuelve a comprobar con `openclaw channels status --probe`. +- Si el despliegue/estado de comandos está desactualizado, reinicia el gateway y vuelve a comprobar con `openclaw channels status --probe`. ## Relacionado -- [Emparejamiento](/es/channels/pairing) +- [Vinculación](/es/channels/pairing) - [Grupos](/es/channels/groups) - [Enrutamiento de canales](/es/channels/channel-routing) - [Seguridad](/es/gateway/security) - [Enrutamiento multiagente](/es/concepts/multi-agent) - [Solución de problemas](/es/channels/troubleshooting) -- [Comandos de barra inclinada](/es/tools/slash-commands) +- [Comandos slash](/es/tools/slash-commands) diff --git a/docs/es/channels/slack.md b/docs/es/channels/slack.md index 4ff8acb28..4895966ab 100644 --- a/docs/es/channels/slack.md +++ b/docs/es/channels/slack.md @@ -4,21 +4,21 @@ read_when: summary: Configuración de Slack y comportamiento en tiempo de ejecución (Socket Mode + URL de solicitud HTTP) title: Slack x-i18n: - generated_at: "2026-04-21T13:35:20Z" + generated_at: "2026-04-21T17:45:41Z" model: gpt-5.4 provider: openai - source_hash: 2fe3c3c344e1c20c09b29773f4f68d2790751e76d8bbaa3c6157e3ff75978acf + source_hash: f30b372a3ae10b7b649532181306e42792aca76b41422516e9633eb79f73f009 source_path: channels/slack.md workflow: 15 --- # Slack -Estado: listo para producción para MD + canales mediante integraciones de aplicaciones de Slack. El modo predeterminado es Socket Mode; las URL de solicitud HTTP también son compatibles. +Estado: listo para producción para mensajes directos y canales mediante integraciones de aplicaciones de Slack. El modo predeterminado es Socket Mode; las URL de solicitud HTTP también son compatibles. - Los MD de Slack usan el modo de vinculación de forma predeterminada. + Los mensajes directos de Slack usan de forma predeterminada el modo de vinculación. Comportamiento nativo de comandos y catálogo de comandos. @@ -34,10 +34,10 @@ Estado: listo para producción para MD + canales mediante integraciones de aplic - En la configuración de la aplicación de Slack, pulsa el botón **[Create New App](https://api.slack.com/apps/new)**: + En la configuración de la aplicación de Slack, presiona el botón **[Create New App](https://api.slack.com/apps/new)**: - elige **from a manifest** y selecciona un espacio de trabajo para tu aplicación - - pega el [manifiesto de ejemplo](#manifest-and-scope-checklist) de abajo y continúa para crearla + - pega el [manifiesto de ejemplo](#manifest-and-scope-checklist) que aparece a continuación y continúa para crearla - genera un **App-Level Token** (`xapp-...`) con `connections:write` - instala la aplicación y copia el **Bot Token** (`xoxb-...`) que se muestra @@ -57,7 +57,7 @@ Estado: listo para producción para MD + canales mediante integraciones de aplic } ``` - Alternativa con variables de entorno (solo cuenta predeterminada): + Respaldo por variable de entorno (solo cuenta predeterminada): ```bash SLACK_APP_TOKEN=xapp-... @@ -80,7 +80,7 @@ openclaw gateway - En la configuración de la aplicación de Slack, pulsa el botón **[Create New App](https://api.slack.com/apps/new)**: + En la configuración de la aplicación de Slack, presiona el botón **[Create New App](https://api.slack.com/apps/new)**: - elige **from a manifest** y selecciona un espacio de trabajo para tu aplicación - pega el [manifiesto de ejemplo](#manifest-and-scope-checklist) y actualiza las URL antes de crearla @@ -125,7 +125,7 @@ openclaw gateway -## Lista de comprobación de manifiesto y alcances +## Lista de verificación de manifiesto y alcances @@ -134,7 +134,7 @@ openclaw gateway { "display_information": { "name": "OpenClaw", - "description": "Conector de Slack para OpenClaw" + "description": "Slack connector for OpenClaw" }, "features": { "bot_user": { @@ -148,7 +148,7 @@ openclaw gateway "slash_commands": [ { "command": "/openclaw", - "description": "Enviar un mensaje a OpenClaw", + "description": "Send a message to OpenClaw", "should_escape": false } ] @@ -211,7 +211,7 @@ openclaw gateway { "display_information": { "name": "OpenClaw", - "description": "Conector de Slack para OpenClaw" + "description": "Slack connector for OpenClaw" }, "features": { "bot_user": { @@ -225,7 +225,7 @@ openclaw gateway "slash_commands": [ { "command": "/openclaw", - "description": "Enviar un mensaje a OpenClaw", + "description": "Send a message to OpenClaw", "should_escape": false, "url": "https://gateway-host.example.com/slack/events" } @@ -289,9 +289,9 @@ openclaw gateway -### Configuración adicional del manifiesto +### Configuraciones adicionales del manifiesto -Expone distintas funciones que amplían los valores predeterminados anteriores. +Muestran distintas funciones que amplían los valores predeterminados anteriores. @@ -301,7 +301,7 @@ Expone distintas funciones que amplían los valores predeterminados anteriores. - Usa `/agentstatus` en lugar de `/status` porque el comando `/status` está reservado. - No se pueden poner a disposición más de 25 comandos slash a la vez. - Sustituye tu sección existente `features.slash_commands` por un subconjunto de los [comandos disponibles](/es/tools/slash-commands#command-list): + Reemplaza tu sección existente `features.slash_commands` por un subconjunto de los [comandos disponibles](/es/tools/slash-commands#command-list): @@ -310,110 +310,110 @@ Expone distintas funciones que amplían los valores predeterminados anteriores. "slash_commands": [ { "command": "/new", - "description": "Iniciar una nueva sesión", + "description": "Start a new session", "usage_hint": "[model]" }, { "command": "/reset", - "description": "Restablecer la sesión actual" + "description": "Reset the current session" }, { "command": "/compact", - "description": "Compactar el contexto de la sesión", + "description": "Compact the session context", "usage_hint": "[instructions]" }, { "command": "/stop", - "description": "Detener la ejecución actual" + "description": "Stop the current run" }, { "command": "/session", - "description": "Administrar el vencimiento de la vinculación del hilo", + "description": "Manage thread-binding expiry", "usage_hint": "idle or max-age " }, { "command": "/think", - "description": "Establecer el nivel de pensamiento", + "description": "Set the thinking level", "usage_hint": "" }, { "command": "/verbose", - "description": "Alternar la salida detallada", + "description": "Toggle verbose output", "usage_hint": "on|off|full" }, { "command": "/fast", - "description": "Mostrar o establecer el modo rápido", + "description": "Show or set fast mode", "usage_hint": "[status|on|off]" }, { "command": "/reasoning", - "description": "Alternar la visibilidad del razonamiento", + "description": "Toggle reasoning visibility", "usage_hint": "[on|off|stream]" }, { "command": "/elevated", - "description": "Alternar el modo elevado", + "description": "Toggle elevated mode", "usage_hint": "[on|off|ask|full]" }, { "command": "/exec", - "description": "Mostrar o establecer los valores predeterminados de exec", + "description": "Show or set exec defaults", "usage_hint": "host= security= ask= node=" }, { "command": "/model", - "description": "Mostrar o establecer el modelo", + "description": "Show or set the model", "usage_hint": "[name|#|status]" }, { "command": "/models", - "description": "Listar proveedores o modelos de un proveedor", + "description": "List providers or models for a provider", "usage_hint": "[provider] [page] [limit=|size=|all]" }, { "command": "/help", - "description": "Mostrar el resumen breve de ayuda" + "description": "Show the short help summary" }, { "command": "/commands", - "description": "Mostrar el catálogo de comandos generado" + "description": "Show the generated command catalog" }, { "command": "/tools", - "description": "Mostrar lo que el agente actual puede usar ahora mismo", + "description": "Show what the current agent can use right now", "usage_hint": "[compact|verbose]" }, { "command": "/agentstatus", - "description": "Mostrar el estado en tiempo de ejecución, incluido el uso/cuota del proveedor cuando esté disponible" + "description": "Show runtime status, including provider usage/quota when available" }, { "command": "/tasks", - "description": "Listar las tareas activas o recientes en segundo plano de la sesión actual" + "description": "List active/recent background tasks for the current session" }, { "command": "/context", - "description": "Explicar cómo se ensambla el contexto", + "description": "Explain how context is assembled", "usage_hint": "[list|detail|json]" }, { "command": "/whoami", - "description": "Mostrar tu identidad de remitente" + "description": "Show your sender identity" }, { "command": "/skill", - "description": "Ejecutar una skill por nombre", + "description": "Run a skill by name", "usage_hint": " [input]" }, { "command": "/btw", - "description": "Hacer una pregunta secundaria sin cambiar el contexto de la sesión", + "description": "Ask a side question without changing session context", "usage_hint": "" }, { "command": "/usage", - "description": "Controlar el pie de uso o mostrar el resumen de costo", + "description": "Control the usage footer or show cost summary", "usage_hint": "off|tokens|full|cost" } ] @@ -449,12 +449,12 @@ Expone distintas funciones que amplían los valores predeterminados anteriores. { "command": "/session", "description": "Administrar el vencimiento de la vinculación del hilo", - "usage_hint": "idle or max-age ", + "usage_hint": "idle o max-age ", "url": "https://gateway-host.example.com/slack/events" }, { "command": "/think", - "description": "Establecer el nivel de pensamiento", + "description": "Establecer el nivel de razonamiento", "usage_hint": "", "url": "https://gateway-host.example.com/slack/events" }, @@ -512,18 +512,18 @@ Expone distintas funciones que amplían los valores predeterminados anteriores. }, { "command": "/tools", - "description": "Mostrar lo que el agente actual puede usar ahora mismo", + "description": "Mostrar lo que el agente actual puede usar en este momento", "usage_hint": "[compact|verbose]", "url": "https://gateway-host.example.com/slack/events" }, { "command": "/agentstatus", - "description": "Mostrar el estado en tiempo de ejecución, incluido el uso/cuota del proveedor cuando esté disponible", + "description": "Mostrar el estado del tiempo de ejecución, incluido el uso/cuota del proveedor cuando esté disponible", "url": "https://gateway-host.example.com/slack/events" }, { "command": "/tasks", - "description": "Listar las tareas activas o recientes en segundo plano de la sesión actual", + "description": "Listar las tareas en segundo plano activas/recientes de la sesión actual", "url": "https://gateway-host.example.com/slack/events" }, { @@ -539,7 +539,7 @@ Expone distintas funciones que amplían los valores predeterminados anteriores. }, { "command": "/skill", - "description": "Ejecutar una skill por nombre", + "description": "Ejecutar una Skill por nombre", "usage_hint": " [input]", "url": "https://gateway-host.example.com/slack/events" }, @@ -551,7 +551,7 @@ Expone distintas funciones que amplían los valores predeterminados anteriores. }, { "command": "/usage", - "description": "Controlar el pie de uso o mostrar el resumen de costo", + "description": "Controlar el pie de uso o mostrar el resumen de costos", "usage_hint": "off|tokens|full|cost", "url": "https://gateway-host.example.com/slack/events" } @@ -563,13 +563,13 @@ Expone distintas funciones que amplían los valores predeterminados anteriores. - Agrega el alcance bot `chat:write.customize` si quieres que los mensajes salientes usen la identidad del agente activo (nombre de usuario e icono personalizados) en lugar de la identidad predeterminada de la aplicación de Slack. + Agrega el alcance de bot `chat:write.customize` si quieres que los mensajes salientes usen la identidad del agente activo (nombre de usuario e ícono personalizados) en lugar de la identidad predeterminada de la aplicación de Slack. - Si usas un icono emoji, Slack espera la sintaxis `:emoji_name:`. + Si usas un ícono de emoji, Slack espera la sintaxis `:emoji_name:`. - Si configuras `channels.slack.userToken`, los alcances de lectura habituales son: + Si configuras `channels.slack.userToken`, los alcances de lectura típicos son: - `channels:history`, `groups:history`, `im:history`, `mpim:history` - `channels:read`, `groups:read`, `im:read`, `mpim:read` @@ -588,9 +588,9 @@ Expone distintas funciones que amplían los valores predeterminados anteriores. - El modo HTTP requiere `botToken` + `signingSecret`. - `botToken`, `appToken`, `signingSecret` y `userToken` aceptan cadenas de texto sin formato u objetos SecretRef. -- Los tokens de configuración sustituyen la alternativa de variables de entorno. -- La alternativa de variables de entorno `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` se aplica solo a la cuenta predeterminada. -- `userToken` (`xoxp-...`) es solo de configuración (sin alternativa de variable de entorno) y usa de forma predeterminada un comportamiento de solo lectura (`userTokenReadOnly: true`). +- Los tokens de configuración prevalecen sobre el respaldo por variable de entorno. +- El respaldo por variable de entorno `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` solo se aplica a la cuenta predeterminada. +- `userToken` (`xoxp-...`) es solo de configuración (sin respaldo por variable de entorno) y, de manera predeterminada, tiene comportamiento de solo lectura (`userTokenReadOnly: true`). Comportamiento de la instantánea de estado: @@ -598,13 +598,13 @@ Comportamiento de la instantánea de estado: por credencial (`botToken`, `appToken`, `signingSecret`, `userToken`). - El estado es `available`, `configured_unavailable` o `missing`. - `configured_unavailable` significa que la cuenta está configurada mediante SecretRef - u otra fuente de secretos no integrada, pero la ruta actual de comando/tiempo de ejecución + u otra fuente de secretos no integrada, pero la ruta actual del comando/tiempo de ejecución no pudo resolver el valor real. -- En modo HTTP, se incluye `signingSecretStatus`; en Socket Mode, el par - obligatorio es `botTokenStatus` + `appTokenStatus`. +- En modo HTTP, se incluye `signingSecretStatus`; en Socket Mode, el + par obligatorio es `botTokenStatus` + `appTokenStatus`. -Para acciones/lecturas de directorio, se puede dar preferencia al token de usuario cuando esté configurado. Para escrituras, el token de bot sigue siendo el preferido; las escrituras con token de usuario solo se permiten cuando `userTokenReadOnly: false` y el token de bot no está disponible. +Para acciones/lecturas de directorio, se puede priorizar el token de usuario cuando está configurado. Para escrituras, el token de bot sigue siendo el preferido; las escrituras con token de usuario solo se permiten cuando `userTokenReadOnly: false` y el token de bot no está disponible. ## Acciones y controles @@ -615,40 +615,40 @@ Grupos de acciones disponibles en las herramientas actuales de Slack: | Grupo | Predeterminado | | ---------- | -------------- | -| messages | enabled | -| reactions | enabled | -| pins | enabled | -| memberInfo | enabled | -| emojiList | enabled | +| messages | habilitado | +| reactions | habilitado | +| pins | habilitado | +| memberInfo | habilitado | +| emojiList | habilitado | Las acciones actuales de mensajes de Slack incluyen `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` y `emoji-list`. ## Control de acceso y enrutamiento - - `channels.slack.dmPolicy` controla el acceso a MD (legado: `channels.slack.dm.policy`): + + `channels.slack.dmPolicy` controla el acceso a mensajes directos (heredado: `channels.slack.dm.policy`): - `pairing` (predeterminado) - `allowlist` - - `open` (requiere que `channels.slack.allowFrom` incluya `"*"`; legado: `channels.slack.dm.allowFrom`) + - `open` (requiere que `channels.slack.allowFrom` incluya `"*"`; heredado: `channels.slack.dm.allowFrom`) - `disabled` - Indicadores de MD: + Indicadores de mensajes directos: - `dm.enabled` (predeterminado: true) - `channels.slack.allowFrom` (preferido) - - `dm.allowFrom` (legado) - - `dm.groupEnabled` (los MD de grupo tienen como valor predeterminado false) + - `dm.allowFrom` (heredado) + - `dm.groupEnabled` (los mensajes directos de grupo están desactivados de forma predeterminada) - `dm.groupChannels` (lista de permitidos MPIM opcional) Precedencia en varias cuentas: - `channels.slack.accounts.default.allowFrom` se aplica solo a la cuenta `default`. - - Las cuentas con nombre heredan `channels.slack.allowFrom` cuando su propio `allowFrom` no está configurado. + - Las cuentas con nombre heredan `channels.slack.allowFrom` cuando su propio `allowFrom` no está definido. - Las cuentas con nombre no heredan `channels.slack.accounts.default.allowFrom`. - La vinculación en MD usa `openclaw pairing approve slack `. + La vinculación en mensajes directos usa `openclaw pairing approve slack `. @@ -661,24 +661,24 @@ Las acciones actuales de mensajes de Slack incluyen `send`, `upload-file`, `down La lista de permitidos de canales se encuentra en `channels.slack.channels` y debe usar IDs de canal estables. - Nota de tiempo de ejecución: si `channels.slack` falta por completo (configuración solo con variables de entorno), el tiempo de ejecución vuelve a `groupPolicy="allowlist"` y registra una advertencia (incluso si `channels.defaults.groupPolicy` está configurado). + Nota de tiempo de ejecución: si falta por completo `channels.slack` (configuración solo con variables de entorno), el tiempo de ejecución usa como respaldo `groupPolicy="allowlist"` y registra una advertencia (incluso si `channels.defaults.groupPolicy` está definido). - Resolución de nombres/IDs: + Resolución de nombre/ID: - - las entradas de la lista de permitidos de canales y las entradas de la lista de permitidos de MD se resuelven al inicio cuando el acceso con token lo permite - - las entradas no resueltas de nombres de canal se conservan tal como están configuradas, pero se ignoran para el enrutamiento de forma predeterminada - - la autorización entrante y el enrutamiento de canales usan IDs primero de forma predeterminada; la coincidencia directa de nombre de usuario/slug requiere `channels.slack.dangerouslyAllowNameMatching: true` + - las entradas de la lista de permitidos de canales y de mensajes directos se resuelven al inicio cuando el acceso al token lo permite + - las entradas no resueltas por nombre de canal se conservan como están configuradas, pero se ignoran para el enrutamiento de forma predeterminada + - la autorización entrante y el enrutamiento de canales usan primero el ID de forma predeterminada; la coincidencia directa por nombre de usuario/slug requiere `channels.slack.dangerouslyAllowNameMatching: true` - Los mensajes de canal están restringidos por mención de forma predeterminada. + Los mensajes de canal están controlados por mención de forma predeterminada. Fuentes de mención: - mención explícita de la aplicación (`<@botId>`) - - patrones regex de mención (`agents.list[].groupChat.mentionPatterns`, alternativa `messages.groupChat.mentionPatterns`) - - comportamiento implícito de respuesta en hilo al bot (desactivado cuando `thread.requireExplicitMention` es `true`) + - patrones regex de mención (`agents.list[].groupChat.mentionPatterns`, respaldo `messages.groupChat.mentionPatterns`) + - comportamiento implícito de responder a un hilo del bot (desactivado cuando `thread.requireExplicitMention` es `true`) Controles por canal (`channels.slack.channels.`; nombres solo mediante resolución al inicio o `dangerouslyAllowNameMatching`): @@ -688,7 +688,7 @@ Las acciones actuales de mensajes de Slack incluyen `send`, `upload-file`, `down - `skills` - `systemPrompt` - `tools`, `toolsBySender` - - formato de clave `toolsBySender`: `id:`, `e164:`, `username:`, `name:` o comodín `"*"` + - formato de clave de `toolsBySender`: `id:`, `e164:`, `username:`, `name:` o comodín `"*"` (las claves heredadas sin prefijo siguen asignándose solo a `id:`) @@ -696,37 +696,37 @@ Las acciones actuales de mensajes de Slack incluyen `send`, `upload-file`, `down ## Hilos, sesiones y etiquetas de respuesta -- Los MD se enrutan como `direct`; los canales como `channel`; los MPIM como `group`. -- Con el valor predeterminado `session.dmScope=main`, los MD de Slack se contraen en la sesión principal del agente. +- Los mensajes directos se enrutan como `direct`; los canales como `channel`; los MPIM como `group`. +- Con el valor predeterminado `session.dmScope=main`, los mensajes directos de Slack se consolidan en la sesión principal del agente. - Sesiones de canal: `agent::slack:channel:`. -- Las respuestas en hilo pueden crear sufijos de sesión de hilo (`:thread:`) cuando corresponda. +- Las respuestas en hilos pueden crear sufijos de sesión de hilo (`:thread:`) cuando corresponda. - El valor predeterminado de `channels.slack.thread.historyScope` es `thread`; el valor predeterminado de `thread.inheritParent` es `false`. -- `channels.slack.thread.initialHistoryLimit` controla cuántos mensajes existentes del hilo se recuperan cuando comienza una nueva sesión de hilo (predeterminado `20`; establece `0` para desactivar). -- `channels.slack.thread.requireExplicitMention` (predeterminado `false`): cuando es `true`, suprime las menciones implícitas en hilo para que el bot solo responda a menciones explícitas `@bot` dentro de los hilos, incluso cuando el bot ya participó en el hilo. Sin esto, las respuestas en un hilo con participación del bot omiten el control `requireMention`. +- `channels.slack.thread.initialHistoryLimit` controla cuántos mensajes existentes del hilo se obtienen cuando comienza una nueva sesión de hilo (predeterminado `20`; establece `0` para desactivar). +- `channels.slack.thread.requireExplicitMention` (predeterminado `false`): cuando es `true`, suprime las menciones implícitas en hilos para que el bot solo responda a menciones explícitas `@bot` dentro de los hilos, incluso cuando el bot ya participó en el hilo. Sin esto, las respuestas en un hilo en el que participó el bot omiten el control `requireMention`. -Controles de respuesta en hilo: +Controles de respuestas en hilos: - `channels.slack.replyToMode`: `off|first|all|batched` (predeterminado `off`) - `channels.slack.replyToModeByChatType`: por `direct|group|channel` -- alternativa heredada para chats directos: `channels.slack.dm.replyToMode` +- respaldo heredado para chats directos: `channels.slack.dm.replyToMode` Se admiten etiquetas manuales de respuesta: - `[[reply_to_current]]` - `[[reply_to:]]` -Nota: `replyToMode="off"` desactiva **todo** el enhebrado de respuestas en Slack, incluidas las etiquetas explícitas `[[reply_to_*]]`. Esto difiere de Telegram, donde las etiquetas explícitas siguen respetándose en modo `"off"`. La diferencia refleja los modelos de hilos de cada plataforma: los hilos de Slack ocultan los mensajes del canal, mientras que las respuestas de Telegram siguen siendo visibles en el flujo principal del chat. +Nota: `replyToMode="off"` desactiva **todo** el uso de respuestas en hilos en Slack, incluidas las etiquetas explícitas `[[reply_to_*]]`. Esto difiere de Telegram, donde las etiquetas explícitas siguen respetándose en modo `"off"`. La diferencia refleja los modelos de hilos de cada plataforma: los hilos de Slack ocultan los mensajes del canal, mientras que las respuestas de Telegram siguen siendo visibles en el flujo principal del chat. ## Reacciones de acuse -`ackReaction` envía un emoji de acuse mientras OpenClaw procesa un mensaje entrante. +`ackReaction` envía un emoji de confirmación mientras OpenClaw procesa un mensaje entrante. Orden de resolución: - `channels.slack.accounts..ackReaction` - `channels.slack.ackReaction` - `messages.ackReaction` -- alternativa con emoji de identidad del agente (`agents.list[].identity.emoji`; en caso contrario, `"👀"`) +- respaldo del emoji de identidad del agente (`agents.list[].identity.emoji`, o bien `"👀"`) Notas: @@ -738,19 +738,20 @@ Notas: `channels.slack.streaming` controla el comportamiento de vista previa en vivo: - `off`: desactiva el streaming de vista previa en vivo. -- `partial` (predeterminado): sustituye el texto de vista previa por la salida parcial más reciente. -- `block`: agrega actualizaciones de vista previa fragmentadas. +- `partial` (predeterminado): reemplaza el texto de vista previa con la salida parcial más reciente. +- `block`: agrega actualizaciones de vista previa en fragmentos. - `progress`: muestra texto de estado de progreso mientras se genera y luego envía el texto final. +- `streaming.preview.toolProgress`: cuando la vista previa de borrador está activa, enruta las actualizaciones de herramientas/progreso al mismo mensaje de vista previa editado (predeterminado: `true`). Establece `false` para mantener mensajes separados de herramientas/progreso. -`channels.slack.streaming.nativeTransport` controla el streaming de texto nativo de Slack cuando `channels.slack.streaming.mode` es `partial` (predeterminado: `true`). +`channels.slack.streaming.nativeTransport` controla el streaming nativo de texto de Slack cuando `channels.slack.streaming.mode` es `partial` (predeterminado: `true`). -- Debe haber un hilo de respuesta disponible para que aparezcan el streaming de texto nativo y el estado del hilo del asistente de Slack. La selección del hilo sigue rigiéndose por `replyToMode`. -- Las raíces de canales y chats de grupo pueden seguir usando la vista previa normal de borrador cuando el streaming nativo no está disponible. -- Los MD de Slack de nivel superior permanecen fuera de hilo de forma predeterminada, por lo que no muestran la vista previa de estilo hilo; usa respuestas en hilo o `typingReaction` si quieres progreso visible allí. -- Las cargas útiles multimedia y no textuales vuelven a la entrega normal. -- Si el streaming falla a mitad de una respuesta, OpenClaw vuelve a la entrega normal para las cargas útiles restantes. +- Debe haber disponible un hilo de respuesta para que aparezcan el streaming nativo de texto y el estado del hilo del asistente de Slack. La selección del hilo sigue respetando `replyToMode`. +- Las raíces de canales y chats grupales pueden seguir usando la vista previa de borrador normal cuando el streaming nativo no está disponible. +- Los mensajes directos de Slack de nivel superior permanecen fuera de hilo de forma predeterminada, por lo que no muestran la vista previa con estilo de hilo; usa respuestas en hilo o `typingReaction` si quieres progreso visible allí. +- Las cargas de medios y las que no son de texto vuelven a la entrega normal. +- Si el streaming falla a mitad de una respuesta, OpenClaw vuelve a la entrega normal para las cargas restantes. -Usa la vista previa de borrador en lugar del streaming de texto nativo de Slack: +Usa la vista previa de borrador en lugar del streaming nativo de texto de Slack: ```json5 { @@ -768,12 +769,12 @@ Usa la vista previa de borrador en lugar del streaming de texto nativo de Slack: Claves heredadas: - `channels.slack.streamMode` (`replace | status_final | append`) se migra automáticamente a `channels.slack.streaming.mode`. -- el booleano `channels.slack.streaming` se migra automáticamente a `channels.slack.streaming.mode` y `channels.slack.streaming.nativeTransport`. -- el valor heredado `channels.slack.nativeStreaming` se migra automáticamente a `channels.slack.streaming.nativeTransport`. +- el valor booleano `channels.slack.streaming` se migra automáticamente a `channels.slack.streaming.mode` y `channels.slack.streaming.nativeTransport`. +- `channels.slack.nativeStreaming`, heredada, se migra automáticamente a `channels.slack.streaming.nativeTransport`. -## Alternativa con reacción de escritura +## Respaldo con reacción de escritura -`typingReaction` agrega una reacción temporal al mensaje entrante de Slack mientras OpenClaw procesa una respuesta y luego la elimina cuando termina la ejecución. Esto es especialmente útil fuera de las respuestas en hilo, que usan un indicador de estado predeterminado de "está escribiendo...". +`typingReaction` agrega una reacción temporal al mensaje entrante de Slack mientras OpenClaw procesa una respuesta y luego la elimina cuando finaliza la ejecución. Esto es más útil fuera de las respuestas en hilo, que usan un indicador de estado predeterminado de "is typing...". Orden de resolución: @@ -783,39 +784,39 @@ Orden de resolución: Notas: - Slack espera códigos cortos (por ejemplo, `"hourglass_flowing_sand"`). -- La reacción se aplica según el mejor esfuerzo y la limpieza se intenta automáticamente tras completarse la respuesta o la ruta de error. +- La reacción es de mejor esfuerzo y se intenta limpiarla automáticamente después de que se complete la respuesta o la ruta de error. ## Medios, fragmentación y entrega - Los archivos adjuntos de Slack se descargan desde URL privadas alojadas en Slack (flujo de solicitudes autenticadas con token) y se escriben en el almacén de medios cuando la recuperación se realiza correctamente y los límites de tamaño lo permiten. + Los archivos adjuntos de Slack se descargan desde URL privadas alojadas por Slack (flujo de solicitud autenticada por token) y se escriben en el almacén de medios cuando la obtención se realiza correctamente y los límites de tamaño lo permiten. - El límite de tamaño entrante en tiempo de ejecución usa por defecto `20MB`, salvo que `channels.slack.mediaMaxMb` lo sustituya. + El límite de tamaño entrante en tiempo de ejecución es `20MB` de forma predeterminada, salvo que se reemplace con `channels.slack.mediaMaxMb`. - - los fragmentos de texto usan `channels.slack.textChunkLimit` (predeterminado: 4000) + - los fragmentos de texto usan `channels.slack.textChunkLimit` (predeterminado 4000) - `channels.slack.chunkMode="newline"` habilita la división priorizando párrafos - los envíos de archivos usan las API de carga de Slack y pueden incluir respuestas en hilo (`thread_ts`) - - el límite de medios salientes sigue `channels.slack.mediaMaxMb` cuando está configurado; de lo contrario, los envíos del canal usan los valores predeterminados por tipo MIME de la canalización de medios + - el límite de medios salientes sigue `channels.slack.mediaMaxMb` cuando está configurado; de lo contrario, los envíos del canal usan los valores predeterminados por tipo MIME del flujo de medios Destinos explícitos preferidos: - - `user:` para MD + - `user:` para mensajes directos - `channel:` para canales - Los MD de Slack se abren mediante las API de conversaciones de Slack al enviar a destinos de usuario. + Los mensajes directos de Slack se abren mediante las API de conversaciones de Slack al enviar a destinos de usuario. ## Comandos y comportamiento de slash -Los comandos slash aparecen en Slack como un único comando configurado o como varios comandos nativos. Configura `channels.slack.slashCommand` para cambiar los valores predeterminados de los comandos: +Los comandos slash aparecen en Slack como un único comando configurado o como varios comandos nativos. Configura `channels.slack.slashCommand` para cambiar los valores predeterminados del comando: - `enabled: false` - `name: "openclaw"` @@ -826,7 +827,7 @@ Los comandos slash aparecen en Slack como un único comando configurado o como v /openclaw /help ``` -Los comandos nativos requieren [configuración adicional del manifiesto](#additional-manifest-settings) en tu aplicación de Slack y se habilitan con `channels.slack.commands.native: true` o `commands.native: true` en las configuraciones globales. +Los comandos nativos requieren [configuraciones adicionales del manifiesto](#additional-manifest-settings) en tu aplicación de Slack y se habilitan con `channels.slack.commands.native: true` o `commands.native: true` en configuraciones globales. - El modo automático de comandos nativos está **desactivado** para Slack, por lo que `commands.native: "auto"` no habilita los comandos nativos de Slack. @@ -834,18 +835,18 @@ Los comandos nativos requieren [configuración adicional del manifiesto](#additi /help ``` -Los menús de argumentos nativos usan una estrategia de renderizado adaptable que muestra un modal de confirmación antes de despachar un valor de opción seleccionado: +Los menús de argumentos nativos usan una estrategia de renderizado adaptativa que muestra un modal de confirmación antes de despachar un valor de opción seleccionado: - hasta 5 opciones: bloques de botones -- de 6 a 100 opciones: menú de selección estática -- más de 100 opciones: selección externa con filtrado asíncrono de opciones cuando los controladores de opciones de interactividad están disponibles -- si se superan los límites de Slack: los valores de opción codificados vuelven a botones +- de 6 a 100 opciones: menú de selección estático +- más de 100 opciones: selección externa con filtrado asincrónico de opciones cuando están disponibles los controladores de opciones de interactividad +- se excedieron los límites de Slack: los valores de opción codificados vuelven a botones ```txt /think ``` -Las sesiones de slash usan claves aisladas como `agent::slack:slash:` y aun así enrutan las ejecuciones de comandos a la sesión de conversación de destino usando `CommandTargetSessionKey`. +Las sesiones slash usan claves aisladas como `agent::slack:slash:` y aun así enrutan las ejecuciones de comandos a la sesión de conversación de destino usando `CommandTargetSessionKey`. ## Respuestas interactivas @@ -888,39 +889,39 @@ Cuando está habilitada, los agentes pueden emitir directivas de respuesta exclu - `[[slack_buttons: Approve:approve, Reject:reject]]` - `[[slack_select: Choose a target | Canary:canary, Production:production]]` -Estas directivas se compilan en Slack Block Kit y enrutan clics o selecciones a través de la ruta de eventos de interacción existente de Slack. +Estas directivas se compilan en Slack Block Kit y enrutan los clics o selecciones de regreso a través de la ruta existente de eventos de interacción de Slack. Notas: -- Esta es una interfaz específica de Slack. Los demás canales no traducen las directivas de Slack Block Kit a sus propios sistemas de botones. -- Los valores de callback interactivos son tokens opacos generados por OpenClaw, no valores sin procesar escritos por el agente. -- Si los bloques interactivos generados superan los límites de Slack Block Kit, OpenClaw vuelve a la respuesta de texto original en lugar de enviar una carga útil de bloques no válida. +- Esta es una UI específica de Slack. Otros canales no traducen las directivas de Slack Block Kit a sus propios sistemas de botones. +- Los valores de devolución de llamada interactiva son tokens opacos generados por OpenClaw, no valores sin procesar creados por el agente. +- Si los bloques interactivos generados exceden los límites de Slack Block Kit, OpenClaw vuelve a la respuesta de texto original en lugar de enviar una carga de bloques no válida. ## Aprobaciones de exec en Slack -Slack puede actuar como cliente nativo de aprobación con botones interactivos e interacciones, en lugar de recurrir a la interfaz web o al terminal. +Slack puede actuar como un cliente nativo de aprobación con botones e interacciones interactivas, en lugar de volver a la Web UI o al terminal. -- Las aprobaciones de exec usan `channels.slack.execApprovals.*` para el enrutamiento nativo de MD/canales. -- Las aprobaciones de Plugin pueden seguir resolviéndose mediante la misma superficie nativa de botones de Slack cuando la solicitud ya llega a Slack y el tipo de ID de aprobación es `plugin:`. -- La autorización del aprobador sigue aplicándose: solo los usuarios identificados como aprobadores pueden aprobar o denegar solicitudes a través de Slack. +- Las aprobaciones de exec usan `channels.slack.execApprovals.*` para el enrutamiento nativo en mensajes directos/canales. +- Las aprobaciones de Plugin aún pueden resolverse mediante la misma superficie de botones nativos de Slack cuando la solicitud ya llega a Slack y el tipo de id de aprobación es `plugin:`. +- La autorización del aprobador sigue aplicándose: solo los usuarios identificados como aprobadores pueden aprobar o rechazar solicitudes a través de Slack. Esto usa la misma superficie compartida de botones de aprobación que otros canales. Cuando `interactivity` está habilitado en la configuración de tu aplicación de Slack, las solicitudes de aprobación se renderizan como botones de Block Kit directamente en la conversación. -Cuando esos botones están presentes, son la experiencia principal de aprobación; OpenClaw +Cuando esos botones están presentes, son la UX principal de aprobación; OpenClaw solo debe incluir un comando manual `/approve` cuando el resultado de la herramienta indique que las -aprobaciones en chat no están disponibles o cuando la aprobación manual sea la única vía. +aprobaciones por chat no están disponibles o que la aprobación manual es la única vía. Ruta de configuración: - `channels.slack.execApprovals.enabled` -- `channels.slack.execApprovals.approvers` (opcional; usa `commands.ownerAllowFrom` como alternativa cuando es posible) +- `channels.slack.execApprovals.approvers` (opcional; usa como respaldo `commands.ownerAllowFrom` cuando es posible) - `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, predeterminado: `dm`) - `agentFilter`, `sessionFilter` -Slack habilita automáticamente las aprobaciones nativas de exec cuando `enabled` no está configurado o es `"auto"` y se resuelve al menos -un aprobador. Establece `enabled: false` para desactivar Slack explícitamente como cliente nativo de aprobación. +Slack habilita automáticamente las aprobaciones nativas de exec cuando `enabled` no está definido o es `"auto"` y se resuelve al menos un +aprobador. Establece `enabled: false` para deshabilitar explícitamente Slack como cliente nativo de aprobación. Establece `enabled: true` para forzar las aprobaciones nativas cuando se resuelvan aprobadores. -Comportamiento predeterminado sin configuración explícita de aprobación de exec para Slack: +Comportamiento predeterminado sin configuración explícita de aprobación de exec en Slack: ```json5 { @@ -930,8 +931,8 @@ Comportamiento predeterminado sin configuración explícita de aprobación de ex } ``` -La configuración nativa explícita de Slack solo es necesaria cuando quieres sustituir aprobadores, agregar filtros u -optar por la entrega en el chat de origen: +La configuración nativa explícita de Slack solo es necesaria cuando quieres reemplazar aprobadores, agregar filtros u +optar por la entrega al chat de origen: ```json5 { @@ -949,20 +950,20 @@ optar por la entrega en el chat de origen: El reenvío compartido `approvals.exec` es independiente. Úsalo solo cuando las solicitudes de aprobación de exec también deban enrutarse a otros chats o a destinos explícitos fuera de banda. El reenvío compartido `approvals.plugin` también es -independiente; los botones nativos de Slack pueden seguir resolviendo aprobaciones de Plugin cuando esas solicitudes ya llegan +independiente; los botones nativos de Slack aún pueden resolver aprobaciones de Plugin cuando esas solicitudes ya llegan a Slack. -`/approve` en el mismo chat también funciona en canales y MD de Slack que ya admiten comandos. Consulta [Aprobaciones de exec](/es/tools/exec-approvals) para ver el modelo completo de reenvío de aprobaciones. +El comando `/approve` en el mismo chat también funciona en canales y mensajes directos de Slack que ya admiten comandos. Consulta [Aprobaciones de exec](/es/tools/exec-approvals) para ver el modelo completo de reenvío de aprobaciones. ## Eventos y comportamiento operativo - Las ediciones/eliminaciones de mensajes y las difusiones de hilos se asignan a eventos del sistema. - Los eventos de agregar/quitar reacciones se asignan a eventos del sistema. - Los eventos de entrada/salida de miembros, creación/cambio de nombre de canales y agregar/quitar fijaciones se asignan a eventos del sistema. -- `channel_id_changed` puede migrar claves de configuración de canales cuando `configWrites` está habilitado. +- `channel_id_changed` puede migrar claves de configuración de canal cuando `configWrites` está habilitado. - Los metadatos de tema/propósito del canal se tratan como contexto no confiable y pueden inyectarse en el contexto de enrutamiento. -- El iniciador del hilo y la siembra inicial del contexto del historial del hilo se filtran por las listas de remitentes permitidos configuradas, cuando corresponde. -- Las acciones de bloque y las interacciones modales emiten eventos del sistema estructurados `Slack interaction: ...` con campos de carga útil enriquecidos: +- El iniciador del hilo y la siembra inicial del contexto del historial del hilo se filtran según las listas de permitidos de remitentes configuradas, cuando corresponde. +- Las acciones de bloque y las interacciones modales emiten eventos del sistema estructurados `Slack interaction: ...` con campos de carga enriquecidos: - acciones de bloque: valores seleccionados, etiquetas, valores del selector y metadatos `workflow_*` - eventos modales `view_submission` y `view_closed` con metadatos de canal enrutados y entradas de formulario @@ -974,18 +975,18 @@ Referencia principal: Campos de Slack de alta señal: - modo/autenticación: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*` - - acceso a MD: `dm.enabled`, `dmPolicy`, `allowFrom` (heredado: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels` - - interruptor de compatibilidad: `dangerouslyAllowNameMatching` (último recurso; mantenlo desactivado salvo que sea necesario) + - acceso a mensajes directos: `dm.enabled`, `dmPolicy`, `allowFrom` (heredado: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels` + - conmutador de compatibilidad: `dangerouslyAllowNameMatching` (solo emergencia; mantenlo desactivado salvo que sea necesario) - acceso a canales: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention` - hilos/historial: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` - - entrega: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport` + - entrega: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`, `streaming.preview.toolProgress` - operaciones/funciones: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly` ## Solución de problemas - - Comprueba, en este orden: + + Verifica, en este orden: - `groupPolicy` - lista de permitidos de canales (`channels.slack.channels`) @@ -1002,8 +1003,8 @@ openclaw doctor - - Comprueba: + + Verifica: - `channels.slack.dm.enabled` - `channels.slack.dmPolicy` (o el heredado `channels.slack.dm.policy`) @@ -1015,8 +1016,8 @@ openclaw pairing list slack - - Valida los tokens de bot y app, y que Socket Mode esté habilitado en la configuración de la aplicación de Slack. + + Valida los tokens de bot + app y la habilitación de Socket Mode en la configuración de la aplicación de Slack. Si `openclaw channels status --probe --json` muestra `botTokenStatus` o `appTokenStatus: "configured_unavailable"`, la cuenta de Slack está @@ -1029,23 +1030,23 @@ openclaw pairing list slack Valida: - signing secret - - ruta del webhook - - URL de solicitud de Slack (Events + Interactivity + Slash Commands) + - ruta del Webhook + - URL de solicitud de Slack (Eventos + Interactividad + Comandos Slash) - `webhookPath` único por cuenta HTTP - Si `signingSecretStatus: "configured_unavailable"` aparece en las - instantáneas de cuenta, la cuenta HTTP está configurada, pero el tiempo de ejecución actual no pudo - resolver el signing secret respaldado por SecretRef. + Si aparece `signingSecretStatus: "configured_unavailable"` en las + instantáneas de la cuenta, la cuenta HTTP está configurada, pero el tiempo + de ejecución actual no pudo resolver el signing secret respaldado por SecretRef. - Verifica si querías usar: + Verifica qué pretendías: - modo de comandos nativos (`channels.slack.commands.native: true`) con los comandos slash correspondientes registrados en Slack - - o modo de un único comando slash (`channels.slack.slashCommand.enabled: true`) + - o modo de un solo comando slash (`channels.slack.slashCommand.enabled: true`) - Comprueba también `commands.useAccessGroups` y las listas de permitidos de canal/usuario. + Verifica también `commands.useAccessGroups` y las listas de permitidos de canal/usuario. diff --git a/docs/es/channels/telegram.md b/docs/es/channels/telegram.md index 5332963d3..e39f37069 100644 --- a/docs/es/channels/telegram.md +++ b/docs/es/channels/telegram.md @@ -4,41 +4,41 @@ read_when: summary: Estado de compatibilidad, capacidades y configuración del bot de Telegram title: Telegram x-i18n: - generated_at: "2026-04-21T05:12:47Z" + generated_at: "2026-04-21T17:45:39Z" model: gpt-5.4 provider: openai - source_hash: b5c70775b55d4923a31ad8bae7f4c6e7cbae754c05c3a578180d63db2b59e39a + source_hash: 816238b53942b319a300843db62ec1d4bf8d84bc11094010926ac9ad457c6d3d source_path: channels/telegram.md workflow: 15 --- -# Telegram (API de Bot) +# Telegram (API de bots) -Estado: listo para producción para MD de bots + grupos mediante grammY. El sondeo largo es el modo predeterminado; el modo Webhook es opcional. +Estado: listo para producción para mensajes directos del bot + grupos mediante grammY. El sondeo largo es el modo predeterminado; el modo Webhook es opcional. - La política predeterminada de MD para Telegram es la vinculación. + La política predeterminada de mensajes directos para Telegram es la vinculación. - Diagnósticos multicanal y guías de reparación. + Diagnósticos entre canales y guías de reparación. - Patrones completos de configuración del canal y ejemplos. + Patrones y ejemplos completos de configuración de canales. ## Configuración rápida - + Abre Telegram y chatea con **@BotFather** (confirma que el identificador sea exactamente `@BotFather`). Ejecuta `/newbot`, sigue las indicaciones y guarda el token. - + ```json5 { @@ -54,11 +54,11 @@ Estado: listo para producción para MD de bots + grupos mediante grammY. El sond ``` Respaldo por variable de entorno: `TELEGRAM_BOT_TOKEN=...` (solo cuenta predeterminada). - Telegram **no** usa `openclaw channels login telegram`; configura el token en config/env y luego inicia el Gateway. + Telegram **no** usa `openclaw channels login telegram`; configura el token en la configuración o en el entorno y luego inicia el gateway. - + ```bash openclaw gateway @@ -70,16 +70,16 @@ openclaw pairing approve telegram - - Agrega el bot a tu grupo y luego configura `channels.telegram.groups` y `groupPolicy` para que coincidan con tu modelo de acceso. + + Añade el bot a tu grupo y luego configura `channels.telegram.groups` y `groupPolicy` para que coincidan con tu modelo de acceso. -El orden de resolución del token tiene en cuenta la cuenta. En la práctica, los valores de config prevalecen sobre el respaldo por variable de entorno, y `TELEGRAM_BOT_TOKEN` solo se aplica a la cuenta predeterminada. +El orden de resolución del token tiene en cuenta la cuenta. En la práctica, los valores de configuración prevalecen sobre el respaldo por entorno, y `TELEGRAM_BOT_TOKEN` solo se aplica a la cuenta predeterminada. -## Configuración del lado de Telegram +## Ajustes del lado de Telegram @@ -87,14 +87,14 @@ El orden de resolución del token tiene en cuenta la cuenta. En la práctica, lo Si el bot debe ver todos los mensajes del grupo, haz una de estas dos cosas: - - desactiva el modo de privacidad con `/setprivacy`, o + - desactiva el modo de privacidad mediante `/setprivacy`, o - convierte al bot en administrador del grupo. - Al cambiar el modo de privacidad, elimina y vuelve a agregar el bot en cada grupo para que Telegram aplique el cambio. + Al cambiar el modo de privacidad, quita y vuelve a añadir el bot en cada grupo para que Telegram aplique el cambio. - + El estado de administrador se controla en la configuración del grupo de Telegram. Los bots administradores reciben todos los mensajes del grupo, lo que resulta útil para un comportamiento de grupo siempre activo. @@ -103,7 +103,7 @@ El orden de resolución del token tiene en cuenta la cuenta. En la práctica, lo - - `/setjoingroups` para permitir o denegar que se agregue a grupos + - `/setjoingroups` para permitir o denegar que se añada a grupos - `/setprivacy` para el comportamiento de visibilidad en grupos @@ -112,7 +112,7 @@ El orden de resolución del token tiene en cuenta la cuenta. En la práctica, lo ## Control de acceso y activación - + `channels.telegram.dmPolicy` controla el acceso a mensajes directos: - `pairing` (predeterminado) @@ -120,27 +120,27 @@ El orden de resolución del token tiene en cuenta la cuenta. En la práctica, lo - `open` (requiere que `allowFrom` incluya `"*"`) - `disabled` - `channels.telegram.allowFrom` acepta IDs numéricos de usuarios de Telegram. Se aceptan los prefijos `telegram:` / `tg:` y se normalizan. - `dmPolicy: "allowlist"` con `allowFrom` vacío bloquea todos los MD y la validación de configuración lo rechaza. - La configuración solicita solo IDs numéricos de usuario. + `channels.telegram.allowFrom` acepta ID numéricos de usuarios de Telegram. Se aceptan y normalizan los prefijos `telegram:` / `tg:`. + `dmPolicy: "allowlist"` con `allowFrom` vacío bloquea todos los mensajes directos y la validación de configuración lo rechaza. + La configuración solicita solo ID numéricos de usuario. Si actualizaste y tu configuración contiene entradas `@username` en la lista de permitidos, ejecuta `openclaw doctor --fix` para resolverlas (mejor esfuerzo; requiere un token de bot de Telegram). - Si antes dependías de archivos de lista de permitidos del almacén de vinculación, `openclaw doctor --fix` puede recuperar entradas en `channels.telegram.allowFrom` en flujos de lista de permitidos (por ejemplo, cuando `dmPolicy: "allowlist"` aún no tiene IDs explícitos). + Si antes dependías de archivos de lista de permitidos del almacén de vinculación, `openclaw doctor --fix` puede recuperar entradas en `channels.telegram.allowFrom` en flujos de lista de permitidos (por ejemplo, cuando `dmPolicy: "allowlist"` aún no tiene ID explícitos). - Para bots de un solo propietario, prefiere `dmPolicy: "allowlist"` con IDs numéricos explícitos en `allowFrom` para mantener una política de acceso duradera en la configuración (en lugar de depender de aprobaciones de vinculación anteriores). + Para bots con un solo propietario, prefiere `dmPolicy: "allowlist"` con ID numéricos explícitos en `allowFrom` para mantener la política de acceso de forma duradera en la configuración (en lugar de depender de aprobaciones de vinculación anteriores). - Confusión habitual: aprobar la vinculación de MD no significa “este remitente está autorizado en todas partes”. - La vinculación concede acceso solo a MD. La autorización del remitente en grupos sigue viniendo de listas de permitidos explícitas en la configuración. - Si quieres “estoy autorizado una vez y funcionan tanto los MD como los comandos de grupo”, coloca tu ID numérico de usuario de Telegram en `channels.telegram.allowFrom`. + Confusión habitual: la aprobación de vinculación para mensajes directos no significa “este remitente está autorizado en todas partes”. + La vinculación solo concede acceso por mensaje directo. La autorización del remitente en grupos sigue viniendo de listas de permitidos explícitas en la configuración. + Si quieres “quedo autorizado una vez y funcionan tanto los mensajes directos como los comandos de grupo”, pon tu ID numérico de usuario de Telegram en `channels.telegram.allowFrom`. ### Cómo encontrar tu ID de usuario de Telegram Más seguro (sin bot de terceros): - 1. Envía un MD a tu bot. + 1. Envía un mensaje directo a tu bot. 2. Ejecuta `openclaw logs --follow`. 3. Lee `from.id`. - Método oficial de la API de Bot: + Método oficial de la API de bots: ```bash curl "https://api.telegram.org/bot/getUpdates" @@ -154,25 +154,25 @@ curl "https://api.telegram.org/bot/getUpdates" Se aplican juntos dos controles: 1. **Qué grupos están permitidos** (`channels.telegram.groups`) - - sin configuración `groups`: - - con `groupPolicy: "open"`: cualquier grupo puede pasar las comprobaciones de ID de grupo - - con `groupPolicy: "allowlist"` (predeterminada): los grupos se bloquean hasta que agregues entradas en `groups` (o `"*"`) - - `groups` configurado: actúa como lista de permitidos (IDs explícitos o `"*"`) + - sin configuración de `groups`: + - con `groupPolicy: "open"`: cualquier grupo puede superar las comprobaciones de ID de grupo + - con `groupPolicy: "allowlist"` (predeterminado): los grupos se bloquean hasta que añadas entradas en `groups` (o `"*"`) + - `groups` configurado: actúa como lista de permitidos (ID explícitos o `"*"`) 2. **Qué remitentes están permitidos en grupos** (`channels.telegram.groupPolicy`) - `open` - - `allowlist` (predeterminada) + - `allowlist` (predeterminado) - `disabled` - `groupAllowFrom` se usa para filtrar remitentes de grupo. Si no se establece, Telegram usa `allowFrom` como respaldo. - Las entradas de `groupAllowFrom` deben ser IDs numéricos de usuarios de Telegram (los prefijos `telegram:` / `tg:` se normalizan). - No pongas IDs de chat de grupo o supergrupo de Telegram en `groupAllowFrom`. Los IDs de chat negativos van en `channels.telegram.groups`. + `groupAllowFrom` se usa para filtrar remitentes en grupos. Si no está configurado, Telegram recurre a `allowFrom`. + Las entradas de `groupAllowFrom` deben ser ID numéricos de usuarios de Telegram (los prefijos `telegram:` / `tg:` se normalizan). + No pongas ID de chat de grupo o supergrupo de Telegram en `groupAllowFrom`. Los ID de chat negativos van en `channels.telegram.groups`. Las entradas no numéricas se ignoran para la autorización del remitente. - Límite de seguridad (`2026.2.25+`): la autorización de remitentes en grupos **no** hereda aprobaciones del almacén de vinculación de MD. - La vinculación sigue siendo solo para MD. Para grupos, configura `groupAllowFrom` o `allowFrom` por grupo/tema. - Si `groupAllowFrom` no está establecido, Telegram usa como respaldo `allowFrom` de config, no el almacén de vinculación. - Patrón práctico para bots de un solo propietario: configura tu ID de usuario en `channels.telegram.allowFrom`, deja `groupAllowFrom` sin establecer y permite los grupos objetivo en `channels.telegram.groups`. - Nota de ejecución: si `channels.telegram` falta por completo, en ejecución se usa de forma predeterminada `groupPolicy="allowlist"` con cierre por defecto, salvo que `channels.defaults.groupPolicy` esté configurado explícitamente. + Límite de seguridad (`2026.2.25+`): la autenticación del remitente en grupos **no** hereda aprobaciones del almacén de vinculación de mensajes directos. + La vinculación sigue siendo solo para mensajes directos. Para grupos, configura `groupAllowFrom` o `allowFrom` por grupo o por tema. + Si `groupAllowFrom` no está configurado, Telegram recurre a `allowFrom` de la configuración, no al almacén de vinculación. + Patrón práctico para bots de un solo propietario: configura tu ID de usuario en `channels.telegram.allowFrom`, deja `groupAllowFrom` sin configurar y permite los grupos objetivo en `channels.telegram.groups`. + Nota de tiempo de ejecución: si `channels.telegram` falta por completo, el tiempo de ejecución usa de forma predeterminada un modo de cierre por defecto con `groupPolicy="allowlist"`, a menos que `channels.defaults.groupPolicy` esté configurado explícitamente. Ejemplo: permitir a cualquier miembro en un grupo específico: @@ -211,8 +211,8 @@ curl "https://api.telegram.org/bot/getUpdates" Error habitual: `groupAllowFrom` no es una lista de permitidos de grupos de Telegram. - - Coloca IDs negativos de grupos o supergrupos de Telegram como `-1001234567890` en `channels.telegram.groups`. - - Coloca IDs de usuario de Telegram como `8734062810` en `groupAllowFrom` cuando quieras limitar qué personas dentro de un grupo permitido pueden activar el bot. + - Pon los ID negativos de grupo o supergrupo de Telegram, como `-1001234567890`, en `channels.telegram.groups`. + - Pon los ID de usuario de Telegram, como `8734062810`, en `groupAllowFrom` cuando quieras limitar qué personas dentro de un grupo permitido pueden activar el bot. - Usa `groupAllowFrom: ["*"]` solo cuando quieras que cualquier miembro de un grupo permitido pueda hablar con el bot. @@ -233,7 +233,7 @@ curl "https://api.telegram.org/bot/getUpdates" - `/activation always` - `/activation mention` - Estas opciones actualizan solo el estado de la sesión. Usa la configuración para persistencia. + Estas actualizan solo el estado de la sesión. Usa la configuración para que persistan. Ejemplo de configuración persistente: @@ -253,21 +253,21 @@ curl "https://api.telegram.org/bot/getUpdates" - reenvía un mensaje del grupo a `@userinfobot` / `@getidsbot` - o lee `chat.id` desde `openclaw logs --follow` - - o inspecciona `getUpdates` de la API de Bot + - o inspecciona `getUpdates` de la API de bots -## Comportamiento en ejecución +## Comportamiento en tiempo de ejecución -- Telegram es propiedad del proceso Gateway. +- Telegram pertenece al proceso del Gateway. - El enrutamiento es determinista: las respuestas entrantes de Telegram vuelven a Telegram (el modelo no elige canales). -- Los mensajes entrantes se normalizan en el sobre compartido del canal con metadatos de respuesta y marcadores de posición de contenido multimedia. -- Las sesiones de grupo están aisladas por ID de grupo. Los temas de foro agregan `:topic:` para mantener los temas aislados. -- Los mensajes MD pueden incluir `message_thread_id`; OpenClaw los enruta con claves de sesión conscientes del hilo y conserva el ID del hilo para las respuestas. -- El sondeo largo usa grammY runner con secuenciación por chat y por hilo. La concurrencia total del sumidero del runner usa `agents.defaults.maxConcurrent`. -- Los reinicios del watchdog de sondeo largo se activan después de 120 segundos sin actividad completada de `getUpdates` por defecto. Aumenta `channels.telegram.pollingStallThresholdMs` solo si tu despliegue sigue viendo reinicios falsos por bloqueo de sondeo durante trabajos prolongados. El valor está en milisegundos y se permite de `30000` a `600000`; se admiten anulaciones por cuenta. -- La API de Bot de Telegram no admite confirmaciones de lectura (`sendReadReceipts` no se aplica). +- Los mensajes entrantes se normalizan en el sobre compartido del canal con metadatos de respuesta y marcadores de posición de medios. +- Las sesiones de grupo se aíslan por ID de grupo. Los temas del foro añaden `:topic:` para mantener los temas aislados. +- Los mensajes directos pueden llevar `message_thread_id`; OpenClaw los enruta con claves de sesión conscientes del hilo y conserva el ID del hilo para las respuestas. +- El sondeo largo usa grammY runner con secuenciación por chat y por hilo. La concurrencia total del receptor del runner usa `agents.defaults.maxConcurrent`. +- Los reinicios del watchdog de sondeo largo se activan después de 120 segundos sin actividad completada de `getUpdates` por defecto. Aumenta `channels.telegram.pollingStallThresholdMs` solo si tu despliegue sigue viendo reinicios falsos por bloqueo del sondeo durante trabajo de larga duración. El valor está en milisegundos y se permite entre `30000` y `600000`; se admiten anulaciones por cuenta. +- La API de bots de Telegram no admite confirmaciones de lectura (`sendReadReceipts` no se aplica). ## Referencia de funciones @@ -281,35 +281,36 @@ curl "https://api.telegram.org/bot/getUpdates" Requisito: - `channels.telegram.streaming` es `off | partial | block | progress` (predeterminado: `partial`) - - `progress` se asigna a `partial` en Telegram (compatibilidad con la nomenclatura multicanal) - - los valores heredados `channels.telegram.streamMode` y booleanos `streaming` se asignan automáticamente + - `progress` se asigna a `partial` en Telegram (compatibilidad con el nombre entre canales) + - `streaming.preview.toolProgress` controla si las actualizaciones de herramienta/progreso reutilizan el mismo mensaje de vista previa editado (predeterminado: `true`). Configúralo en `false` para mantener mensajes separados de herramienta/progreso. + - los valores heredados `channels.telegram.streamMode` y los valores booleanos `streaming` se asignan automáticamente Para respuestas solo de texto: - - MD: OpenClaw mantiene el mismo mensaje de vista previa y realiza una edición final en el lugar (sin segundo mensaje) - - grupo/tema: OpenClaw mantiene el mismo mensaje de vista previa y realiza una edición final en el lugar (sin segundo mensaje) + - MD: OpenClaw mantiene el mismo mensaje de vista previa y realiza una edición final en el mismo lugar (sin segundo mensaje) + - grupo/tema: OpenClaw mantiene el mismo mensaje de vista previa y realiza una edición final en el mismo lugar (sin segundo mensaje) - Para respuestas complejas (por ejemplo, cargas de contenido multimedia), OpenClaw vuelve al envío final normal y luego limpia el mensaje de vista previa. + Para respuestas complejas (por ejemplo, cargas de medios), OpenClaw vuelve a la entrega final normal y luego limpia el mensaje de vista previa. La transmisión de vista previa es independiente de la transmisión por bloques. Cuando la transmisión por bloques está habilitada explícitamente para Telegram, OpenClaw omite la transmisión de vista previa para evitar una doble transmisión. - Si el transporte nativo de borrador no está disponible o es rechazado, OpenClaw vuelve automáticamente a `sendMessage` + `editMessageText`. + Si el transporte nativo de borrador no está disponible o es rechazado, OpenClaw recurre automáticamente a `sendMessage` + `editMessageText`. Flujo de razonamiento solo para Telegram: - - `/reasoning stream` envía el razonamiento a la vista previa en vivo mientras se genera - - la respuesta final se envía sin el texto de razonamiento + - `/reasoning stream` envía el razonamiento a la vista previa en vivo durante la generación + - la respuesta final se envía sin texto de razonamiento - El texto saliente usa Telegram `parse_mode: "HTML"`. + El texto saliente usa `parse_mode: "HTML"` de Telegram. - El texto tipo Markdown se renderiza como HTML seguro para Telegram. - - El HTML bruto del modelo se escapa para reducir fallos de análisis de Telegram. + - El HTML sin procesar del modelo se escapa para reducir fallos de análisis de Telegram. - Si Telegram rechaza el HTML analizado, OpenClaw reintenta como texto sin formato. - Las vistas previas de enlaces están habilitadas de forma predeterminada y se pueden desactivar con `channels.telegram.linkPreview: false`. + Las vistas previas de enlaces están habilitadas de forma predeterminada y pueden desactivarse con `channels.telegram.linkPreview: false`. @@ -320,14 +321,14 @@ curl "https://api.telegram.org/bot/getUpdates" - `commands.native: "auto"` habilita comandos nativos para Telegram - Agrega entradas de menú de comandos personalizadas: + Añade entradas personalizadas al menú de comandos: ```json5 { channels: { telegram: { customCommands: [ - { command: "backup", description: "Respaldo de Git" }, + { command: "backup", description: "Copia de seguridad de Git" }, { command: "generate", description: "Crear una imagen" }, ], }, @@ -337,7 +338,7 @@ curl "https://api.telegram.org/bot/getUpdates" Reglas: - - los nombres se normalizan (quitar `/` inicial, minúsculas) + - los nombres se normalizan (eliminan la `/` inicial, en minúsculas) - patrón válido: `a-z`, `0-9`, `_`, longitud `1..32` - los comandos personalizados no pueden sobrescribir comandos nativos - los conflictos y duplicados se omiten y se registran @@ -349,26 +350,26 @@ curl "https://api.telegram.org/bot/getUpdates" Si los comandos nativos están deshabilitados, se eliminan los integrados. Los comandos personalizados/de Plugin aún pueden registrarse si están configurados. - Fallos habituales de configuración: + Errores habituales de configuración: - - `setMyCommands failed` con `BOT_COMMANDS_TOO_MUCH` significa que el menú de Telegram siguió desbordado después de recortarlo; reduce los comandos de Plugin/Skills/personalizados o desactiva `channels.telegram.commands.native`. + - `setMyCommands failed` con `BOT_COMMANDS_TOO_MUCH` significa que el menú de Telegram siguió desbordándose después del recorte; reduce los comandos personalizados/de Plugin/de Skills o desactiva `channels.telegram.commands.native`. - `setMyCommands failed` con errores de red/fetch normalmente significa que el DNS/HTTPS saliente hacia `api.telegram.org` está bloqueado. - ### Comandos de vinculación de dispositivos (Plugin `device-pair`) + ### Comandos de vinculación de dispositivo (Plugin `device-pair`) Cuando el Plugin `device-pair` está instalado: 1. `/pair` genera un código de configuración 2. pega el código en la app de iOS - 3. `/pair pending` enumera las solicitudes pendientes (incluidos rol/alcances) + 3. `/pair pending` muestra las solicitudes pendientes (incluidos rol/scopes) 4. aprueba la solicitud: - `/pair approve ` para aprobación explícita - `/pair approve` cuando solo hay una solicitud pendiente - `/pair approve latest` para la más reciente - El código de configuración contiene un token bootstrap de corta duración. La transferencia bootstrap integrada mantiene el token del Node principal en `scopes: []`; cualquier token de operador transferido permanece limitado a `operator.approvals`, `operator.read`, `operator.talk.secrets` y `operator.write`. Las comprobaciones de alcance bootstrap usan prefijos por rol, por lo que esa lista de permitidos de operador solo satisface solicitudes de operador; los roles que no sean de operador siguen necesitando alcances bajo el prefijo de su propio rol. + El código de configuración lleva un token bootstrap de corta duración. La transferencia bootstrap integrada mantiene el token del nodo principal en `scopes: []`; cualquier token de operador transferido sigue limitado a `operator.approvals`, `operator.read`, `operator.talk.secrets` y `operator.write`. Las comprobaciones de scope bootstrap llevan prefijo de rol, por lo que esa lista de permitidos de operador solo satisface solicitudes de operador; los roles que no son de operador siguen necesitando scopes bajo su propio prefijo de rol. - Si un dispositivo reintenta con detalles de autenticación cambiados (por ejemplo, rol/alcances/clave pública), la solicitud pendiente anterior queda reemplazada y la nueva solicitud usa un `requestId` diferente. Vuelve a ejecutar `/pair pending` antes de aprobar. + Si un dispositivo vuelve a intentar con detalles de autenticación cambiados (por ejemplo rol/scopes/clave pública), la solicitud pendiente anterior queda reemplazada y la nueva solicitud usa un `requestId` diferente. Vuelve a ejecutar `/pair pending` antes de aprobar. Más detalles: [Vinculación](/es/channels/pairing#pair-via-telegram-recommended-for-ios). @@ -424,7 +425,7 @@ curl "https://api.telegram.org/bot/getUpdates" action: "send", channel: "telegram", to: "123456789", - message: "Elige una opción:", + message: "Choose an option:", buttons: [ [ { text: "Yes", callback_data: "yes" }, @@ -435,13 +436,13 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - Los clics de devolución de llamada se pasan al agente como texto: + Los clics en callbacks se pasan al agente como texto: `callback_data: ` - Las acciones de herramienta de Telegram incluyen: + Las acciones de herramientas de Telegram incluyen: - `sendMessage` (`to`, `content`, opcional `mediaUrl`, `replyToMessageId`, `messageThreadId`) - `react` (`chatId`, `messageId`, `emoji`) @@ -451,7 +452,7 @@ curl "https://api.telegram.org/bot/getUpdates" Las acciones de mensajes del canal exponen alias ergonómicos (`send`, `react`, `delete`, `edit`, `sticker`, `sticker-search`, `topic-create`). - Controles de restricción: + Controles de habilitación: - `channels.telegram.actions.sendMessage` - `channels.telegram.actions.deleteMessage` @@ -459,7 +460,7 @@ curl "https://api.telegram.org/bot/getUpdates" - `channels.telegram.actions.sticker` (predeterminado: deshabilitado) Nota: `edit` y `topic-create` están habilitados actualmente de forma predeterminada y no tienen alternancias `channels.telegram.actions.*` separadas. - Los envíos en ejecución usan la instantánea activa de config/secrets (inicio/recarga), por lo que las rutas de acción no realizan una nueva resolución ad hoc de SecretRef por envío. + Los envíos en tiempo de ejecución usan la instantánea activa de configuración/secretos (inicio/recarga), por lo que las rutas de acción no realizan una nueva resolución ad hoc de SecretRef en cada envío. Semántica de eliminación de reacciones: [/tools/reactions](/es/tools/reactions) @@ -477,15 +478,15 @@ curl "https://api.telegram.org/bot/getUpdates" - `first` - `all` - Nota: `off` desactiva el uso implícito de hilos de respuesta. Las etiquetas explícitas `[[reply_to_*]]` siguen respetándose. + Nota: `off` deshabilita el hilo implícito de respuesta. Las etiquetas explícitas `[[reply_to_*]]` siguen respetándose. - + Supergrupos de foro: - - las claves de sesión de temas agregan `:topic:` - - las respuestas y el indicador de escritura apuntan al hilo del tema + - las claves de sesión del tema añaden `:topic:` + - las respuestas y la indicación de escritura apuntan al hilo del tema - ruta de configuración del tema: `channels.telegram.groups..topics.` @@ -497,7 +498,7 @@ curl "https://api.telegram.org/bot/getUpdates" Herencia de temas: las entradas de tema heredan la configuración del grupo salvo que se sobrescriba (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`). `agentId` es exclusivo del tema y no se hereda de los valores predeterminados del grupo. - **Enrutamiento de agente por tema**: cada tema puede enrutar a un agente distinto configurando `agentId` en la configuración del tema. Esto da a cada tema su propio espacio de trabajo, memoria y sesión aislados. Ejemplo: + **Enrutamiento de agente por tema**: cada tema puede enrutar a un agente diferente configurando `agentId` en la configuración del tema. Esto da a cada tema su propio espacio de trabajo, memoria y sesión aislados. Ejemplo: ```json5 { @@ -517,9 +518,9 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - Luego, cada tema tiene su propia clave de sesión: `agent:zu:telegram:group:-1001234567890:topic:3` + Cada tema tiene entonces su propia clave de sesión: `agent:zu:telegram:group:-1001234567890:topic:3` - **Vinculación persistente de temas ACP**: los temas del foro pueden fijar sesiones del arnés ACP mediante vinculaciones ACP tipadas de nivel superior: + **Vinculación persistente de temas ACP**: los temas de foro pueden fijar sesiones de arnés ACP mediante vinculaciones ACP tipadas de nivel superior: - `bindings[]` con `type: "acp"` y `match.channel: "telegram"` @@ -570,13 +571,13 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - Actualmente, esto se limita a temas de foro en grupos y supergrupos. + Actualmente esto se limita a temas de foro en grupos y supergrupos. **Creación de ACP vinculado al hilo desde el chat**: - `/acp spawn --thread here|auto` puede vincular el tema actual de Telegram a una nueva sesión ACP. - Los mensajes posteriores del tema se enrutan directamente a la sesión ACP vinculada (no se requiere `/acp steer`). - - OpenClaw fija el mensaje de confirmación de creación dentro del tema después de una vinculación correcta. + - OpenClaw fija el mensaje de confirmación de creación dentro del tema tras una vinculación correcta. - Requiere `channels.telegram.threadBindings.spawnAcpSessions=true`. El contexto de plantilla incluye: @@ -584,9 +585,9 @@ curl "https://api.telegram.org/bot/getUpdates" - `MessageThreadId` - `IsForum` - Comportamiento de hilos en MD: + Comportamiento de hilos en mensajes directos: - - los chats privados con `message_thread_id` mantienen el enrutamiento de MD, pero usan claves de sesión y destinos de respuesta conscientes del hilo. + - los chats privados con `message_thread_id` mantienen el enrutamiento de mensajes directos, pero usan claves de sesión y destinos de respuesta conscientes del hilo. @@ -632,11 +633,11 @@ curl "https://api.telegram.org/bot/getUpdates" Manejo de stickers entrantes: - - WEBP estático: se descarga y procesa (marcador de posición ``) + - WEBP estático: se descarga y procesa (marcador ``) - TGS animado: se omite - WEBM de video: se omite - Campos de contexto de stickers: + Campos de contexto de sticker: - `Sticker.emoji` - `Sticker.setName` @@ -650,7 +651,7 @@ curl "https://api.telegram.org/bot/getUpdates" Los stickers se describen una vez (cuando es posible) y se almacenan en caché para reducir llamadas repetidas de visión. - Habilitar acciones de stickers: + Habilitar acciones de sticker: ```json5 { @@ -691,9 +692,9 @@ curl "https://api.telegram.org/bot/getUpdates" Las reacciones de Telegram llegan como actualizaciones `message_reaction` (separadas de las cargas de mensajes). - Cuando están habilitadas, OpenClaw pone en cola eventos del sistema como: + Cuando está habilitado, OpenClaw pone en cola eventos del sistema como: - - `Reacción de Telegram añadida: 👍 por Alice (@alice) en el mensaje 42` + - `Telegram reaction added: 👍 by Alice (@alice) on msg 42` Configuración: @@ -704,27 +705,27 @@ curl "https://api.telegram.org/bot/getUpdates" - `own` significa solo reacciones de usuarios a mensajes enviados por el bot (mejor esfuerzo mediante 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 IDs de hilo en las actualizaciones de reacción. - - los grupos que no son foros se enrutan a la sesión de chat del grupo + - Telegram no proporciona ID de hilo en las actualizaciones de reacciones. + - los grupos que no son foros se enrutan a la sesión del chat de grupo - los grupos de foro se enrutan a la sesión del tema general del grupo (`:topic:1`), no al tema exacto de origen - `allowed_updates` para sondeo/Webhook incluye `message_reaction` automáticamente. + `allowed_updates` para polling/Webhook incluye `message_reaction` automáticamente. - `ackReaction` envía un emoji de acuse mientras OpenClaw procesa un mensaje entrante. + `ackReaction` envía un emoji de confirmación mientras OpenClaw procesa un mensaje entrante. Orden de resolución: - `channels.telegram.accounts..ackReaction` - `channels.telegram.ackReaction` - `messages.ackReaction` - - respaldo al emoji de identidad del agente (`agents.list[].identity.emoji`, o `"👀"` en su defecto) + - respaldo con emoji de identidad del agente (`agents.list[].identity.emoji`, o "👀" si no hay otro) Notas: - - Telegram espera emoji unicode (por ejemplo, `"👀"`). + - Telegram espera emoji Unicode (por ejemplo, "👀"). - Usa `""` para desactivar la reacción para un canal o cuenta. @@ -751,46 +752,46 @@ curl "https://api.telegram.org/bot/getUpdates" - - Predeterminado: sondeo largo. + + Predeterminado: long polling. Modo Webhook: - - establecer `channels.telegram.webhookUrl` - - establecer `channels.telegram.webhookSecret` (obligatorio cuando se establece la URL de Webhook) + - configura `channels.telegram.webhookUrl` + - configura `channels.telegram.webhookSecret` (obligatorio cuando se configura la URL de Webhook) - `channels.telegram.webhookPath` opcional (predeterminado `/telegram-webhook`) - `channels.telegram.webhookHost` opcional (predeterminado `127.0.0.1`) - `channels.telegram.webhookPort` opcional (predeterminado `8787`) - El listener local predeterminado para el modo Webhook se enlaza a `127.0.0.1:8787`. + El listener local predeterminado para el modo Webhook se vincula a `127.0.0.1:8787`. - Si tu endpoint público es distinto, coloca un proxy inverso delante y apunta `webhookUrl` a la URL pública. - Configura `webhookHost` (por ejemplo, `0.0.0.0`) cuando intencionalmente necesites ingreso externo. + Si tu endpoint público es diferente, coloca un proxy inverso delante y apunta `webhookUrl` a la URL pública. + Configura `webhookHost` (por ejemplo `0.0.0.0`) cuando necesites intencionalmente ingreso externo. - - `channels.telegram.textChunkLimit` tiene como valor predeterminado 4000. - - `channels.telegram.chunkMode="newline"` prioriza los límites de párrafo (líneas en blanco) antes de dividir por longitud. - - `channels.telegram.mediaMaxMb` (predeterminado 100) limita el tamaño de contenido multimedia entrante y saliente de Telegram. - - `channels.telegram.timeoutSeconds` sobrescribe el tiempo de espera del cliente de API de Telegram (si no se establece, se aplica el valor predeterminado de grammY). - - `channels.telegram.pollingStallThresholdMs` tiene como valor predeterminado `120000`; ajústalo entre `30000` y `600000` solo para reinicios falsos positivos por bloqueo del sondeo. - - el historial de contexto de grupo usa `channels.telegram.historyLimit` o `messages.groupChat.historyLimit` (predeterminado 50); `0` lo desactiva. - - el contexto suplementario de respuesta/cita/reenvío se pasa actualmente tal como se recibe. - - las listas de permitidos de Telegram sirven principalmente para controlar quién puede activar el agente, no como un límite completo de redacción del contexto suplementario. - - controles de historial de MD: + - `channels.telegram.textChunkLimit` tiene un valor predeterminado de 4000. + - `channels.telegram.chunkMode="newline"` prefiere límites de párrafo (líneas en blanco) antes de dividir por longitud. + - `channels.telegram.mediaMaxMb` (predeterminado 100) limita el tamaño de medios entrantes y salientes de Telegram. + - `channels.telegram.timeoutSeconds` sobrescribe el tiempo de espera del cliente de la API de Telegram (si no está configurado, se aplica el valor predeterminado de grammY). + - `channels.telegram.pollingStallThresholdMs` tiene como valor predeterminado `120000`; ajústalo entre `30000` y `600000` solo para reinicios falsos positivos por bloqueo del polling. + - el historial del contexto de grupo usa `channels.telegram.historyLimit` o `messages.groupChat.historyLimit` (predeterminado 50); `0` lo desactiva. + - el contexto suplementario de respuesta/cita/reenvío actualmente se pasa tal como se recibe. + - las listas de permitidos de Telegram controlan principalmente quién puede activar el agente, no un límite completo de redacción de contexto suplementario. + - controles del historial de mensajes directos: - `channels.telegram.dmHistoryLimit` - `channels.telegram.dms[""].historyLimit` - - la configuración `channels.telegram.retry` se aplica a los asistentes de envío de Telegram (CLI/tools/actions) para errores recuperables de la API saliente. + - la configuración `channels.telegram.retry` se aplica a los helpers de envío de Telegram (CLI/tools/actions) para errores recuperables de la API saliente. - El destino de envío de CLI puede ser un ID numérico de chat o un nombre de usuario: + El destino de envío de la CLI puede ser un ID numérico de chat o un nombre de usuario: ```bash openclaw message send --channel telegram --target 123456789 --message "hi" openclaw message send --channel telegram --target @name --message "hi" ``` - Los sondeos de Telegram usan `openclaw message poll` y admiten temas de foro: + Los polls de Telegram usan `openclaw message poll` y admiten temas de foro: ```bash openclaw message poll --channel telegram --target 123456789 \ @@ -800,7 +801,7 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \ --poll-duration-seconds 300 --poll-public ``` - Indicadores de sondeo solo para Telegram: + Indicadores de poll solo de Telegram: - `--poll-duration-seconds` (5-600) - `--poll-anonymous` @@ -810,69 +811,69 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \ El envío de Telegram también admite: - `--buttons` para teclados en línea cuando `channels.telegram.capabilities.inlineButtons` lo permite - - `--force-document` para enviar imágenes y GIF salientes como documentos en lugar de cargas comprimidas de foto o multimedia animado + - `--force-document` para enviar imágenes salientes y GIF como documentos en lugar de cargas comprimidas de foto o medios animados - Restricción de acciones: + Control de habilitación de acciones: - - `channels.telegram.actions.sendMessage=false` desactiva los mensajes salientes de Telegram, incluidos los sondeos - - `channels.telegram.actions.poll=false` desactiva la creación de sondeos de Telegram mientras mantiene habilitados los envíos normales + - `channels.telegram.actions.sendMessage=false` desactiva los mensajes salientes de Telegram, incluidos los polls + - `channels.telegram.actions.poll=false` desactiva la creación de polls en Telegram y deja habilitados los envíos normales - - Telegram admite aprobaciones de ejecución en los MD de los aprobadores y puede, opcionalmente, publicar solicitudes de aprobación en el chat o tema de origen. + + Telegram admite aprobaciones de exec en los mensajes directos de los aprobadores y, opcionalmente, puede publicar solicitudes de aprobación en el chat o tema de origen. Ruta de configuración: - `channels.telegram.execApprovals.enabled` - - `channels.telegram.execApprovals.approvers` (opcional; usa como respaldo IDs numéricos de propietarios inferidos desde `allowFrom` y `defaultTo` directo cuando es posible) + - `channels.telegram.execApprovals.approvers` (opcional; recurre a ID numéricos de propietario inferidos de `allowFrom` y `defaultTo` directo cuando es posible) - `channels.telegram.execApprovals.target` (`dm` | `channel` | `both`, predeterminado: `dm`) - `agentFilter`, `sessionFilter` - Los aprobadores deben ser IDs numéricos de usuarios de Telegram. Telegram habilita automáticamente las aprobaciones de ejecución nativas cuando `enabled` no está establecido o es `"auto"` y se puede resolver al menos un aprobador, ya sea desde `execApprovals.approvers` o desde la configuración numérica del propietario de la cuenta (`allowFrom` y `defaultTo` de mensajes directos). Establece `enabled: false` para desactivar explícitamente Telegram como cliente de aprobación nativo. En caso contrario, las solicitudes de aprobación recurren a otras rutas de aprobación configuradas o a la política de respaldo de aprobación de ejecución. + Los aprobadores deben ser ID numéricos de usuarios de Telegram. Telegram habilita automáticamente las aprobaciones nativas de exec cuando `enabled` no está configurado o es `"auto"` y se puede resolver al menos un aprobador, ya sea desde `execApprovals.approvers` o desde la configuración numérica de propietario de la cuenta (`allowFrom` y `defaultTo` de mensaje directo). Configura `enabled: false` para desactivar explícitamente Telegram como cliente nativo de aprobación. En caso contrario, las solicitudes de aprobación recurren a otras rutas de aprobación configuradas o a la política de respaldo de aprobación de exec. - Telegram también renderiza los botones de aprobación compartidos usados por otros canales de chat. El adaptador nativo de Telegram principalmente agrega el enrutamiento de MD del aprobador, la distribución en canal/tema y las sugerencias de escritura antes de la entrega. - Cuando esos botones están presentes, son la UX principal de aprobación; OpenClaw + Telegram también renderiza los botones de aprobación compartidos usados por otros canales de chat. El adaptador nativo de Telegram añade principalmente el enrutamiento a mensajes directos del aprobador, la distribución al canal/tema y las pistas de escritura antes de la entrega. + Cuando esos botones están presentes, son la experiencia principal de aprobación; OpenClaw solo debe incluir un comando manual `/approve` cuando el resultado de la herramienta indique que las aprobaciones por chat no están disponibles o que la aprobación manual es la única vía. Reglas de entrega: - - `target: "dm"` envía solicitudes de aprobación solo a los MD de aprobadores resueltos + - `target: "dm"` envía solicitudes de aprobación solo a los mensajes directos de aprobadores resueltos - `target: "channel"` envía la solicitud de vuelta al chat/tema de Telegram de origen - - `target: "both"` envía a los MD de los aprobadores y al chat/tema de origen + - `target: "both"` envía a los mensajes directos de los aprobadores y al chat/tema de origen Solo los aprobadores resueltos pueden aprobar o denegar. Los no aprobadores no pueden usar `/approve` ni los botones de aprobación de Telegram. - Comportamiento de resolución de aprobaciones: + Comportamiento de resolución de aprobación: - - los IDs con prefijo `plugin:` siempre se resuelven mediante aprobaciones de Plugin. - - otros IDs primero intentan `exec.approval.resolve`. - - si Telegram también está autorizado para aprobaciones de Plugin y el Gateway dice - que la aprobación de ejecución es desconocida/caducada, Telegram reintenta una vez mediante + - Los ID con prefijo `plugin:` siempre se resuelven mediante aprobaciones de Plugin. + - Otros ID prueban primero `exec.approval.resolve`. + - Si Telegram también está autorizado para aprobaciones de Plugin y el gateway dice + que la aprobación de exec es desconocida o ha caducado, Telegram vuelve a intentar una vez mediante `plugin.approval.resolve`. - - las denegaciones/errores reales de aprobación de ejecución no pasan silenciosamente a la resolución + - Las denegaciones o errores reales de aprobación de exec no pasan silenciosamente a la resolución de aprobación de Plugin. - La entrega en canal muestra el texto del comando en el chat, así que habilita `channel` o `both` solo en grupos/temas de confianza. Cuando la solicitud llega a un tema de foro, OpenClaw conserva el tema tanto para la solicitud de aprobación como para el seguimiento posterior a la aprobación. Las aprobaciones de ejecución caducan después de 30 minutos de forma predeterminada. + La entrega en el canal muestra el texto del comando en el chat, así que habilita `channel` o `both` solo en grupos/temas de confianza. Cuando la solicitud llega a un tema de foro, OpenClaw conserva el tema tanto para la solicitud de aprobación como para el seguimiento posterior a la aprobación. Las aprobaciones de exec caducan después de 30 minutos de forma predeterminada. Los botones de aprobación en línea también dependen de que `channels.telegram.capabilities.inlineButtons` permita la superficie de destino (`dm`, `group` o `all`). - Documentación relacionada: [Aprobaciones de ejecución](/es/tools/exec-approvals) + Documentación relacionada: [Aprobaciones de exec](/es/tools/exec-approvals) -## Controles de respuesta de errores +## Controles de respuesta de error -Cuando el agente encuentra un error de entrega o del proveedor, Telegram puede responder con el texto del error o suprimirlo. Dos claves de configuración controlan este comportamiento: +Cuando el agente encuentra un error de entrega o de proveedor, Telegram puede responder con el texto del error o suprimirlo. Dos claves de configuración controlan este comportamiento: -| Clave | Valores | Predeterminado | Descripción | -| ----------------------------------- | ----------------- | -------------- | --------------------------------------------------------------------------------------------------- | -| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` envía un mensaje de error amigable al chat. `silent` suprime por completo las respuestas de error. | -| `channels.telegram.errorCooldownMs` | número (ms) | `60000` | Tiempo mínimo entre respuestas de error al mismo chat. Evita el spam de errores durante interrupciones. | +| Key | Values | Default | Description | +| ----------------------------------- | ----------------- | ------- | ----------------------------------------------------------------------------------------------- | +| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` envía un mensaje de error amigable al chat. `silent` suprime por completo las respuestas de error. | +| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | Tiempo mínimo entre respuestas de error al mismo chat. Evita spam de errores durante interrupciones. | -Se admiten anulaciones por cuenta, por grupo y por tema (la misma herencia que otras claves de configuración de Telegram). +Se admiten anulaciones por cuenta, por grupo y por tema (misma herencia que otras claves de configuración de Telegram). ```json5 { @@ -882,7 +883,7 @@ Se admiten anulaciones por cuenta, por grupo y por tema (la misma herencia que o errorCooldownMs: 120000, groups: { "-1001234567890": { - errorPolicy: "silent", // suprimir errores en este grupo + errorPolicy: "silent", // suprime errores en este grupo }, }, }, @@ -897,18 +898,18 @@ Se admiten anulaciones por cuenta, por grupo y por tema (la misma herencia que o - Si `requireMention=false`, el modo de privacidad de Telegram debe permitir visibilidad completa. - BotFather: `/setprivacy` -> Disable - - luego elimina y vuelve a agregar el bot al grupo - - `openclaw channels status` avisa cuando la configuración espera mensajes de grupo sin mención. - - `openclaw channels status --probe` puede comprobar IDs numéricos explícitos de grupo; el comodín `"*"` no permite comprobación de pertenencia. + - luego quita y vuelve a añadir el bot al grupo + - `openclaw channels status` muestra una advertencia cuando la configuración espera mensajes de grupo sin mención. + - `openclaw channels status --probe` puede comprobar ID numéricos explícitos de grupo; el comodín `"*"` no puede comprobarse por pertenencia. - prueba rápida de sesión: `/activation always`. - - cuando existe `channels.telegram.groups`, el grupo debe figurar en la lista (o incluir `"*"`) + - cuando existe `channels.telegram.groups`, el grupo debe estar listado (o incluir `"*"`) - verifica que el bot pertenezca al grupo - - revisa los registros: `openclaw logs --follow` para ver los motivos de omisión + - revisa los logs: `openclaw logs --follow` para ver los motivos de omisión @@ -916,18 +917,18 @@ Se admiten anulaciones por cuenta, por grupo y por tema (la misma herencia que o - autoriza tu identidad de remitente (vinculación y/o `allowFrom` numérico) - la autorización de comandos sigue aplicándose incluso cuando la política de grupo es `open` - - `setMyCommands failed` con `BOT_COMMANDS_TOO_MUCH` significa que el menú nativo tiene demasiadas entradas; reduce los comandos de Plugin/Skills/personalizados o desactiva los menús nativos + - `setMyCommands failed` con `BOT_COMMANDS_TOO_MUCH` significa que el menú nativo tiene demasiadas entradas; reduce los comandos personalizados/de Plugin/de Skills o desactiva los menús nativos - `setMyCommands failed` con errores de red/fetch normalmente indica problemas de alcance DNS/HTTPS hacia `api.telegram.org` - + - Node 22+ + fetch/proxy personalizado puede activar un comportamiento de cancelación inmediata si los tipos de AbortSignal no coinciden. - - Algunos hosts resuelven `api.telegram.org` primero a IPv6; una salida IPv6 defectuosa puede causar fallos intermitentes de la API de Telegram. - - Si los registros incluyen `TypeError: fetch failed` o `Network request for 'getUpdates' failed!`, OpenClaw ahora los reintenta como errores de red recuperables. - - Si los registros incluyen `Polling stall detected`, OpenClaw reinicia el sondeo y reconstruye el transporte de Telegram después de 120 segundos sin actividad completada de sondeo largo por defecto. - - Aumenta `channels.telegram.pollingStallThresholdMs` solo cuando las llamadas `getUpdates` de larga duración son correctas pero tu host sigue reportando reinicios falsos por bloqueo del sondeo. Los bloqueos persistentes suelen indicar problemas de proxy, DNS, IPv6 o salida TLS entre el host y `api.telegram.org`. + - Algunos hosts resuelven `api.telegram.org` primero a IPv6; una salida IPv6 defectuosa puede causar fallos intermitentes en la API de Telegram. + - Si los logs incluyen `TypeError: fetch failed` o `Network request for 'getUpdates' failed!`, OpenClaw ahora los reintenta como errores de red recuperables. + - Si los logs incluyen `Polling stall detected`, OpenClaw reinicia el polling y reconstruye el transporte de Telegram tras 120 segundos sin actividad completada de long polling por defecto. + - Aumenta `channels.telegram.pollingStallThresholdMs` solo cuando las llamadas de larga duración a `getUpdates` sean sanas pero tu host siga reportando reinicios falsos por bloqueo del polling. Los bloqueos persistentes normalmente apuntan a problemas de proxy, DNS, IPv6 o salida TLS entre el host y `api.telegram.org`. - En hosts VPS con salida directa/TLS inestable, enruta las llamadas de la API de Telegram mediante `channels.telegram.proxy`: ```yaml @@ -937,7 +938,7 @@ channels: ``` - Node 22+ usa por defecto `autoSelectFamily=true` (excepto WSL2) y `dnsResultOrder=ipv4first`. - - Si tu host es WSL2 o explícitamente funciona mejor con comportamiento solo IPv4, fuerza la selección de familia: + - Si tu host es WSL2 o funciona claramente mejor con comportamiento solo IPv4, fuerza la selección de familia: ```yaml channels: @@ -947,10 +948,10 @@ channels: ``` - Las respuestas del rango de benchmark RFC 2544 (`198.18.0.0/15`) ya están permitidas - de forma predeterminada para descargas de contenido multimedia de Telegram. Si una IP falsa de confianza o un - proxy transparente reescribe `api.telegram.org` a alguna otra - dirección privada/interna/de uso especial durante las descargas de multimedia, puedes optar - por la omisión solo para Telegram: + de forma predeterminada para descargas de medios de Telegram. Si una IP falsa de confianza o un + proxy transparente reescribe `api.telegram.org` a otra + dirección privada/interna/de uso especial durante las descargas de medios, puedes activar + la omisión solo para Telegram: ```yaml channels: @@ -959,24 +960,25 @@ channels: dangerouslyAllowPrivateNetwork: true ``` - - La misma activación opcional también está disponible por cuenta en + - La misma activación opcional está disponible por cuenta en `channels.telegram.accounts..network.dangerouslyAllowPrivateNetwork`. - - Si tu proxy resuelve hosts multimedia de Telegram a `198.18.x.x`, deja primero - desactivada la opción peligrosa. Telegram multimedia ya permite el rango benchmark RFC 2544 + - Si tu proxy resuelve hosts de medios de Telegram en `198.18.x.x`, deja primero + desactivada la opción peligrosa. Los medios de Telegram ya permiten el rango de benchmark RFC 2544 de forma predeterminada. - `channels.telegram.network.dangerouslyAllowPrivateNetwork` debilita las protecciones - SSRF de multimedia de Telegram. Úsalo solo en entornos de proxy de confianza controlados por operadores, - como enrutamiento fake-IP de Clash, Mihomo o Surge, cuando - sintetizan respuestas privadas o de uso especial fuera del rango benchmark RFC 2544. Déjalo desactivado para el acceso normal a Telegram por internet pública. + `channels.telegram.network.dangerouslyAllowPrivateNetwork` debilita las protecciones SSRF de medios + de Telegram. Úsalo solo para entornos de proxy de confianza controlados por el operador + como Clash, Mihomo o enrutamiento fake-IP de Surge cuando + sintetizan respuestas privadas o de uso especial fuera del rango + de benchmark RFC 2544. Déjalo desactivado para acceso normal de Telegram por internet pública. - - Anulaciones por variable de entorno (temporales): + - Anulaciones por entorno (temporales): - `OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1` - `OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1` - `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first` - - Valida las respuestas DNS: + - Valida respuestas DNS: ```bash dig +short api.telegram.org A @@ -992,80 +994,81 @@ Más ayuda: [Solución de problemas del canal](/es/channels/troubleshooting). Referencia principal: -- `channels.telegram.enabled`: habilita/deshabilita el inicio del canal. +- `channels.telegram.enabled`: habilita o deshabilita el inicio del canal. - `channels.telegram.botToken`: token del bot (BotFather). -- `channels.telegram.tokenFile`: lee el token desde la ruta de un archivo regular. Los enlaces simbólicos se rechazan. +- `channels.telegram.tokenFile`: lee el token desde una ruta de archivo regular. Se rechazan los enlaces simbólicos. - `channels.telegram.dmPolicy`: `pairing | allowlist | open | disabled` (predeterminado: pairing). -- `channels.telegram.allowFrom`: lista de permitidos de MD (IDs numéricos de usuarios de Telegram). `allowlist` requiere al menos un ID de remitente. `open` requiere `"*"`. `openclaw doctor --fix` puede resolver entradas heredadas `@username` a IDs y puede recuperar entradas de lista de permitidos desde archivos del almacén de vinculación en flujos de migración de lista de permitidos. -- `channels.telegram.actions.poll`: habilita o deshabilita la creación de sondeos de Telegram (predeterminado: habilitado; sigue requiriendo `sendMessage`). -- `channels.telegram.defaultTo`: destino predeterminado de Telegram usado por CLI `--deliver` cuando no se proporciona `--reply-to` explícito. +- `channels.telegram.allowFrom`: lista de permitidos de mensajes directos (ID numéricos de usuario de Telegram). `allowlist` requiere al menos un ID de remitente. `open` requiere `"*"`. `openclaw doctor --fix` puede resolver entradas heredadas `@username` a ID y puede recuperar entradas de lista de permitidos desde archivos del almacén de vinculación en flujos de migración de listas de permitidos. +- `channels.telegram.actions.poll`: habilita o deshabilita la creación de polls de Telegram (predeterminado: habilitado; sigue requiriendo `sendMessage`). +- `channels.telegram.defaultTo`: destino predeterminado de Telegram usado por la CLI `--deliver` cuando no se proporciona un `--reply-to` explícito. - `channels.telegram.groupPolicy`: `open | allowlist | disabled` (predeterminado: allowlist). -- `channels.telegram.groupAllowFrom`: lista de permitidos de remitentes de grupo (IDs numéricos de usuarios de Telegram). `openclaw doctor --fix` puede resolver entradas heredadas `@username` a IDs. Las entradas no numéricas se ignoran en el momento de la autorización. La autorización de grupo no usa el respaldo del almacén de vinculación de MD (`2026.2.25+`). +- `channels.telegram.groupAllowFrom`: lista de permitidos de remitentes en grupos (ID numéricos de usuario de Telegram). `openclaw doctor --fix` puede resolver entradas heredadas `@username` a ID. Las entradas no numéricas se ignoran en el momento de la autenticación. La autenticación de grupo no usa el respaldo del almacén de vinculación de mensajes directos (`2026.2.25+`). - Precedencia de múltiples cuentas: - - Cuando se configuran dos o más IDs de cuenta, establece `channels.telegram.defaultAccount` (o incluye `channels.telegram.accounts.default`) para hacer explícito el enrutamiento predeterminado. - - Si no se establece ninguno, OpenClaw usa como respaldo el primer ID de cuenta normalizado y `openclaw doctor` muestra una advertencia. + - Cuando se configuran dos o más ID de cuenta, establece `channels.telegram.defaultAccount` (o incluye `channels.telegram.accounts.default`) para que el enrutamiento predeterminado sea explícito. + - Si no se establece ninguno, OpenClaw recurre al primer ID de cuenta normalizado y `openclaw doctor` muestra una advertencia. - `channels.telegram.accounts.default.allowFrom` y `channels.telegram.accounts.default.groupAllowFrom` se aplican solo a la cuenta `default`. - - Las cuentas con nombre heredan `channels.telegram.allowFrom` y `channels.telegram.groupAllowFrom` cuando los valores a nivel de cuenta no están establecidos. + - Las cuentas con nombre heredan `channels.telegram.allowFrom` y `channels.telegram.groupAllowFrom` cuando los valores a nivel de cuenta no están configurados. - Las cuentas con nombre no heredan `channels.telegram.accounts.default.allowFrom` / `groupAllowFrom`. - `channels.telegram.groups`: valores predeterminados por grupo + lista de permitidos (usa `"*"` para valores predeterminados globales). - `channels.telegram.groups..groupPolicy`: anulación por grupo para groupPolicy (`open | allowlist | disabled`). - - `channels.telegram.groups..requireMention`: valor predeterminado de restricción por mención. - - `channels.telegram.groups..skills`: filtro de Skills (omitir = todas las Skills, vacío = ninguna). - - `channels.telegram.groups..allowFrom`: anulación por grupo para la lista de permitidos de remitentes. + - `channels.telegram.groups..requireMention`: valor predeterminado de control por mención. + - `channels.telegram.groups..skills`: filtro de Skills (omitir = todos los Skills, vacío = ninguno). + - `channels.telegram.groups..allowFrom`: anulación por grupo de la lista de permitidos de remitentes. - `channels.telegram.groups..systemPrompt`: prompt del sistema adicional para el grupo. - - `channels.telegram.groups..enabled`: desactiva el grupo cuando es `false`. - - `channels.telegram.groups..topics..*`: anulaciones por tema (campos de grupo + `agentId` solo para tema). - - `channels.telegram.groups..topics..agentId`: enruta este tema a un agente específico (sobrescribe el enrutamiento a nivel de grupo y por bindings). + - `channels.telegram.groups..enabled`: deshabilita el grupo cuando es `false`. + - `channels.telegram.groups..topics..*`: anulaciones por tema (campos de grupo + `agentId` exclusivo del tema). + - `channels.telegram.groups..topics..agentId`: enruta este tema a un agente específico (sobrescribe el enrutamiento a nivel de grupo y de binding). - `channels.telegram.groups..topics..groupPolicy`: anulación por tema para groupPolicy (`open | allowlist | disabled`). -- `channels.telegram.groups..topics..requireMention`: anulación por tema de la restricción por mención. -- `bindings[]` de nivel superior con `type: "acp"` e ID canónico de tema `chatId:topic:topicId` en `match.peer.id`: campos de vinculación persistente de tema ACP (consulta [Agentes ACP](/es/tools/acp-agents#channel-specific-settings)). -- `channels.telegram.direct..topics..agentId`: enruta temas de MD a un agente específico (mismo comportamiento que los temas de foro). -- `channels.telegram.execApprovals.enabled`: habilita Telegram como cliente de aprobación de ejecución basado en chat para esta cuenta. -- `channels.telegram.execApprovals.approvers`: IDs de usuarios de Telegram autorizados para aprobar o denegar solicitudes de ejecución. Opcional cuando `channels.telegram.allowFrom` o un `channels.telegram.defaultTo` directo ya identifica al propietario. +- `channels.telegram.groups..topics..requireMention`: anulación por tema del control por mención. +- `bindings[]` de nivel superior con `type: "acp"` e ID canónico de tema `chatId:topic:topicId` en `match.peer.id`: campos persistentes de vinculación de temas ACP (consulta [Agentes ACP](/es/tools/acp-agents#channel-specific-settings)). +- `channels.telegram.direct..topics..agentId`: enruta temas de mensajes directos a un agente específico (mismo comportamiento que los temas de foro). +- `channels.telegram.execApprovals.enabled`: habilita Telegram como cliente de aprobación de exec basado en chat para esta cuenta. +- `channels.telegram.execApprovals.approvers`: ID de usuario de Telegram autorizados para aprobar o denegar solicitudes de exec. Opcional cuando `channels.telegram.allowFrom` o un `channels.telegram.defaultTo` directo ya identifica al propietario. - `channels.telegram.execApprovals.target`: `dm | channel | both` (predeterminado: `dm`). `channel` y `both` conservan el tema de Telegram de origen cuando existe. - `channels.telegram.execApprovals.agentFilter`: filtro opcional de ID de agente para solicitudes de aprobación reenviadas. - `channels.telegram.execApprovals.sessionFilter`: filtro opcional de clave de sesión (subcadena o regex) para solicitudes de aprobación reenviadas. -- `channels.telegram.accounts..execApprovals`: anulación por cuenta para el enrutamiento de aprobación de ejecución de Telegram y la autorización de aprobadores. +- `channels.telegram.accounts..execApprovals`: anulación por cuenta para el enrutamiento de aprobación de exec en Telegram y la autorización del aprobador. - `channels.telegram.capabilities.inlineButtons`: `off | dm | group | all | allowlist` (predeterminado: allowlist). - `channels.telegram.accounts..capabilities.inlineButtons`: anulación por cuenta. -- `channels.telegram.commands.nativeSkills`: habilita/deshabilita los comandos nativos de Skills en Telegram. +- `channels.telegram.commands.nativeSkills`: habilita o deshabilita los comandos nativos de Skills en Telegram. - `channels.telegram.replyToMode`: `off | first | all` (predeterminado: `off`). - `channels.telegram.textChunkLimit`: tamaño de fragmento saliente (caracteres). - `channels.telegram.chunkMode`: `length` (predeterminado) o `newline` para dividir en líneas en blanco (límites de párrafo) antes de fragmentar por longitud. - `channels.telegram.linkPreview`: alterna las vistas previas de enlaces para mensajes salientes (predeterminado: true). - `channels.telegram.streaming`: `off | partial | block | progress` (vista previa de transmisión en vivo; predeterminado: `partial`; `progress` se asigna a `partial`; `block` es compatibilidad heredada con el modo de vista previa). La transmisión de vista previa de Telegram usa un único mensaje de vista previa que se edita en el lugar. -- `channels.telegram.mediaMaxMb`: límite de contenido multimedia entrante/saliente de Telegram (MB, predeterminado: 100). -- `channels.telegram.retry`: política de reintento para asistentes de envío de Telegram (CLI/tools/actions) en errores recuperables de la API saliente (intentos, minDelayMs, maxDelayMs, jitter). -- `channels.telegram.network.autoSelectFamily`: sobrescribe Node autoSelectFamily (true=habilitar, false=deshabilitar). Está habilitado por defecto en Node 22+, y en WSL2 está deshabilitado por defecto. -- `channels.telegram.network.dnsResultOrder`: sobrescribe el orden de resultados DNS (`ipv4first` o `verbatim`). El valor predeterminado es `ipv4first` en Node 22+. -- `channels.telegram.network.dangerouslyAllowPrivateNetwork`: activación peligrosa para entornos de fake-IP o proxy transparente de confianza en los que las descargas multimedia de Telegram resuelven `api.telegram.org` a direcciones privadas/internas/de uso especial fuera del permiso predeterminado del rango benchmark RFC 2544. -- `channels.telegram.proxy`: URL de proxy para llamadas a la API de Bot (SOCKS/HTTP). +- `channels.telegram.streaming.preview.toolProgress`: reutiliza el mensaje de vista previa en vivo para actualizaciones de herramienta/progreso cuando la transmisión de vista previa está activa (predeterminado: `true`). Configúralo como `false` para mantener mensajes separados de herramienta/progreso. +- `channels.telegram.mediaMaxMb`: límite de medios entrantes/salientes de Telegram (MB, predeterminado: 100). +- `channels.telegram.retry`: política de reintento para helpers de envío de Telegram (CLI/tools/actions) ante errores recuperables de la API saliente (intentos, minDelayMs, maxDelayMs, jitter). +- `channels.telegram.network.autoSelectFamily`: sobrescribe autoSelectFamily de Node (true=habilitar, false=deshabilitar). Predeterminado como habilitado en Node 22+, con WSL2 predeterminado como deshabilitado. +- `channels.telegram.network.dnsResultOrder`: sobrescribe el orden de resultados DNS (`ipv4first` o `verbatim`). Predeterminado como `ipv4first` en Node 22+. +- `channels.telegram.network.dangerouslyAllowPrivateNetwork`: activación peligrosa para entornos de fake-IP o proxy transparente de confianza donde las descargas de medios de Telegram resuelven `api.telegram.org` a direcciones privadas/internas/de uso especial fuera de la concesión predeterminada del rango benchmark RFC 2544. +- `channels.telegram.proxy`: URL de proxy para llamadas a la API de bots (SOCKS/HTTP). - `channels.telegram.webhookUrl`: habilita el modo Webhook (requiere `channels.telegram.webhookSecret`). -- `channels.telegram.webhookSecret`: secreto de Webhook (obligatorio cuando se establece webhookUrl). -- `channels.telegram.webhookPath`: ruta local de Webhook (predeterminado `/telegram-webhook`). +- `channels.telegram.webhookSecret`: secreto de Webhook (obligatorio cuando se configura webhookUrl). +- `channels.telegram.webhookPath`: ruta local de Webhook (predeterminada `/telegram-webhook`). - `channels.telegram.webhookHost`: host local de enlace de Webhook (predeterminado `127.0.0.1`). - `channels.telegram.webhookPort`: puerto local de enlace de Webhook (predeterminado `8787`). -- `channels.telegram.actions.reactions`: restringe las reacciones de herramientas de Telegram. -- `channels.telegram.actions.sendMessage`: restringe los envíos de mensajes de herramientas de Telegram. -- `channels.telegram.actions.deleteMessage`: restringe las eliminaciones de mensajes de herramientas de Telegram. -- `channels.telegram.actions.sticker`: restringe las acciones de stickers de Telegram — enviar y buscar (predeterminado: false). -- `channels.telegram.reactionNotifications`: `off | own | all` — controla qué reacciones activan eventos del sistema (predeterminado: `own` cuando no está establecido). -- `channels.telegram.reactionLevel`: `off | ack | minimal | extensive` — controla la capacidad de reacción del agente (predeterminado: `minimal` cuando no está establecido). -- `channels.telegram.errorPolicy`: `reply | silent` — controla el comportamiento de respuesta de errores (predeterminado: `reply`). Se admiten anulaciones por cuenta/grupo/tema. -- `channels.telegram.errorCooldownMs`: ms mínimos entre respuestas de error al mismo chat (predeterminado: `60000`). Evita el spam de errores durante interrupciones. +- `channels.telegram.actions.reactions`: controla las reacciones de herramientas de Telegram. +- `channels.telegram.actions.sendMessage`: controla los envíos de mensajes de herramientas de Telegram. +- `channels.telegram.actions.deleteMessage`: controla la eliminación de mensajes de herramientas de Telegram. +- `channels.telegram.actions.sticker`: controla las acciones de stickers de Telegram — enviar y buscar (predeterminado: false). +- `channels.telegram.reactionNotifications`: `off | own | all` — controla qué reacciones activan eventos del sistema (predeterminado: `own` cuando no se configura). +- `channels.telegram.reactionLevel`: `off | ack | minimal | extensive` — controla la capacidad de reacción del agente (predeterminado: `minimal` cuando no se configura). +- `channels.telegram.errorPolicy`: `reply | silent` — controla el comportamiento de respuesta ante errores (predeterminado: `reply`). Se admiten anulaciones por cuenta/grupo/tema. +- `channels.telegram.errorCooldownMs`: ms mínimos entre respuestas de error al mismo chat (predeterminado: `60000`). Evita spam de errores durante interrupciones. - [Referencia de configuración - Telegram](/es/gateway/configuration-reference#telegram) Campos específicos de Telegram de alta señal: -- inicio/autenticación: `enabled`, `botToken`, `tokenFile`, `accounts.*` (`tokenFile` debe apuntar a un archivo regular; los enlaces simbólicos se rechazan) +- inicio/autenticación: `enabled`, `botToken`, `tokenFile`, `accounts.*` (`tokenFile` debe apuntar a un archivo regular; se rechazan enlaces simbólicos) - control de acceso: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, `bindings[]` de nivel superior (`type: "acp"`) -- aprobaciones de ejecución: `execApprovals`, `accounts.*.execApprovals` -- comandos/menú: `commands.native`, `commands.nativeSkills`, `customCommands` +- aprobaciones de exec: `execApprovals`, `accounts.*.execApprovals` +- comando/menú: `commands.native`, `commands.nativeSkills`, `customCommands` - hilos/respuestas: `replyToMode` -- transmisión: `streaming` (vista previa), `blockStreaming` +- transmisión: `streaming` (vista previa), `streaming.preview.toolProgress`, `blockStreaming` - formato/entrega: `textChunkLimit`, `chunkMode`, `linkPreview`, `responsePrefix` -- multimedia/red: `mediaMaxMb`, `timeoutSeconds`, `pollingStallThresholdMs`, `retry`, `network.autoSelectFamily`, `network.dangerouslyAllowPrivateNetwork`, `proxy` +- medios/red: `mediaMaxMb`, `timeoutSeconds`, `pollingStallThresholdMs`, `retry`, `network.autoSelectFamily`, `network.dangerouslyAllowPrivateNetwork`, `proxy` - Webhook: `webhookUrl`, `webhookSecret`, `webhookPath`, `webhookHost` - acciones/capacidades: `capabilities.inlineButtons`, `actions.sendMessage|editMessage|deleteMessage|reactions|sticker` - reacciones: `reactionNotifications`, `reactionLevel` @@ -1078,5 +1081,5 @@ Campos específicos de Telegram de alta señal: - [Grupos](/es/channels/groups) - [Seguridad](/es/gateway/security) - [Enrutamiento de canales](/es/channels/channel-routing) -- [Enrutamiento de múltiples agentes](/es/concepts/multi-agent) +- [Enrutamiento multiagente](/es/concepts/multi-agent) - [Solución de problemas](/es/channels/troubleshooting) diff --git a/docs/es/gateway/multiple-gateways.md b/docs/es/gateway/multiple-gateways.md index e66a698d9..bcc960b0c 100644 --- a/docs/es/gateway/multiple-gateways.md +++ b/docs/es/gateway/multiple-gateways.md @@ -1,108 +1,137 @@ --- read_when: - Ejecutar más de un Gateway en la misma máquina - - Necesitas configuración/estado/puertos aislados por Gateway -summary: Ejecuta varios Gateways de OpenClaw en un mismo host (aislamiento, puertos y perfiles) -title: Varios Gateways + - Necesita configuración/estado/puertos aislados por Gateway +summary: Ejecutar múltiples Gateways de OpenClaw en un solo host (aislamiento, puertos y perfiles) +title: Múltiples Gateways x-i18n: - generated_at: "2026-04-05T12:42:09Z" + generated_at: "2026-04-21T17:45:43Z" model: gpt-5.4 provider: openai - source_hash: 061f204bf56b28c6bd0e2c9aee6c561a8a162ca219060117fea4d3a007f01899 + source_hash: 8c3fcb921bc6596040e9249467964bd9dcd40ea7c16e958bb378247b0f994a7b source_path: gateway/multiple-gateways.md workflow: 15 --- -# Varios Gateways (mismo host) +# Múltiples Gateways (mismo host) -La mayoría de las configuraciones deberían usar un solo Gateway porque un único Gateway puede gestionar múltiples conexiones de mensajería y agentes. Si necesitas un aislamiento o redundancia más fuertes (por ejemplo, un bot de rescate), ejecuta Gateways separados con perfiles/puertos aislados. +La mayoría de las configuraciones deberían usar un solo Gateway porque un único Gateway puede gestionar múltiples conexiones de mensajería y agentes. Si necesita un aislamiento o redundancia más sólidos (por ejemplo, un bot de rescate), ejecute Gateways separados con perfiles y puertos aislados. -## Lista de comprobación de aislamiento (obligatoria) +## Lista de verificación de aislamiento (obligatoria) - `OPENCLAW_CONFIG_PATH` — archivo de configuración por instancia - `OPENCLAW_STATE_DIR` — sesiones, credenciales y cachés por instancia -- `agents.defaults.workspace` — raíz del espacio de trabajo por instancia +- `agents.defaults.workspace` — raíz de espacio de trabajo por instancia - `gateway.port` (o `--port`) — único por instancia -- Los puertos derivados (browser/canvas) no deben solaparse +- Los puertos derivados (browser/canvas) no deben superponerse -Si estos se comparten, tendrás conflictos de configuración y de puertos. +Si estos se comparten, tendrá condiciones de carrera en la configuración y conflictos de puertos. -## Recomendado: perfiles (`--profile`) +## Recomendado: use el perfil predeterminado para principal y un perfil con nombre para rescate -Los perfiles delimitan automáticamente `OPENCLAW_STATE_DIR` + `OPENCLAW_CONFIG_PATH` y añaden un sufijo a los nombres de los servicios. +Los perfiles aplican automáticamente alcance a `OPENCLAW_STATE_DIR` + `OPENCLAW_CONFIG_PATH` y agregan sufijos a los nombres de servicio. Para la mayoría de las configuraciones de bot de rescate, mantenga el bot principal en el perfil predeterminado y asigne solo al bot de rescate un perfil con nombre como `rescue`. ```bash -# main -openclaw --profile main setup -openclaw --profile main gateway --port 18789 +# principal (perfil predeterminado) +openclaw setup +openclaw gateway --port 18789 -# rescue +# rescate openclaw --profile rescue setup openclaw --profile rescue gateway --port 19001 ``` -Servicios por perfil: +Servicios: ```bash -openclaw --profile main gateway install +openclaw gateway install openclaw --profile rescue gateway install ``` +Si quiere que ambos Gateways usen perfiles con nombre, eso también funciona, pero no es obligatorio. + ## Guía del bot de rescate -Ejecuta un segundo Gateway en el mismo host con su propio: +Configuración recomendada: -- perfil/configuración -- directorio de estado -- espacio de trabajo -- puerto base (más puertos derivados) +- mantenga el bot principal en el perfil predeterminado +- ejecute el bot de rescate con `--profile rescue` +- use un bot de Telegram completamente independiente para la cuenta de rescate +- mantenga el bot de rescate en un puerto base diferente, como `19001` -Esto mantiene el bot de rescate aislado del bot principal para que pueda depurar o aplicar cambios de configuración si el bot principal está caído. +Esto mantiene el bot de rescate aislado del bot principal para que pueda depurar o aplicar cambios de configuración si el bot principal deja de funcionar. Deje al menos 20 puertos entre los puertos base para que los puertos derivados de browser/canvas/CDP nunca colisionen. -Espaciado de puertos: deja al menos 20 puertos entre puertos base para que los puertos derivados de browser/canvas/CDP nunca colisionen. +### Canal/cuenta de rescate recomendados -### Cómo instalarlo (bot de rescate) +Para la mayoría de las configuraciones, use un bot de Telegram completamente independiente para el perfil de rescate. + +Por qué Telegram: + +- fácil de mantener solo para operadores +- token e identidad del bot separados +- independiente de la instalación del canal/aplicación del bot principal +- ruta de recuperación simple basada en DM cuando el bot principal no funciona + +La parte importante es la independencia total: cuenta de bot separada, credenciales separadas, perfil de OpenClaw separado, espacio de trabajo separado y puerto separado. + +### Flujo de instalación recomendado + +Use esto como configuración predeterminada a menos que tenga una razón de peso para hacer otra cosa: ```bash -# Main bot (existing or fresh, without --profile param) -# Runs on port 18789 + Chrome CDC/Canvas/... Ports +# Bot principal (perfil predeterminado, puerto 18789) openclaw onboard openclaw gateway install -# Rescue bot (isolated profile + ports) +# Bot de rescate (bot de Telegram separado, perfil separado, puerto 19001) openclaw --profile rescue onboard -# Notes: -# - workspace name will be postfixed with -rescue per default -# - Port should be at least 18789 + 20 Ports, -# better choose completely different base port, like 19789, -# - rest of the onboarding is the same as normal - -# To install the service (if not happened automatically during setup) openclaw --profile rescue gateway install ``` +Durante `openclaw --profile rescue onboard`: + +- use el token del bot de Telegram separado +- mantenga el perfil `rescue` +- use un puerto base al menos 20 superior al del bot principal +- acepte el espacio de trabajo de rescate predeterminado, a menos que ya gestione uno usted mismo + +Si el onboarding ya instaló el servicio de rescate por usted, el `gateway install` final no es necesario. + +### Qué cambia el onboarding + +`openclaw --profile rescue onboard` usa el flujo de onboarding normal, pero escribe todo en un perfil separado. + +En la práctica, eso significa que el bot de rescate obtiene su propio: + +- archivo de configuración +- directorio de estado +- espacio de trabajo (de forma predeterminada `~/.openclaw/workspace-rescue`) +- nombre de servicio administrado + +Por lo demás, las indicaciones son las mismas que en el onboarding normal. + ## Asignación de puertos (derivados) Puerto base = `gateway.port` (o `OPENCLAW_GATEWAY_PORT` / `--port`). -- puerto del servicio de control del navegador = base + 2 (solo loopback) +- puerto del servicio de control del browser = base + 2 (solo loopback) - el host de canvas se sirve en el servidor HTTP del Gateway (mismo puerto que `gateway.port`) -- Los puertos CDP del perfil del navegador se asignan automáticamente desde `browser.controlPort + 9 .. + 108` +- los puertos CDP del perfil de browser se asignan automáticamente desde `browser.controlPort + 9 .. + 108` -Si sobrescribes cualquiera de estos en la configuración o en variables de entorno, debes mantenerlos únicos por instancia. +Si sustituye cualquiera de estos en la configuración o el entorno, debe mantenerlos únicos por instancia. -## Notas sobre browser/CDP (error habitual) +## Notas sobre browser/CDP (error común) -- **No** fijes `browser.cdpUrl` a los mismos valores en varias instancias. -- Cada instancia necesita su propio puerto de control del navegador y su propio rango de CDP (derivado de su puerto de gateway). -- Si necesitas puertos CDP explícitos, establece `browser.profiles..cdpPort` por instancia. -- Chrome remoto: usa `browser.profiles..cdpUrl` (por perfil y por instancia). +- **No** fije `browser.cdpUrl` a los mismos valores en múltiples instancias. +- Cada instancia necesita su propio puerto de control de browser y rango de CDP (derivado de su puerto de gateway). +- Si necesita puertos CDP explícitos, configure `browser.profiles..cdpPort` por instancia. +- Chrome remoto: use `browser.profiles..cdpUrl` (por perfil, por instancia). ## Ejemplo manual con variables de entorno ```bash OPENCLAW_CONFIG_PATH=~/.openclaw/main.json \ -OPENCLAW_STATE_DIR=~/.openclaw-main \ +OPENCLAW_STATE_DIR=~/.openclaw \ openclaw gateway --port 18789 OPENCLAW_CONFIG_PATH=~/.openclaw/rescue.json \ @@ -110,18 +139,18 @@ OPENCLAW_STATE_DIR=~/.openclaw-rescue \ openclaw gateway --port 19001 ``` -## Comprobaciones rápidas +## Verificaciones rápidas ```bash -openclaw --profile main gateway status --deep +openclaw gateway status --deep openclaw --profile rescue gateway status --deep openclaw --profile rescue gateway probe -openclaw --profile main status +openclaw status openclaw --profile rescue status openclaw --profile rescue browser status ``` Interpretación: -- `gateway status --deep` ayuda a detectar servicios obsoletos de launchd/systemd/schtasks de instalaciones anteriores. -- El texto de advertencia de `gateway probe`, como `multiple reachable gateways detected`, solo es esperable cuando ejecutas intencionadamente más de un gateway aislado. +- `gateway status --deep` ayuda a detectar servicios launchd/systemd/schtasks obsoletos de instalaciones anteriores. +- El texto de advertencia de `gateway probe`, como `multiple reachable gateways detected`, es esperable solo cuando ejecuta intencionalmente más de un gateway aislado. diff --git a/docs/es/tools/slash-commands.md b/docs/es/tools/slash-commands.md index 635b0afc3..30341f792 100644 --- a/docs/es/tools/slash-commands.md +++ b/docs/es/tools/slash-commands.md @@ -1,36 +1,36 @@ --- read_when: - - Usar o configurar comandos de chat - - Depurar el enrutamiento de comandos o los permisos -summary: 'Comandos slash: texto frente a nativo, configuración y comandos compatibles' -title: Comandos slash + - Uso o configuración de comandos de chat + - Depuración del enrutamiento de comandos o de los permisos +summary: 'Comandos de barra: texto vs. nativos, configuración y comandos compatibles' +title: Comandos de barra x-i18n: - generated_at: "2026-04-21T13:38:38Z" + generated_at: "2026-04-21T17:45:42Z" model: gpt-5.4 provider: openai - source_hash: d90ddee54af7c05b7fdf486590561084581d750e42cd14674d43bbdc0984df5d + source_hash: 26923608329ba2aeece2d4bc8edfa40ae86e03719a9f590f26ff79f57d97521d source_path: tools/slash-commands.md workflow: 15 --- -# Comandos slash +# Comandos de barra -Los comandos son gestionados por Gateway. La mayoría de los comandos deben enviarse como un mensaje **independiente** que empiece con `/`. +Los comandos son gestionados por el Gateway. La mayoría de los comandos deben enviarse como un mensaje **independiente** que comience con `/`. El comando de chat bash solo para host usa `! ` (con `/bash ` como alias). Hay dos sistemas relacionados: -- **Comandos**: mensajes independientes `/...`. +- **Comandos**: mensajes `/...` independientes. - **Directivas**: `/think`, `/fast`, `/verbose`, `/trace`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`. - Las directivas se eliminan del mensaje antes de que el modelo lo vea. - - En mensajes de chat normales (no solo de directivas), se tratan como “sugerencias en línea” y **no** conservan la configuración de la sesión. - - En mensajes solo de directivas (el mensaje contiene únicamente directivas), se conservan en la sesión y responden con un acuse. - - Las directivas solo se aplican a **remitentes autorizados**. Si `commands.allowFrom` está configurado, es la única - lista de permitidos usada; en caso contrario, la autorización proviene de las listas de permitidos/emparejamiento del canal más `commands.useAccessGroups`. + - En mensajes de chat normales (no solo de directivas), se tratan como “indicaciones en línea” y **no** conservan la configuración de la sesión. + - En mensajes que solo contienen directivas (el mensaje contiene únicamente directivas), se conservan en la sesión y responden con una confirmación. + - Las directivas solo se aplican para **remitentes autorizados**. Si `commands.allowFrom` está configurado, es la única + lista de permitidos utilizada; de lo contrario, la autorización proviene de las listas de permitidos/emparejamiento del canal más `commands.useAccessGroups`. Los remitentes no autorizados verán las directivas tratadas como texto sin formato. -También hay algunos **atajos en línea** (solo para remitentes permitidos/autorizados): `/help`, `/commands`, `/status`, `/whoami` (`/id`). -Se ejecutan de inmediato, se eliminan antes de que el modelo vea el mensaje y el texto restante sigue por el flujo normal. +También hay algunos **atajos en línea** (solo remitentes incluidos en la lista de permitidos/autorizados): `/help`, `/commands`, `/status`, `/whoami` (`/id`). +Se ejecutan de inmediato, se eliminan antes de que el modelo vea el mensaje, y el texto restante continúa por el flujo normal. ## Configuración @@ -59,92 +59,93 @@ Se ejecutan de inmediato, se eliminan antes de que el modelo vea el mensaje y el } ``` -- `commands.text` (predeterminado `true`) habilita el análisis de `/...` en mensajes de chat. - - En superficies sin comandos nativos (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), los comandos de texto siguen funcionando aunque lo configures en `false`. -- `commands.native` (predeterminado `"auto"`) registra comandos nativos. - - Automático: activado para Discord/Telegram; desactivado para Slack (hasta que agregues comandos slash); ignorado para proveedores sin compatibilidad nativa. - - Configura `channels.discord.commands.native`, `channels.telegram.commands.native` o `channels.slack.commands.native` para sustituirlo por proveedor (booleano o `"auto"`). - - `false` borra en el inicio los comandos registrados previamente en Discord/Telegram. Los comandos de Slack se gestionan en la aplicación de Slack y no se eliminan automáticamente. -- `commands.nativeSkills` (predeterminado `"auto"`) registra comandos de **Skills** de forma nativa cuando se admite. - - Automático: activado para Discord/Telegram; desactivado para Slack (Slack requiere crear un comando slash por cada skill). - - Configura `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills` o `channels.slack.commands.nativeSkills` para sustituirlo por proveedor (booleano o `"auto"`). -- `commands.bash` (predeterminado `false`) habilita `! ` para ejecutar comandos del shell del host (`/bash ` es un alias; requiere listas de permitidos `tools.elevated`). -- `commands.bashForegroundMs` (predeterminado `2000`) controla cuánto tiempo espera bash antes de pasar al modo en segundo plano (`0` lo envía inmediatamente al segundo plano). -- `commands.config` (predeterminado `false`) habilita `/config` (lee/escribe `openclaw.json`). -- `commands.mcp` (predeterminado `false`) habilita `/mcp` (lee/escribe la configuración de MCP gestionada por OpenClaw en `mcp.servers`). -- `commands.plugins` (predeterminado `false`) habilita `/plugins` (detección/estado de plugins más controles de instalación + habilitación/deshabilitación). -- `commands.debug` (predeterminado `false`) habilita `/debug` (sustituciones solo de tiempo de ejecución). -- `commands.restart` (predeterminado `true`) habilita `/restart` más las acciones de herramienta de reinicio del gateway. -- `commands.ownerAllowFrom` (opcional) establece la lista explícita de permitidos del propietario para superficies de comandos/herramientas solo para propietarios. Esto es independiente de `commands.allowFrom`. -- `commands.ownerDisplay` controla cómo aparecen los IDs de propietario en el prompt del sistema: `raw` o `hash`. -- `commands.ownerDisplaySecret` configura opcionalmente el secreto HMAC usado cuando `commands.ownerDisplay="hash"`. +- `commands.text` (predeterminado: `true`) habilita el análisis de `/...` en mensajes de chat. + - En superficies sin comandos nativos (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), los comandos de texto siguen funcionando incluso si configuras esto como `false`. +- `commands.native` (predeterminado: `"auto"`) registra comandos nativos. + - Auto: activado para Discord/Telegram; desactivado para Slack (hasta que agregues comandos de barra); ignorado para proveedores sin soporte nativo. + - Configura `channels.discord.commands.native`, `channels.telegram.commands.native` o `channels.slack.commands.native` para sobrescribirlo por proveedor (bool o `"auto"`). + - `false` borra los comandos registrados previamente en Discord/Telegram al iniciar. Los comandos de Slack se gestionan en la app de Slack y no se eliminan automáticamente. +- `commands.nativeSkills` (predeterminado: `"auto"`) registra comandos de **skill** de forma nativa cuando hay soporte. + - Auto: activado para Discord/Telegram; desactivado para Slack (Slack requiere crear un comando de barra por skill). + - Configura `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills` o `channels.slack.commands.nativeSkills` para sobrescribirlo por proveedor (bool o `"auto"`). +- `commands.bash` (predeterminado: `false`) habilita `! ` para ejecutar comandos de shell del host (`/bash ` es un alias; requiere listas de permitidos `tools.elevated`). +- `commands.bashForegroundMs` (predeterminado: `2000`) controla cuánto tiempo espera bash antes de pasar al modo en segundo plano (`0` lo manda al segundo plano de inmediato). +- `commands.config` (predeterminado: `false`) habilita `/config` (lee/escribe `openclaw.json`). +- `commands.mcp` (predeterminado: `false`) habilita `/mcp` (lee/escribe la configuración de MCP gestionada por OpenClaw en `mcp.servers`). +- `commands.plugins` (predeterminado: `false`) habilita `/plugins` (descubrimiento/estado de plugins además de controles de instalación y activación/desactivación). +- `commands.debug` (predeterminado: `false`) habilita `/debug` (sobrescrituras solo de tiempo de ejecución). +- `commands.restart` (predeterminado: `true`) habilita `/restart` además de las acciones de herramientas de reinicio del gateway. +- `commands.ownerAllowFrom` (opcional) establece la lista de permitidos explícita del propietario para superficies de comandos/herramientas solo para el propietario. Es independiente de `commands.allowFrom`. +- `commands.ownerDisplay` controla cómo aparecen los id del propietario en el prompt del sistema: `raw` o `hash`. +- `commands.ownerDisplaySecret` opcionalmente establece el secreto HMAC usado cuando `commands.ownerDisplay="hash"`. - `commands.allowFrom` (opcional) establece una lista de permitidos por proveedor para la autorización de comandos. Cuando está configurada, es la - única fuente de autorización para comandos y directivas (se ignoran las listas de permitidos/emparejamiento del canal y `commands.useAccessGroups`). - Usa `"*"` para un valor predeterminado global; las claves específicas del proveedor lo sustituyen. -- `commands.useAccessGroups` (predeterminado `true`) aplica listas de permitidos/políticas para comandos cuando `commands.allowFrom` no está configurado. + única fuente de autorización para comandos y directivas (las listas de permitidos/emparejamiento del canal y `commands.useAccessGroups` + se ignoran). Usa `"*"` como valor global predeterminado; las claves específicas de proveedor lo sobrescriben. +- `commands.useAccessGroups` (predeterminado: `true`) aplica listas de permitidos/políticas para comandos cuando `commands.allowFrom` no está configurado. ## Lista de comandos Fuente de verdad actual: - los integrados del núcleo provienen de `src/auto-reply/commands-registry.shared.ts` -- los comandos dock generados provienen de `src/auto-reply/commands-registry.data.ts` -- los comandos de plugins provienen de llamadas `registerCommand()` del plugin -- la disponibilidad real en tu gateway sigue dependiendo de los indicadores de configuración, la superficie del canal y los plugins instalados/habilitados +- los comandos de dock generados provienen de `src/auto-reply/commands-registry.data.ts` +- los comandos de plugins provienen de llamadas a `registerCommand()` del plugin +- la disponibilidad real en tu gateway sigue dependiendo de los indicadores de configuración, la superficie del canal y los plugins instalados/activados ### Comandos integrados del núcleo Comandos integrados disponibles hoy: -- `/new [model]` inicia una nueva sesión; `/reset` es el alias de restablecimiento. +- `/new [model]` inicia una nueva sesión; `/reset` es el alias de reinicio. +- `/reset soft [message]` mantiene la transcripción actual, elimina los id de sesión reutilizados del backend de CLI y vuelve a ejecutar en su lugar la carga de inicio/del prompt del sistema. - `/compact [instructions]` compacta el contexto de la sesión. Consulta [/concepts/compaction](/es/concepts/compaction). - `/stop` aborta la ejecución actual. -- `/session idle ` y `/session max-age ` administran el vencimiento de la vinculación del hilo. -- `/think ` establece el nivel de pensamiento. Las opciones provienen del perfil del proveedor del modelo activo; los niveles comunes son `off`, `minimal`, `low`, `medium` y `high`, con niveles personalizados como `xhigh`, `adaptive`, `max` o el binario `on` solo donde se admite. Alias: `/thinking`, `/t`. +- `/session idle ` y `/session max-age ` gestionan el vencimiento de la vinculación del hilo. +- `/think ` establece el nivel de pensamiento. Las opciones provienen del perfil de proveedor del modelo activo; los niveles habituales son `off`, `minimal`, `low`, `medium` y `high`, con niveles personalizados como `xhigh`, `adaptive`, `max`, o solo binario `on` donde sea compatible. Alias: `/thinking`, `/t`. - `/verbose on|off|full` alterna la salida detallada. Alias: `/v`. -- `/trace on|off` alterna la salida de rastreo del plugin para la sesión actual. +- `/trace on|off` alterna la salida de rastreo de plugins para la sesión actual. - `/fast [status|on|off]` muestra o establece el modo rápido. - `/reasoning [on|off|stream]` alterna la visibilidad del razonamiento. Alias: `/reason`. - `/elevated [on|off|ask|full]` alterna el modo elevado. Alias: `/elev`. - `/exec host= security= ask= node=` muestra o establece los valores predeterminados de exec. - `/model [name|#|status]` muestra o establece el modelo. -- `/models [provider] [page] [limit=|size=|all]` lista proveedores o modelos de un proveedor. -- `/queue ` administra el comportamiento de cola (`steer`, `interrupt`, `followup`, `collect`, `steer-backlog`) más opciones como `debounce:2s cap:25 drop:summarize`. +- `/models [provider] [page] [limit=|size=|all]` enumera proveedores o modelos de un proveedor. +- `/queue ` gestiona el comportamiento de la cola (`steer`, `interrupt`, `followup`, `collect`, `steer-backlog`) además de opciones como `debounce:2s cap:25 drop:summarize`. - `/help` muestra el resumen breve de ayuda. - `/commands` muestra el catálogo de comandos generado. -- `/tools [compact|verbose]` muestra lo que el agente actual puede usar ahora mismo. -- `/status` muestra el estado en tiempo de ejecución, incluido el uso/cuota del proveedor cuando está disponible. -- `/tasks` lista las tareas activas o recientes en segundo plano de la sesión actual. +- `/tools [compact|verbose]` muestra lo que el agente actual puede usar en este momento. +- `/status` muestra el estado de ejecución, incluido el uso/cuota del proveedor cuando está disponible. +- `/tasks` enumera las tareas en segundo plano activas/recientes para la sesión actual. - `/context [list|detail|json]` explica cómo se ensambla el contexto. - `/export-session [path]` exporta la sesión actual a HTML. Alias: `/export`. -- `/whoami` muestra tu ID de remitente. Alias: `/id`. +- `/whoami` muestra tu id de remitente. Alias: `/id`. - `/skill [input]` ejecuta una skill por nombre. -- `/allowlist [list|add|remove] ...` administra entradas de la lista de permitidos. Solo texto. +- `/allowlist [list|add|remove] ...` gestiona entradas de la lista de permitidos. Solo texto. - `/approve ` resuelve solicitudes de aprobación de exec. -- `/btw ` hace una pregunta secundaria sin cambiar el contexto futuro de la sesión. Consulta [/tools/btw](/es/tools/btw). -- `/subagents list|kill|log|info|send|steer|spawn` administra ejecuciones de subagentes para la sesión actual. -- `/acp spawn|cancel|steer|close|sessions|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|help` administra sesiones de ACP y opciones de tiempo de ejecución. +- `/btw ` hace una pregunta lateral sin cambiar el contexto futuro de la sesión. Consulta [/tools/btw](/es/tools/btw). +- `/subagents list|kill|log|info|send|steer|spawn` gestiona ejecuciones de subagentes para la sesión actual. +- `/acp spawn|cancel|steer|close|sessions|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|help` gestiona sesiones de ACP y opciones de ejecución. - `/focus ` vincula el hilo actual de Discord o el tema/conversación de Telegram a un destino de sesión. - `/unfocus` elimina la vinculación actual. -- `/agents` lista los agentes vinculados al hilo para la sesión actual. +- `/agents` enumera los agentes vinculados al hilo para la sesión actual. - `/kill ` aborta uno o todos los subagentes en ejecución. -- `/steer ` envía instrucciones a un subagente en ejecución. Alias: `/tell`. -- `/config show|get|set|unset` lee o escribe `openclaw.json`. Solo propietario. Requiere `commands.config: true`. -- `/mcp show|get|set|unset` lee o escribe la configuración del servidor MCP gestionada por OpenClaw en `mcp.servers`. Solo propietario. Requiere `commands.mcp: true`. -- `/plugins list|inspect|show|get|install|enable|disable` inspecciona o muta el estado de plugins. `/plugin` es un alias. Solo propietario para escrituras. Requiere `commands.plugins: true`. -- `/debug show|set|unset|reset` administra sustituciones de configuración solo de tiempo de ejecución. Solo propietario. Requiere `commands.debug: true`. +- `/steer ` envía dirección a un subagente en ejecución. Alias: `/tell`. +- `/config show|get|set|unset` lee o escribe `openclaw.json`. Solo para el propietario. Requiere `commands.config: true`. +- `/mcp show|get|set|unset` lee o escribe la configuración del servidor MCP gestionada por OpenClaw en `mcp.servers`. Solo para el propietario. Requiere `commands.mcp: true`. +- `/plugins list|inspect|show|get|install|enable|disable` inspecciona o modifica el estado de plugins. `/plugin` es un alias. Solo para el propietario en operaciones de escritura. Requiere `commands.plugins: true`. +- `/debug show|set|unset|reset` gestiona sobrescrituras de configuración solo de tiempo de ejecución. Solo para el propietario. Requiere `commands.debug: true`. - `/usage off|tokens|full|cost` controla el pie de uso por respuesta o imprime un resumen local de costos. - `/tts on|off|status|provider|limit|summary|audio|help` controla TTS. Consulta [/tools/tts](/es/tools/tts). -- `/restart` reinicia OpenClaw cuando está habilitado. Predeterminado: habilitado; configura `commands.restart: false` para desactivarlo. +- `/restart` reinicia OpenClaw cuando está habilitado. Predeterminado: habilitado; configura `commands.restart: false` para deshabilitarlo. - `/activation mention|always` establece el modo de activación de grupo. -- `/send on|off|inherit` establece la política de envío. Solo propietario. -- `/bash ` ejecuta un comando del shell del host. Solo texto. Alias: `! `. Requiere `commands.bash: true` más listas de permitidos `tools.elevated`. -- `!poll [sessionId]` comprueba un trabajo bash en segundo plano. +- `/send on|off|inherit` establece la política de envío. Solo para el propietario. +- `/bash ` ejecuta un comando de shell del host. Solo texto. Alias: `! `. Requiere `commands.bash: true` además de listas de permitidos `tools.elevated`. +- `!poll [sessionId]` consulta un trabajo bash en segundo plano. - `!stop [sessionId]` detiene un trabajo bash en segundo plano. -### Comandos dock generados +### Comandos de dock generados -Los comandos dock se generan a partir de plugins de canal con compatibilidad de comandos nativos. Conjunto incluido actual: +Los comandos de dock se generan a partir de plugins de canal con soporte para comandos nativos. Conjunto incluido actual: - `/dock-discord` (alias: `/dock_discord`) - `/dock-mattermost` (alias: `/dock_mattermost`) @@ -153,12 +154,12 @@ Los comandos dock se generan a partir de plugins de canal con compatibilidad de ### Comandos de plugins incluidos -Los plugins incluidos pueden agregar más comandos slash. Comandos incluidos actuales en este repositorio: +Los plugins incluidos pueden agregar más comandos de barra. Comandos incluidos actuales en este repositorio: - `/dreaming [on|off|status|help]` alterna Dreaming de memoria. Consulta [Dreaming](/es/concepts/dreaming). -- `/pair [qr|status|pending|approve|cleanup|notify]` administra el flujo de emparejamiento/configuración del dispositivo. Consulta [Vinculación](/es/channels/pairing). -- `/phone status|arm [duration]|disarm` activa temporalmente comandos del nodo telefónico de alto riesgo. -- `/voice status|list [limit]|set ` administra la configuración de voz de Talk. En Discord, el nombre del comando nativo es `/talkvoice`. +- `/pair [qr|status|pending|approve|cleanup|notify]` gestiona el flujo de emparejamiento/configuración de dispositivos. Consulta [Pairing](/es/channels/pairing). +- `/phone status|arm [duration]|disarm` activa temporalmente comandos de Node de teléfono de alto riesgo. +- `/voice status|list [limit]|set ` gestiona la configuración de voz de Talk. En Discord, el nombre del comando nativo es `/talkvoice`. - `/card ...` envía preajustes de tarjetas enriquecidas de LINE. Consulta [LINE](/es/channels/line). - `/codex status|models|threads|resume|compact|review|account|mcp|skills` inspecciona y controla el arnés app-server de Codex incluido. Consulta [Codex Harness](/es/plugins/codex-harness). - Comandos solo para QQBot: @@ -168,72 +169,72 @@ Los plugins incluidos pueden agregar más comandos slash. Comandos incluidos act - `/bot-upgrade` - `/bot-logs` -### Comandos dinámicos de skills +### Comandos dinámicos de Skills -Las skills invocables por el usuario también se exponen como comandos slash: +Las Skills invocables por el usuario también se exponen como comandos de barra: - `/skill [input]` siempre funciona como punto de entrada genérico. -- las skills también pueden aparecer como comandos directos como `/prose` cuando la skill/plugin los registra. -- el registro nativo de comandos de skills está controlado por `commands.nativeSkills` y `channels..commands.nativeSkills`. +- las skills también pueden aparecer como comandos directos como `/prose` cuando la skill/el plugin las registra. +- el registro nativo de comandos de skill está controlado por `commands.nativeSkills` y `channels..commands.nativeSkills`. Notas: -- Los comandos aceptan `:` opcional entre el comando y los argumentos (por ejemplo, `/think: high`, `/send: on`, `/help:`). +- Los comandos aceptan un `:` opcional entre el comando y los argumentos (por ejemplo, `/think: high`, `/send: on`, `/help:`). - `/new ` acepta un alias de modelo, `provider/model` o un nombre de proveedor (coincidencia difusa); si no hay coincidencia, el texto se trata como el cuerpo del mensaje. -- Para el desglose completo del uso por proveedor, usa `openclaw status --usage`. +- Para el desglose completo de uso del proveedor, usa `openclaw status --usage`. - `/allowlist add|remove` requiere `commands.config=true` y respeta `configWrites` del canal. - En canales con varias cuentas, `/allowlist --account ` orientado a configuración y `/config set channels..accounts....` también respetan `configWrites` de la cuenta de destino. - `/usage` controla el pie de uso por respuesta; `/usage cost` imprime un resumen local de costos a partir de los registros de sesión de OpenClaw. -- `/restart` está habilitado de forma predeterminada; configura `commands.restart: false` para desactivarlo. -- `/plugins install ` acepta las mismas especificaciones de Plugin que `openclaw plugins install`: ruta/archivo local, paquete npm o `clawhub:`. -- `/plugins enable|disable` actualiza la configuración del Plugin y puede solicitar un reinicio. -- Comando nativo solo de Discord: `/vc join|leave|status` controla canales de voz (requiere `channels.discord.voice` y comandos nativos; no está disponible como texto). +- `/restart` está habilitado de forma predeterminada; configura `commands.restart: false` para deshabilitarlo. +- `/plugins install ` acepta las mismas especificaciones de plugin que `openclaw plugins install`: ruta/archivo local, paquete npm o `clawhub:`. +- `/plugins enable|disable` actualiza la configuración del plugin y puede solicitar un reinicio. +- Comando nativo solo de Discord: `/vc join|leave|status` controla los canales de voz (requiere `channels.discord.voice` y comandos nativos; no está disponible como texto). - Los comandos de vinculación de hilos de Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) requieren que las vinculaciones efectivas de hilos estén habilitadas (`session.threadBindings.enabled` y/o `channels.discord.threadBindings.enabled`). -- Referencia de comandos de ACP y comportamiento en tiempo de ejecución: [Agentes ACP](/es/tools/acp-agents). -- `/verbose` está pensado para depuración y visibilidad adicional; mantenlo **desactivado** en uso normal. -- `/trace` es más limitado que `/verbose`: solo revela líneas de rastreo/depuración propiedad del Plugin y mantiene desactivado el ruido normal detallado de herramientas. -- `/fast on|off` conserva una sustitución de sesión. Usa la opción `inherit` de la UI de sesiones para borrarla y volver a los valores predeterminados de la configuración. +- Referencia del comando ACP y comportamiento en tiempo de ejecución: [ACP Agents](/es/tools/acp-agents). +- `/verbose` está pensado para depuración y visibilidad adicional; mantenlo **desactivado** en el uso normal. +- `/trace` es más limitado que `/verbose`: solo revela líneas de rastreo/depuración propiedad del plugin y mantiene desactivado el ruido normal detallado de herramientas. +- `/fast on|off` conserva una sobrescritura de sesión. Usa la opción `inherit` de la UI de Sessions para borrarla y volver a los valores predeterminados de la configuración. - `/fast` es específico del proveedor: OpenAI/OpenAI Codex lo asignan a `service_tier=priority` en endpoints nativos de Responses, mientras que las solicitudes públicas directas a Anthropic, incluido el tráfico autenticado por OAuth enviado a `api.anthropic.com`, lo asignan a `service_tier=auto` o `standard_only`. Consulta [OpenAI](/es/providers/openai) y [Anthropic](/es/providers/anthropic). -- Los resúmenes de errores de herramientas siguen mostrándose cuando corresponde, pero el texto detallado del error solo se incluye cuando `/verbose` está `on` o `full`. -- `/reasoning`, `/verbose` y `/trace` son arriesgados en entornos de grupo: pueden revelar razonamiento interno, salida de herramientas o diagnósticos del Plugin que no pretendías exponer. Es preferible dejarlos desactivados, especialmente en chats grupales. -- `/model` conserva el nuevo modelo de sesión inmediatamente. +- Los resúmenes de fallos de herramientas siguen mostrándose cuando es relevante, pero el texto detallado del fallo solo se incluye cuando `/verbose` está en `on` o `full`. +- `/reasoning`, `/verbose` y `/trace` son riesgosos en entornos de grupo: pueden revelar razonamiento interno, salida de herramientas o diagnósticos de plugins que no pretendías exponer. Es preferible dejarlos desactivados, especialmente en chats grupales. +- `/model` conserva el nuevo modelo de sesión de inmediato. - Si el agente está inactivo, la siguiente ejecución lo usa de inmediato. - Si ya hay una ejecución activa, OpenClaw marca un cambio en vivo como pendiente y solo reinicia con el nuevo modelo en un punto limpio de reintento. -- Si la actividad de herramientas o la salida de respuesta ya comenzaron, el cambio pendiente puede permanecer en cola hasta una oportunidad de reintento posterior o el siguiente turno del usuario. -- **Ruta rápida:** los mensajes solo de comandos de remitentes permitidos se procesan de inmediato (omiten la cola + el modelo). -- **Control por mención en grupos:** los mensajes solo de comandos de remitentes permitidos omiten los requisitos de mención. -- **Atajos en línea (solo remitentes permitidos):** ciertos comandos también funcionan cuando están incrustados en un mensaje normal y se eliminan antes de que el modelo vea el resto del texto. +- Si la actividad de herramientas o la salida de respuesta ya comenzó, el cambio pendiente puede quedar en cola hasta una oportunidad posterior de reintento o el siguiente turno del usuario. +- **Ruta rápida:** los mensajes que contienen solo comandos de remitentes en la lista de permitidos se gestionan de inmediato (omiten cola + modelo). +- **Control por mención en grupos:** los mensajes que contienen solo comandos de remitentes en la lista de permitidos omiten los requisitos de mención. +- **Atajos en línea (solo remitentes en la lista de permitidos):** ciertos comandos también funcionan cuando están incrustados en un mensaje normal y se eliminan antes de que el modelo vea el resto del texto. - Ejemplo: `hey /status` activa una respuesta de estado, y el texto restante continúa por el flujo normal. - Actualmente: `/help`, `/commands`, `/status`, `/whoami` (`/id`). -- Los mensajes solo de comandos no autorizados se ignoran silenciosamente, y los tokens `/...` en línea se tratan como texto sin formato. -- **Comandos de Skills:** las Skills invocables por el usuario se exponen como comandos slash. Los nombres se limpian a `a-z0-9_` (máximo 32 caracteres); las colisiones reciben sufijos numéricos (por ejemplo, `_2`). - - `/skill [input]` ejecuta una skill por nombre (útil cuando los límites de comandos nativos impiden comandos por skill). +- Los mensajes no autorizados que contienen solo comandos se ignoran silenciosamente, y los tokens `/...` en línea se tratan como texto sin formato. +- **Comandos de Skills:** las skills `user-invocable` se exponen como comandos de barra. Los nombres se normalizan a `a-z0-9_` (máx. 32 caracteres); las colisiones reciben sufijos numéricos (por ejemplo, `_2`). + - `/skill [input]` ejecuta una skill por nombre (útil cuando los límites de comandos nativos impiden usar comandos por skill). - De forma predeterminada, los comandos de skills se reenvían al modelo como una solicitud normal. - Las skills pueden declarar opcionalmente `command-dispatch: tool` para enrutar el comando directamente a una herramienta (determinista, sin modelo). - - Ejemplo: `/prose` (Plugin OpenProse) — consulta [OpenProse](/es/prose). + - Ejemplo: `/prose` (plugin OpenProse) — consulta [OpenProse](/es/prose). - **Argumentos de comandos nativos:** Discord usa autocompletado para opciones dinámicas (y menús de botones cuando omites argumentos obligatorios). Telegram y Slack muestran un menú de botones cuando un comando admite opciones y omites el argumento. ## `/tools` -`/tools` responde a una pregunta de tiempo de ejecución, no de configuración: **qué puede usar este agente ahora mismo en +`/tools` responde una pregunta de tiempo de ejecución, no una pregunta de configuración: **qué puede usar este agente ahora mismo en esta conversación**. - El valor predeterminado de `/tools` es compacto y está optimizado para un escaneo rápido. - `/tools verbose` agrega descripciones breves. - Las superficies de comandos nativos que admiten argumentos exponen el mismo cambio de modo que `compact|verbose`. -- Los resultados tienen alcance de sesión, por lo que cambiar el agente, canal, hilo, autorización del remitente o modelo puede +- Los resultados tienen alcance de sesión, así que cambiar de agente, canal, hilo, autorización del remitente o modelo puede cambiar la salida. -- `/tools` incluye herramientas realmente accesibles en tiempo de ejecución, incluidas herramientas del núcleo, herramientas de +- `/tools` incluye las herramientas realmente accesibles en tiempo de ejecución, incluidas herramientas del núcleo, herramientas de plugins conectados y herramientas propiedad del canal. -Para editar perfiles y sustituciones, usa el panel de herramientas de la UI de control o las superficies de configuración/catálogo en lugar +Para editar perfiles y sobrescrituras, usa el panel Tools de la UI de Control o las superficies de configuración/catálogo en lugar de tratar `/tools` como un catálogo estático. -## Superficies de uso (qué se muestra y dónde) +## Superficies de uso (qué se muestra dónde) -- **Uso/cuota del proveedor** (ejemplo: “Claude 80% left”) aparece en `/status` para el proveedor del modelo actual cuando el seguimiento de uso está habilitado. OpenClaw normaliza las ventanas de proveedor a `% left`; para MiniMax, los campos de porcentaje de solo restante se invierten antes de mostrarse, y las respuestas `model_remains` prefieren la entrada del modelo de chat más una etiqueta de plan con etiqueta de modelo. -- **Líneas de tokens/caché** en `/status` pueden volver a la última entrada de uso de la transcripción cuando la instantánea de sesión en vivo es escasa. Los valores vivos existentes distintos de cero siguen prevaleciendo, y la alternativa de transcripción también puede recuperar la etiqueta del modelo activo en tiempo de ejecución más un total más orientado al prompt cuando faltan los totales almacenados o son menores. -- **Tokens/costo por respuesta** se controla con `/usage off|tokens|full` (se agrega a las respuestas normales). +- **Uso/cuota del proveedor** (ejemplo: “Claude 80% left”) aparece en `/status` para el proveedor del modelo actual cuando el seguimiento de uso está habilitado. OpenClaw normaliza las ventanas del proveedor a `% left`; para MiniMax, los campos de porcentaje de solo restante se invierten antes de mostrarse, y las respuestas `model_remains` prefieren la entrada del modelo de chat más una etiqueta de plan con la etiqueta del modelo. +- Las **líneas de tokens/caché** en `/status` pueden recurrir a la última entrada de uso de la transcripción cuando la instantánea de la sesión en vivo es escasa. Los valores en vivo no nulos existentes siguen teniendo prioridad, y el recurso de transcripción también puede recuperar la etiqueta activa del modelo en ejecución además de un total más grande orientado al prompt cuando faltan los totales almacenados o son menores. +- Los **tokens/costo por respuesta** se controlan con `/usage off|tokens|full` (se agregan a las respuestas normales). - `/model status` trata sobre **modelos/autenticación/endpoints**, no sobre uso. ## Selección de modelo (`/model`) @@ -254,13 +255,13 @@ Ejemplos: Notas: - `/model` y `/model list` muestran un selector compacto numerado (familia de modelos + proveedores disponibles). -- En Discord, `/model` y `/models` abren un selector interactivo con menús desplegables de proveedor y modelo más un paso de envío. +- En Discord, `/model` y `/models` abren un selector interactivo con menús desplegables de proveedor y modelo además de un paso Submit. - `/model <#>` selecciona desde ese selector (y prefiere el proveedor actual cuando es posible). -- `/model status` muestra la vista detallada, incluido el endpoint configurado del proveedor (`baseUrl`) y el modo de API (`api`) cuando están disponibles. +- `/model status` muestra la vista detallada, incluido el endpoint configurado del proveedor (`baseUrl`) y el modo API (`api`) cuando están disponibles. -## Sustituciones de depuración +## Sobrescrituras de depuración -`/debug` te permite establecer sustituciones de configuración **solo de tiempo de ejecución** (memoria, no disco). Solo propietario. Desactivado de forma predeterminada; habilítalo con `commands.debug: true`. +`/debug` te permite establecer sobrescrituras de configuración **solo en tiempo de ejecución** (en memoria, no en disco). Solo para el propietario. Deshabilitado de forma predeterminada; habilítalo con `commands.debug: true`. Ejemplos: @@ -274,12 +275,12 @@ Ejemplos: Notas: -- Las sustituciones se aplican de inmediato a las nuevas lecturas de configuración, pero **no** escriben en `openclaw.json`. -- Usa `/debug reset` para borrar todas las sustituciones y volver a la configuración en disco. +- Las sobrescrituras se aplican de inmediato a las nuevas lecturas de configuración, pero **no** escriben en `openclaw.json`. +- Usa `/debug reset` para borrar todas las sobrescrituras y volver a la configuración en disco. -## Salida de rastreo del Plugin +## Salida de rastreo de plugins -`/trace` te permite alternar líneas de rastreo/depuración del Plugin **con alcance de sesión** sin activar el modo detallado completo. +`/trace` te permite alternar líneas de **rastreo/depuración de plugins con alcance de sesión** sin activar el modo detallado completo. Ejemplos: @@ -292,15 +293,15 @@ Ejemplos: Notas: - `/trace` sin argumento muestra el estado actual de rastreo de la sesión. -- `/trace on` habilita líneas de rastreo del Plugin para la sesión actual. -- `/trace off` las desactiva nuevamente. -- Las líneas de rastreo del Plugin pueden aparecer en `/status` y como mensaje de diagnóstico de seguimiento después de la respuesta normal del asistente. -- `/trace` no sustituye a `/debug`; `/debug` sigue administrando sustituciones de configuración solo de tiempo de ejecución. +- `/trace on` habilita líneas de rastreo de plugins para la sesión actual. +- `/trace off` las vuelve a deshabilitar. +- Las líneas de rastreo de plugins pueden aparecer en `/status` y como un mensaje de diagnóstico de seguimiento después de la respuesta normal del asistente. +- `/trace` no sustituye a `/debug`; `/debug` sigue gestionando sobrescrituras de configuración solo en tiempo de ejecución. - `/trace` no sustituye a `/verbose`; la salida normal detallada de herramientas/estado sigue perteneciendo a `/verbose`. ## Actualizaciones de configuración -`/config` escribe en tu configuración en disco (`openclaw.json`). Solo propietario. Desactivado de forma predeterminada; habilítalo con `commands.config: true`. +`/config` escribe en tu configuración en disco (`openclaw.json`). Solo para el propietario. Deshabilitado de forma predeterminada; habilítalo con `commands.config: true`. Ejemplos: @@ -315,11 +316,11 @@ Ejemplos: Notas: - La configuración se valida antes de escribir; los cambios no válidos se rechazan. -- Las actualizaciones de `/config` se conservan tras reinicios. +- Las actualizaciones de `/config` persisten tras los reinicios. ## Actualizaciones de MCP -`/mcp` escribe definiciones de servidor MCP gestionadas por OpenClaw en `mcp.servers`. Solo propietario. Desactivado de forma predeterminada; habilítalo con `commands.mcp: true`. +`/mcp` escribe definiciones de servidor MCP gestionadas por OpenClaw en `mcp.servers`. Solo para el propietario. Deshabilitado de forma predeterminada; habilítalo con `commands.mcp: true`. Ejemplos: @@ -337,7 +338,7 @@ Notas: ## Actualizaciones de plugins -`/plugins` permite a los operadores inspeccionar plugins detectados y alternar su habilitación en la configuración. Los flujos de solo lectura pueden usar `/plugin` como alias. Desactivado de forma predeterminada; habilítalo con `commands.plugins: true`. +`/plugins` permite a los operadores inspeccionar los plugins detectados y alternar su habilitación en la configuración. Los flujos de solo lectura pueden usar `/plugin` como alias. Deshabilitado de forma predeterminada; habilítalo con `commands.plugins: true`. Ejemplos: @@ -351,35 +352,35 @@ Ejemplos: Notas: -- `/plugins list` y `/plugins show` usan detección real de plugins contra el espacio de trabajo actual más la configuración en disco. -- `/plugins enable|disable` actualiza solo la configuración del Plugin; no instala ni desinstala plugins. +- `/plugins list` y `/plugins show` usan descubrimiento real de plugins contra el espacio de trabajo actual más la configuración en disco. +- `/plugins enable|disable` actualiza solo la configuración del plugin; no instala ni desinstala plugins. - Después de cambios de habilitación/deshabilitación, reinicia el gateway para aplicarlos. -## Notas de superficie +## Notas sobre superficies -- **Comandos de texto** se ejecutan en la sesión normal de chat (los MD comparten `main`, los grupos tienen su propia sesión). +- **Comandos de texto** se ejecutan en la sesión normal de chat (los mensajes directos comparten `main`, los grupos tienen su propia sesión). - **Comandos nativos** usan sesiones aisladas: - Discord: `agent::discord:slash:` - Slack: `agent::slack:slash:` (prefijo configurable mediante `channels.slack.slashCommand.sessionPrefix`) - - Telegram: `telegram:slash:` (apunta a la sesión de chat mediante `CommandTargetSessionKey`) -- **`/stop`** apunta a la sesión de chat activa para poder abortar la ejecución actual. -- **Slack:** `channels.slack.slashCommand` sigue siendo compatible para un único comando estilo `/openclaw`. Si habilitas `commands.native`, debes crear un comando slash de Slack por cada comando integrado (con los mismos nombres que `/help`). Los menús de argumentos de comandos para Slack se entregan como botones efímeros de Block Kit. - - Excepción nativa de Slack: registra `/agentstatus` (no `/status`) porque Slack reserva `/status`. El `/status` de texto sigue funcionando en mensajes de Slack. + - Telegram: `telegram:slash:` (apunta a la sesión del chat mediante `CommandTargetSessionKey`) +- **`/stop`** apunta a la sesión activa del chat para poder abortar la ejecución actual. +- **Slack:** `channels.slack.slashCommand` sigue siendo compatible para un único comando estilo `/openclaw`. Si habilitas `commands.native`, debes crear un comando de barra de Slack por cada comando integrado (con los mismos nombres que `/help`). Los menús de argumentos de comandos para Slack se entregan como botones efímeros de Block Kit. + - Excepción nativa de Slack: registra `/agentstatus` (no `/status`) porque Slack reserva `/status`. El texto `/status` sigue funcionando en mensajes de Slack. -## Preguntas laterales BTW +## Preguntas laterales con BTW `/btw` es una **pregunta lateral** rápida sobre la sesión actual. A diferencia del chat normal: - usa la sesión actual como contexto de fondo, -- se ejecuta como una llamada independiente **sin herramientas**, +- se ejecuta como una llamada separada de un solo uso **sin herramientas**, - no cambia el contexto futuro de la sesión, - no se escribe en el historial de la transcripción, - se entrega como un resultado lateral en vivo en lugar de un mensaje normal del asistente. -Eso hace que `/btw` sea útil cuando quieres una aclaración temporal mientras la -tarea principal sigue avanzando. +Eso hace que `/btw` sea útil cuando quieres una aclaración temporal mientras la tarea principal +sigue en curso. Ejemplo: @@ -387,5 +388,5 @@ Ejemplo: /btw what are we doing right now? ``` -Consulta [Preguntas laterales BTW](/es/tools/btw) para ver el comportamiento completo y los detalles -de la experiencia de cliente. +Consulta [BTW Side Questions](/es/tools/btw) para ver el comportamiento completo y los detalles +de UX del cliente.