Это — вторая часть цикла “Начало работы с Jira Automation”, в которой мы разбираем Smart Values и учимся применять их на практике внутри автоматизаций Jira.

Меня зовут Егор Наумов, я менеджер проектов в BetBoom, в команде «Регистрация, идентификация, платформа». Уже больше полугода я отвечаю за координацию команды и активно развиваю автоматизацию процессов в Jira. До недавнего времени я пользовался Jira только как обычный пользователь — изучение Automation стало новым вызовом, и теперь я делюсь практическим опытом.

Если в первой статье мы шаг за шагом создавали своё первое правило и подключали базовые действия, то теперь пойдём глубже: разберём, как устроены Smart Values, где их использовать, как они помогают автоматизации и почему без них не обходится ни одно сложное правило.

В этой статье я покажу, как с нуля работать со Smart Values:\
— где в интерфейсе они используются
— как устроены коллекции, даты, условия и форматирование
— как избежать ошибок
— и как создать первые полностью рабочих сценарии.

Оглавление

  1. Для чего нужны Smart Values?

  2. Основы: синтаксис и первые примеры

  3. Где в интерфейсе вставлять Smart Values (практические примечания)

  4. Часто используемые Smart Values

  5. Практические сценарии и готовые шаблоны правил
    5.1. Логирование изменений: комментарий при изменении поля (пример — Priority)
    5.2. Автообновление описания при назначении исполнителя
    5.3. Установка Due date при переходе в статус «In Progress»
    5.4. Автосоздание подзадач с шаблоном
    5.5. Маркировка задач: добавить Label по условию
    5.6. Подсчёты и арифметика (пример: перерасчёт Story Points)

  6. Расширенные возможности
    6.1. Форматирование и преобразования
    6.2. Работа с датами и форматами
    6.3. Math expressions ({{#=}} ... {{/}})

  7. Отладка и тестирование правил

  8. Типичные ошибки и как их избежать

  9. Best practices — как организовать правила и шаблоны

  10. Готовые шаблоны
    10.1. Комментарий при изменении Assignee
    10.2. Лог перехода статуса
    10.3. Подведение итогов подзадач (в parent)
    10.4. Условная вставка (если есть assignee)
    10.5. Сумма Story Points у подзадач (пример)

  11. Полезные ссылки

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)

Задача: при изменении приоритета необходимо добавить комментарий: кто и когда изменил приоритет, с предыдущим и новым значением.

Шаги:

  1. Триггер: Значение поля изменено → поле Приоритет.

  2. Действие: Добавить комментарий с текстом:

Пример:

Приоритет задачи изменён с "{{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. Автообновление описания при назначении исполнителя

Задача: при назначении исполнителя в описание необходимо дописать:
- кто назначен
- дата назначения.

Шаги:

  1. Триггер: Значение поля изменено → поле Исполнитель.

  2. Действие: Редактировать задачу → поле Description:

Пример:

{{issue.description}}
-----
Назначен исполнитель: {{assignee.displayName}} (назначено {{now.format("yyyy-MM-dd")}})

Схема триггера
Схема триггера

Результат:

Тут было какое-то описание задачи...
-----
Назначен исполнитель: Егор Наумов (назначено 2025-11-12)

Пояснение: ----- — это горизонтальная линия. Jira автоматически превращает пять дефисов в разделитель, который используется только для визуального оформления и не влияет на логику задачи.

5.3. Установка Due date при переходе в статус «In Progress»

Задача: при переходе задачи в статус в работе нужно установить Start Date = сейчас + 7 дней.

Шаги:

  1. Триггер: Состояние задачи изменено → Задача переведена в статус: В работе.

  2. Действие: Редактировать задачу → поле Due date = {{now.plusDays(7).format("yyyy-MM-dd")}}

    Схема триггера
    Схема триггера
Результат работы триггера
Результат работы триггера

Пояснение: now.plusDays(7) сдвигает дату на + 7 дней; форматируем в формате yyyy-MM-dd.

5.4. Автосоздание подзадач с шаблоном

Задача: при создании задачи типа Story создавать подзадачу "Анализ".

Шаги:

  1. Триггер: Задача создана → условие: Тип задачи = История.

  2. Действие: Создать подзадачу:

    • Создать подзадачу с Резюме: Анализ: {{issue.key}}{{issue.summary}}

    • Описание: Подзадача для {{issue.key}}
      (источник: {{issue.reporter.displayName}})

    Схема триггера
    Схема триггера
    Результат работы триггера
    Результат работы триггера

Пояснение: можно добавлять любые поля — приоритет, метки — с помощью Smart Values.

5.5. Маркировка задач: добавить Label по условию

Задача: если в Summary встречается слово “инцидент”, нужно добавить label incident.

Пояснение: используем toLowerCase и contains для нечувствительного поиска.

Шаги:

  1. Триггер: Изменено значение поля -> Описание.

  2. Условие: Условие: {{smart values}}

    • {{issue.summary.toLowerCase.contains("инцидент")}} = true

  3. Действие: Редактировать поля задачи → Метки → Добавить "инцидент"

    Схема триггера
    Схема триггера
    Результат работы триггера
    Результат работы триггера

5.6. Подсчёты и арифметика (пример: перерасчёт Story Points)

Задача: при связывании Story с Epic суммировать сторипоинты по всем Story и записать в кастомное поле Story Point (customfield_10022).

Шаги:

  1. Триггер: Задача привязана → Типы ссылок: Problem/Incident.

  2. Ветвление правила или связанных задач: Текущие задачи

  3. Найти задачи: issue in linkedIssues({{issue.key}}, "causes")

  4. Действие: Редактировать задачу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. Типичные ошибки и как их избежать

  1. Опечатки в Smart Value{{issues.key}} вместо {{issue.key}}. Всегда проверяйте.

  2. Неправильный контекст — вы используете {{issue}} там, где вам нужен {{triggerIssue}}. Читайте документацию по ветвлениям.

  3. Поле отсутствует — кастомное поле не заполнено → null. Используйте проверки #if.

  4. Неверное форматирование даты — используйте .format("pattern").

  5. Попытка использовать 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 = 3
PROJ-484 → SP = 5
PROJ-485 → SP = 2

Общий Story Points: {{#=}}{{#issue.subtasks}}{{customfield_10022}}{{^last}} + {{/}}{{/issue.subtasks}}{{/}}

Результат:

Общий Story Points: 10

11. Полезные ссылки

Егор Наумов

Младший менеджер проектов в компании BetBoom

Комментарии (0)