Используйте вебхук в качестве триггера для Azure Logic Apps и Power Automate

Веб-перехватчики — это простые обратные вызовы HTTP, которые предоставляют уведомления о событиях, когда что-то происходит в веб-службе. В Azure Logic Apps и Power Automate вебхуки можно использовать в качестве триггеров. Приложение логики или поток ожидает срабатывания этого триггера и выполняет действие каждый раз, когда он срабатывает. В этом руководстве показано, как использовать веб-перехватчик в качестве триггера через настраиваемый соединитель, определенный с помощью спецификации OpenAPI.

Заметка

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

Предварительные условия

Включение аутентификации в GitHub

API веб-службы, который отправляет запрос вебхука в Logic Apps или Power Automate, обычно использует тот или иной способ аутентификации, и GitHub здесь не исключение. GitHub поддерживает несколько типов проверки подлинности. В этом руководстве используются детализированные персональные токены доступа GitHub.

  1. Перейдите к GitHub и войдите, если вы еще не сделали этого.

  2. В правом верхнем углу выберите рисунок профиля, а затем в меню выберите "Параметры".

  3. В меню слева выберите параметры разработчика.

  4. В разделе "Личные маркеры доступа" выберите токены с точной настройкой.

  5. Нажмите кнопку "Создать новый маркер" , а затем подтвердите пароль при запросе.

  6. Введите имя токена и описание токена.

  7. В разделе "Срок действия" выберите дату окончания срока действия маркера.

  8. В разделе "Доступ к репозиторию" выберите только репозитории и выберите репозиторий, к которому вы хотите предоставить доступ.

  9. В разделе Разрешения выберите Добавить разрешения>Веб-перехватчики>Чтение и запись.

  10. Нажмите кнопку "Создать маркер ".

  11. Сохраните свой новый токен. Позже вам потребуется использовать этот токен при добавлении коннектора вебхука как триггера.

    Внимание!

    Вы больше не сможете просмотреть этот токен. Скопируйте и вставьте его где-то, чтобы использовать его позже в руководстве.

Определение веб-перехватчика в определении OpenAPI

Вы реализуете вебхуки в Logic Apps и Power Automate как часть настраиваемого соединителя. Чтобы создать соединитель, необходимо указать определение OpenAPI, определяющее форму веб-перехватчика. В этом руководстве используется загруженный образец спецификации OpenAPI для веб-хуков GitHub.

Если вы хотите создать триггер, но у вас нет определения OpenAPI, с которым можно работать, используйте интерфейс триггеров в мастере настраиваемого соединителя, чтобы определить триггеры веб-перехватчика.

Пример определения OpenAPI содержит три части, которые критически важны для работы вебхука:

  • Создание вебхука
  • Определение запроса входящего вебхука из API веб-службы (в этом учебном примере — GitHub)
  • Удаление вебхука

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

Создать вебхук

Соединитель использует API веб-службы (в нашем примере GitHub REST API) для создания веб-перехватчика на стороне веб-службы путем отправки HTTP-запроса POST в соответствующую конечную точку создания веб-перехватчика для веб-службы (/repos/{owner}/{repo}/hooksв случае GitHub).

Когда вы создаете новое приложение логики или поток с помощью соединителя, соединитель отправляет POST-запрос к конечной точке создания webhook веб-службы, как определено в описании OpenAPI соединителя. Он также отправляет запрос POST на этот URL-адрес, если изменить приложение логики или триггер потока. В следующем примере конфигурации пути OpenAPI свойство post содержит схему запроса на создание вебхука для отправки в REST API GitHub.

"/repos/{owner}/{repo}/hooks": {
    "x-ms-notification-content": {
        "description": "Details for Webhook",
        "schema": {
            "$ref": "#/definitions/WebhookPushResponse"
        }
    },
    "post": {
        "description": "Creates a GitHub webhook",
        "summary": "Triggers when a PUSH event occurs",
        "operationId": "webhook-trigger",
        "x-ms-trigger": "single",
        "parameters": [
            {
            "name": "owner",
            "in": "path",
            "description": "Name of the owner of targeted repository",
            "required": true,
            "type": "string"
            },
            {
            "name": "repo",
            "in": "path",
            "description": "Name of the repository",
            "required": true,
            "type": "string"
            },
            {
            "name": "Request body of webhook",
            "in": "body",
            "description": "This is the request body of the Webhook",
            "schema": {
                "$ref": "#/definitions/WebhookRequestBody"
            }
            }
        ],
        "responses": {
            "201": {
            "description": "Created",
            "schema": {
                "$ref": "#/definitions/WebhookCreationResponse"
                }
            }
        }
    }
},

Внимание!

Свойство "x-ms-trigger": "single" — это расширение схемы, которое указывает Logic Apps и Power Automate отображать этот вебхук в списке доступных триггеров в конструкторе. Не забудьте включить его.

Определите входящий запрос хука из API

Определите форму входящего запроса перехватчика (уведомление от GitHub в Logic Apps или Power Automate) в пользовательском x-ms-notification-content свойстве, как показано в предыдущем примере. Запрос не должен содержать все содержимое запроса, а только части, которые вы хотите использовать в приложении логики или потоке.

