---
metadata:
  - name: generator
    content: Diplodoc Platform v5.66.1
  - property: og:type
    content: article
  - property: article:section
    content: Интеграция с другими сервисами
  - property: og:title
    content: Интеграция Трекера с Cloud Functions
  - property: article:tag
    content: Техническая инструкция
alternate:
  - https://yandex.ru/support/tracker/en/tutorials/tracker-cloud-function.md
  - https://yandex.ru/support/tracker/ru/tutorials/tracker-cloud-function.md
  - href: https://yandex.ru/support/tracker/ru/tutorials/tracker-cloud-function.md
    type: text/markdown
    title: Markdown version
  - href: https://yandex.ru/support/tracker/ru/llms.txt?revision=r22057024
    rel: describedby
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.ru/support/tracker/ru/llms.txt?revision=r22057024


# Интеграция Трекера с Cloud Functions

В этом руководстве вы настроите интеграцию Трекера с Cloud Functions для переноса записей о затраченном времени из подзадач в родительскую задачу.

При срабатывании триггера функция добавляет в родительскую задачу последнюю запись о затраченном времени из подзадачи.

{% note warning "Ограничения примера" %}

Функция не пересчитывает сумму трудозатрат по всем подзадачам. Изменения и удаления существующих записей не синхронизируются. Повторный вызов функции для той же записи может добавить дубликат в родительскую задачу.

{% endnote %}

