Aller au contenu

Contrôler la sortie

Lorsqu’un bouton a terminé, le bot doit placer le résultat dans votre conversation. Telegram n’accepte jamais plus de 4096 octets dans un message : un résultat long arrive donc soit en plusieurs messages de réponse, soit en un fichier .txt que vous pouvez ouvrir et télécharger.

Trois champs facultatifs décident de ce qui se passe. Vous pouvez tous les omettre, le bot se comporte quand même raisonnablement.

La seule règle à retenir

Le bouton gagne. Si un bouton définit output, c’est lui qui s’applique. Si le bouton ne dit rien, la valeur racine s’applique. Si la racine ne dit rien non plus, le bot utilise auto.

  • max_output_bytes


    Quantité de sortie conservée depuis la commande avant tout envoi.

    En savoir plus

  • output


    Messages ou fichier. Le seul champ que vous pouvez aussi définir sur un bouton.

    En savoir plus

  • max_output_messages


    En mode auto, nombre de messages autorisés avant l’envoi d’un fichier.

    En savoir plus

Chaque image de cette page s’agrandit

Les captures de conversation sont petites volontairement. Cliquez sur l’une d’elles pour la voir en taille réelle.

Les trois champs en un coup d’œil

Champ Où le définir Type Par défaut Ce qu’il décide
max_output_bytes racine uniquement entier 524288 Combien d’octets de sortie le bot conserve par commande
output racine et bouton auto | text | file auto Si le résultat arrive en messages de conversation ou en un fichier .txt
max_output_messages racine uniquement entier, 1–10 2 En mode auto, le nombre de messages autorisés avant l’envoi d’un fichier

Les trois se placent dans votre fichier de configuration, à la racine, à côté de shell et timeout, et non sous telegram. La liste complète des clés racine se trouve sur la page Configuration.

max_output_bytes

C’est votre propre limite, et elle s’applique en premier. Pendant qu’une commande tourne, le bot conserve au plus ce nombre d’octets de sa sortie, compté séparément pour la sortie normale et la sortie d’erreur. Le reste est jeté, mais la commande continue jusqu’à la fin ou jusqu’à son timeout.

Conserver jusqu’à 2 Mo de sortie par commande

config.yaml
max_output_bytes: 2097152 # (1)!
  1. 2 Mo au lieu des 512 Ko par défaut. Compté séparément pour la sortie normale et pour la sortie d’erreur.

Ce que vous voyez dans la conversation

Lorsque la limite a été atteinte, le résultat l’indique sur sa propre ligne, juste sous le résumé. Tout ce qui se trouve au-dessus de (output truncated) est la partie conservée par le bot ; le reste du journal n’a jamais quitté le serveur.

Un résultat Telegram qui indique que la sortie est tronquée

L’augmenter n’aide que si un fichier est envoyé

Un message de conversation ne peut jamais transporter plus de 4096 octets : un max_output_bytes plus grand ne vous parvient donc en entier que lorsque le résultat arrive en fichier .txt. Associez-le à output: auto (le mode par défaut) ou à output: file.

output

output choisit le mode de livraison. Il accepte trois valeurs et c’est le seul champ de sortie que vous pouvez aussi placer sur un bouton.

Des messages texte tant que le résultat est court, un fichier .txt sinon. C’est le mode par défaut, celui que vous gardez si vous n’écrivez rien.

Laisser le bot choisir pour chaque résultat

config.yaml
shell: /bin/bash
timeout: 60s
output: auto # (1)!
max_output_messages: 2 # (2)!
  1. Décider pour chaque résultat au lieu d’imposer une seule livraison.
  2. Le point de bascule. Deux messages ou moins restent dans la conversation ; au-delà, le résultat devient un seul fichier.

Le mode auto garde les sorties courtes en texte et envoie les plus longues en fichier

Toujours des messages de conversation, quelle que soit la longueur du résultat. Le bot s’arrête après dix messages et ajoute une note indiquant que la suite a été coupée.

Tout garder dans la conversation

config.yaml
shell: /bin/bash
timeout: 60s
output: text # (1)!
  1. max_output_messages est ignoré ici, car le bot ne passe jamais au fichier de lui-même.

Un résultat de commande livré en messages Telegram

