Microsoft Graph JSON Batch カスタムコネクタを作成して電力を自動処理する
Microsoft 製品には、230 を超えるアウトボックス コネクタPower Automate。 これらのコネクタの多くは、Microsoft Graphを使用して、Microsoft 製品の特定のエンドポイントと通信します。 さらに、API 全体をカバーするために Microsoft Graph と直接通信するコネクタが存在しなかから、サービスの基本的な構成要素を使用して Power Automate から Microsoft Graph を直接呼び出す必要がある場合があります。
Microsoft Graphを直接呼び出す場合の対処シナリオに加えて、多数の Microsoft Graph API エンドポイントは委任されたアクセス許可のみをサポートします。 Microsoft Power Automateの HTTP コネクタを使用すると、Microsoft サービスの呼び出しなど、非常に柔軟な統合Graph。 ただし、HTTP コネクタには、特定の委任されたアクセス許可シナリオを有効にするためのユーザーの資格情報をキャッシュする機能が不足しています。 このような場合、カスタム コネクタを作成して、Microsoft Graph API のラッパーを提供し、委任されたアクセス許可で API を使用できます。
このラボでは、上記の両方のシナリオについて説明します。 最初に、委任されたアクセス許可を必要とする Microsoft Graph統合を有効にするカスタム コネクタを作成します。 次に、$batch 要求エンドポイントを使用して、"サインイン" ユーザーが存在するアプリを必要とする委任されたアクセス許可を使用しながら、Microsoft Graph のフル パワーへのアクセスを提供します。
注意
これは、Microsoft Power Automate およびカスタム コネクタで使用するカスタム コネクタを作成Azure Logic Apps。 このチュートリアルでは、プロセスを理解するためにカスタム コネクタの概要を読 み取ったと仮定します。
前提条件
この記事でこの演習を完了するには、次の手順が必要です。
- テナントへの管理者Office 365アクセス。 お持ちではない場合は、Microsoft 365開発者プログラムにアクセスして無料の開発者テナントにサインアップしてください。
- Microsoft Power Automate へのアクセス。
フィードバック
このチュートリアルに関するフィードバックは、リポジトリのGitHubしてください。
Azure AD アプリ登録を作成する
この演習では、カスタム コネクタに委任Azure Active Directoryを提供するために使用される新しいアプリケーション アプリケーションを作成します。
ブラウザーを開き、管理センター Azure Active Directory移動します。 左側の ナビゲーション Azure Active Directory の [アプリの登録] リンクを選択し、[アプリの登録]ブレードの [管理] セクションで [アプリ Azure Active Directory 選択します。
![管理センターの [Azure Active Directory] ブレードAzure Active Directoryショット](power-automate/tutorial/images/app-registrations.png)
[アプリ の登録] ブレード の上部にある [新規登録] メニュー 項目を選択 します。
![管理センターの [アプリの登録] ブレードAzure Active Directoryショット](power-automate/tutorial/images/new-registration.png)
[ MS Graph Batch App 名前] フィールド に入力 します。 [サポート されているアカウントの種類] セクションで 、[任意の 組織ディレクトリのアカウント] を選択します。 [リダイレクト URI] セクションを空白 のままにし、[登録] を 選択します。
![管理センターの [アプリケーションの登録] ブレードAzure Active Directoryショット](power-automate/tutorial/images/register-an-app.png)
[バッチ アプリ の MS Graph] ブレード で、アプリケーション (クライアント) ID をコピーします。 これは次の演習で必要です。

[MS バッチ アプリ] ブレードの[管理] セクションで API Graphを選択 します。 [API アクセス許可] で [アクセス****許可の追加] を選択します。
![[API アクセス許可] ブレードのスクリーン ショット](power-automate/tutorial/images/api-permissions.png)
[API アクセス許可の要求] ブレードで、[Microsoft アクセス許可] を Graph、[ 委任されたアクセス許可]を選択します。 を検索し group 、[すべてのグループの委任された 読み取りおよび書き込み] アクセス許可を選択します。 ブレード の下部にある [アクセス 許可の追加] を選択します。
![[API アクセス許可の要求] ブレードのスクリーン ショット](power-automate/tutorial/images/select-permissions.png)
[MS バッチ アプリ] ブレードの[管理] セクションで [証明書とシークレット] Graphを選択し、[新 しいクライアント シークレット]を選択します。 [説明 forever ] に 入力し、[有効期限 ] で [しない ] を選択します。 [追加] を選択します。
![[証明書とシークレット] ブレードのスクリーン ショット](power-automate/tutorial/images/create-client-secret.png)
新しいシークレットの値をコピーします。 これは次の演習で必要です。

重要
このブレードを閉じるとシークレットにアクセスできないので、この手順は重要です。 このシークレットをテキスト エディターに保存して、今後の演習で使用します。
Teams プロパティを含む、Microsoft Graph 経由でアクセスできる追加のサービスの管理を有効にするには、特定のサービスを管理するために、追加の適切なスコープを選択する必要があります。 たとえば、OneNote Notebooks または Planner プラン、バケット、タスクの作成を有効にするには、関連する API に必要なアクセス許可スコープを追加する必要があります。
カスタム コネクタを作成する
この演習では、新しいカスタム コネクタを作成します。このコネクタは、Microsoft Power Automate または Azure Logic Apps。 OpenAPI 定義ファイルは、Microsoft Graphエンドポイントの正しいパスと、簡単なインポートを有効にする追加の設定を使用して $batch 事前に構築されています。
Microsoft のカスタム コネクタを作成するには、次の 2 つのGraph。
- 空白から作成する
- OpenAPI ファイルのインポート
オプション 1: 空のテンプレートからカスタム コネクタを作成する
ブラウザーを開き、Microsoft Power Automateに移動します。 テナント管理者アカウントOffice 365サインインします。 左側 の メニューで [データ] を選択し、ドロップダウン メニューで [カスタム コネクタ] アイテムを選択します。

[カスタム コネクタ] ページで、上部右側の [新しいカスタム コネクタ]リンクを選択し、ドロップダウン メニューの [空のアイテムから作成] を選択します。
![Microsoft の [新しいカスタム コネクタ] ドロップダウン メニューのスクリーン ショットPower Automate](power-automate/tutorial/images/new-connector.png)
[ MS Graph Batch Connector コネクタ名 ] テキスト ボックスに 入力します。 Choose Continue.
[コネクタの構成] [全般] ページで、次のようにフィールドに入力します。
- スキーム: HTTPS
- ホスト:
graph.microsoft.com - 基本 URL:
/
[セキュリティ ] ボタンを 選択して続行します。
![コネクタ構成の [全般] タブのスクリーン ショット](power-automate/tutorial/images/general-tab.png)
[セキュリティ ] ページ で、次のようにフィールドに入力します。
- API によって実装される認証を選択します。
OAuth 2.0 - ID プロバイダー:
Azure Active Directory - クライアント ID: 前の演習で作成したアプリケーション ID
- クライアント シークレット: 前の演習で作成したキー
- ログイン URL:
https://login.windows.net - テナント ID:
common - リソース URL:
https://graph.microsoft.com(末尾なし /) - スコープ: 空白のままにする
[定義 ] ボタンを 選択して続行します。
![コネクタ構成の [セキュリティ] タブのスクリーン ショット](power-automate/tutorial/images/security-tab.png)
[定義 ] ページで 、[新しいアクション] を選択し 、次のようにフィールドに入力します。
- 概要:
Batch - 説明:
Execute Batch with Delegate Permission - 操作 ID:
Batch - 可視性:
important
![コネクタ構成の [定義] タブのスクリーン ショット](power-automate/tutorial/images/definition-tab.png)
[サンプル からインポート ] を選択して 要求を作成し 、次のようにフィールドに入力します。
- 動詞:
POST - URL:
https://graph.microsoft.com/v1.0/$batch - ヘッダー: 空白のままにする
- 本文:
{}
[インポート] を選択します。
![コネクタ構成の [サンプルからインポート] ダイアログのスクリーン ショット](power-automate/tutorial/images/import-sample.png)
右側 の [コネクタの 作成] を選択します。 コネクタが作成された後、生成されたリダイレクト URL を [セキュリティ] ページ****からコピー します。

前の演習で作成した Azure Portal の登録済みアプリケーションに戻します。 左側 のメニュー で [認証] を選択します。 [プラットフォームを追加] を選択して、[Web] を選択します。 [リダイレクト URI] で前の手順からコピーしたリダイレクト URL を 入力し、[ 構成] を 選択します。
![Azure portal の [返信 URL] ブレードのスクリーン ショット](power-automate/tutorial/images/update-app-reg.png)
オプション 2: OpenAPI ファイルをインポートしてカスタム コネクタを作成する
テキスト エディターを使用して、という名前の新しい空のファイルを作成 MSGraph-Delegate-Batch.swagger.json し、次のコードを追加します。
{
"swagger": "2.0",
"info": {
"title": "MS Graph Batch Connector",
"description": "",
"version": "1.0"
},
"host": "graph.microsoft.com",
"basePath": "/",
"schemes": [
"https"
],
"consumes": [],
"produces": [],
"paths": {
"/v1.0/$batch": {
"post": {
"responses": {
"default": {
"description": "default",
"schema": {}
}
},
"summary": "Batch",
"description": "Execute Batch with Delegate Permission",
"operationId": "Batch",
"x-ms-visibility": "important",
"parameters": [
{
"name": "body",
"in": "body",
"required": false,
"schema": {
"type": "object",
"properties": {}
}
}
]
}
}
},
"definitions": {},
"parameters": {},
"responses": {},
"securityDefinitions": {
"oauth2_auth": {
"type": "oauth2",
"flow": "accessCode",
"authorizationUrl": "https://login.windows.net/common/oauth2/authorize",
"tokenUrl": "https://login.windows.net/common/oauth2/authorize",
"scopes": {}
}
},
"security": [
{
"oauth2_auth": []
}
],
"tags": []
}
ブラウザーを開き、Microsoft Power Automateに移動します。 テナント管理者アカウントOffice 365サインインします。 左側 の メニューで [データ] を選択し、ドロップダウン メニューで [カスタム コネクタ] アイテムを選択します。
[カスタム コネクタ] ページで、上部右側の [新しいカスタム コネクタ] リンクを選択し、ドロップダウン メニューで [OpenAPI ファイルのインポート] アイテムを選択します。
[ MS Graph Batch Connector コネクタ名 ] テキスト ボックスに 入力します。 OpenAPI ファイルをアップロードするフォルダー アイコンを選択します。 作成した MSGraph-Delegate-Batch.swagger.json ファイルを参照します。 [続行 ] を 選択して、OpenAPI ファイルをアップロードします。
コネクタ構成ページで、ナビゲーション メニューの [セキュリティ ] リンクを選択します。 フィールドに次のように入力します。
- API によって実装される認証を選択します。
OAuth 2.0 - ID プロバイダー:
Azure Active Directory - クライアント ID: 前の演習で作成したアプリケーション ID
- クライアント シークレット: 前の演習で作成したキー
- ログイン URL:
https://login.windows.net - テナント ID:
common - リソース URL:
https://graph.microsoft.com(末尾なし /) - スコープ: 空白のままにする
右側 の [コネクタの 作成] を選択します。 コネクタが作成された後、生成されたリダイレクト URL をコピーします。

前の演習で作成した Azure Portal の登録済みアプリケーションに戻します。 左側 のメニュー で [認証] を選択します。 [プラットフォームを追加] を選択して、[Web] を選択します。 [リダイレクト URI] で前の手順からコピーしたリダイレクト URL を 入力し、[ 構成] を 選択します。
![Azure portal の [返信 URL] ブレードのスクリーン ショット](power-automate/tutorial/images/update-app-reg.png)
コネクタを承認する
コネクタを使用する準備ができていることを確認するための最後の構成手順は、カスタム コネクタを承認してテストして、キャッシュされた接続を作成します。
重要
次の手順では、管理者特権でログインしている必要があります。
[Microsoft Power Automate]で、左側の [データ] メニュー項目に移動し、[接続] ページ を選択 します。 [新しい 接続] リンクを選択 します。
![[新しい接続] ボタンのスクリーン ショット](power-automate/tutorial/images/new-connection.png)
カスタム コネクタを見つけて、プラス ボタンをクリックして接続を完了します。 テナント管理者のOffice 365アカウントでサインインAzure Active Directoryします。

要求されたアクセス許可を求めるメッセージが表示されたら、[組織の代理として同意する] をオンにし、[同意 する] を選択してアクセス許可を承認します。

アクセス許可を承認すると、アクセス許可に接続がPower Automate。
カスタム コネクタが構成され、有効になっています。 アクセス許可が適用され、利用可能になるのに遅延が発生する可能性がありますが、コネクタは現在構成されています。
Graph エクスプローラーでバッチ処理をテストする
新しいコネクタをFlowする前に、Microsoft Graph Explorerを使用して、Microsoft Graph での JSON バッチ処理の機能と機能の一部を検出します。
ブラウザーでMicrosoft Graph エクスプローラーを開きます。 テナント管理者アカウントOffice 365サインインします。 サンプル クエリから Batch を検索します。
左側の メニューで [並列 GETs の実行] サンプル クエリを選択します。 画面の 上部にある [クエリ の実行] ボタンを選択します。
![エクスプローラーの [サンプル クエリ] タブGraphします。](power-automate/tutorial/images/sample-queries.png)
サンプル のバッチ操作では、3 つの HTTP GET 要求がバッチ処理され、1 つの HTTP POST /v1.0/$batch Graphされます。
{
"requests": [
{
"url": "/me?$select=displayName,jobTitle,userPrincipalName",
"method": "GET",
"id": "1"
},
{
"url": "/me/messages?$filter=importance eq 'high'&$select=from,subject,receivedDateTime,bodyPreview",
"method": "GET",
"id": "2"
},
{
"url": "/me/events",
"method": "GET",
"id": "3"
}
]
}
返される応答を以下に示します。 Microsoft が返す応答の配列に注意Graph。 バッチ処理された要求に対する応答は、POST 内の要求の順序とは異なる順序で表示される場合があります。 プロパティ id を使用して、個々のバッチ要求と特定のバッチ応答を関連付ける必要があります。
注意
読みやすさのために応答が切り詰められていました。
{
"responses": [
{
"id": "1",
"status": 200,
"headers": {...},
"body": {...}
},
{
"id": "3",
"status": 200,
"headers": {...},
"body": {...}
}
{
"id": "2",
"status": 200,
"headers": {...},
"body": {...}
}
]
}
各応答には、、 id status 、、 headers およびプロパティが含 body まれる。 要求の status プロパティにエラーが示されている場合、要求から返されるエラー body 情報が含まれる。
要求に対する操作の順序を確認するために、dependsOn プロパティを使用して個々の要求を 順序付 けできます。
シーケンス操作と依存関係操作に加えて、JSON バッチ処理は基本パスを前提として、相対パスからの要求を実行します。 各バッチ要求要素は、指定された /v1.0/$batch OR /beta/$batch エンドポイントのいずれかから実行されます。 エンドポイントが追加の出力を返す場合があります。エンドポイントでは返されない場合があります /beta /v1.0 。
たとえば、Microsoft エクスプローラーで次の 2 つのクエリGraphします。
- URL を使用
/v1.0/$batchしてエンドポイントをクエリします/me(以下のコピーと貼り付け要求)。
{
"requests": [
{
"id": 1,
"url": "/me",
"method": "GET"
}
]
}

次に、バージョン セレクター ドロップダウンを使用してエンドポイントに変更し、 beta まったく同じ要求を行います。

返される結果の違いは何ですか? 他のいくつかのクエリを試して、いくつかの違いを特定してください。
アクセス許可の同意が付与されていないバッチ要求が行われた場合に発生する可能性があるエラーを理解することは、エンドポイントと異なる応答コンテンツに加えて /v1.0 /beta 重要です。 たとえば、ノートブックを作成するバッチ要求アイテムを次にOneNoteします。
{
"id": 1,
"url": "/groups/65c5ecf9-3311-449c-9904-29a2c76b9a50/onenote/notebooks",
"headers": {
"Content-Type": "application/json"
},
"method": "POST",
"body": {
"displayName": "Meeting Notes"
}
}
ただし、ノートブックを作成するアクセス許可OneNoteが付与されていない場合は、次の応答が受信されます。 指定された OAuth トークンを示す状態コードとエラー メッセージには、要求されたアクションを完了するために必要なスコープ 403 (Forbidden) が含まれます。
{
"responses": [
{
"id": "1",
"status": 403,
"headers": {
"Cache-Control": "no-cache"
},
"body": {
"error": {
"code": "40004",
"message": "The OAuth token provided does not have the necessary scopes to complete the request.
Please make sure you are including one or more of the following scopes: Notes.ReadWrite.All,
Notes.Read.All (you provided these scopes: Group.Read.All,Group.ReadWrite.All,User.Read,User.Read.All)",
"innerError": {
"request-id": "92d50317-aa06-4bd7-b908-c85ee4eff0e9",
"date": "2018-10-17T02:01:10"
}
}
}
}
]
}
バッチ内の各要求は、状態コードと結果またはエラー情報を返します。 個々のバッチ操作の成功または失敗を判断するには、各応答を処理する必要があります。
フローの作成
この演習では、前の演習で作成したカスタム コネクタを使用して Microsoft チームを作成および構成するフローを作成します。 フローはカスタム コネクタを使用して POST 要求を送信して Office 365 Unified Group を作成し、グループの作成が完了する間は一時停止し、グループを Microsoft Team に関連付ける PUT 要求を送信します。
最後に、フローは次の図のようになります。

ブラウザーで Microsoft Power Automateを開き、テナント管理者アカウントOffice 365サインインします。 左側 のナビゲーションで [ 自分のフロー] を選択します。 [ 新規]、 次に [Instant--from]を選択します。 [ Create Team 名前] Flow入力し、[このフローをトリガーする方法を選択する] の下の [手動でフロー をトリガーする] を選択します。
[作成] をクリックします。
[フロー アイテム を手動でトリガー する] を選択し、[入力の追加] を選択し、[テキスト]を選択****して タイトル Name として入力します。

[新 しい手順] を 選択し、 Batch 検索ボックスに入力します。 [バッチ コネクタ ] アクションGraph MS を追加 します。 省略記号を選択し、このアクションの名前をに変更します Batch POST-groups 。
アクションの本文テキスト ボックスに次 の コードを追加します。
{
"requests": [
{
"url": "/groups",
"method": "POST",
"id": 1,
"headers": { "Content-Type": "application/json" },
"body": {
"description": "REPLACE",
"displayName": "REPLACE",
"groupTypes": ["Unified"],
"mailEnabled": true,
"mailNickname": "REPLACE",
"securityEnabled": false
}
}
]
}
[動的コンテンツの追加] メニューから手動トリガーから値を選択して、各 REPLACE Name プレースホルダーを置き換 える。

[新しい手順] を選択し、[遅延] delay アクションを検索して追加し、1 分間構成します。
[新 しい手順] を 選択し、 Batch 検索ボックスに入力します。 [バッチ コネクタ ] アクションGraph MS を追加 します。 省略記号を選択し、このアクションの名前をに変更します Batch PUT-team 。
アクションの本文テキスト ボックスに次 の コードを追加します。
{
"requests": [
{
"id": 1,
"url": "/groups/REPLACE/team",
"method": "PUT",
"headers": {
"Content-Type": "application/json"
},
"body": {
"memberSettings": {
"allowCreateUpdateChannels": true
},
"messagingSettings": {
"allowUserEditMessages": true,
"allowUserDeleteMessages": true
},
"funSettings": {
"allowGiphy": true,
"giphyContentRating": "strict"
}
}
}
]
}
プレースホルダーを REPLACE 選択し、動的コンテンツ ウィンドウで [ 式] を選択します。 式に次の数式を 追加します。
body('Batch_POST-groups').responses[0].body.id

この数式は、最初のアクションの結果からグループ ID を使用する場合に指定します。

[保存 ] を 選択し、[ テスト] を選択 してフローを実行します。
ヒント
次のようなエラーが表示された場合は、式が正しくないので、検出できないフロー アクション The template validation failed: 'The action(s) 'Batch_POST-groups' referenced by 'inputs' in action 'Batch_2' are not defined in the template' を参照している可能性があります。 参照しているアクション名が完全に一致する必要があります。
[トリガー アクション を実行する] ラジオ ボタン を選択し、[テストの保存 ] &します。 ダイアログで [続行 ] を選択します。 スペースのない名前を指定し、[フローの実行 ] を選択して チームを作成します。
![[フローの実行] ダイアログ ボックスのスクリーン ショット](power-automate/tutorial/images/run-flow.png)
最後に、[完了] を 選択 してアクティビティ ログを表示します。 フローが完了すると、Office 365チームが構成されます。 [バッチ] アクション アイテムを選択して、JSON Batch 呼び出しの結果を表示します。 アクションの状態コードは、次の図と同様に、チームの関連付けに成功した場合は outputs Batch PUT-team 201 です。

フローを拡張する
前のFlow作成した手順では、API を使用して Microsoft クライアントに 2 つの個別の要求を $batch Graph。 この方法でエンドポイントを呼び出すことによって、いくつかの利点と柔軟性が得されますが、単一の呼び出しで Microsoft Graphに対して複数の要求を実行すると、エンドポイントの真の力が $batch $batch 得 $batch されます。 この演習では、統合グループを作成し、チームを関連付け、チームの複数の既定のチャネルを 1 つの要求に作成する例を拡張 $batch します。
ブラウザーで Microsoft Power Automateを開き、テナント管理者アカウントOffice 365サインインします。 前の手順Flow作成したファイルを選択し、[編集] を 選択します。
[新 しい手順] を 選択し、 Batch 検索ボックスに入力します。 [バッチ コネクタ ] アクションGraph MS を追加 します。 省略記号を選択し、このアクションの名前をに変更します Batch POST-channels 。
アクションの本文テキスト ボックスに次 の コードを追加します。
{
"requests": [
{
"id": 1,
"url": "/teams/REPLACE/channels",
"headers": {
"Content-Type": "application/json"
},
"method": "POST",
"body": {
"displayName": "Marketing Collateral",
"description": "Marketing collateral and documentation."
}
},
{
"id": 2,
"dependsOn": [
"1"
],
"url": "/teams/REPLACE/channels",
"headers": {
"Content-Type": "application/json"
},
"method": "POST",
"body": {
"displayName": "Vendor Contracts",
"description": "Vendor documents, contracts, agreements and schedules."
}
},
{
"id": 3,
"dependsOn": [
"2"
],
"url": "/teams/REPLACE/channels",
"headers": {
"Content-Type": "application/json"
},
"method": "POST",
"body": {
"displayName": "General Client Agreements",
"description": "General Client documents and agreements."
}
}
]
}
上記の 3 つの要求が dependsOn プロパティを使用してシーケンス順序を指定し、それぞれが POST 要求を実行して新しいチームに新しいチャネルを作成します。
プレースホルダーの各インスタンスを選択 REPLACE し、動的コンテンツ ウィンドウ で [式 ] を選択します。 式に次の数式を 追加します。
body('Batch_PUT-team').responses[0].body.id

[保存] を 選択し、[テスト] を選択して、Flow。 [トリガー アクションを実行する] ラジオ ボタン を選択し、[テストの保存] &します。 スペースのない [名前]フィールドに一意のグループ名を入力し、[フローの実行] を選択してグループ名をFlow。
ユーザーがFlowしたら、[完了] ボタンを クリックしてアクティビティ ログを表示します。 アクションがFlow、アクションの最終的な出力は、作成されたチャネルごとに Batch POST-channels 201 HTTP Status 応答を持ちます。

テナント管理者Microsoft Teamsアカウントを使用して、Office 365サインインします。 作成したチームが表示され、要求によって作成された 3 つのチャネルが含まれるか確認 $batch します。

上記のアクションは別のアクションとしてこのチュートリアルで実装されましたが、チャネルを作成する呼び出しは、アクション内の追加の呼び出し Batch POST-channels として追加された可能性 Batch PUT-team があります。 これにより、チームとすべてのチャネルが 1 回のバッチ呼び出しで作成されます。 自分で試してみてください。
最後に 、JSON Batching 呼び出し は要求ごとに HTTP 状態コードを返します。 実稼働プロセスでは、結果の後処理とアクションを組み合わせて、個々の応答に 201 の状態コードが含まれていますか、受信した他の状態コードを補う必要があります Apply to each 。
おめでとうございます。
Microsoft のチュートリアルのPower Automate完了Graphしました。 Microsoft Graph を呼び出す作業用のカスタム コネクタが作成されたので、新しい機能を試して追加できます。 Microsoft Graphの概要を参照して、Microsoft Graphでアクセスできるすべてのデータを確認Graph。
フィードバック
このチュートリアルに関するフィードバックは、GitHubしてください。
このセクションに問題がある場合 このセクションを改善できるよう、フィードバックをお送りください。