Перейти к содержимому

Шаблоны и подстановки ​

Шаблон задаёт полный текст уведомления. В него можно включить рабочий текст после преобразований, исходный запрос, название канала, время приёма, поля JSON, переменные, важность и метки.

Подключите шаблон ​

  1. Откройте «Шаблоны» и нажмите «Создать шаблон».
  2. Укажите название и формат уведомления: обычный текст или Markdown.
  3. Напишите текст. Справа выберите подстановку: она вставится в позицию курсора или заменит выделенный фрагмент. На узком экране список находится под текстом.
  4. Сохраните шаблон и выберите его у нужного входящего канала.

В организации создавайте и выбирайте шаблон в её разделе «Шаблоны». Личные и организационные каталоги разделены.

Активный шаблон полностью заменяет стандартный текст уведомления. Для рабочего текста добавьте {{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": "Температура выше допустимой"
}

В действиях совпавшего правила добавьте две операции в таком порядке:

  1. «Извлечь переменную из JSON»: путь site.name, имя переменной site.
  2. «Взять текст из 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.

Если уведомление не пришло, откройте диагностику доставки.