Автодействия
Автодействие (autoaction) — это правило очереди, которое периодически (по умолчанию раз в
час) находит задачи по фильтру или запросу и применяет к каждой из них набор действий:
меняет статус, обновляет поля, добавляет комментарий, отправляет HTTP-запрос или вычисляет
значение. В отличие от триггера (см. «Триггеры»), автодействие не реагирует на
события в реальном времени — оно само находит подходящие задачи по расписанию, поэтому у него
нет условий срабатывания, а вместо них — фильтр (filter_) или запрос (query) задач.
Обратите внимание
Как и все методы YaTracker, методы работы с автодействиями являются асинхронными.
В примерах ниже вызовы показаны так, как будто мы уже находимся внутри корутины.
Официальная документация: https://yandex.cloud/ru/docs/tracker/about-api
Получение автодействия
get_autoaction
Возвращает одно автодействие очереди по его идентификатору.
autoaction = await tracker.get_autoaction("DESIGN", 9)
print(autoaction.name, autoaction.active, autoaction.filter_, autoaction.query)
queue_id— ключ или идентификатор очереди.autoaction_id— идентификатор автодействия.
Отдельного метода для получения списка всех автодействий очереди в yatracker нет — он не
задокументирован как публичный эндпоинт.
Источник: https://yandex.ru/support/tracker/ru/api/queues/get-autoaction
Создание автодействия
create_autoaction
async def create_autoaction(
self,
queue_id: str | int,
name: str,
actions: list[TriggerAction | dict[str, Any]],
*,
filter_: dict[str, Any] | None = None,
query: str | None = None,
active: bool | None = None,
enable_notifications: bool | None = None,
interval_millis: int | None = None,
calendar: AutoactionCalendar | dict[str, Any] | None = None,
) -> Autoaction: ...
Создаёт новое автодействие в указанной очереди.
from yatracker.types import TriggerAction
autoaction = await tracker.create_autoaction(
"DESIGN",
name="AutoactionName",
actions=[
TriggerAction(type="Transition", status={"key": "needInfo"}),
],
filter_={
"priority": ["critical"],
"status": ["inProgress"],
},
calendar={"id": 2},
)
queue_id— ключ или идентификатор очереди.name— название автодействия (обязательное поле).actions— действия, применяемые к каждой найденной задаче: списокTriggerAction(или обычных словарей с теми же ключами). Автодействия поддерживают только часть типов действий триггера —Transition,Update,CreateComment,WebhookиCalculateFormula, — остальные (Move,CreateChecklist,CreateIssue) в ответеcreate-autoactionне упоминаются. Примеры для каждого типа — в разделе «Действия» страницы «Триггеры».filter_— фильтр задач, словарь «идентификатор поля → список принимаемых значений», например{"priority": ["critical"], "status": ["inProgress"]}. Отправляется какfilter.query— строка на языке запросов, отбирающая задачи вместо (или вместе с)filter_, например'"Status": "In progress"'.active— активность автодействия.enable_notifications— отправлять ли уведомления о срабатывании.interval_millis— периодичность запуска в миллисекундах (по умолчанию3600000, то есть раз в час).calendar— график работы, в рамках которого автодействие активно:AutoactionCalendar(или словарь) с идентификатором графикаid.
Поля со значением None не отправляются.
Нужен хотя бы один из filter_ и query
Если не передать ни filter_, ни query, метод поднимает ValueError ещё до запроса —
без них API не будет знать, к каким задачам применять действия.
Источник: https://yandex.ru/support/tracker/ru/api/queues/create-autoaction
Логи автодействия
get_autoaction_logs
async def get_autoaction_logs(
self, queue_id: str | int, autoaction_id: str | int
) -> list[AutoactionLaunch]: ...
Возвращает список запусков автодействия. Ручка доступна только для автодействий, которые настраивают автоматическое обновление задач. Пагинация и фильтрация не документированы.
launches = await tracker.get_autoaction_logs("DESIGN", 9)
for launch in launches:
print(launch.id, launch.launch_time, launch.successes, launch.failures)
queue_id— ключ или идентификатор очереди.autoaction_id— идентификатор автодействия.
Источник: https://yandex.ru/support/tracker/ru/api/queues/view-autoaction-logs
get_autoaction_log
async def get_autoaction_log(
self, queue_id: str | int, autoaction_id: str | int, launch_id: str | int
) -> list[AutoactionLaunchResult]: ...
Возвращает результат одного запуска автодействия — что оно сделало с каждой найденной задачей.
results = await tracker.get_autoaction_log("DESIGN", 9, launches[0].id)
for result in results:
print(result.issue_reference.key, result.status.value)
queue_id— ключ или идентификатор очереди.autoaction_id— идентификатор автодействия.launch_id— идентификатор запуска (значениеidизget_autoaction_logs).
Источник: https://yandex.ru/support/tracker/ru/api/queues/view-autoaction-logs
Модели
Autoaction
| Поле | Тип | Описание |
|---|---|---|
url |
str |
Ссылка на автодействие (ключ self). |
id |
str |
Идентификатор автодействия. |
queue |
Queue |
Очередь, в которой создано автодействие. |
name |
str |
Название автодействия. |
version |
int |
Версия автодействия, увеличивается при каждом изменении. |
active |
bool |
Активно ли автодействие. |
created |
datetime |
Дата и время создания. |
updated |
datetime |
Дата и время последнего изменения. |
filter_ |
dict[str, Any] \| None |
Фильтр задач (API-ключ filter). |
query |
str \| None |
Запрос, отбирающий задачи. |
actions |
list[TriggerAction] |
Действия, применяемые к найденным задачам — модель общая с триггерами, см. «Триггеры». |
enable_notifications |
bool \| None |
Отправляются ли уведомления. |
last_launch |
datetime \| None |
Дата и время последнего запуска. |
total_issues_processed |
int \| None |
Число задач, проверенных при последнем запуске. |
interval_millis |
int \| None |
Периодичность запуска в миллисекундах. |
calendar |
AutoactionCalendar \| None |
График работы, в рамках которого автодействие активно. |
AutoactionCalendar
| Поле | Тип | Описание |
|---|---|---|
id |
str |
Идентификатор графика работы. |
AutoactionLaunch
Один запуск автодействия, возвращается get_autoaction_logs.
| Поле | Тип | Описание |
|---|---|---|
id |
str |
Идентификатор запуска. Передаётся в get_autoaction_log. |
launch_time |
datetime \| None |
Время начала запуска. |
search_hits |
int \| None |
Число задач, обработанных автодействием. |
successes |
int \| None |
Число задач, на которых автодействие сработало успешно. |
failures |
int \| None |
Число задач, на которых автодействие завершилось ошибкой. |
search_failed |
bool \| None |
True, если ни одна задача не была обработана. |
AutoactionIssueRef
Короткая ссылка на задачу внутри результата запуска (AutoactionLaunchResult.issue_reference),
наследует Ref.
| Поле | Тип | Описание |
|---|---|---|
url |
str |
Ссылка на задачу. |
id |
str |
Идентификатор задачи. |
display |
str \| None |
Название задачи, отображаемое в интерфейсе. |
key |
str \| None |
Ключ задачи. |
version |
int \| None |
Версия задачи, увеличивается при каждом изменении. |
AutoactionLaunchResult
Что автодействие сделало с одной задачей за один запуск, возвращается get_autoaction_log.
| Поле | Тип | Описание |
|---|---|---|
id |
int |
Порядковый номер срабатывания автодействия (с нуля). |
issue_reference |
AutoactionIssueRef \| None |
Задача, к которой было применено автодействие. |
status |
AutoactionLaunchStatus \| None |
Результат применения автодействия к этой задаче. |
AutoactionLaunchStatus
| Поле | Тип | Описание |
|---|---|---|
value |
str |
Значение статуса, например success. |
display |
str \| None |
Название статуса, отображаемое в интерфейсе. |
Типичный сценарий
Создать автодействие, которое раз в час переводит просроченные критичные задачи в статус «Требуется информация», затем проверить результат последнего запуска:
from yatracker.types import TriggerAction
autoaction = await tracker.create_autoaction(
"DESIGN",
name="Escalate critical",
actions=[TriggerAction(type="Transition", status={"key": "needInfo"})],
filter_={"priority": ["critical"], "status": ["inProgress"]},
)
launches = await tracker.get_autoaction_logs("DESIGN", autoaction.id)
if launches:
results = await tracker.get_autoaction_log("DESIGN", autoaction.id, launches[0].id)
for result in results:
print(result.issue_reference.key, result.status.value)