Toujours un seul fichier .txt, même pour un résultat d’une ligne. Le résumé accompagne le fichier en légende.

Envoyer chaque résultat en pièce jointe

config.yaml
shell: /bin/bash
timeout: 60s
output: file # (1)!
  1. Chaque bouton envoie désormais une pièce jointe, même les plus rapides. Placez plutôt ce réglage sur des boutons précis si c’est trop.

Un résultat de commande livré en fichier Telegram

L’omettre revient à écrire auto

Vous n’avez jamais besoin d’écrire output. Une configuration qui fonctionnait avant l’existence de ce champ se comporte exactement comme avant.

max_output_messages

Ce champ ne compte qu’en mode auto, et il n’existe qu’à la racine. C’est le nombre de messages que le bot accepte d’envoyer avant de renoncer aux messages et d’envoyer un seul fichier. Les valeurs permises vont de 1 à 10 ; la valeur par défaut est 2.

Envoyer un fichier dès qu’un second message est nécessaire

config.yaml
output: auto
max_output_messages: 1 # (1)!
  1. Le réglage le plus strict. Seul un résultat qui tient dans un message reste dans la conversation.

Ce que vous voyez dans la conversation

Un résultat qui tient dans la limite reste en messages de conversation. Dès qu’il faudrait un message de plus, tout le résultat arrive en un seul fichier .txt, et aucun message partiel n’est envoyé.

Un résultat court en message à côté d’un résultat plus long en fichier

C’est un champ réservé à la racine

Un bouton ne peut pas définir max_output_messages. Placez-le à la racine et laissez les boutons qui ont besoin d’autre chose définir output: text ou output: file.

La racine et le bouton ensemble

Un bouton peut porter son propre output. Rien d’autre à propos de la sortie ne se règle bouton par bouton. Le mode effectif est simplement :

Comment le mode effectif est choisi

Ordre de priorité
button output  →  root output  →  auto
output racine output du bouton Ce qui se passe réellement
non défini ou auto non défini auto
non défini ou auto auto auto
non défini ou auto text text
non défini ou auto file file
text non défini text
text auto auto
text text text
text file file
file non défini file
file auto auto
file text text
file file file

Les sections ci-dessous parcourent les douze combinaisons, avec un exemple chacune.

Quand la racine est auto

Cela comprend le cas où la racine ne dit rien du tout, car un output absent signifie auto.

La racine est auto, le bouton ne dit rien

Le cas de tous les jours. Les résultats courts restent dans la conversation ; un résultat qui demanderait plus de max_output_messages messages arrive en fichier.

Un bouton simple sous une racine simple

config.yaml
output: auto
max_output_messages: 2

menu:
  - name: Disk usage
    type: button
    function: command
    command: "df -h"

Ce que vous voyez dans la conversation

df -h affiche quelques lignes : le résultat tient dans un message et reste dans la conversation sous forme de bloc de code, avec le résumé au-dessus.

L’utilisation du disque renvoyée en un seul message Telegram

La racine est auto, le bouton dit auto

Écrire auto sur le bouton ne change rien ici. Cela ne vaut la peine que si vous voulez que ce bouton reste en auto, quoi que devienne la racine plus tard.

Écrire le mode par défaut sur le bouton

config.yaml
output: auto

menu:
  - name: Disk usage
    type: button
    function: command
    command: "df -h"
    output: auto # (1)!
  1. Même comportement qu’en l’omettant aujourd’hui, mais ce bouton le garde même si la racine passe à text ou file plus tard.

Ce que vous voyez dans la conversation

Exactement le comportement automatique : du texte tant que le résultat est court, un fichier dès qu’il dépasse la limite autorisée. Sur un serveur avec de nombreux disques montés, ce même bouton peut vous envoyer un fichier.

Le même bouton en message et en fichier

La racine est auto, le bouton dit text

Utilisez ceci pour un bouton dont vous voulez toujours lire la sortie sur place, même lorsqu’elle est un peu longue : une liste d’état que vous faites défiler plutôt que de télécharger.

Garder un bouton dans la conversation

config.yaml
output: auto

menu:
  - name: Service status
    type: button
    function: command
    command: "systemctl status nginx --no-pager"
    output: text # (1)!
  1. Jamais de fichier, quoi que dise max_output_messages.

Ce que vous voyez dans la conversation

