--- url: /commands/actions/message.md description: >- Действие «Отправка сообщения» — шаблон, медиа, кнопки, опрос, куда отправлять, замена сообщения кнопкой, авто-удаление. --- # Отправка сообщения
Самый частый тип действия: бот отправляет сообщение по шаблону. К сообщению можно добавить кнопки, картинку, опрос, выбрать, куда его отправить, и сколько оно проживет.
## Настройки { #settings } | Настройка | Описание | |---|---| | **Шаблон** | Текст сообщения на языке шаблонов. Режим (Rich или Text) и синтаксис (Markdown или HTML) выбираются над полем — см. [Редактор шаблона](/templates/editor#mode) | | **Медиа** | Фото, GIF, видео или документ. Только в режиме Text — в режиме Rich картинки вставляются [прямо в шаблон](/templates/advanced/rich#media) | | **Кнопки** | Кнопки под сообщением, настроенные без кода | | **Куда отправить** | Ответом, в чат, в топик, в ЛС или эфемерно — см. ниже | | **Заменять сообщение с нажатой кнопкой** | Если действие запущено кнопкой, бот изменит сообщение с этой кнопкой, а не отправит новое | | **Удалить через** | Бот удалит сообщение через N секунд (до суток). 0 — не удалять | | **Без звука** | Сообщение придет без уведомления | | **Закрепить** | Бот закрепит сообщение (нужно право закреплять) | | **Опрос** | Вместо обычного сообщения — опрос Telegram | ## Куда отправить { #target } | Вариант | Что происходит | |---|---| | Ответом | Бот отвечает на сообщение с командой | | В чат | Отдельным сообщением в чат, без ответа | | В топик | В выбранный топик форума — например, в «Заявки» | | В ЛС | В личные сообщения вызвавшему. Работает, только если участник хоть раз запускал бота | | Эфемерно | Видит только вызвавший. Telegram может не доставить такое сообщение, если человек не в сети | ## Кнопки { #buttons } Кнопки можно добавить двумя способами, и они объединятся: 1. **В настройках действия** — блок **«Кнопки»**: стиль, надпись, эмодзи, ссылка или действие, неактивность и номер ряда (от 1 до 8). 2. **Из шаблона** — функциями `button`, `url_button`, `copy_button`. Так удобно, когда кнопка зависит от данных: например, «Следующая страница» неактивна на последней странице. ```template {% do button('SECONDARY', 'prev', null, '⬅️', 'self', page == 0) %} {% do button('SECONDARY', 'next', null, '➡️', 'self', page == lastPage) %} ``` Всего под сообщением — до 25 кнопок. Подробнее — в статье [Кнопки и меню выбора](../components). ## Картинка к сообщению { #media } **В режиме Rich** картинки, видео и документы вставляются прямо в текст шаблона — сколько угодно и в любом месте: ```template # Турнир клуба  Регистрация до пятницы! ``` **В режиме Text** в сообщении может быть одно медиа, и оно задается в поле **«Медиа»**: тип (фото, GIF, видео, документ) и ссылка `https://…`. Текст шаблона станет подписью. Подпись к медиа в Telegram — до 1024 символов; если текст длиннее, бот отправит медиа и текст двумя сообщениями. ## Опрос { #poll } Включите блок **«Опрос»**, чтобы бот отправил опрос Telegram: | Поле | Описание | |---|---| | Вопрос | Текст вопроса | | Варианты | До 12 вариантов ответа | | Анонимный | Не показывать, кто как голосовал | | Несколько ответов | Можно выбрать больше одного варианта | ## Замена сообщения кнопкой { #edit } Флажок **«Заменять сообщение с нажатой кнопкой»** нужен для листания страниц и меню: участник нажимает «➡️», и вместо нового сообщения обновляется старое. Если действие вызвано командой, а не кнопкой, флажок ни на что не влияет. ::: info Смена режима Если исходное сообщение было в режиме Rich, а действие кнопки — в режиме Text (или наоборот), Telegram не может просто заменить текст. Тогда бот удалит старое сообщение и отправит новое. ::: ## Параметры и кнопки { #parameters } Все, что действие сохранило через `parameters.store(…)`, бот привязывает к отправленному сообщению. Когда кто-то нажмет кнопку под этим сообщением, действие кнопки получит эти данные: ```template {% do parameters.store('page', 0) %} Страница 1 {% do button('PRIMARY', 'next', 'Дальше', '➡️', 'self') %} ``` Подробнее — в статье [Параметры](/templates/storage/parameters). ## Пустой результат { #empty } Если шаблон ничего не вывел и не добавил ни кнопок, ни медиа, бот ничего не отправит. Так можно сделать действие, которое иногда молчит: ```template {% if member.warnCount > 0 %}У вас {{ member.warnCount }} предупреждения{% endif %} ``` Чтобы явно остановить действие без ответа, используйте `{% return null %}`. ## Пример: профиль участника { #example } ```template # {{ member.name }} {{ table([ ['Уровень', member.rank.level], ['Место в чате', member.rank.rank], ['Предупреждения', member.warnCount], ['В чате с', date(member.joinedAt, 'd MMMM yyyy')] ], {bordered: true, compact: true}) }} {% do url_button('Все участники', 'https://example.com/leaderboard') %} ```