Управление выводом¶
Когда кнопка заканчивает работу, боту нужно положить
результат в ваш чат. Telegram никогда не принимает больше 4096 байт в одном
сообщении, поэтому длинный результат приходит либо несколькими ответными
сообщениями, либо одним файлом .txt, который можно открыть и скачать.
Что произойдёт, решают три необязательных поля. Можно не указывать ни одного — бот всё равно поведёт себя разумно.
Одно правило, которое стоит запомнить
Кнопка главнее. Если кнопка задаёт output, будет именно так. Если на
кнопке ничего не сказано, применяется корневое значение. Если и в корне
ничего нет, бот использует auto.
Каждая картинка на этой странице открывается
Снимки чата специально небольшие. Нажмите на любой, чтобы увидеть его в полный размер.
Три поля коротко¶
| Поле | Где задаётся | Тип | По умолчанию | Что решает |
|---|---|---|---|---|
max_output_bytes |
только в корне | целое число | 524288 |
Сколько байт вывода бот сохраняет для каждой команды |
output |
корень и кнопка | auto | text | file |
auto |
Придёт результат сообщениями в чат или одним файлом .txt |
max_output_messages |
только в корне | целое число, 1–10 |
2 |
В режиме auto — сколько сообщений разрешено, прежде чем вместо них будет отправлен файл |
Все три живут в вашем файле конфигурации, в
корне, рядом с shell и timeout, а не внутри telegram. Полный список
корневых ключей — на странице Конфигурация.
max_output_bytes¶
Это ваш собственный лимит, и он действует первым. Пока команда работает, бот
сохраняет не больше этого количества байт её вывода, отдельно для обычного
вывода и для вывода ошибок. Всё сверх этого отбрасывается, но сама команда
продолжает работать до завершения или до своего timeout.
Сохранять до 2 МБ вывода на команду
- 2 МБ вместо 512 КБ по умолчанию. Считается отдельно для обычного вывода и для вывода ошибок.
Что вы увидите в чате
Увеличивать его есть смысл только когда приходит файл
В сообщение чата никогда не поместится больше 4096 байт, поэтому больший
max_output_bytes доходит до вас целиком только тогда, когда результат
приходит файлом .txt. Используйте его вместе с output: auto (по
умолчанию) или output: file.
output¶
output выбирает способ доставки. Он принимает три значения и это единственное
поле вывода, которое можно задать и на отдельной кнопке.
Текстовые сообщения, пока результат короткий, и один файл .txt, когда он
длинный. Это значение по умолчанию — то, что действует, если вы ничего не
написали.
Пусть бот сам решает для каждого результата
- Решать для каждого результата, а не навязывать один способ доставки.
- Точка переключения. Два сообщения или меньше остаются в чате; всё, что длиннее, становится одним файлом.
Всегда сообщения в чате, каким бы длинным ни был результат. Бот останавливается после десяти сообщений и добавляет пометку, что остальное обрезано.
Всегда один файл .txt, даже для результата в одну строку. Сводка идёт
подписью к файлу.
Не указать его — то же самое, что написать auto
Писать output не обязательно. Конфигурация, которая работала до появления
этого поля, ведёт себя точно так же.
max_output_messages¶
Это поле имеет значение только в режиме auto и существует только в корне. Это
число сообщений в чате, которые бот готов отправить, прежде чем откажется от
сообщений и отправит один файл. Допустимые значения — от 1 до 10; по
умолчанию 2.
Отправлять файл, как только результату нужно второе сообщение
- Самая строгая настройка. В чате остаётся только результат, который умещается в одно сообщение.
Что вы увидите в чате
Это поле есть только в корне
Кнопка не может задать max_output_messages. Укажите его в корне, а
кнопкам, которым нужно другое поведение, задайте output: text или
output: file.
Корень и кнопка вместе¶
У кнопки может быть свой output. Больше ничего про вывод на кнопке задать
нельзя. Действующий режим выбирается просто:
Корневой output |
output кнопки |
Что происходит на самом деле |
|---|---|---|
не задан или auto |
не задан | auto |
не задан или auto |
auto |
auto |
не задан или auto |
text |
text |
не задан или auto |
file |
file |
text |
не задан | text |
text |
auto |
auto |
text |
text |
text |
text |
file |
file |
file |
не задан | file |
file |
auto |
auto |
file |
text |
text |
file |
file |
file |
Разделы ниже проходят все двенадцать сочетаний, по одному примеру на каждое.
Когда в корне auto¶
Сюда же относится случай, когда в корне вообще ничего не сказано: отсутствующий
output означает auto.
Корень auto, на кнопке ничего¶
Обычный случай. Короткие результаты остаются в чате; результат, которому нужно
больше сообщений, чем max_output_messages, приходит файлом.
Простая кнопка при простом корне
Что вы увидите в чате
Корень auto, на кнопке auto¶
Написать auto на кнопке здесь ничего не меняет. Это стоит делать только
тогда, когда вы хотите, чтобы кнопка осталась в auto, чем бы позже ни стал
корень.
Явно указываем значение по умолчанию на кнопке
output: auto
menu:
- name: Disk usage
type: button
function: command
command: "df -h"
output: auto # (1)!
- Сегодня поведение такое же, как если поле не указывать, но эта кнопка
сохранит его, даже если корень позже сменится на
textилиfile.
Что вы увидите в чате
Корень auto, на кнопке text¶
Используйте это для кнопки, вывод которой вы всегда хотите читать прямо в чате, даже если он немного длинный — например список состояния, который вы пролистываете, а не скачиваете.
Оставить одну кнопку в чате
output: auto
menu:
- name: Service status
type: button
function: command
command: "systemctl status nginx --no-pager"
output: text # (1)!
- Никогда файл, что бы ни было в
max_output_messages.
Что вы увидите в чате
Корень auto, на кнопке file¶
Обычный выбор для журналов и резервных копий: читать их в чате почти никогда не хочется, а файл проще сохранить.
Эту всегда скачиваем
output: auto
menu:
- name: Nginx logs
type: button
function: command
command: "journalctl -u nginx -n 2000 --no-pager"
output: file # (1)!
- Остальное меню по-прежнему работает автоматически. Только эта кнопка закреплена на файле.
Что вы увидите в чате
Когда в корне output: text¶
Каждая кнопка остаётся в чате, если не сказано иное. Выбирайте это, если не любите скачивать файлы на телефон.
Корень text, на кнопке ничего¶
Сообщения в чате везде
Что вы увидите в чате
Корень text, на кнопке auto¶
Кнопка снова включает автоматическое переключение, поэтому именно она может
прислать файл, хотя остальное меню этого никогда не делает. Где произойдёт
переключение, решает max_output_messages из корня.
Одной кнопке разрешено отправить файл, когда вывод станет длинным
output: text
max_output_messages: 3 # (1)!
menu:
- name: Package list
type: button
function: command
command: "dpkg -l"
output: auto
- Разрешённое число сообщений читает только эта кнопка, потому что она
единственная в режиме
auto.
Что вы увидите в чате
Корень text, на кнопке text¶
То же самое, что ничего не писать, но намерение записано. Полезно в длинной конфигурации, где вы не хотите, чтобы поздняя правка в корне изменила эту кнопку.
Закрепляем кнопку на сообщениях в чате
Корень text, на кнопке file¶
Одна скачиваемая кнопка в меню, где всё остальное — сообщения
output: text
menu:
- name: Full system report
type: button
function: command
command: "/usr/local/bin/report.sh"
output: file
timeout: "5m" # (1)!
- Отчёт может готовиться долго, поэтому эта кнопка получает больше времени, чем общий тайм-аут.
Что вы увидите в чате
Когда в корне output: file¶
Каждый результат приходит файлом, даже если он в одну строку. Это подходит боту, которым вы пользуетесь в основном для отчётов и архивов.
Корень file, на кнопке ничего¶
Файлы везде
Что вы увидите в чате
Даже крошечные результаты нужно скачивать
Ответ в одну строку приходит вложением, которое придётся открыть. Если это
раздражает, оставьте в корне auto и указывайте output: file только на
тех кнопках, где это нужно.
Корень file, на кнопке auto¶
Кнопка выходит из правила «только файлы» и снова ведёт себя обычным образом.
Пусть быстрая проверка останется читаемой
output: file
max_output_messages: 2
menu:
- name: Uptime
type: button
function: command
command: "uptime"
output: auto # (1)!
- Для этой кнопки — снова автоматическое переключение.
Что вы увидите в чате
Корень file, на кнопке text¶
Вернуть одну кнопку в чат
Что вы увидите в чате
Корень file, на кнопке file¶
Повторение корневого значения. Вреда нет, и кнопка останется правильной, если позже вы ослабите корень.
Кнопка, которая всегда должна быть файлом
Что вы увидите в чате
Как выглядит файл¶
Когда результат приходит файлом, вы получаете одно вложение и короткую подпись.
- Имя — имя кнопки строчными буквами через дефисы, затем дата и время в
UTC, например
nginx-logs-20260913-091204.txt. - Подпись — та же сводка, которую вы увидели бы в начале сообщения в чате: имя кнопки, код выхода, длительность, а также пометка о тайм-ауте или обрезке, если она есть.
- Тело — снова та же сводка, затем раздел
--- stdout ---, а затем раздел--- stderr ---, если команда что-то в него написала.
Внутри скачанного файла
Ограничения, которые нельзя изменить¶
Верхний предел ставит Telegram, а не бот
- Одно сообщение в чате вмещает не больше 4096 байт.
- В режиме
textбот отправляет не больше десяти сообщений и заканчивает строкой(output too long; showing first N bytes). - Какое бы
max_output_messagesвы ни написали, десять сообщений остаются жёстким пределом.
Если отправка не удалась, бот сначала повторяет попытку
Когда файл отправить невозможно — нет сети, Telegram просит подождать — бот автоматически повторяет попытку с растущей паузой. Только сдавшись, он возвращается к сообщениям в чате, чтобы короткий сбой не стоил вам результата. См. Повторные попытки доставки.
Выполнение команды берёт корневую настройку¶
Кнопка $ >_ Выполнить команду не входит в ваше меню, поэтому у неё нет
своего output. Она всегда следует корневым output и
max_output_messages. См. Меню → Выполнение команды.
Похожие¶
-
Конфигурация
Каждый корневой ключ, включая три поля вывода в одной таблице.
-
Кнопка
Что кнопка может переопределить, в том числе
output. -
Меню
Как результаты стоят рядом с меню и что делает «Выполнить команду».
-
Shell
Оболочка, рабочий каталог и тайм-аут, с которыми выполняются ваши команды.
-
Повторные попытки доставки
Что происходит, если отправка Telegram не удаётся на середине пути.