Удалить вебхук

Добавьте определение того, как удалить вебхук, в определение OpenAPI. Logic Apps и Power Automate пытаются удалить существующий вебхук при обновлении триггера или удалении приложения логики либо потока.

"/repos/{owner}/{repo}/hooks/{hook_Id}": {
    "delete": {
        "description": "Deletes a Github webhook",
        "operationId": "DeleteTrigger",
        "parameters": [
            {
                "name": "owner",
                "in": "path",
                "description": "Name of the owner of targeted repository",
                "required": true,
                "type": "string"
            },
            {
                "name": "repo",
                "in": "path",
                "description": "Name of the repository",
                "required": true,
                "type": "string"
            },
            {
                "name": "hook_Id",
                "in": "path",
                "description": "ID of the webhook being deleted",
                "required": true,
                "type": "string"
            }
        ]
    }
},

Для вызова удаления вебхука не включен заголовок. Вызов для удаления вебхука использует то же соединение, что и коннектор.

Внимание!

Чтобы Logic Apps или Power Automate могли удалить вебхук, API веб-службы должен включать заголовок HTTP Location в ответе 201 при создании вебхука. Заголовок Location должен содержать путь к вебхуку, используемому с методом HTTP DELETE. Например, заголовок, включенный Location в ответ GitHub, соответствует следующему формату: https://api.github.com/repos/<user name>/<repo name>/hooks/<hook ID>

Импорт определения OpenAPI

Сначала импортируйте определение OpenAPI для Logic Apps или для Power Automate.

Импорт определения OpenAPI для Logic Apps

  1. Перейдите в портал Azure и откройте соединитель Logic Apps, который вы ранее создали в разделе Создание настраиваемого соединителя Azure Logic Apps.

  2. В меню вашего соединителя выберите Соединитель Logic Apps, а затем выберите Редактировать.

    Снимок экрана: параметр

  3. В разделе "Общие" выберите " Отправить файл OpenAPI", а затем перейдите к примеру скачаемого файла OpenAPI.

    Снимок экрана: параметр

Импорт определения OpenAPI для Power Automate

  1. Перейдите к https://make.powerautomate.com/.

  2. В правом верхнем углу щелкните значок шестеренки, а затем выберите настраиваемые соединители.

    Снимок экрана: меню значка шестеренки с параметром

  3. Выберите "Создать настраиваемый соединитель", а затем выберите "Импорт коллекции Postman".

    Снимок экрана: меню

  4. Введите имя настраиваемого соединителя, перейдите к примеру скачаемого файла OpenAPI и нажмите кнопку "Подключить".

    Снимок экрана: поле для ввода имени пользовательского соединителя.

    Параметр Значение
    Название настраиваемого соединителя "GitHubDemo"

Завершение создания пользовательского соединителя

  1. На странице "Общие " нажмите кнопку "Продолжить".

  2. На странице Безопасность в разделе Тип аутентификации выберите Базовая аутентификация.

  3. В разделе Обычная проверка подлинности для полей меток введите текст Имя пользователя и Пароль. Эти метки отображаются при использовании триггера в приложении логики или потоке.

    Снимок экрана полей метки базовой аутентификации.

  4. В верхней части мастера убедитесь, что для имени задано значение GitHubDemo, а затем нажмите кнопку "Создать соединитель".

Теперь вы готовы использовать триггер в приложении логики или потоке или вы можете прочитать о том, как создавать триггеры из пользовательского интерфейса.

Создавайте триггеры вебхуков в пользовательском интерфейсе