Чтобы настроить перенос записей:
1. [Зарегистрируйте OAuth-приложение и получите токен](#register-app)
1. [Получите ID организации для доступа к API](#get-tracker-id)
1. [Создайте функцию Cloud Functions](#create-function)
1. [Настройте триггер](#setup-trigger)
1. [Протестируйте автоматическое обновление данных](#test-updates)

## Перед началом работы {#before-you-begin}

{% note info "" %}

Сценарий рассчитан на внешний Трекер с организацией Яндекс 360 для бизнеса. Для организаций Yandex Cloud и внутреннего Трекера потребуется адаптировать код функции.

{% endnote %}

Для прохождения сценария вам понадобятся учетные записи:

* в Yandex Cloud с платежным аккаунтом и [ролью](https://yandex.cloud/ru/docs/organization/security/index#service-roles) не ниже `organization-manager.admin`;
* в Трекере с организацией Яндекс 360 для бизнеса.

<!-- source: ru/_includes/before-you-begin.md -->
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

1. Перейдите в [консоль управления](https://console.cloud.yandex.ru), затем войдите в Yandex Cloud или зарегистрируйтесь.
1. На странице **[Биллинг](https://billing.cloud.yandex.ru/)** убедитесь, что у вас подключен [платежный аккаунт](https://yandex.cloud/ru/docs/billing/concepts/billing-account), и он находится в статусе `ACTIVE` или `TRIAL_ACTIVE`. Если платежного аккаунта нет, [создайте его](https://yandex.cloud/ru/docs/billing/quickstart).

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на [странице облака](https://console.yandex.cloud/cloud).

[Подробнее об облаках и каталогах](https://yandex.cloud/ru/docs/resource-manager/concepts/resources-hierarchy). 
<!-- endsource: ru/_includes/before-you-begin.md -->

### Необходимые платные ресурсы {#paid-resources}

В стоимость поддержки инфраструктуры входит плата за использование функции (см. [тарифы Cloud Functions](https://yandex.cloud/ru/docs/functions/pricing));

Если созданные ресурсы вам больше не нужны, [удалите их](#clear-out).

## Зарегистрируйте OAuth-приложение и получите токен {#register-app}

Зарегистрируйте OAuth-приложение и получите токен по [инструкции по доступу к API Трекера](https://yandex.ru/support/tracker/ru/api/access.md#about_OAuth). Сохраните токен — он понадобится при создании функции.

## Получите ID организации для доступа к API {#get-tracker-id}

1. Перейдите в [Трекер](https://tracker.yandex.ru/). Нажмите кнопку **Войти в Трекер**.
1. <!-- source: ru/api/_includes/org-id.md -->
   Чтобы узнать идентификатор организации, перейдите на страницу **Администрирование** → [**Организации**](https://tracker.yandex.ru/admin/orgs) и скопируйте значение поля **идентификатор**.
   <!-- endsource: ru/api/_includes/org-id.md -->
1. Скопируйте и сохраните идентификатор организации — он понадобится при создании функции.

## Создайте функцию Cloud Functions {#create-function}

1. Перейдите в [консоль управления](https://console.cloud.yandex.ru).
1. В левом верхнем углу нажмите кнопку ![](../_assets/console-icons/dots-9.svg) **Все сервисы**.
1. Выберите **Бессерверные вычисления** → **Cloud Functions**.
1. Нажмите кнопку **Создать функцию**.
1. Укажите название функции, например `timeupdater`.
1. Нажмите кнопку **Создать**.
1. В открывшемся окне **Редактор** выберите среду выполнения `Python / 3.12`.
1. Нажмите кнопку **Продолжить**.
1. В поле **Способ** нажмите кнопку **ZIP-архив**.
1. Прикрепите [тестовый архив](https://github.com/yandex-cloud-examples/yc-tracker-summarize-spent/blob/main/build/tracker-summarize-spent.zip).
1. В поле **Точка входа** укажите `index.handler`.
1. В разделе **Параметры** в поле **Переменные окружения** добавьте:
   * `ORG` — идентификатор организации Яндекс 360 для бизнеса.
   * `TOKEN` — токен доступа к приложению.
1. Нажмите кнопку **Сохранить изменения**.
1. Дождитесь загрузки страницы и в поле **Ссылка для вызова** скопируйте и сохраните ссылку для вызова функции.
	Пример ссылки:
	```
	https://functions.yandexcloud.net/d4e94uav3108********
	```
1. Активируйте опцию **Публичная функция**.

## Настройте триггер {#setup-trigger}

### Создайте очередь

1. На панели слева нажмите ![](../_assets/svg/queues-ni.svg) **Очереди** → **Создать очередь**.
1. Выберите шаблон очереди, например **Базовая разработка**.
1. Задайте имя, например `Function Test`.
1. Нажмите кнопку **Создать**.

### Создайте триггер

1. На странице очереди в правом верхнем углу нажмите ![](../_assets/svg/settings.svg)</svg> **Настройки очереди**.
1. На панели слева выберите **Автоматизация** → **Триггеры** и нажмите кнопку **Создать триггер**.
1. В поле **Название** введите название триггера, например `timeupdater`.
1. В разделе **Условия срабатывания** выберите **Учёт Времени** → **Затрачено времени** и укажите операцию сравнения **Значение поля изменилось**.
1. В разделе **Действия триггера** выберите **HTTP-запрос**.
1. В открывшейся форме выберите метод запроса `POST`.

    Функция из тестового архива также поддерживает метод `GET`.

1. В поле **Адрес** введите:
	```
	https://functions.yandexcloud.net/<идентификатор_функции>?id={{issue.key}}
	```
	Где `https://functions.yandexcloud.net/<идентификатор_функции>` — ссылка для вызова функции, которую вы сохранили при создании функции.
	Пример:
	```
	https://functions.yandexcloud.net/d4e94uav3108********?id={{issue.key}}
	```
1. Нажмите кнопку **Создать**.

## Протестируйте автоматическое обновление данных {#test-updates}

### Создайте задачи

1. Создайте родительскую задачу, в которую будут добавляться записи о затраченном времени из подзадач:
	1. На странице очереди `Function Test` нажмите кнопку **Создать задачу**.
	1. В открывшейся форме в поле **Название задачи** введите название задачи, например `Parent Task`.
	1. Нажмите кнопку **Создать**.
1. Создайте подзадачи:
	1. На странице задачи `Parent Task` в правом верхнем углу в меню ![](../_assets/svg/actions.svg)</svg> выберите **Добавить подзадачу**.
	1. В открывшейся форме в поле **Название задачи** введите название подзадачи, например `Subtask-1`.
	1. Аналогичным образом создайте еще одну или несколько подзадач с названиями `Subtask-2`, `Subtask-3`.

### Внесите данные о затраченном времени в подзадачах

1. На странице подзадачи `Subtask-1` в правом верхнем углу в меню ![](../_assets/svg/actions.svg)</svg> выберите **Указать затраченное время**.
1. В открывшемся окне в поле **Затрачено времени** укажите любое время, например `1h25m`.
1. Аналогичным образом добавьте затраченное время в других подзадачах.

### Убедитесь в корректной работе функции

1. Перейдите на страницу задачи `Parent Task`.
1. Убедитесь, что в блоке параметров задачи в разделе **Учёт Времени** в поле **Затрачено времени** учтено указанное в подзадаче время.

## Как удалить созданные ресурсы {#clear-out}

Чтобы перестать платить за созданные ресурсы, [удалите функцию Cloud Functions](https://yandex.cloud/ru/docs/functions/operations/function/function-delete).
