Controlar la salida¶
Cuando un botón termina, el bot tiene que llevar el
resultado a su chat. Telegram nunca acepta más de 4096 bytes en un mensaje, así
que un resultado largo llega como varios mensajes de respuesta o como un
archivo .txt que puede abrir y descargar.
Tres campos opcionales deciden qué ocurre. Puede omitirlos todos y el bot seguirá comportándose de forma razonable.
La única regla que debe recordar
Manda el botón. Si un botón define output, eso es lo que ocurre. Si el
botón no dice nada, se aplica el valor de la raíz. Y si la raíz tampoco
dice nada, el bot usa auto.
Todas las imágenes de esta página se amplían
Las capturas del chat son pequeñas a propósito. Pulse una para verla a tamaño completo.
Los tres campos de un vistazo¶
| Campo | Dónde se define | Tipo | Predeterminado | Qué decide |
|---|---|---|---|---|
max_output_bytes |
solo en la raíz | entero | 524288 |
Cuántos bytes de salida guarda el bot por comando |
output |
raíz y botón | auto | text | file |
auto |
Si el resultado llega como mensajes de chat o como un archivo .txt |
max_output_messages |
solo en la raíz | entero, 1–10 |
2 |
En modo auto, cuántos mensajes se permiten antes de enviar un archivo |
Los tres están en su archivo de configuración, en la
raíz, junto a shell y timeout, no bajo telegram. La lista completa de
claves raíz está en la página Configuración.
max_output_bytes¶
Este es su propio límite y se aplica primero. Mientras corre un comando, el bot
guarda como máximo esta cantidad de bytes de su salida, contada por separado
para la salida normal y la de error. Lo que pase de ahí se descarta, pero el
comando sigue en marcha hasta terminar o alcanzar su timeout.
Guardar hasta 2 MB de salida por comando
- 2 MB en vez de los 512 KB predeterminados. Se cuenta por separado para la salida normal y para la de error.
Qué verá en el chat
Subirlo solo sirve si se envía un archivo
Un mensaje de chat nunca puede llevar más de 4096 bytes, así que un
max_output_bytes mayor solo le llega completo cuando el resultado viene
como archivo .txt. Combínelo con output: auto (el predeterminado) o con
output: file.
output¶
output elige la entrega. Acepta tres valores y es el único campo de salida
que también puede poner en un botón concreto.
Mensajes de texto mientras el resultado es corto y un archivo .txt cuando
no lo es. Es el valor predeterminado y el que conserva si no escribe nada.
Dejar que el bot decida en cada resultado
- Decidir según el resultado en vez de forzar una única entrega.
- El punto de cambio. Dos mensajes o menos se quedan en el chat; cualquier cosa más larga se convierte en un archivo.
Siempre mensajes de chat, por largo que sea el resultado. El bot se detiene tras diez mensajes y añade una nota de que se cortó el resto.
Siempre un archivo .txt, incluso para un resultado de una línea. El
resumen llega como pie del archivo.
Omitirlo es lo mismo que escribir auto
Nunca hace falta escribir output. Una configuración que funcionaba antes
de que existiera este campo sigue comportándose igual.
max_output_messages¶
Este campo solo importa en modo auto y solo existe en la raíz. Es el número
de mensajes de chat que el bot está dispuesto a enviar antes de renunciar a los
mensajes y enviar un solo archivo. Los valores permitidos van de 1 a 10; el
predeterminado es 2.
Enviar un archivo en cuanto el resultado necesite un segundo mensaje
- El ajuste más estricto. Solo un resultado que quepa en un mensaje se queda en el chat.
Qué verá en el chat
Es un campo solo de la raíz
Un botón no puede definir max_output_messages. Póngalo en la raíz y deje
que los botones que necesiten algo distinto usen output: text u
output: file.
La raíz y el botón juntos¶
Un botón puede llevar su propio output. No hay nada más de la salida que se
pueda definir por botón. El modo efectivo se elige así:
output de la raíz |
output del botón |
Qué ocurre en realidad |
|---|---|---|
sin definir o auto |
sin definir | auto |
sin definir o auto |
auto |
auto |
sin definir o auto |
text |
text |
sin definir o auto |
file |
file |
text |
sin definir | text |
text |
auto |
auto |
text |
text |
text |
text |
file |
file |
file |
sin definir | file |
file |
auto |
auto |
file |
text |
text |
file |
file |
file |
Las secciones siguientes recorren las doce combinaciones, con un ejemplo cada una.
Cuando la raíz es auto¶
Aquí se incluye el caso en que la raíz no dice nada, porque un output ausente
significa auto.
La raíz es auto y el botón no dice nada¶
El caso de cada día. Los resultados cortos se quedan en el chat; un resultado
que necesitaría más de max_output_messages mensajes llega como archivo.
Un botón sencillo con una raíz sencilla
Qué verá en el chat
La raíz es auto y el botón dice auto¶
Escribir auto en el botón no cambia nada aquí. Solo vale la pena escribirlo
si quiere que el botón siga en auto pase lo que pase con la raíz más
adelante.
Escribir el valor predeterminado en el botón
output: auto
menu:
- name: Disk usage
type: button
function: command
command: "df -h"
output: auto # (1)!
- Hoy se comporta igual que si lo omitiera, pero este botón lo conserva
aunque la raíz cambie a
textofilemás adelante.
Qué verá en el chat
La raíz es auto y el botón dice text¶
Úselo para un botón cuya salida quiera leer siempre en el chat, aunque se alargue un poco: una lista de estado que se recorre en vez de descargarla.
Mantener un botón en el chat
output: auto
menu:
- name: Service status
type: button
function: command
command: "systemctl status nginx --no-pager"
output: text # (1)!
- Nunca un archivo, diga lo que diga
max_output_messages.
Qué verá en el chat
La raíz es auto y el botón dice file¶
La opción típica para registros y copias de seguridad: casi nunca quiere leerlos en el chat y un archivo es más fácil de guardar.
Descargar siempre este
output: auto
menu:
- name: Nginx logs
type: button
function: command
command: "journalctl -u nginx -n 2000 --no-pager"
output: file # (1)!
- El resto del menú sigue comportándose de forma automática. Solo este botón queda fijado a un archivo.
Qué verá en el chat
Cuando la raíz es output: text¶
Todos los botones se quedan en el chat salvo que digan otra cosa. Elija esto si no le gusta descargar archivos en el teléfono.
La raíz es text y el botón no dice nada¶
Mensajes de chat en todas partes
Qué verá en el chat
La raíz es text y el botón dice auto¶
El botón vuelve al cambio automático, así que este botón puede enviar un
archivo aunque el resto del menú no lo haga nunca. El max_output_messages de
la raíz decide dónde ocurre el cambio.
Un botón autorizado a enviar un archivo cuando se alarga
output: text
max_output_messages: 3 # (1)!
menu:
- name: Package list
type: button
function: command
command: "dpkg -l"
output: auto
- Solo este botón lee el margen permitido, porque es el único en modo
auto.
Qué verá en el chat
La raíz es text y el botón dice text¶
Lo mismo que no decir nada, pero con la intención escrita. Es útil en una configuración larga donde no quiere que un cambio posterior en la raíz afecte a este botón.
Fijar un botón a los mensajes de chat
Qué verá en el chat
La raíz es text y el botón dice file¶
Un botón descargable en un menú de solo chat
output: text
menu:
- name: Full system report
type: button
function: command
command: "/usr/local/bin/report.sh"
output: file
timeout: "5m" # (1)!
- Un informe puede tardar, así que este botón recibe más tiempo que el límite global.
Qué verá en el chat
Cuando la raíz es output: file¶
Cada resultado es un archivo, incluso el de una sola línea. Encaja con un bot usado sobre todo para informes y copias guardadas.
La raíz es file y el botón no dice nada¶
Archivos en todas partes
Qué verá en el chat
Hasta los resultados mínimos se convierten en descargas
Una respuesta de una línea llega como adjunto que hay que abrir. Si eso le
molesta, deje la raíz en auto y ponga output: file solo en los botones
que lo necesiten.
La raíz es file y el botón dice auto¶
El botón escapa de la regla de solo archivos y vuelve a comportarse con normalidad.
Dejar legible una comprobación rápida
output: file
max_output_messages: 2
menu:
- name: Uptime
type: button
function: command
command: "uptime"
output: auto # (1)!
- Vuelta al cambio automático solo para este botón.
Qué verá en el chat
La raíz es file y el botón dice text¶
Forzar un botón de vuelta al chat
Qué verá en el chat
La raíz es file y el botón dice file¶
Repite el valor de la raíz. Es inofensivo y mantiene el botón correcto si más adelante relaja la raíz.
Un botón que siempre debe ser un archivo
Qué verá en el chat
Cómo es el archivo¶
Cuando un resultado se entrega como archivo, recibe un adjunto y un pie breve.
- Nombre — el nombre del botón en minúsculas y con guiones, después la
fecha y la hora en UTC, por ejemplo
nginx-logs-20260913-091204.txt. - Pie — el mismo resumen que vería al principio de un mensaje de chat: nombre del botón, código de salida, duración y la nota de tiempo agotado o de recorte cuando la haya.
- Cuerpo — otra vez ese resumen, después una sección
--- stdout ---y una sección--- stderr ---cuando el comando haya escrito algo en ella.
Dentro del archivo descargado
Límites que no puede cambiar¶
El techo lo pone Telegram, no el bot
- Un mensaje de chat admite como máximo 4096 bytes.
- En modo
textel bot envía como máximo diez mensajes y termina con(output too long; showing first N bytes). - Escriba el
max_output_messagesque quiera: diez mensajes sigue siendo el techo absoluto.
Si un envío falla, el bot reintenta primero
Cuando el archivo no se puede enviar, porque no hay red o porque Telegram pide esperar, el bot reintenta automáticamente con una espera creciente. Solo tras rendirse vuelve a los mensajes de chat, para que una caída breve no le cueste el resultado. Vea Reintentos de entrega.
Ejecutar comando usa el ajuste de la raíz¶
El botón $ >_ Run Command no forma parte de su menú, así que no tiene un
output propio. Siempre sigue el output y el max_output_messages de la
raíz. Consulte Menú → Ejecutar comando.
Relacionado¶
-
Configuración
Todas las claves raíz, con los tres campos de salida en una tabla.
-
Botón
Lo que un botón puede sustituir,
outputincluido. -
Menú
Cómo conviven los resultados con el menú y qué hace Ejecutar comando.
-
Shell
El shell, el directorio de trabajo y el tiempo máximo de sus comandos.
-
Reintentos de entrega
Qué ocurre cuando un envío a Telegram falla a mitad de camino.