В этом разделе описано, как создать триггер в пользовательском интерфейсе без определения триггеров в определении OpenAPI. Начните с базового определения OpenAPI или начните с нуля в мастере настраиваемых соединителей.

  1. На странице "Общие " укажите описание и URL-адрес.

    Параметр Значение
    Описание "GitHub — это социальный репозиторий исходного кода".
    URL-адрес "api.github.com"
  2. На странице Безопасность настройте базовую аутентификацию, как вы делали в предыдущем разделе.

  3. На странице определения выберите новый триггер и заполните описание триггера. В этом примере вы создаёте триггер, который срабатывает при создании запроса на включение изменений в репозитории.

    Снимок экрана: новые поля сведений о триггере.

    Параметр Значение
    Сводка "Срабатывает, когда делается запрос на извлечение в выбранный репозиторий"
    Описание "Срабатывает, когда делается запрос на извлечение в выбранный репозиторий"
    Идентификатор операции "webhook-PR-trigger"
    Видимость "none" (дополнительные сведения см. ниже)
    Тип триггера вебхук

    Свойство Видимость для операций и параметров в приложении логики или потоке имеет следующие параметры:

    • нет: обычно отображается в приложении логики или потоке
    • расширенная: скрыто в дополнительном меню
    • внутренняя: скрыто от пользователя
    • важная: всегда сначала предоставляется пользователю для просмотра
  4. Область Запрос отображает информацию на основе HTTP-запроса на действие. Выберите Импорт из примера.

    Снимок экрана: страница

  5. Определите запрос для триггера веб-перехватчика, а затем выберите Импорт. Мы предоставляем пример для импорта (в следующем разделе). Дополнительные сведения см. в разделе Справочник по API GitHub. Logic Apps и Power Automate автоматически добавляют стандартные и заголовки безопасности content-type, поэтому эти заголовки не нужно определять при импорте из примера.

    Снимок экрана: диалоговое окно импорта запроса для триггера вебхука.

    Параметр Значение
    Глагол "POST"
    URL-адрес "https://api.github.com/repos/{owner}/{repo}/hooks"
    Основная часть См. ниже
    {
      "name": "web",
      "active": true,
      "events": [
        "pull_request"
      ],
      "config": {
        "url": "http://example.com/webhook"
      }
    }
    
  6. Область Ответ отображает информацию на основе HTTP-ответа для действия. Щелкните Добавить ответ по умолчанию.

    Снимок экрана области

  7. Определите ответ для триггера веб-перехватчика, а затем выберите Import. Опять, мы предоставляем образец для импорта. Дополнительные сведения см. в разделе Справочник по API GitHub.

    Снимок экрана диалогового окна импорта ответов для триггера вебхука.

    {
      "action": "opened",
      "number": 1,
      "pull_request": {
        "html_url": "https://github.com/baxterthehacker/public-repo/pull/1",
        "state": "open",
        "locked": false,
        "title": "Update the README with new information",
        "user": {
          "login": "baxterthehacker",
          "type": "User"
        }
      }
    }
    
  8. В области Конфигурация триггера выберите параметр, который должен получить значение URL-адреса обратного вызова из GitHub. Этот параметр является свойством url в объекте config.

    Снимок экрана: область конфигурации триггера с выбранным параметром URL-адреса обратного вызова.

  9. В верхней части мастера введите имя, а затем выберите Создать соединитель.

Используйте вебхук в качестве триггера

После настройки всего используйте вебхук через настраиваемый соединитель в приложении логики или в потоке. Затем создайте поток, который отправляет сообщение электронной почты всякий раз, когда ваш репозиторий GitHub получает push-запрос Git.

  1. В https://make.powerautomate.com/верхней части страницы выберите "Мои потоки".

  2. Выберите Создать с нуля.

    Снимок экрана: параметр поиска сотен соединителей и триггеров.

  3. В конструкторе Power Automate найдите настраиваемый соединитель, который вы зарегистрировали ранее.

    Снимок экрана поиска триггера настраиваемого соединителя в конструкторе Power Automate.

  4. Выберите элемент в списке, чтобы использовать его в качестве триггера.

  5. Так как это первый раз, когда вы использовали этот настраиваемый соединитель, подключитесь к нему. Введите сведения о подключении и нажмите кнопку "Создать".

    Снимок экрана: новые поля сведений о подключении.

    Параметр Значение
    Имя подключения Описательное имя
    Имя пользователя Ваше имя пользователя GitHub
    Пароль Личный маркер доступа, который вы создали ранее
  6. Введите сведения о репозитории, который хотите отслеживать. В объекте WebhookRequestBody в файле OpenAPI вы увидите знакомые поля.

    Снимок экрана: поля владельца репозитория и имени триггера.

    Параметр Значение
    владелец Владелец репозитория для мониторинга
    репо Репозиторий для мониторинга

    Внимание!

    Используйте репозиторий, к которому у вашей учетной записи есть права. Самый простой способ сделать это — использовать собственный репозиторий.

  7. Выберите Новый шаг>Добавить действие.

  8. Найдите и выберите действие "Отправить сообщение электронной почты( версия 2).

  9. Введите текст в поле "Текст " и других полях, используя значения из диалогового окна динамического содержимого. Значения приходят из объекта WebhookPushResponse в файле OpenAPI.

  10. В верхней части страницы присвойте потоку имя и выберите Создать поток.

    Снимок экрана: поле имени потока и кнопка

Проверка и устранение неполадок

Чтобы убедиться, что все настроено правильно, выберите "Мои потоки", а затем щелкните значок сведений рядом с новым потоком, чтобы просмотреть журнал выполнения:

  • Вы уже должны видеть как минимум один запуск со статусом Успешно после создания веб-перехватчика. Этот запуск означает, что вебхук был успешно создан на стороне GitHub.
  • Если запуск завершился с ошибкой, просмотрите сведения о нем, чтобы узнать причину. Если сбой был вызван ответом 404 Not Found, то у вашей учетной записи GitHub, скорее всего, нет необходимых прав для создания вебхука в репозитории, который вы использовали.

Сводка

Если вы правильно настроили все, вы получаете push-уведомления в мобильном приложении Power Automate всякий раз при отправке git в выбранном репозитории GitHub. Используя описанный выше процесс, вы можете использовать любую службу, поддерживающую вебхуки, в качестве триггера в ваших потоках.

Дальнейшие шаги

Предоставление отзыва

Мы очень ценим отзывы о проблемах с нашей платформой соединителей и новые идеи о функциях. Чтобы оставить отзыв, выберите пункт Сообщить о проблемах или получить помощь с соединителями и выберите тип отзыва.