Webhook は、Web サービスで何かが発生したときにイベント通知を提供する単純な HTTP コールバックです。 Azure Logic AppsとPower Automateでは、トリガーとして Webhook を使用できます。 ロジック アプリまたはフローは、このトリガーをリッスンし、トリガーが起動するたびにアクションを実行します。 このチュートリアルでは、OpenAPI 仕様で定義されたカスタム コネクタを使用して Webhook をトリガーとして使用する方法について説明します。
注
この記事では、webhook を介して通知を送信できるサービスの例としてGitHubを使用しますが、ここで示す手法を Webhook を許可する任意のサービスに拡張できます。
前提条件
- 次のいずれかのサブスクリプション:
- Logic Appsを使用している場合は、Azure
- Power Automate(パワーオートメート)
- ロジック アプリまたはクラウド フローを構築し、OpenAPI 定義からカスタム コネクタを作成する基本的な経験。
- Logic Apps を使用している場合は、最初に Azure Logic Apps カスタム コネクタを作成 します。
- Webhook の基本的な理解。
- OpenAPI 仕様 (以前の Swagger) に関する基本的な理解。
- GitHub アカウント。
- このチュートリアルのサンプル OpenAPI 定義。 まだお持ちでない場合は、次の手順で使用するためにダウンロードしてください。 それ以外の場合は、Webhook のカスタム OpenAPI 定義を作成する必要があります。
GitHub で認証を有効にする
Webhook 要求を Logic Apps または Power Automate に送信する Web サービス API は、通常、何らかの形式の認証を使用しますが、GitHubも例外ありません。 GitHubでは、いくつかの種類の認証がサポートされています。 このチュートリアルでは、GitHubきめ細かい個人用アクセス トークンを使用します。
GitHubに移動し、まだサインインしていない場合はサインインします。
右上でプロファイル画像を選択し、メニューの [設定] を選択します。
左側のメニューで、[ 開発者設定] を選択します。
[Personal access tokens] で、[Fine-grained tokens] を選択します。
[ 新しいトークンの生成 ] ボタンを選択し、要求された場合はパスワードを確認します。
トークンの名前と説明を入力します。
[ 有効期限] で、トークンの有効期限を選択します。
[ リポジトリ アクセス] で、[リポジトリ のみを選択] を選択し、アクセス権を付与するリポジトリを選択します。
[ アクセス許可] で、[ アクセス許可の追加>Webhooks>読み取りと書き込みを選択します。
[ トークンの生成 ] ボタンを選択します。
新しいトークンをメモします。 このトークンは、後で Webhook コネクタをトリガーとして追加するときに使用する必要があります。
重要
このトークンに再度アクセスすることはできません。 このチュートリアルの後半で使用するために、コピーしてどこかに貼り付けます。
OpenAPI 定義で Webhook を定義する
カスタム コネクタの一部として、Logic Apps と Power Automate で Webhook を実装します。 コネクタを作成するには、Webhook の形状を定義する OpenAPI 定義を指定する必要があります。 このチュートリアルでは、GitHub Webhook 用にダウンロードしたサンプル OpenAPI 定義を使用します。
トリガーを作成するが、使用する OpenAPI 定義がない場合は、カスタム コネクタ ウィザードの トリガー UI を使用して Webhook トリガーを定義します。
サンプルの OpenAPI 定義には、Webhook を機能させるために不可欠な 3 つの部分が含まれています。
- webhook を作成する
- Web サービス API からの受信フック要求の定義 (このチュートリアルの例では、GitHub)
- webhook を削除する
コネクタでは、この OpenAPI 定義を使用して、GitHub リポジトリの Webhook を作成、受信、および削除する方法を理解します。
Webhook を作成する
コネクタは、Web サービス API (この例では、GitHub REST API) を使用して、Web サービスの適切な Webhook 作成エンドポイントに HTTP POST 要求を送信することによって Web サービス側に Webhook を作成します (GitHubの場合は/repos/{owner}/{repo}/hooks)。
コネクタを使用して新しいロジック アプリまたはフローを作成すると、コネクタは、コネクタの OpenAPI 定義で定義されている Web サービスの作成 Webhook エンドポイントに POST 要求を送信します。 また、ロジック アプリまたはフロー トリガーを変更すると、この URL に POST 要求が送信されます。 次の OpenAPI パス構成の例では、post プロパティには、GitHub REST API に送信する webhook の作成要求のスキーマが含まれています。
"/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" プロパティは、デザイナーで使用可能なトリガーの一覧にこの webhook を表示するように Logic Apps とPower Automateに指示するスキーマ拡張機能です。 必ず含めるようにしてください。
API から入ってくるフック要求を定義する
前のサンプルに示すように、カスタム x-ms-notification-content プロパティで受信フック要求 (GitHub から Logic Apps または Power Automate への通知) の形状を定義します。 要求には、要求の内容全体を含める必要はありません。ロジック アプリまたはフローで使用する部分だけを含めます。
Webhook を削除する
Webhook を削除する方法の定義を OpenAPI 定義に含めます。 Logic Apps とPower Automateトリガーを更新する場合、またはロジック アプリまたはフローを削除した場合は、既存の Webhook の削除を試みます。
"/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"
}
]
}
},
削除 Webhook 呼び出しにヘッダーは含まれません。 webhook の削除呼び出しでは、コネクタと同じ接続が使用されます。
重要
Logic Apps またはPower Automateが Webhook を削除できるようにするには、Web サービスの API に、webhook の作成時に 201 応答に Location HTTP ヘッダーを含める必要があります。
Location ヘッダーには、HTTP DELETE メソッドで使用される webhook へのパスが含まれている必要があります。 たとえば、GitHubの応答に含まれるLocation ヘッダーは、次の形式に従います: https://api.github.com/repos/<user name>/<repo name>/hooks/<hook ID>。
OpenAPI 定義をインポートする
OpenAPI 定義を、Logic Apps または Power Automate 用にインポートすることから始めます。
Logic Apps 用に OpenAPI 定義をインポートする
Azure ポータル に移動し、以前に Azure Logic Apps カスタム コネクタの作成 で作成した Logic Apps コネクタを開きます。
コネクタのメニューで、Logic Apps コネクタを選択し、次に 編集 を選択します。
[ 全般] で [ OpenAPI ファイルのアップロード] を選択し、ダウンロードしたサンプルの OpenAPI ファイルに移動します。
Power Automate 用 OpenAPI 定義をインポートする
https://make.powerautomate.com/ にアクセスします。
右上隅にある歯車アイコンを選択し、[ カスタム コネクタ] を選択します。
[ カスタム コネクタの作成] を選択し、[ Postman コレクションのインポート] を選択します。
カスタム コネクタの名前を入力し、ダウンロードしたサンプル OpenAPI ファイルに移動し、[ 接続] を選択します。
パラメーター 値 カスタム コネクタ タイトル "GitHubDemo"
カスタム コネクタの作成を終了する
[ 全般 ] ページで、[ 続行] を選択します。
セキュリティ ページで、認証タイプから、基本認証 を選択します。
基本認証セクションで、ラベル フィールド用にテキストでユーザー名とパスワードを入力します。 これらのラベルは、ロジック アプリまたはフローでトリガーを使用すると表示されます。
ウィザードの上部で、名前が "GitHubDemo" に設定されていることを確認し、[ コネクタの作成] を選択します。
これで、ロジック アプリまたはフローでトリガーを使用する 準備が整いました、または、UI からトリガーを作成する方法について読むことができます。
UI からの webhook トリガーの作成
このセクションでは、OpenAPI 定義にトリガー定義を含めずに UI でトリガーを作成する方法について説明します。 ベースラインの OpenAPI 定義から、またはカスタム コネクタ ウィザードで最初から開始します。
[ 全般 ] ページで、説明と URL を指定していることを確認します。
パラメーター 値 説明 "GitHub はソーシャル ソース コード リポジトリです。" URL "api.github.com" 安全保障 ページで、前のセクションで行ったように基本認証を構成します。
[ 定義 ] ページで、[ 新しいトリガー] を選択し、トリガーの説明を入力します。 この例では、リポジトリに対してプル要求が行われたときに起動されるトリガーを作成します。
パラメーター 値 概要 "選択したリポジトリに対してプル リクエストが行われるとトリガーされます" 説明 "選択したリポジトリに対してプル リクエストが行われるとトリガーされます" 操作 ID webhook-PR-トリガー 表示 "なし" (詳細については以下を参照してください) トリガーの種類 ウェブフック ロジック アプリまたはフローでの操作やパラメータの 可視性 プロパティには、次のオプションがあります。
- なし: 通常、ロジック アプリまたはフローで表示
- 詳細: 追加メニューでは非表示
- 内部: ユーザーには非表示
- 重要: 必ずユーザーに最初に表示
リクエスト エリアには、アクションの HTTP リクエストに基づく情報が表示されます。 サンプルからインポート を選択します。
webhook トリガーの要求を定義し、[インポート] を選択 します。 (次のセクションで) インポートするサンプルを提供します。 詳細については、GitHub API の参照 を参照してください。 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" } }応答 領域には、アクションの HTTP 応答に基づく情報が表示されます。 既定の応答を追加するを選択します。
webhook トリガーの応答を定義し、[インポート] を選択 します。 再度、インポートするサンプルを提供します。 詳細については、GitHub API の参照 を参照してください。
{ "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" } } }トリガー構成エリアで、GitHub からコールバック URL 値を受信するパラメーターを選択します。 このパラメーターは、
configオブジェクトのurlプロパティです。
ウィザードの上部で名前を入力し、[ コネクタの作成] を選択します。
トリガーとして webhook を使用する
すべてを構成したら、ロジック アプリまたはフローのカスタム コネクタを介して webhook を使用します。 次に、GitHub リポジトリが git プッシュを受信するたびに電子メールを送信するフローを作成します。
https://make.powerautomate.com/で、ページの上部にある [マイ フロー] を選択します。
最初から作成 を選択します。
Power Automate のデザイナーで、以前に登録したカスタム コネクタを検索します。
リスト内の項目を選択して、トリガーとして使用します。
このカスタム コネクタを初めて使用したので、接続します。 接続情報を入力し、[ 作成] を選択します。
パラメーター 値 接続名 わかりやすい名前 ユーザー名 自分の GitHub ユーザー名 パスワード 先に作成した個人用アクセス トークン 監視するリポジトリの詳細を入力します。 OpenAPI ファイルの WebhookRequestBody オブジェクトのフィールドを認識できます。
パラメーター 値 所有者 監視するリポジトリの所有者 リポジトリ 監視するリポジトリ 重要
アカウントに権限があるリポジトリを使用します。 これを行う最も簡単な方法は、独自のリポジトリを使用することです。
[新しいステップ]>[アクションの追加] の順に選択します。
[ 電子メールの送信 (V2)] アクションを 検索して選択します。
[動的コンテンツ] ダイアログ ボックスの値を使用して、[本文] フィールドとその他のフィールドにテキストを入力します。 値は、OpenAPI ファイル内の WebhookPushResponse オブジェクトから取得されます。
ページ上部でフローに名前を付け、フローの作成 を選択します。
検証とトラブルシューティング
すべてが正しく設定されていることを確認するには、[ マイ フロー] を選択し、新しいフローの横にある 情報アイコン を選択して実行履歴を表示します。
- Webhook の作成から少なくとも 1 つの 成功した 実行が既に表示されているはずです。 この実行は、webhook がGitHub側で正常に作成されたことを示します。
- 実行に失敗した場合は、実行の詳細を確認して、失敗した理由を確認します。
404 Not Found応答が原因でエラーが発生した場合、GitHub アカウントには、使用したリポジトリに Webhook を作成するための適切なアクセス許可がない可能性があります。
概要
すべてを正しく構成した場合は、選択したGitHub リポジトリで git プッシュが発生するたびに、Power Automate モバイル アプリでプッシュ通知を受け取ります。 上記のプロセスを使用すると、任意の Webhook 対応サービスをフローのトリガーとして使用できます。
次の手順
フィードバックを提供する
コネクタ プラットフォームの問題点や新機能のアイデアなど、フィードバックをお待ちしています。 フィードバックを提供するには、「問題を送信するか、コネクタに関するヘルプを入手する」にアクセスし、フィードバックの種類を選択します。