Как получить связанный вопрос элемента проекта с помощью вебхука GitHub?

Вопрос или проблема

Я настроил вебхук для projects_v2_item, и каждый раз, когда я обновляю запись в проекте, он вызывает запрос с соответствующими данными. Однако хотя запрос содержит информацию о самом элементе проекта, он не включает связанную задачу.

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

{
    "action": "edited",
    "projects_v2_item": {
        "id": 10000001,
        "node_id": "###",
        "project_node_id": "###",
        "content_node_id": "###",
        "content_type": "Задача",
        "creator": {
            "login": "sumedhe",
            "id": 2020370,
            "node_id": "###",
            ...
        },
        "created_at": "2024-10-01T08:29:55Z",
        "updated_at": "2024-10-01T08:31:44Z",
        "archived_at": null
    },
    "changes": {
        "field_value": {
            "field_node_id": "###",
            "field_type": "single_select",
            "field_name": "Статус",
            "project_number": 1,
            "from": null,
            "to": {
                "id": "###",
                "name": "Сделать",
                "color": "ЗЕЛЕНЫЙ",
                "description": "Этот элемент еще не начат"
            }
        }
    },
    "organization": {
        "login": "selforgmap",
        "id": 47916970,
        ...
    },
    "sender": {
        "login": "sumedhe",
        "id": 2020370,
        ...
    }
}

Ответ или решение

Чтобы получить связанную задачу (issue) из элемента проекта при использовании вебхука GitHub, необходимо использовать информацию, содержащуюся в полезной нагрузке вебхука, и дополнительно обратиться к API GitHub для получения подробностей о самом элементе.

В данном случае, когда вы получаете уведомление о событии, например, изменении элемента проекта projects_v2_item, полезная нагрузка предоставляет информацию о самом элементе, но не включает напрямую данные о связанных задачах (issues).

Вот шаги, которые вам нужно выполнить для получения связанных задач:

  1. Извлечение content_node_id: В полезной нагрузке вы можете найти content_node_id в объекте projects_v2_item. Это значение будет уникальным идентификатором содержимого, связанного с элементом проекта.

  2. Использование GitHub API для получения информации: Для получения связанной задачи вы можете сделать запрос к GitHub GraphQL API или REST API, используя content_node_id. Ваша цель — получить дополнительные сведения о связанном содержимом.

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

query {
  node(id: "ВАШ_CONTENT_NODE_ID") {
    ... on Issue {
      id
      title
      body
      state
      author {
        login
      }
      createdAt
      updatedAt
    }
  }
}

Или, для REST API:

GET /repos/:owner/:repo/issues/:issue_number

В этом запросе вам необходимо заменить :owner, :repo и :issue_number на соответствующие значения, которые вы можете получить из content_node_id.

  1. Обработка ответа: После выполнения запроса к API, вы получите полную информацию о связанной задаче. Обработайте его в вашем приложении по своему усмотрению — вы можете хранить данные, отправлять уведомления или выполнять другие действия.

Вот пример кода на Python с использованием requests библиотеки для выполнения этого запроса:

import requests

# URL для API GitHub
url = "https://api.github.com/repos/:owner/:repo/issues/:issue_number"

# Заголовки авторизации, не забудьте заменить 'YOUR_TOKEN'
headers = {
    "Authorization": "token YOUR_TOKEN"
}

# Выполнение GET запроса
response = requests.get(url, headers=headers)

if response.status_code == 200:
    issue_data = response.json()
    print("Заголовок задачи:", issue_data['title'])
else:
    print("Ошибка при получении данных:", response.status_code)
  1. Настройка прав доступа: Убедитесь, что токен (если используется), обладающий необходимыми правами доступа (например, repo) для выполнения запросов к API. Это необходимо для доступа к информации о private репозиториях.

Соблюдая эти шаги, вы сможете получить связанную задачу из элемента проекта, реагируя на события вебхука GitHub.

Оцените материал
Добавить комментарий

Капча загружается...