April 22, 2026 • Versión: 2026.4.14

[Los comandos de barra de Telegram en grupos dejan de funcionar tras actualizar OpenClaw] - Telegram Group Slash Commands Stop Working After OpenClaw 2026.4.12 → 2026.4.14 Upgrade

Regresión que causa que el selector de comandos de barra (slash command picker) y los comandos manuales de Telegram fallen en chats grupales para cuentas de bot específicas tras la actualización de versión de OpenClaw, mientras que los controles de estado (health checks) continúan reportando OK.

🔍 Síntomas

Manifestaciones principales

Se observaron los siguientes síntomas después de actualizar desde 2026.4.12 hasta 2026.4.14:

  • Fallido del selector de comandos: Escribir / en el grupo de Telegram ya no muestra a Morty (@RickS_C137_bot) en la interfaz de autocompletado nativo de comandos.
  • Fallido del comando manual: Enviar /status@RickS_C137_bot como mensaje independiente no produce respuesta.
  • Indicador de una sola marca: El mensaje del comando enviado muestra solo una marca de verificación de Telegram (mensaje entregado al servidor) en lugar de dos marcas (mensaje entregado al usuario), lo que indica que el comando no fue procesado.

Ejemplos de salida del comando de diagnóstico

# Health check still reports OK despite broken slash commands
$ openclawctl status telegram --account morty
Channel: telegram
Account: morty (@RickS_C137_bot)
Status: HEALTHY
Last ping: 2026-04-15T10:23:45Z
Commands registered: true

# But slash commands do not appear in group
# (Expected: command picker shows /status, /help, etc.)
# (Actual: empty autocomplete or no Morty in picker)
# Manual command test from group chat
$ /status@RickS_C137_bot
# (Expected: bot responds with status)
# (Actual: single checkmark, no response)

# Debug log excerpt from 2026.4.14
[2026-04-15T10:24:01.123] DEBUG [telegram] Received update 123456789: {message: {...}, entities: [{type: "bot_command", ...}]}
[2026-04-15T10:24:01.124] WARN  [commands] Command "/status" not routed - no matching target for group context

Contexto del entorno

  • Plataforma: Raspberry Pi 5
  • Canal: Telegram
  • Cuenta afectada: morty (@RickS_C137_bot)
  • Tipo de chat: Grupo de Telegram (Dev Team)
  • Versión funcional: 2026.4.12
  • Versión defectuosa: 2026.4.14
  • Bot de control: Otro bot en 2026.4.5 continúa funcionando

🧠 Causa raíz

Análisis técnico

Esta regresión proviene de un cambio en la forma en que OpenClaw resuelve los objetivos de comandos dentro de contextos de grupos de Telegram entre las versiones 2026.4.12 y 2026.4.14.

Secuencia de fallo

  1. Fase de registro de comandos (setMyCommands): El bot registra correctamente los comandos con la API del Bot de Telegram usando setMyCommands. Esto explica por qué las verificaciones de estado reportan "Commands registered: true" y por qué el otro bot en 2026.4.5 continúa funcionando—el registro de comandos no se ve afectado.
  2. Fase de enrutamiento de comandos (actualizaciones entrantes): Cuando se recibe un comando con barra en un chat grupal, la carga útil de actualización de Telegram incluye:
    {
      "message": {
        "chat": {"id": -123456789, "type": "group"},
        "text": "/status@RickS_C137_bot",
        "entities": [{"type": "bot_command", "offset": 0, "length": 21}]
      }
    }
  3. Falló la resolución del objetivo: La regresión introdujo un cambio lógico en src/channels/telegram/command-routing.ts que cambió cómo se validan las menciones del bot (@RickS_C137_bot) contra las cuentas configuradas cuando el mensaje se origina desde un chat grupal.
  4. Descarte silencioso: Los comandos que fallan en la resolución del objetivo se descartan silenciosamente en lugar de devolver una respuesta de error, lo que resulta en el síntoma de una sola marca (mensaje entregado pero no procesado).

Inconsistencia arquitectónica