Le résultat est divisé en plusieurs messages, chacun répondant au précédent, afin que l’ordre ne soit jamais perdu. Les boutons restent sur la dernière partie.

Un long état de service divisé en trois messages Telegram

La racine est auto, le bouton dit file

Le choix habituel pour les journaux et les sauvegardes : vous ne voulez presque jamais les lire dans la conversation, et un fichier est plus facile à conserver.

Toujours télécharger celui-ci

config.yaml
output: auto

menu:
  - name: Nginx logs
    type: button
    function: command
    command: "journalctl -u nginx -n 2000 --no-pager"
    output: file # (1)!
  1. Le reste du menu continue de se comporter automatiquement. Seul ce bouton est fixé au fichier.

Ce que vous voyez dans la conversation

Une pièce jointe dont la légende indique le nom du bouton, le code de sortie et la durée. Appuyez dessus pour lire tout le journal, ou gardez-le pour plus tard.

Les journaux Nginx livrés en fichier Telegram

Quand la racine est output: text

Chaque bouton reste dans la conversation, sauf s’il dit le contraire. Choisissez ce mode si vous n’aimez pas télécharger des fichiers sur votre téléphone.

La racine est text, le bouton ne dit rien

Des messages de conversation partout

config.yaml
output: text

menu:
  - name: Uptime
    type: button
    function: command
    command: "uptime"

Ce que vous voyez dans la conversation

Un message court, car uptime affiche une seule ligne. Les résultats plus longs sont simplement divisés en davantage de messages, jusqu’à dix.

Uptime renvoyé en un seul message Telegram

La racine est text, le bouton dit auto

Le bouton retrouve la bascule automatique : ce seul bouton peut donc envoyer un fichier alors que le reste du menu ne le fait jamais. Le max_output_messages de la racine décide du point de bascule.

Un bouton autorisé à envoyer un fichier quand il devient long

config.yaml
output: text
max_output_messages: 3 # (1)!

menu:
  - name: Package list
    type: button
    function: command
    command: "dpkg -l"
    output: auto
  1. Seul ce bouton lit cette limite, car c’est le seul en mode auto.

Ce que vous voyez dans la conversation

Une liste de paquets courte arrive en trois messages au maximum. Sur un serveur bien rempli, le même bouton dépasse la limite et envoie un seul fichier.

Une liste de paquets en messages et en fichier

La racine est text, le bouton dit text

Identique à ne rien dire, mais l’intention est écrite. Utile dans une longue configuration où vous ne voulez pas qu’une modification ultérieure à la racine change ce bouton.

Fixer un bouton aux messages de conversation

config.yaml
output: text

menu:
  - name: Last logins
    type: button
    function: command
    command: "last -n 20"
    output: text

Ce que vous voyez dans la conversation

Toujours des messages de conversation, jusqu’à dix, quoi que devienne la racine plus tard.

Les connexions récentes renvoyées en message Telegram

La racine est text, le bouton dit file

Un bouton téléchargeable dans un menu tout en messages

config.yaml
output: text

menu:
  - name: Full system report
    type: button
    function: command
    command: "/usr/local/bin/report.sh"
    output: file
    timeout: "5m" # (1)!
  1. Un rapport peut prendre du temps : ce bouton reçoit donc un délai plus long que le délai global.

Ce que vous voyez dans la conversation

La seule pièce jointe d’un menu par ailleurs entièrement en messages. La légende indique la durée du rapport, ce qui est utile lorsqu’il tourne plusieurs minutes.

Un rapport système complet livré en fichier Telegram

Quand la racine est output: file

Chaque résultat est un fichier, même d’une seule ligne. Cela convient à un bot surtout utilisé pour des rapports et des archives.

La racine est file, le bouton ne dit rien

Des fichiers partout

config.yaml
output: file

menu:
  - name: Uptime
    type: button
    function: command
    command: "uptime"

Ce que vous voyez dans la conversation

Même une seule ligne de sortie arrive en pièce jointe. La légende porte toujours le résumé : vous pouvez lire le code de sortie sans ouvrir le fichier.

Uptime livré en petit fichier Telegram

Même les résultats minuscules deviennent des téléchargements

