---
metadata:
  - name: generator
    content: Diplodoc Platform v5.54.2
  - 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: ru/tutorials/tracker-cloud-function.md
    type: text/markdown
    title: Markdown version
  - href: ../llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.ru/support/tracker/ru/llms.txt


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

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

Чтобы настроить автоматическое обновление суммарного значения затраченного времени родительской задачи при изменении этой величины в любой из дочерних подзадач:

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

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

{% note info "" %}

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

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

{% endnote %}

<!-- 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}

<!-- source: ru/api-ref/access.md -->
{% note warning "" %}

Если вы используете федеративный или сервисный аккаунт, авторизуйтесь с помощью [IAM-токена](#iam-token).

{% endnote %}


Чтобы получить токен:



1. Перейдите по ссылке [https://oauth.yandex.ru](https://oauth.yandex.ru).

1. На странице **Ваши приложения** нажмите ![](../_assets/svg/add-icon.svg)</svg> **Создать**.

1. В открывшемся окне выберите вариант **Для доступа к API или отладки** и нажмите **Перейти к созданию**.

1. Укажите название приложения и почту для связи.


1. Добавьте разрешения для доступа к данным пользователя. Чтобы выбрать разрешение, начните вводить его название в поле **Название доступа**:
   * **Запись в трекер (tracker:write)** — все операции с данными: создание, удаление, редактирование.
   * **Чтение из трекера (tracker:read)** — только чтение данных.

1. Нажмите **Создать приложение**.

1. В личном кабинете [Яндекс OAuth](https://oauth.yandex.ru) выберите созданное ранее приложение и скопируйте его идентификатор из поля **ClientID**.


1. Сформируйте ссылку для запроса токена:

   ```
   https://oauth.yandex.ru/authorize?response_type=token&client_id=<идентификатор_приложения>
   ```

1. Войдите в аккаунт, от имени которого вы будете работать с API, и перейдите по сформированной ссылке. 

   На странице появится последовательность символов — это OAuth-токен. Скопируйте его и сохраните.



Чтобы проверить наличие доступа к API, выполните [запрос информации о текущем пользователе](https://yandex.ru/support/tracker/ru/api-ref/users/get-user-info.md). Если доступ не был получен, запрос вернет ответ с кодом `401 Unauthorized`.

Пример запроса информации о текущем пользователе с помощью curl:

<!-- source: ru/api-ref/_includes/curl-request.md -->
{% list tabs %}

- Unix

   ```bash
   curl -X GET 'https://api.tracker.yandex.net/v3/myself' \
        -H 'Authorization: OAuth y0__xAbc******' \
        -H 'X-Org-ID: 1234******'
   ```

- Windows

   ```bash
   curl -X GET "https://api.tracker.yandex.net/v3/myself" ^
        -H "Authorization: OAuth y0__xAbc******" ^
        -H "X-Org-ID: 1234******"
   ```

{% endlist %}
<!-- endsource: ru/api-ref/_includes/curl-request.md -->
<!-- endsource: ru/api-ref/access.md -->

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

1. Перейдите в [Трекер](https://tracker.yandex.ru/). Нажмите кнопку **Войти в Трекер**.
1. <!-- source: ru/api-ref/_includes/org-id.md -->
   Чтобы узнать идентификатор организации, перейдите на страницу **Администрирование** → [**Организации**](https://tracker.yandex.ru/admin/orgs) и скопируйте значение поля **идентификатор**.
   <!-- endsource: ru/api-ref/_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.9`.
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. <!-- source: ru/_includes/create-queue.md -->
   На панели слева нажмите ![](../_assets/svg/queues-ni.svg) **Очереди** → **Создать очередь**. {#create-web}
   <!-- endsource: ru/_includes/create-queue.md -->
1. Выберите шаблон очереди, например **Базовая разработка**.
1. Задайте имя, например `Function Test`.
1. Нажмите кнопку **Создать**.

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

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

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

1. На странице подзадачи `Subtask-1` в правом верхнем углу в меню **Действия** выберите **Указать затраченное время**.
1. В открывшемся окне в поле **Затрачено времени** укажите любое время, например `1h25m`.
1. Аналогичным образом добавьте затраченное время в других подзадачах.

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

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

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

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