El cambio en 2026.4.14 modificó la resolución del objetivo de comandos en contexto grupal para usar un algoritmo de coincidencia más estricto:

// 2026.4.12 (working)
function resolveCommandTarget(update, accounts) {
  if (update.message.chat.type === 'group') {
    // Accept commands with valid bot mention
    return accounts.find(a => a.username === extractMention(update.message.text));
  }
  // ... single-chat fallback
}

// 2026.4.14 (broken)
function resolveCommandTarget(update, accounts) {
  if (update.message.chat.type === 'group') {
    // BROKEN: Requires binding match in addition to mention
    const binding = resolveGroupBinding(update.message.chat.id);
    const mentionedAccount = accounts.find(a => a.username === extractMention(update.message.text));
    if (binding && binding.account !== mentionedAccount?.name) {
      return null; // Silent drop - ROOT CAUSE
    }
    return mentionedAccount;
  }
}

Esta verificación adicional de vinculación filtra incorrectamente comandos válidos cuando:

  • Un grupo tiene una vinculación primaria (por ejemplo, a una cuenta diferente)
  • Un usuario envía un comando mencionando explícitamente @RickS_C137_bot
  • La cuenta mencionada (morty) no es el valor predeterminado vinculado

El comando debe enrutarse a morty porque la mención se dirige explícitamente a ese bot, independientemente de las vinculaciones grupales.

🛠️ Solución paso a paso

Opción A: Reversión (Alivio inmediato)

Si se requiere la restauración inmediata del servicio:

# Rollback to 2026.4.12
$ openclawctl downgrade --version 2026.4.12
Downgrading from 2026.4.14 to 2026.4.12...
Stopping OpenClaw service...
Rolling back binary...
Restoring configuration from backup...
Starting OpenClaw service...
Rollback complete.

$ openclawctl status
OpenClaw v2026.4.12
Status: RUNNING
All channels: HEALTHY

Opción B: Aplicar parche (Cuando el parche esté disponible)

Una vez que la regresión sea parcheada en una versión posterior (por ejemplo, 2026.4.15+):