Une réponse d’une ligne arrive en pièce jointe qu’il faut ouvrir. Si cela vous gêne, laissez la racine sur auto et mettez output: file seulement sur les boutons qui en ont besoin.

La racine est file, le bouton dit auto

Le bouton échappe à la règle du tout-fichier et se comporte de nouveau normalement.

Laisser une vérification rapide lisible

config.yaml
output: file
max_output_messages: 2

menu:
  - name: Uptime
    type: button
    function: command
    command: "uptime"
    output: auto # (1)!
  1. Retour à la bascule automatique, pour ce bouton uniquement.

Ce que vous voyez dans la conversation

La réponse d’une ligne est courte : elle reste dans la conversation en message, alors que tous les autres boutons du menu envoient encore des fichiers.

Uptime de retour dans la conversation en message

La racine est file, le bouton dit text

Forcer un bouton à revenir dans la conversation

config.yaml
output: file

menu:
  - name: Who is logged in
    type: button
    function: command
    command: "who"
    output: text

Ce que vous voyez dans la conversation

Un message, jamais une pièce jointe, quelle que soit la longueur de la liste des utilisateurs connectés. Au-delà de dix messages, le bot signale que la suite a été coupée.

Les utilisateurs connectés renvoyés en message Telegram

La racine est file, le bouton dit file

Répéter la valeur racine. C’est sans danger et cela garde le bouton correct si vous assouplissez la racine plus tard.

Un bouton qui doit toujours être un fichier

config.yaml
output: file

menu:
  - name: Database dump log
    type: button
    function: command
    command: "cat /var/log/pg_dump.log"
    output: file

Ce que vous voyez dans la conversation

Une pièce jointe, exactement ce que la racine demandait déjà. L’écrire sur le bouton fait survivre l’intention à un changement à la racine.

Un journal de sauvegarde de base de données livré en fichier Telegram

À quoi ressemble le fichier

Lorsqu’un résultat est livré en fichier, vous recevez une pièce jointe et une courte légende.

  • Nom — le nom du bouton en minuscules avec des tirets, puis la date et l’heure en UTC, par exemple nginx-logs-20260913-091204.txt.
  • Légende — le même résumé que celui affiché en haut d’un message de conversation : nom du bouton, code de sortie, durée, et la note de délai ou de troncature lorsqu’il y en a une.
  • Corps — ce résumé de nouveau, puis une section --- stdout ---, puis une section --- stderr --- lorsque la commande y a écrit quelque chose.

Dans le fichier téléchargé

nginx-logs-20260913-091204.txt
Button: Nginx logs
Exit: 0
Duration: 316ms

--- stdout ---
2026-09-13T09:11:58 nginx: worker process started
...

--- stderr ---
2026-09-13T09:12:01 nginx: warning: duplicate server name

Limites que vous ne pouvez pas changer

C’est Telegram qui fixe le plafond, pas le bot

  • Un message de conversation contient au plus 4096 octets.
  • En mode text, le bot envoie au plus dix messages et termine par (output too long; showing first N bytes).
  • Quel que soit le max_output_messages écrit, dix messages restent le plafond absolu.

Si un envoi échoue, le bot réessaie d’abord

Lorsque le fichier ne peut pas être envoyé, faute de réseau ou parce que Telegram demande de ralentir, le bot réessaie automatiquement avec une attente croissante. Ce n’est qu’après avoir abandonné qu’il revient aux messages de conversation, pour qu’une courte coupure ne coûte pas le résultat. Voir Nouvelles tentatives d’envoi.

Exécuter une commande suit le réglage racine

Le bouton $ >_ Run Command ne fait pas partie de votre menu : il n’a donc pas de output propre. Il suit toujours les output et max_output_messages de la racine. Consultez Menu → Exécuter une commande.

  • Configuration


    Toutes les clés racine, dont les trois champs de sortie dans un tableau.

    Configuration

  • Bouton


    Ce qu’un bouton peut remplacer, dont output.

    Bouton

  • Menu


    Comment les résultats côtoient le menu, et ce que fait Exécuter une commande.

    Menu

  • Shell


    Le shell, le dossier de travail et le délai utilisés par vos commandes.

    Shell

  • Nouvelles tentatives d’envoi


    Ce qui se passe quand un envoi à Telegram échoue en cours de route.

    Nouvelles tentatives d’envoi