[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_botcomo 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 contextContexto 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.5continú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
- 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 en2026.4.5continúa funcionando—el registro de comandos no se ve afectado. - 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}] } } - Falló la resolución del objetivo: La regresión introdujo un cambio lógico en
src/channels/telegram/command-routing.tsque 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. - 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: HEALTHYOpció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.15Opció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 accountOpció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: HEALTHYPaso 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: ACTIVEPaso 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 fieldResultado 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 accountCriterios de éxito
Todos los siguientes deben pasar para considerar la corrección verificada:
openclawctl statusmuestraStatus: RUNNINGy todos los canalesHEALTHY- El selector de comandos de barra de Telegram muestra los comandos del bot al escribir
/en el grupo /status@RickS_C137_botdevuelve una respuesta con dos marcas de verificación- Los registros de depuración muestran
Resolved target account: mortypara 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.telegramusa 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.yamlVerify 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
@userinfoboto@JSONDumpBoten 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(noScopeType.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:
- El comando fue descartado silenciosamente (síntoma de regresión)
- Problema de red al entregar el mensaje
- El bot fue bloqueado por el usuario
- 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
setMyCommandsy 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.8puede 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/mybotsen 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 en2026.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.nativeycommands.nativeSkills- Controlan la visibilidad del registro de comandos.commands.allowFrom.telegram- Lista de permitidos explícita para fuentes de comandos.