Шаблоны и подстановки
Шаблон задаёт полный текст уведомления. В него можно включить рабочий текст после преобразований, исходный запрос, название канала, время приёма, поля JSON, переменные, важность и метки.
Подключите шаблон
- Откройте «Шаблоны» и нажмите «Создать шаблон».
- Укажите название и формат уведомления: обычный текст или Markdown.
- Напишите текст. Справа выберите подстановку: она вставится в позицию курсора или заменит выделенный фрагмент. На узком экране список находится под текстом.
- Сохраните шаблон и выберите его у нужного входящего канала.
В организации создавайте и выбирайте шаблон в её разделе «Шаблоны». Личные и организационные каталоги разделены.
Активный шаблон полностью заменяет стандартный текст уведомления. Для рабочего текста добавьте {{message}}, для неизменённого исходного тела — {{raw_message}}. В истории раздельно сохраняются исходный запрос, обработанный текст и итоговое уведомление на момент приёма.
Победившее правило обработки может выбрать другой шаблон или явно отключить его. Если действие шаблона отсутствует, используется шаблон канала. Явное «Без шаблона» в правиле отправляет рабочий текст без стандартного заголовка. Если же шаблон просто не выбран у канала и правило его не переопределяет, используется стандартное уведомление с названием канала.
Найдите шаблон и завершите редактирование
В личном каталоге используйте поиск, сортировку по названию или времени создания и страницы по 10, 25 или 50 строк. При изменении этих параметров список возвращается на первую страницу. Поиск и выбранная страница отражаются в адресе списка; они не переключают личный каталог на организационный. Если ничего не найдено, очистите поиск и проверьте контекст.
Текст в открытом редакторе меняет черновик, а не сохранённый шаблон. При переходе в другой раздел с изменениями можно выбрать «Отмена», «Не сохранять» или «Сохранить и продолжить». Последний вариант продолжает переход только после успешной проверки и записи. В организации предупреждение действует и при закрытии изменённой формы. Перед закрытием личного окна редактора или перезагрузкой сохраните шаблон явно: восстановления черновика после перезагрузки нет.
После изменения общего шаблона проверьте новое событие во всех нужных каналах. Старые уведомления сохраняют прежний итоговый текст; правило может выбрать другой шаблон и не использовать изменённый.
Доступные подстановки
| Подстановка | Значение |
|---|---|
{{message}} | Рабочий текст после преобразований правила; без преобразований совпадает с исходным телом. |
{{raw_message}} | Исходное тело запроса, включая пробелы и переносы. |
{{vars.site}} | Переменная site, извлечённая действием правила; отсутствующая даёт пустую строку. |
{{importance}} | info, warning, error или critical; незаданная важность даёт пустую строку. |
{{tags}} | Названия меток в порядке набора правила, через запятую и пробел; без меток — пустая строка. |
{{channel_name}} | Название входящего канала. |
{{date(Y-m-d H:i:s)}} | Время приёма в UTC, например 2026-09-07 12:30:00. |
{{json.service}} | Значение поля service входящего JSON. |
{{json.event.status}} | Вложенное поле status объекта event. |
{{json.items.0.name}} | Поле name первого элемента массива items. |
Формат внутри date(...) можно изменить вручную. Используется синтаксис PHP DateTimeInterface::format без кавычек: Y — год, m — месяц, d — день, H — часы, i — минуты, s — секунды.
Пример текстового шаблона:
text
Канал: {{channel_name}}
Принято: {{date(Y-m-d H:i:s)}} UTC
{{message}}Регистр значим; пробелы вокруг выражения допустимы. Неизвестные выражения остаются как есть. Значения вставляются дословно, без экранирования и повторной обработки. Если выбран Markdown, символы разметки в подставленных значениях могут влиять на оформление.
Входящий JSON
Передавайте Content-Type: application/json и корректный JSON. Например:
bash
curl \
--request POST \
--header 'Content-Type: application/json' \
--data-binary '{"service":"depesher","event":{"status":"success"},"items":[{"name":"worker"}]}' \
'https://depesher.ru/w/ВАШ_PUBLIC_ID'Привяжите к каналу такой шаблон:
text
Сервис: {{json.service}}
Статус: {{json.event.status}}
Компонент: {{json.items.0.name}}Получатель увидит:
text
Сервис: depesher
Статус: success
Компонент: workerДля собственного поля укажите путь в поле «Свой путь в JSON», например event.status, и нажмите «Вставить поле JSON». Уровни разделяются точками, индексы массивов начинаются с 0. Сегменты пути состоят из букв, цифр, дефиса и подчёркивания. Ключ с точкой внутри таким путём адресовать нельзя.
Отсутствующее поле, значение null или сообщение с другим Content-Type дают пустую строку. Строки вставляются дословно, числа и логические значения — текстом, объекты и массивы — компактным JSON. Выражения и подставленные значения не исполняются.
JSON можно отправлять и без шаблона: он проверяется, а исходное тело включается в стандартное уведомление. Допускается любое JSON-значение, включая массив, строку, число, логическое значение и null. При повторении ключа используется последнее значение.
Преобразования и переменные
Для входа:
json
{
"site": {
"name": "Склад №1"
},
"message": "Температура выше допустимой"
}В действиях совпавшего правила добавьте две операции в таком порядке:
- «Извлечь переменную из JSON»: путь
site.name, имя переменнойsite. - «Взять текст из JSON»: путь
message.
В том же правиле задайте важность «Критично» и набор с заранее созданной меткой температура. Используйте текстовый шаблон:
text
{{vars.site}}: {{message}}
Важность: {{importance}}
Метки: {{tags}}Итог:
text
Склад №1: Температура выше допустимой
Важность: critical
Метки: температураДля сравнения {{raw_message}} вставит весь исходный JSON, а {{json.site.name}} продолжит читать исходное поле независимо от изменений рабочего текста.
Переменные также можно извлекать именованными группами операции «Извлечь переменные регулярным выражением». Например, server=(?<server>[A-Za-z0-9-]+) извлекает web-01 из server=web-01; вставить его можно как {{vars.server}}.
Операция «Задать текст сообщения» задаёт буквальный текст и не раскрывает подстановки. Динамические выражения пишите в шаблоне. Проверьте результат серверной проверкой и реальным HTTP-запросом.
Ограничения и ошибки
- Пустое JSON-тело запрещено всегда. Пустое текстовое тело можно использовать, если эффективный шаблон или преобразования создают текст уведомления. Без шаблона пустой или пробельный рабочий текст вызывает
message_body_required. - Пустой промежуточный текст после «Задать текст сообщения» допустим: его могут заменить следующие операции либо использовать шаблон с другими подстановками. Всегда проверяйте окончательный результат.
- JSON, исходный и промежуточный текст обработки, переменные и итоговое уведомление ограничены 1 048 576 байтами. Превышение лимита возвращает HTTP 413; возможны коды
message_body_too_large,event_rule_result_too_largeиnotification_body_too_large. Этот технический предел не отменяет ограничений вашего тарифа. - Глубина JSON-декодера ограничена 64. Повреждённый JSON, превышение глубины и числа вне диапазона PHP float возвращают HTTP 400 с кодом
invalid_message_json. - Нулевой байт в строковой подстановке вызывает
invalid_notification_content.
Если уведомление не пришло, откройте диагностику доставки.