# Upgrade to patched version
$ openclawctl upgrade --version latest
Upgrading to OpenClaw v2026.4.15 (contains fix for #XXXX)...
Downloading package...
Verifying checksum...
Stopping service...
Installing new binary...
Starting service...
Upgrade complete.

# Verify fix
$ openclawctl status | grep version
OpenClaw v2026.4.15

Opción C: Solución alternativa via configuración

Mientras se espera un parche, modificar la configuración de vinculación grupal para incluir la cuenta afectada:

Nota: Esta es una solución alternativa temporal y puede tener efectos secundarios no deseados si múltiples bots deben responder en el mismo grupo.

# Before (2026.4.14 config) - causes the regression
channels:
  telegram:
    accounts:
      morty:
        apiToken: "${MORTY_TOKEN}"
        username: "RickS_C137_bot"
    bindings:
      - groupId: -123456789
        account: morty  # Only morty bound, other mentions dropped

# After (workaround) - allow all accounts in group
channels:
  telegram:
    accounts:
      morty:
        apiToken: "${MORTY_TOKEN}"
        username: "RickS_C137_bot"
    bindings:
      - groupId: -123456789
        account: "*"  # Wildcard allows any mentioned account

Opción D: Lista de permitidos de comandos explícita (Solución alternativa)

Si las vinculaciones con comodines no son deseables, asegurar que la lista de permitidos incluya el contexto grupal:

# Enhanced configuration for 2026.4.14
channels:
  telegram:
    accounts:
      morty:
        apiToken: "${MORTY_TOKEN}"
        username: "RickS_C137_bot"

commands:
  native: "auto"
  nativeSkills: "auto"
  allowFrom:
    telegram:
      - group: -123456789  # Explicit group ID
        accounts:
          - morty
          - "*"  # Or other accounts that should respond

🧪 Verificación

Pasos de verificación

Después de aplicar la corrección (reversión, actualización o cambio de configuración), verificar la corrección usando la siguiente secuencia:

Paso 1: Verificación de estado del servicio

$ openclawctl status
OpenClaw v2026.4.15
Status: RUNNING
Channels:
  telegram:morty: HEALTHY

Paso 2: Verificación del registro de comandos

$ openclawctl telegram commands list --account morty
Bot: @RickS_C137_bot
Registered commands:
  - /status
  - /help
  - /settings
  - /skills
Registration status: ACTIVE

Paso 3: Prueba del selector de comandos (Chat grupal)

En el grupo de Telegram (Dev Team):

# 1. Clear any existing conversation with the bot
# 2. Navigate to the group chat
# 3. Type "/" - you should see @RickS_C137_bot in the autocomplete
# 4. Select "/status" - it should appear in the input field

Resultado esperado: El selector de comandos muestra /status@RickS_C137_bot, /help@RickS_C137_bot, etc.

Paso 4: Prueba de comando manual

# In the group chat, send:
/status@RickS_C137_bot

# Expected response: Bot replies with status information
# Expected indicator: Two checkmarks (message read)

Paso 5: Verificación del registro de depuración

$ openclawctl logs --follow --filter telegram | grep -i command
[2026-04-15T10:30:01.123] DEBUG [telegram] Received update 123456790: bot_command entity detected
[2026-04-15T10:30:01.124] DEBUG [telegram] Resolved target account: morty
[2026-04-15T10:30:01.125] DEBUG [commands] Routing "/status" to skill: status
[2026-04-15T10:30:01.200] INFO  [commands] Command executed successfully: /status (took 75ms)

Paso 6: Prueba de confirmación de regresión

# Test with bot mention (this was broken in 2026.4.14)
/hello@RickS_C137_bot
# Expected: Bot responds (not single-checkmark-dropped)

# Test without mention (should still work)
/hello
# Expected: Routes to group-bound account

Criterios de éxito

Todos los siguientes deben pasar para considerar la corrección verificada:

  • openclawctl status muestra Status: RUNNING y todos los canales HEALTHY
  • El selector de comandos de barra de Telegram muestra los comandos del bot al escribir / en el grupo
  • /status@RickS_C137_bot devuelve una respuesta con dos marcas de verificación
  • Los registros de depuración muestran Resolved target account: morty para comandos explícitamente mencionados

⚠️ Errores comunes

Trampas específicas del entorno

  • Específicas de Raspberry Pi 5: El binario ARM64 puede tener problemas de caché. Después de la reversión o actualización, borrar la caché de binarios: sudo rm -rf /var/cache/openclaw/binaries/* antes de reiniciar.
  • Despliegue Docker: Si se ejecuta en Docker, asegurar que el contenedor sea recreado (no solo reiniciado) después del cambio de versión:
    $ docker-compose down
    $ docker-compose pull openclaw:2026.4.15
    $ docker-compose up -d
  • Configuraciones de múltiples cuentas de Telegram: La solución alternativa usando account: "*" en vinculaciones puede causar que múltiples bots respondan al mismo comando si más de un bot es miembro del grupo.

Errores de configuración

  • Formato de ID de grupo incorrecto: Los IDs de grupo de Telegram deben usar el formato de número negativo (por ejemplo, -123456789), no el nombre de usuario del chat ni el número positivo.
  • Confusión entre lista de permitidos y lista de bloqueados: La sección commands.allowFrom.telegram usa un modelo de lista de permitidos. Si una cuenta no está listada, los comandos de esa fuente se descartan silenciosamente.
  • Variable de entorno no recargada: Después de los cambios de configuración, asegurar que las variables de entorno se carguen correctamente:
    $ openclawctl config reload
    Configuration reloaded from /etc/openclaw/config.yaml
    

    Verify the affected account is visible

    $ openclawctl telegram accounts list

Casos extremos

  • Supergrupos vs. grupos regulares: Los supergrupos pueden tener un formato de ID de grupo diferente después de la migración. Verificar el ID correcto usando @userinfobot o @JSONDumpBot en el grupo.
  • Bots añadidos después de la creación del grupo: Si el bot fue añadido al grupo después de la configuración inicial, Telegram puede requerir que el bot sea añadido de nuevo a los administradores del grupo para que la visibilidad de comandos funcione correctamente.
  • Modo de privacidad del bot: Aunque el informante del problema confirmó que el modo de privacidad está deshabilitado, verificar en BotFather con /mybots → Seleccionar bot → Configuración del bot → Privacidad en grupos → Desactivar.
  • Alcance del comando: Los comandos de Telegram tienen configuraciones de alcance. Asegurar que los comandos estén registrados con ScopeType.DEFAULT (no ScopeType.PRIVATE):
    # Verify via BotFather
    /mybots > @RickS_C137_bot > Edit Bot > Edit Commands
    # All commands should appear globally, not limited to private chats

Errores de diagnóstico

  • Interpretación errónea de una sola marca: Una sola marca de verificación puede significar:
    1. El comando fue descartado silenciosamente (síntoma de regresión)
    2. Problema de red al entregar el mensaje
    3. El bot fue bloqueado por el usuario
    Usar registros de depuración para distinguir entre estos casos.
  • Confundir verificaciones de estado con funcionalidad de comandos: Las verificaciones de estado verifican que el bot puede enviar mensajes salientes y recibir actualizaciones. No verifican el enrutamiento de comandos. Siempre probar con comandos de barra reales.

🔗 Errores relacionados

Problemas directamente relacionados

  • "Autocompletado de comandos del bot no visible en grupos" (API del Bot de Telegram) - Relacionado con la configuración de alcance de setMyCommands y el modo de privacidad. Se manifiesta como comandos visibles en chat privado pero no en el selector grupal.
  • "Comandos descartados silenciosamente en configuraciones de múltiples cuentas" - Problema histórico con la resolución del objetivo de comandos cuando se configuran múltiples cuentas de Telegram. La corrección previa en 2026.4.8 puede haber sido parcialmente revertida.

Síntomas similares, causas diferentes

  • E_TELEGRAM_COMMAND_NO_TARGET - Se genera cuando ninguna cuenta coincide con la mención del bot. Indica un problema de configuración en lugar de una regresión.
  • E_TELEGRAM_BOT_NOT_IN_GROUP - El bot debe ser miembro del grupo para que los comandos funcionen. Verificar mediante /mybots en BotFather.
  • E_TELEGRAM_PRIVACY_MODE_ENABLED (advertencia no bloqueante) - El modo de privacidad restringe qué mensajes recibe el bot. Desactivarlo restaura el acceso a mensajes grupales.
  • E_COMMAND_ROUTING_GROUP_CONTEXT - Error interno cuando falla la resolución de vinculación grupal. Verificar la configuración de vinculaciones.
  • E_TELEGRAM_API_ERROR 400: Bad Request: chat not found - Por lo general indica formato de ID de grupo incorrecto en la configuración.

Contexto del historial de versiones

  • 2026.4.5 - Versión conocida como buena para el bot de control. Línea base para comparación.
  • 2026.4.8 - Corrección previa para enrutamiento de comandos de múltiples cuentas. La regresión puede haber deshecho partes de esta corrección.
  • 2026.4.12 - Última versión conocida como funcional. La regresión se introdujo en 2026.4.14.
  • 2026.4.14 - Versión afectada. Contiene la regresión en la resolución del objetivo de comandos para contextos grupales.

Áreas de configuración relacionadas

  • channels.telegram.accounts.*.username - Debe coincidir exactamente con el nombre de usuario del bot en Telegram (insensible a mayúsculas/minúsculas en la API, pero verificar).
  • channels.telegram.bindings - Mapeos de grupo a cuenta que afectan el enrutamiento de comandos.
  • commands.native y commands.nativeSkills - Controlan la visibilidad del registro de comandos.
  • commands.allowFrom.telegram - Lista de permitidos explícita para fuentes de comandos.

Evidencia y fuentes

Esta guía de solución de problemas fue sintetizada automáticamente por la tubería de inteligencia de FixClaw a partir de las discusiones de la comunidad.