Работа со Smart Values в Jira Automation: практические сценарии и примеры (Часть 2)
Это — вторая часть цикла “Начало работы с Jira Automation”, в которой мы разбираем Smart Values и учимся применять их на практике внутри автоматизаций Jira.
Меня зовут Егор Наумов, я менеджер проектов в BetBoom, в команде «Регистрация, идентификация, платформа». Уже больше полугода я отвечаю за координацию команды и активно развиваю автоматизацию процессов в Jira. До недавнего времени я пользовался Jira только как обычный пользователь — изучение Automation стало новым вызовом, и теперь я делюсь практическим опытом.
Если в первой статье мы шаг за шагом создавали своё первое правило и подключали базовые действия, то теперь пойдём глубже: разберём, как устроены Smart Values, где их использовать, как они помогают автоматизации и почему без них не обходится ни одно сложное правило.
В этой статье я покажу, как с нуля работать со Smart Values:
— где в интерфейсе они используются
— как устроены коллекции, даты, условия и форматирование
— как избежать ошибок
— и как создать первые полностью рабочих сценарии.
Оглавление
-
Где в интерфейсе вставлять Smart Values (практические примечания)
-
Практические сценарии и готовые шаблоны правил
5.1. Логирование изменений: комментарий при изменении поля (пример — Priority)
5.2. Автообновление описания при назначении исполнителя
5.3. Установка Due date при переходе в статус «In Progress»
5.4. Автосоздание подзадач с шаблоном
5.5. Маркировка задач: добавить Label по условию
5.6. Подсчёты и арифметика (пример: перерасчёт Story Points) -
Расширенные возможности
6.1. Форматирование и преобразования
6.2. Работа с датами и форматами
6.3. Math expressions ({{#=}} … {{/}}) -
Готовые шаблоны
10.1. Комментарий при изменении Assignee
10.2. Лог перехода статуса
10.3. Подведение итогов подзадач (в parent)
10.4. Условная вставка (если есть assignee)
10.5. Сумма Story Points у подзадач (пример)
1. Для чего нужны Smart Values?
Smart Values — плейсхолдеры (переменные) в Jira Automation. Они позволяют встраивать данные задачи, проекта, пользователя и времени в текст действий (комментариев, обновлений полей, условий). Благодаря ним одно правило покрывает множество кейсов: вместо ручного управления шаблонами вы формируете универсальные правила, которые подставляют реальные значения во время выполнения.
Пример простейшей задачи: вместо отправки одинакового комментария «Задача закрыта» вы можете автоматом добавлять: кто закрыл, когда и тд. — и всё это без единой строки кода, только используя Smart Values.
2. Основы: синтаксис и первые примеры
Синтаксис: Smart Value — в фигурных скобках {{…}}. Пример:
-
{{issue.key}}— ключ задачи (например, PROJ-123) -
{{issue.summary}}— заголовок -
{{assignee.displayName}}— имя исполнителя -
{{now}}— текущее время
Как это работает: при срабатывании правила, Jira подставляет реальные значения в те места, где вы использовали Smart Values.
Пример:
Задача {{issue.key}} — {{issue.summary}} обновлена пользователем {{initiator.displayName}} в {{now}}.
Результат:
Задача FLEX-326 — Задача для тестаобновлена пользователемЕгор Наумов в 2025-11-23 08:40.
3. Где в интерфейсе вставлять Smart Values (практические примечания)
Smart Values можно вставлять в текстовые поля действий rule-а:
-
Add comment — текст комментария
-
Edit issue fields — в значениях полей (Description, Labels, Custom fields)
-
Send email / Send Slack — в теме и в теле сообщения
-
Advanced compare condition — в поле условия
-
Create issue — в шаблоны заголовков и описаний новых задач.
Практическая подсказка: при вводе текста в UI у Jira обычно есть подсказка или кнопка “View smart values” / “Insert smart value” — используйте её, чтобы увидеть доступные значения для текущего контекста.
4. Часто используемые Smart Values
Ниже — самые часто встречающиеся Smart Values. Начните с них:
-
{{issue.key}}— ключ задачи -
{{issue.summary}}— заголовок -
{{issue.description}}— описание -
{{issue.status.name}}— имя статуса -
{{issue.priority.name}}— приоритет -
{{issue.assignee.displayName}}— Имя исполнителя задачи -
{{issue.reporter.displayName}}— Имя автора задачи -
{{issue.created}},{{issue.updated}}— даты создания/обновления -
{{now}}— текущее время -
{{project.name}}— имя проекта -
{{initiator.displayName}}— пользователь, вызвавший rule (иногда user/actor) -
{{fieldChange.fromString}},{{fieldChange.toString}}— старое / новое значение при изменении поля -
{{#issue.subtasks}}…{{/}}— перебор подзадач
Примечание: для кастомных полей обычно используется {{issue.customfield_12345}} (где 12345 — id поля). Если доступно имя, иногда можно использовать {{issue.Поле}}, но точный синтаксис зависит от конфигурации — проверяйте через UI.
5. Практические сценарии и готовые шаблоны правил
Вставляйте их прямо в JIRA — шаги и тексты полностью готовы
5.1. Логирование изменений: комментарий при изменении поля (пример — Priority)
Задача: при изменении приоритета необходимо добавить комментарий: кто и когда изменил приоритет, с предыдущим и новым значением.
Шаги:
-
Триггер: Значение поля изменено → поле Приоритет.
-
Действие: Добавить комментарий с текстом:
Пример:
Приоритет задачи изменён с "{{fieldChange.fromString}}" на "{{fieldChange.toString}}".
Изменение сделано: {{initiator.displayName}} ({{now.format("yyyy-MM-dd HH:mm")}})
Результат:
Приоритет задачи изменён с "Medium" на "Highest".
Изменение сделано: Егор Наумов (2025-11-23 09:13)
Пояснение: fieldChange.fromString и fieldChange.toString подставят старое и новое значение. initiator — пользователь, инициировавший изменение (может быть user в некоторых контекстах).
5.2. Автообновление описания при назначении исполнителя
Задача: при назначении исполнителя в описание необходимо дописать:
— кто назначен
— дата назначения.
Шаги:
-
Триггер: Значение поля изменено → поле Исполнитель.
-
Действие: Редактировать задачу → поле Description:
Пример:
{{issue.description}}-----Назначен исполнитель: {{assignee.displayName}} (назначено {{now.format("yyyy-MM-dd")}})
Результат:
Тут было какое-то описание задачи...-----Назначен исполнитель: Егор Наумов (назначено 2025-11-12)

Пояснение: ----- — это горизонтальная линия. Jira автоматически превращает пять дефисов в разделитель, который используется только для визуального оформления и не влияет на логику задачи.
5.3. Установка Due date при переходе в статус «In Progress»
Задача: при переходе задачи в статус в работе нужно установить Start Date = сейчас + 7 дней.
Шаги:
-
Триггер: Состояние задачи изменено → Задача переведена в статус: В работе.
-
Действие: Редактировать задачу → поле Due date =
{{now.plusDays(7).format("yyyy-MM-dd")}}
Схема триггера
Пояснение: now.plusDays(7) сдвигает дату на + 7 дней; форматируем в формате yyyy-MM-dd.
5.4. Автосоздание подзадач с шаблоном
Задача: при создании задачи типа Story создавать подзадачу «Анализ».
Шаги:
-
Триггер: Задача создана → условие: Тип задачи = История.
-
Действие: Создать подзадачу:
-
Создать подзадачу с Резюме: Анализ:
{{issue.key}}—{{issue.summary}} -
Описание: Подзадача для
{{issue.key}}
(источник:{{issue.reporter.displayName}})
Схема триггера
Результат работы триггера -
Пояснение: можно добавлять любые поля — приоритет, метки — с помощью Smart Values.
5.5. Маркировка задач: добавить Label по условию
Задача: если в Summary встречается слово “инцидент”, нужно добавить label incident.
Пояснение: используем toLowerCase и contains для нечувствительного поиска.
Шаги:
-
Триггер: Изменено значение поля -> Описание.
-
Условие: Условие: {{smart values}}
-
{{issue.summary.toLowerCase.contains("инцидент")}} = true
-
-
Действие: Редактировать поля задачи → Метки → Добавить «инцидент»
Схема триггера
Результат работы триггера
5.6. Подсчёты и арифметика (пример: перерасчёт Story Points)
Задача: при связывании Story с Epic суммировать сторипоинты по всем Story и записать в кастомное поле Story Point (customfield_10022).
Шаги:
-
Триггер: Задача привязана → Типы ссылок: Problem/Incident.
-
Ветвление правила или связанных задач: Текущие задачи
-
Найти задачи:
issue in linkedIssues({{issue.key}}, "causes") -
Действие: Редактировать задачу → Story Point →
{{lookupIssues.customfield_10022.sum}}
Схема триггера
Результат работы триггера
Уточнение: в качестве типа ссылок можно использовать любые другие типы связей между задачами.
6. Расширенные возможности
6.1. Форматирование и преобразования
-
.toUpperCase() / .toLowerCase() — изменение регистра:
{{issue.summary.toUpperCase}} -
.substring(число) — Возвращает символы, находящиеся после указанного количества символов:
{{issue.summary.substring(0, 50)}} -
.replace(Старый текст, Новый текст) — замена:
{{issue.description.replace("n", " ")}} -
.trim() — убрать пробелы в начале и конце:
{{issue.summary.trim}} -
.concat(текст) — склеивание строк:
{{issue.summary.concat(" — срочно!")}} -
.split(текст) — разделить строку на массив:
{{issue.labels.split(",")}}
(полезно в #each) -
.join(текст) — склеить массив обратно:
{{issue.labels.split(",").join(" | ")}} -
.match(текст) — проверка совпадения по регулярке:
{{issue.summary.match("bug|inc")}} -
.startsWith(текст) — начинается ли строка с…:
{{issue.summary.startsWith("BUG")}} -
.endsWith(текст) — заканчивается ли строка на…:
{{issue.summary.endsWith("?")}} -
.length — длина строки:
{{issue.description.length}} -
.leftPad(число, текст) — дополнение слева, пока не будет достигнуто указанное общее количество символов:
{{issue.key.leftPad(10, "0")}} -
.rightPad(число, текст) — дополнение справа, пока не будет достигнуто указанное общее количество символов:
{{issue.summary.rightPad(30, ".")}}
6.2. Работа с датами и форматами
-
{{now}} — текущее время в формате 1979-11-01T11:23:12.0+0000.
{{now}} -
.plusDays(n) / .minusHours(n) — арифметика времени.
{{now.plusDays(3)}}
{{issue.created.minusHours(5)}} -
.format(«dd.MM.yyyy HH:mm») — форматирование.
{{now.format("dd.MM.yyyy HH:mm")}} -
.plusWeeks(n) / .minusWeeks(n) — работа с неделями.
{{now.plusWeeks(1)}} -
.plusMonths(n) / .minusMonths(n) — добавление/убавление месяцев.
{{issue.created.plusMonths(2)}} -
.plusYears(n) / .minusYears(n) — работа с годами.
{{now.minusYears(1)}} -
.dayOfWeek — день недели.
{{now.dayOfWeek}} -
.dayOfYear — номер дня в году.
{{now.dayOfYear}} -
.isBefore(date) / .isAfter(date) — сравнение дат.
{{now.isAfter(issue.created)}}
6.3. Math expressions ({{#=}} … {{/}})
Для вычислений используют специальный блок:
{{#=}} {{issue.customfield_11243}} + 5 {{/}}
-
Сложение.
{{#=}} 3 + 7 {{/}} -
Вычитание.
{{#=}} 10 - 4 {{/}} -
Умножение.
{{#=}} 6 * 2 {{/}} -
Деление.
{{#=}} 10 / 4 {{/}} -
Остаток от деления.
{{#=}} 7 % 3 {{/}} -
Степень.
{{#=}} 2 ^ 4 {{/}} -
ABS(x) — абсолютное значение.
{{#=}} ABS(-12) {{/}} -
ROUND(x, n) — округление.
{{#=}} ROUND(3.1415, 2) {{/}} -
FLOOR(x) — округление вниз.
{{#=}} FLOOR(5.9) {{/}} -
CEIL(x) — округление вверх.
{{#=}} CEIL(5.1) {{/}} -
MIN(…) — минимум.
{{#=}} MIN(3, 7, 1) {{/}} -
MAX(…) — максимум.
{{#=}} MAX(3, 7, 1) {{/}} -
SQRT(x) — квадратный корень.
{{#=}} SQRT(16) {{/}} -
Сравнения (> < = !=).
{{#=}} 5 > 2 {{/}} -
Логические значения (TRUE / FALSE).
{{#=}} TRUE {{/}} -
Константы PI и e.
{{#=}} PI * 2 {{/}}
7. Отладка и тестирование правил

Тестирование
Всегда тестируйте правила на тестовом проекте или тестовой задаче, прежде чем включать в прод.
Журнал
После каждого запуска правила откройте Журнал — там видно:
-
какие шаги прошли успешно
-
какие Smart Values подставились
-
текст, который был записан в комментарий / поле (со всеми подстановками).
Проверка на null
Используйте условные блоки, чтобы избежать вставок пустых значений:
{{#if(assignee)}}Исполнитель: {{assignee.displayName}}{{/}}
8. Типичные ошибки и как их избежать
-
Опечатки в Smart Value —
{{issues.key}}вместо{{issue.key}}. Всегда проверяйте. -
Неправильный контекст — вы используете
{{issue}}там, где вам нужен{{triggerIssue}}. Читайте документацию по ветвлениям. -
Поле отсутствует — кастомное поле не заполнено → null. Используйте проверки #if.
-
Неверное форматирование даты — используйте .format(«pattern»).
-
Попытка использовать Smart Values в неподдерживаемом действии — некоторые старые actions не поддерживают подстановки.
9. Best practices — как организовать правила и шаблоны
-
Именуйте правила чётко (что делает, где применяется).
-
Документируйте описание с перечнем используемых Smart Values.
-
Разделяйте правила: не перегружайте одно правило множеством ветвлений — легче отлаживать несколько простых.
-
Централизуйте шаблоны: используйте одинаковую структуру комментариев и полей по всему проекту.
-
Мониторьте Audit log: на первых этапах регулярно проверяйте результаты.
-
Отключайте правило, если оно ведёт себя неправильно, прежде чем исправлять — иначе получите лавину лишних действий.
10. Готовые шаблоны
Ниже — готовые шаблоны, которые можно вставлять в свою автоматизацию:
10.1. Комментарий при изменении Assignee
Пример:
Исполнитель изменён:
- Был: {{fieldChange.fromString}}
- Стал: {{fieldChange.toString}}
Изменил: {{initiator.displayName}} ({{now.format("yyyy-MM-dd HH:mm")}})
Результат:
Исполнитель изменён:- Был: Иван Петров- Стал: Егор Наумов- Изменил: Анна Смирнова (2025-11-14 11:42)
10.2. Лог перехода статуса
Пример:
Статус: {{issue.status.name}} → {{fieldChange.toString}}Переход совершил: {{initiator.displayName}} ({{now}})
Результат:
Статус: In Progress → Code ReviewПереход совершил: Егор Наумов (2025-11-14T11:43:25.102+0300)
10.3. Подведение итогов подзадач (в parent)
Пример:
Подзадачи для {{issue.key}}:{{#issue.subtasks}}• {{key}} — {{status.name}} ({{assignee.displayName}}){{/}}
Результат:
Подзадачи для PROJ-482:• PROJ-483 — In Progress (Иван Петров)• PROJ-484 — To Do (не назначен)• PROJ-485 — Done (Егор Наумов)
10.4. Условная вставка (если есть assignee)
Пример:
{{#if(assignee)}}Исполнитель: {{assignee.displayName}{{/}}
Результат:
Исполнитель: Егор Наумов
10.5. Сумма Story Points у подзадач (пример)
Пример:
PROJ-483 → SP = 3PROJ-484 → SP = 5PROJ-485 → SP = 2
Общий Story Points: {{#=}}{{#issue.subtasks}}{{customfield_10022}}{{^last}} + {{/}}{{/issue.subtasks}}{{/}}
Результат:
Общий Story Points: 10
11. Полезные ссылки
-
Основная справка по Smart Values (Atlassian):
https://support.atlassian.com/cloud-automation/docs/jira-smart-values-issues/ -
Даты и время в Smart Values:
https://support.atlassian.com/cloud-automation/docs/jira-smart-values-date-and-time/
Автор: egor_n


