Azure Functions における Microsoft Graph のバインドMicrosoft Graph bindings for Azure Functions

この記事では、Azure Functions で Microsoft Graph のトリガーとバインドを構成および操作する方法について説明します。This article explains how to configure and work with Microsoft Graph triggers and bindings in Azure Functions. これらと Azure Functions を使用して、Microsoft Graph からのデータ、分析情報、およびイベントを処理できます。With these, you can use Azure Functions to work with data, insights, and events from the Microsoft Graph.

Microsoft Graph の拡張機能には、次のバインドが用意されています。The Microsoft Graph extension provides the following bindings:

これは、Azure Functions の開発者向けリファレンス情報です。This is reference information for Azure Functions developers. Azure Functions を初めて使用する場合は、先に次のリソースを参照してください。If you're new to Azure Functions, start with the following resources:

注意

Microsoft Graph のバインドは、Azure Functions バージョン 2.x では現在プレビューの段階です。Microsoft Graph bindings are currently in preview for Azure Functions version 2.x. これらは Functions バージョン 1.x ではサポートされていません。They are not supported in Functions version 1.x.

パッケージPackages

認証トークンの入力バインディングは Microsoft.Azure.WebJobs.Extensions.AuthTokens NuGet パッケージで提供されます。The auth token input binding is provided in the Microsoft.Azure.WebJobs.Extensions.AuthTokens NuGet package. 他の Microsoft Graph バインディングは Microsoft.Azure.WebJobs.Extensions.MicrosoftGraph パッケージで提供されます。The other Microsoft Graph bindings are provided in the Microsoft.Azure.WebJobs.Extensions.MicrosoftGraph package. パッケージのソース コードは、azure-functions-microsoftgraph-extension GitHub リポジトリにあります。Source code for the packages is in the azure-functions-microsoftgraph-extension GitHub repository.

次の表に、各開発環境でこのバインディングのサポートを追加する方法を示します。The following table tells how to add support for this binding in each development environment.

開発環境Development environment サポートを追加するバージョン:To add support in
Functions 2.xFunctions 2.x
ローカル開発 - C# クラス ライブラリLocal development - C# class library パッケージをインストールするInstall the package
ローカル開発で - C# スクリプト、JavaScript、F#、Java、PythonLocal development - C# script, JavaScript, F#, Java and Python 拡張機能を登録するRegister the extension
Portal 開発Portal development 出力バインドの追加時にインストールするInstall when adding output binding

関数アプリ プロジェクトを再発行せずにポータルで既存のバインディング拡張機能を更新する方法については、拡張機能の更新に関するページを参照してください。To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

拡張機能の設定Setting up the extensions

Microsoft Graph のバインドは、バインド拡張機能 から入手できます。Microsoft Graph bindings are available through binding extensions. バインド拡張機能は、Azure Functions ランタイム向けのオプション コンポーネントです。Binding extensions are optional components to the Azure Functions runtime. このセクションでは、Microsoft Graph と認証トークンの拡張機能を設定する方法を示します。This section shows how to set up the Microsoft Graph and auth token extensions.

Functions 2.0 プレビューを有効にするEnabling Functions 2.0 preview

バインド拡張機能は、Azure Functions 2.0 プレビューでのみ使用できます。Binding extensions are available only for Azure Functions 2.0 preview.

Functions ランタイムのプレビュー版の 2.0 バージョンを使用するように関数アプリを設定する方法については、「How to target Azure Functions runtime versions」(Azure Functions ランタイム バージョンをターゲットにする方法) を参照してください。For information about how to set a function app to use the preview 2.0 version of the Functions runtime, see How to target Azure Functions runtime versions.

拡張機能のインストールInstalling the extension

Azure Portal から拡張機能をインストールするには、それを参照するテンプレートまたはバインドのいずれかに移動します。To install an extension from the Azure portal, navigate to either a template or binding that references it. 新しい関数を作成し、[テンプレートの選択] 画面で、"Microsoft Graph" のシナリオを選択します。Create a new function, and while in the template selection screen, choose the "Microsoft Graph" scenario. このシナリオからテンプレートを 1 つ選択します。Select one of the templates from this scenario. または、既存の関数の [統合] タブに移動して、この記事で説明するバインドを 1 つ選択できます。Alternatively, you can navigate to the "Integrate" tab of an existing function and select one of the bindings covered in this article.

どちらの場合も、インストールする拡張機能の指定に関する警告が表示されます。In both cases, a warning will appear which specifies the extension to be installed. [インストール] をクリックして拡張機能を取得します。Click Install to obtain the extension. それぞれの拡張機能は、関数アプリごとに 1 回のみインストールする必要があります。Each extension only needs to be installed once per function app.

注意

ポータル内のインストール プロセスは、従量課金プランで最大 10 分かかります。The in-portal installation process can take up to 10 minutes on a consumption plan.

Visual Studio を使用している場合は、この記事の前半で説明した NuGet パッケージをインストールして、拡張機能を取得できます。If you are using Visual Studio, you can get the extensions by installing the NuGet packages that are listed earlier in this article.

認証と承認の構成Configuring Authentication / Authorization

この記事で説明するバインドでは、ID を使用する必要があります。The bindings outlined in this article require an identity to be used. これにより、Microsoft Graph でアクセス許可と監査の相互作用を適用できます。This allows the Microsoft Graph to enforce permissions and audit interactions. ID には、アプリケーションにアクセスするユーザー、またはアプリケーションそのものを指定できます。The identity can be a user accessing your application or the application itself. この ID を構成するには、Azure Active Directory で App Service の認証と承認を設定します。To configure this identity, set up App Service Authentication / Authorization with Azure Active Directory. また、関数で必要なリソースのアクセス許可を要求する必要があります。You will also need to request any resource permissions your functions require.

注意

Microsoft Graph の拡張機能は、Azure AD 認証のみをサポートします。The Microsoft Graph extension only supports Azure AD authentication. ユーザーは、職場または学校のアカウントでログインする必要があります。Users need to log in with a work or school account.

Azure Portal を使用している場合は、拡張機能のインストールを求めるプロンプトの下に警告が表示されます。If you're using the Azure portal, you'll see a warning below the prompt to install the extension. この警告では、App Service の認証および承認の構成と、テンプレートまたはバインドで必要なアクセス許可の要求が求められます。The warning prompts you to configure App Service Authentication / Authorization and request any permissions the template or binding requires. 必要に応じて、[Configure Azure AD now](Azure AD を今すぐ構成) または [アクセス許可を今すぐ追加] をクリックします。Click Configure Azure AD now or Add permissions now as appropriate.

認証トークンAuth token

認証トークンの入力バインドは、特定のリソースに対する Azure AD トークンを取得し、コードに文字列として表示します。The auth token input binding gets an Azure AD token for a given resource and provides it to your code as a string. アプリケーションがアクセス許可を持つ任意のリソースを指定できます。The resource can be any for which the application has permissions.

このセクションには、次のようにいくつかのサブセクションがあります。This section contains the following subsections:

認証トークン - 例Auth token - example

言語固有の例をご覧ください。See the language-specific example:

認証トークン - C# スクリプトの例Auth token - C# script example

次の例では、ユーザー プロファイル情報を取得します。The following example gets user profile information.

function.json ファイルは、トークンの入力バインドを使用して HTTP トリガーを定義します。The function.json file defines an HTTP trigger with a token input binding:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "token",
      "direction": "in",
      "name": "graphToken",
      "resource": "https://graph.microsoft.com",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

C# スクリプト コードは、トークンを使用して Microsoft Graph への HTTP 呼び出しを行い、結果を返します。The C# script code uses the token to make an HTTP call to the Microsoft Graph and returns the result:

using System.Net; 
using System.Net.Http; 
using System.Net.Http.Headers;
using Microsoft.Extensions.Logging; 

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, string graphToken, ILogger log)
{
    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", graphToken);
    return await client.GetAsync("https://graph.microsoft.com/v1.0/me/");
}

認証トークン - JavaScript の例Auth token - JavaScript example

次の例では、ユーザー プロファイル情報を取得します。The following example gets user profile information.

function.json ファイルは、トークンの入力バインドを使用して HTTP トリガーを定義します。The function.json file defines an HTTP trigger with a token input binding:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "token",
      "direction": "in",
      "name": "graphToken",
      "resource": "https://graph.microsoft.com",
      "identity": "userFromRequest"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

JavaScript スクリプト コードは、トークンを使用して Microsoft Graph への HTTP 呼び出しを行い、結果を返します。The JavaScript code uses the token to make an HTTP call to the Microsoft Graph and returns the result.

const rp = require('request-promise');

module.exports = function (context, req) {
    let token = "Bearer " + context.bindings.graphToken;

    let options = {
        uri: 'https://graph.microsoft.com/v1.0/me/',
        headers: {
            'Authorization': token
        }
    };

    rp(options)
        .then(function(profile) {
            context.res = {
                body: profile
            };
            context.done();
        })
        .catch(function(err) {
            context.res = {
                status: 500,
                body: err
            };
            context.done();
        });
};

認証トークン - 属性Auth token - attributes

C# クラス ライブラリでは、Token 属性を使用します。In C# class libraries, use the Token attribute.

認証トークン - 構成Auth token - configuration

次の表は、function.json ファイルと Token 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the Token attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
namename 必須 - 認証トークンの関数コードで使用される変数名。Required - the variable name used in function code for the auth token. コードから認証トークンの入力バインドを使用する」をご覧ください。See Using an auth token input binding from code.
typetype 必須 - token に設定する必要があります。Required - must be set to token.
directiondirection 必須 - in に設定する必要があります。Required - must be set to in.
identityidentity IDIdentity 必須 - 操作を実行するために使用する ID です。Required - The identity that will be used to perform the action. 次のいずれかの値を指定できます。Can be one of the following values:
  • userFromRequest - HTTP トリガーでのみ有効です。userFromRequest - Only valid with HTTP trigger. 呼び出し元ユーザーの ID を使用します。Uses the identity of the calling user.
  • userFromId - 指定された ID を使用して以前ログインしたユーザーの ID を使用します。userFromId - Uses the identity of a previously logged-in user with the specified ID. userId プロパティをご覧ください。See the userId property.
  • userFromToken - 指定したトークンによって表される ID を使用します。userFromToken - Uses the identity represented by the specified token. userToken プロパティをご覧ください。See the userToken property.
  • clientCredentials - 関数アプリの ID を使用します。clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId identityuserFromId に設定された場合にのみ必要です。Needed if and only if identity is set to userFromId. 以前ログインしたユーザーに関連付けられたユーザー プリンシパル ID です。A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken に設定された場合にのみ必要です。Needed if and only if identity is set to userFromToken. 関数アプリの有効なトークンです。A token valid for the function app.
リソースResource resourceresource 必須 - トークンが要求される Azure AD リソース URL です。Required - An Azure AD resource URL for which the token is being requested.

認証トークン - 使用方法Auth token - usage

バインド自体には Azure AD のアクセス許可は必要ありませんが、トークンの使用方法によっては、追加のアクセス許可を要求する必要がある場合があります。The binding itself does not require any Azure AD permissions, but depending on how the token is used, you may need to request additional permissions. トークンを使用してアクセスするリソースの要件を確認してください。Check the requirements of the resource you intend to access with the token.

トークンは、常に文字列としてコードに表示されます。The token is always presented to code as a string.

注意

userFromIduserFromTokenuserFromRequest オプションのいずれかを使用してローカルで開発するときは、必要なトークンを手動で取得し、呼び出し元のクライアント アプリケーションから X-MS-TOKEN-AAD-ID-TOKEN 要求ヘッダーで指定できます。When developing locally with either of userFromId, userFromToken or userFromRequest options, required token can be obtained manually and specified in X-MS-TOKEN-AAD-ID-TOKEN request header from a calling client application.

Excel の入力Excel input

Excel テーブルの入力バインドは、OneDrive に格納されている Excel テーブルの内容を読み取ります。The Excel table input binding reads the contents of an Excel table stored in OneDrive.

このセクションには、次のようにいくつかのサブセクションがあります。This section contains the following subsections:

Excel の入力 - exampleExcel input - example

言語固有の例をご覧ください。See the language-specific example:

Excel の入力 - C# スクリプトの例Excel input - C# script example

次の function.json ファイルは、Excel の入力バインドを使用して HTTP トリガーを定義します。The following function.json file defines an HTTP trigger with an Excel input binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "excel",
      "direction": "in",
      "name": "excelTableData",
      "path": "{query.workbook}",
      "identity": "UserFromRequest",
      "tableName": "{query.table}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

次の C# スクリプト コードは、指定したテーブルの内容を読み取って、ユーザーに返します。The following C# script code reads the contents of the specified table and returns them to the user:

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Microsoft.Extensions.Logging;

public static IActionResult Run(HttpRequest req, string[][] excelTableData, ILogger log)
{
    return new OkObjectResult(excelTableData);
}

Excel の入力 - JavaScript の例Excel input - JavaScript example

次の function.json ファイルは、Excel の入力バインドを使用して HTTP トリガーを定義します。The following function.json file defines an HTTP trigger with an Excel input binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "excel",
      "direction": "in",
      "name": "excelTableData",
      "path": "{query.workbook}",
      "identity": "UserFromRequest",
      "tableName": "{query.table}"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

次の JavaScript スクリプト コードは、指定したテーブルの内容を読み取って、ユーザーに返します。The following JavaScript code reads the contents of the specified table and returns them to the user.

module.exports = function (context, req) {
    context.res = {
        body: context.bindings.excelTableData
    };
    context.done();
};

Excel の入力 - 属性Excel input - attributes

C# クラス ライブラリでは、Excel 属性を使用します。In C# class libraries, use the Excel attribute.

Excel の入力 - 構成Excel input - configuration

次の表は、function.json ファイルと Excel 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the Excel attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
namename 必須 - Excel テーブルの関数コードで使用される変数名。Required - the variable name used in function code for the Excel table. コードから Excel テーブルの入力バインドを使用する」をご覧ください。See Using an Excel table input binding from code.
typetype 必須 - excel に設定する必要があります。Required - must be set to excel.
directiondirection 必須 - in に設定する必要があります。Required - must be set to in.
identityidentity IDIdentity 必須 - 操作を実行するために使用する ID です。Required - The identity that will be used to perform the action. 次のいずれかの値を指定できます。Can be one of the following values:
  • userFromRequest - HTTP トリガーでのみ有効です。userFromRequest - Only valid with HTTP trigger. 呼び出し元ユーザーの ID を使用します。Uses the identity of the calling user.
  • userFromId - 指定された ID を使用して以前ログインしたユーザーの ID を使用します。userFromId - Uses the identity of a previously logged-in user with the specified ID. userId プロパティをご覧ください。See the userId property.
  • userFromToken - 指定したトークンによって表される ID を使用します。userFromToken - Uses the identity represented by the specified token. userToken プロパティをご覧ください。See the userToken property.
  • clientCredentials - 関数アプリの ID を使用します。clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId identityuserFromId に設定された場合にのみ必要です。Needed if and only if identity is set to userFromId. 以前ログインしたユーザーに関連付けられたユーザー プリンシパル ID です。A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken に設定された場合にのみ必要です。Needed if and only if identity is set to userFromToken. 関数アプリの有効なトークンです。A token valid for the function app.
pathpath パスPath 必須 - OneDrive での Excel ブックへのパスです。Required - the path in OneDrive to the Excel workbook.
worksheetNameworksheetName WorksheetNameWorksheetName テーブルが検出されたワークシートです。The worksheet in which the table is found.
tableNametableName TableNameTableName テーブルの名前。The name of the table. 指定しないと、ワークシートの内容が使用されます。If not specified, the contents of the worksheet will be used.

Excel の入力 - 使用方法Excel input - usage

このバインドには、Azure AD の次のアクセス許可が必要です。This binding requires the following Azure AD permissions:

リソースResource アクセス許可Permission
Microsoft GraphMicrosoft Graph ユーザー ファイルの読み取りRead user files

バインドは、.NET 関数に次の種類を公開します。The binding exposes the following types to .NET functions:

  • string[][]string[][]
  • Microsoft.Graph.WorkbookTableMicrosoft.Graph.WorkbookTable
  • カスタム オブジェクトの種類 (構造的なモデル バインドを使用)Custom object types (using structural model binding)

Excel の出力Excel output

Excel の出力バインドは、OneDrive に格納されている Excel テーブルの内容を変更します。The Excel output binding modifies the contents of an Excel table stored in OneDrive.

このセクションには、次のようにいくつかのサブセクションがあります。This section contains the following subsections:

Excel の出力 - 例Excel output - example

言語固有の例をご覧ください。See the language-specific example:

Excel の出力 - C# スクリプトの例Excel output - C# script example

次の例では、Excel テーブルに行を追加します。The following example adds rows to an Excel table.

function.json ファイルは、Excel の出力バインドを使用して HTTP トリガーを定義します。The function.json file defines an HTTP trigger with an Excel output binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "newExcelRow",
      "type": "excel",
      "direction": "out",
      "identity": "userFromRequest",
      "updateType": "append",
      "path": "{query.workbook}",
      "tableName": "{query.table}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

C# スクリプト コードは、クエリ文字列からの入力に基づいて、テーブル (列が 1 つであると仮定) に新しい行を追加します。The C# script code adds a new row to the table (assumed to be single-column) based on input from the query string:

using System.Net;
using System.Text;
using Microsoft.Extensions.Logging;

public static async Task Run(HttpRequest req, IAsyncCollector<object> newExcelRow, ILogger log)
{
    string input = req.Query
        .FirstOrDefault(q => string.Compare(q.Key, "text", true) == 0)
        .Value;
    await newExcelRow.AddAsync(new {
        Text = input
        // Add other properties for additional columns here
    });
    return;
}

Excel の出力 - JavaScript の例Excel output - JavaScript example

次の例では、Excel テーブルに行を追加します。The following example adds rows to an Excel table.

function.json ファイルは、Excel の出力バインドを使用して HTTP トリガーを定義します。The function.json file defines an HTTP trigger with an Excel output binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "newExcelRow",
      "type": "excel",
      "direction": "out",
      "identity": "userFromRequest",
      "updateType": "append",
      "path": "{query.workbook}",
      "tableName": "{query.table}"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

次の JavaScript スクリプト コードは、クエリ文字列からの入力に基づいて、テーブル (列が 1 つであると仮定) に新しい行を追加します。The following JavaScript code adds a new row to the table (assumed to be single-column) based on input from the query string.

module.exports = function (context, req) {
    context.bindings.newExcelRow = {
        text: req.query.text
        // Add other properties for additional columns here
    }
    context.done();
};

Excel の出力 - 属性Excel output - attributes

C# クラス ライブラリでは、Excel 属性を使用します。In C# class libraries, use the Excel attribute.

Excel の出力 - 構成Excel output - configuration

次の表は、function.json ファイルと Excel 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the Excel attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
namename 必須 - 認証トークンの関数コードで使用される変数名。Required - the variable name used in function code for the auth token. コードから Excel テーブルの出力バインドを使用する」をご覧ください。See Using an Excel table output binding from code.
typetype 必須 - excel に設定する必要があります。Required - must be set to excel.
directiondirection 必須 - out に設定する必要があります。Required - must be set to out.
identityidentity IDIdentity 必須 - 操作を実行するために使用する ID です。Required - The identity that will be used to perform the action. 次のいずれかの値を指定できます。Can be one of the following values:
  • userFromRequest - HTTP トリガーでのみ有効です。userFromRequest - Only valid with HTTP trigger. 呼び出し元ユーザーの ID を使用します。Uses the identity of the calling user.
  • userFromId - 指定された ID を使用して以前ログインしたユーザーの ID を使用します。userFromId - Uses the identity of a previously logged-in user with the specified ID. userId プロパティをご覧ください。See the userId property.
  • userFromToken - 指定したトークンによって表される ID を使用します。userFromToken - Uses the identity represented by the specified token. userToken プロパティをご覧ください。See the userToken property.
  • clientCredentials - 関数アプリの ID を使用します。clientCredentials - Uses the identity of the function app.
UserIdUserId userIduserId identityuserFromId に設定された場合にのみ必要です。Needed if and only if identity is set to userFromId. 以前ログインしたユーザーに関連付けられたユーザー プリンシパル ID です。A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken に設定された場合にのみ必要です。Needed if and only if identity is set to userFromToken. 関数アプリの有効なトークンです。A token valid for the function app.
pathpath パスPath 必須 - OneDrive での Excel ブックへのパスです。Required - the path in OneDrive to the Excel workbook.
worksheetNameworksheetName WorksheetNameWorksheetName テーブルが検出されたワークシートです。The worksheet in which the table is found.
tableNametableName TableNameTableName テーブルの名前。The name of the table. 指定しないと、ワークシートの内容が使用されます。If not specified, the contents of the worksheet will be used.
updateTypeupdateType UpdateTypeUpdateType 必須 - テーブルに対して行われる変更の種類です。Required - The type of change to make to the table. 次のいずれかの値を指定できます。Can be one of the following values:
  • update - OneDrive 内のテーブルの内容を置き換えます。update - Replaces the contents of the table in OneDrive.
  • append - 新しい行を作成することで、OneDrive 内のテーブルの末尾にペイロードを追加します。append - Adds the payload to the end of the table in OneDrive by creating new rows.

Excel の出力 - 使用方法Excel output - usage

このバインドには、Azure AD の次のアクセス許可が必要です。This binding requires the following Azure AD permissions:

リソースResource アクセス許可Permission
Microsoft GraphMicrosoft Graph ユーザー ファイルへのフル アクセスを持つHave full access to user files

バインドは、.NET 関数に次の種類を公開します。The binding exposes the following types to .NET functions:

  • string[][]string[][]
  • Newtonsoft.Json.Linq.JObjectNewtonsoft.Json.Linq.JObject
  • Microsoft.Graph.WorkbookTableMicrosoft.Graph.WorkbookTable
  • カスタム オブジェクトの種類 (構造的なモデル バインドを使用)Custom object types (using structural model binding)

ファイルの入力File input

OneDrive ファイルの入力バインドは、OneDrive に格納されているファイルの内容を読み取ります。The OneDrive File input binding reads the contents of a file stored in OneDrive.

このセクションには、次のようにいくつかのサブセクションがあります。This section contains the following subsections:

ファイルの入力 - 例File input - example

言語固有の例をご覧ください。See the language-specific example:

ファイルの入力 - C# スクリプトの例File input - C# script example

次の例では、OneDrive に格納されているファイルを読み取ります。The following example reads a file that is stored in OneDrive.

function.json ファイルは、OneDrive ファイルの入力バインドを使用して HTTP トリガーを定義します。The function.json file defines an HTTP trigger with a OneDrive file input binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "in",
      "path": "{query.filename}",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

C# スクリプト コードは、クエリ文字列で指定されたファイルを読み取って、その長さをログに記録します。The C# script code reads the file specified in the query string and logs its length:

using System.Net;
using Microsoft.Extensions.Logging;

public static void Run(HttpRequestMessage req, Stream myOneDriveFile, ILogger log)
{
    log.LogInformation(myOneDriveFile.Length.ToString());
}

ファイルの入力 - JavaScript の例File input - JavaScript example

次の例では、OneDrive に格納されているファイルを読み取ります。The following example reads a file that is stored in OneDrive.

function.json ファイルは、OneDrive ファイルの入力バインドを使用して HTTP トリガーを定義します。The function.json file defines an HTTP trigger with a OneDrive file input binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "in",
      "path": "{query.filename}",
      "identity": "userFromRequest"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

次の JavaScript コードは、クエリ文字列で指定されたファイルを読み取って、その長さを返します。The following JavaScript code reads the file specified in the query string and returns its length.

module.exports = function (context, req) {
    context.res = {
        body: context.bindings.myOneDriveFile.length
    };
    context.done();
};

ファイルの入力 - 属性File input - attributes

C# クラス ライブラリでは、OneDrive 属性を使用します。In C# class libraries, use the OneDrive attribute.

ファイルの入力 - 構成File input - configuration

次の表は、function.json ファイルと OneDrive 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the OneDrive attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
namename 必須 - ファイルの関数コードで使用される変数名。Required - the variable name used in function code for the file. コードから OneDrive ファイルの入力バインドを使用する」をご覧ください。See Using a OneDrive file input binding from code.
typetype 必須 - onedrive に設定する必要があります。Required - must be set to onedrive.
directiondirection 必須 - in に設定する必要があります。Required - must be set to in.
identityidentity IDIdentity 必須 - 操作を実行するために使用する ID です。Required - The identity that will be used to perform the action. 次のいずれかの値を指定できます。Can be one of the following values:
  • userFromRequest - HTTP トリガーでのみ有効です。userFromRequest - Only valid with HTTP trigger. 呼び出し元ユーザーの ID を使用します。Uses the identity of the calling user.
  • userFromId - 指定された ID を使用して以前ログインしたユーザーの ID を使用します。userFromId - Uses the identity of a previously logged-in user with the specified ID. userId プロパティをご覧ください。See the userId property.
  • userFromToken - 指定したトークンによって表される ID を使用します。userFromToken - Uses the identity represented by the specified token. userToken プロパティをご覧ください。See the userToken property.
  • clientCredentials - 関数アプリの ID を使用します。clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId identityuserFromId に設定された場合にのみ必要です。Needed if and only if identity is set to userFromId. 以前ログインしたユーザーに関連付けられたユーザー プリンシパル ID です。A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken に設定された場合にのみ必要です。Needed if and only if identity is set to userFromToken. 関数アプリの有効なトークンです。A token valid for the function app.
pathpath パスPath 必須 - OneDrive でのファイルへのパスです。Required - the path in OneDrive to the file.

ファイルの入力 - 使用方法File input - usage

このバインドには、Azure AD の次のアクセス許可が必要です。This binding requires the following Azure AD permissions:

リソースResource アクセス許可Permission
Microsoft GraphMicrosoft Graph ユーザー ファイルの読み取りRead user files

バインドは、.NET 関数に次の種類を公開します。The binding exposes the following types to .NET functions:

  • byte[]byte[]
  • ストリームStream
  • 文字列string
  • Microsoft.Graph.DriveItemMicrosoft.Graph.DriveItem

ファイルの出力File output

OneDrive ファイルの出力バインドは、OneDrive に格納されているファイルの内容を読み取ります。The OneDrive file output binding modifies the contents of a file stored in OneDrive.

このセクションには、次のようにいくつかのサブセクションがあります。This section contains the following subsections:

ファイルの出力 - 例File output - example

言語固有の例をご覧ください。See the language-specific example:

ファイルの出力 - C# スクリプトの例File output - C# script example

次の例では、OneDrive に格納されているファイルに書き込みます。The following example writes to a file that is stored in OneDrive.

function.json ファイルは、OneDrive の出力バインドを使用して HTTP トリガーを定義します。The function.json file defines an HTTP trigger with a OneDrive output binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "out",
      "path": "FunctionsTest.txt",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

C# スクリプト コードは、クエリ文字列からテキストを取得し、呼び出し元の OneDrive のルートにあるテキスト ファイル (前の例で FunctionsTest.txt と定義されている) にそれを書き込みます。The C# script code gets text from the query string and writes it to a text file (FunctionsTest.txt as defined in the preceding example) at the root of the caller's OneDrive:

using System.Net;
using System.Text;
using Microsoft.Extensions.Logging;

public static async Task Run(HttpRequest req, ILogger log, Stream myOneDriveFile)
{
    string data = req.Query
        .FirstOrDefault(q => string.Compare(q.Key, "text", true) == 0)
        .Value;
    await myOneDriveFile.WriteAsync(Encoding.UTF8.GetBytes(data), 0, data.Length);
    myOneDriveFile.Close();
    return;
}

ファイルの出力 - JavaScript の例File output - JavaScript example

次の例では、OneDrive に格納されているファイルに書き込みます。The following example writes to a file that is stored in OneDrive.

function.json ファイルは、OneDrive の出力バインドを使用して HTTP トリガーを定義します。The function.json file defines an HTTP trigger with a OneDrive output binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "out",
      "path": "FunctionsTest.txt",
      "identity": "userFromRequest"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

JavaScript コードは、クエリ文字列からテキストを取得し、呼び出し元の OneDrive のルートにあるテキスト ファイル (上記の構成で FunctionsTest.txt と定義されている) にそれを書き込みます。The JavaScript code gets text from the query string and writes it to a text file (FunctionsTest.txt as defined in the config above) at the root of the caller's OneDrive.

module.exports = function (context, req) {
    context.bindings.myOneDriveFile = req.query.text;
    context.done();
};

ファイルの出力 - 属性File output - attributes

C# クラス ライブラリでは、OneDrive 属性を使用します。In C# class libraries, use the OneDrive attribute.

ファイルの出力 - 構成File output - configuration

次の表は、function.json ファイルと OneDrive 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the OneDrive attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
namename 必須 - ファイルの関数コードで使用される変数名。Required - the variable name used in function code for file. コードから OneDrive ファイルの出力バインドを使用する」をご覧ください。See Using a OneDrive file output binding from code.
typetype 必須 - onedrive に設定する必要があります。Required - must be set to onedrive.
directiondirection 必須 - out に設定する必要があります。Required - must be set to out.
identityidentity IDIdentity 必須 - 操作を実行するために使用する ID です。Required - The identity that will be used to perform the action. 次のいずれかの値を指定できます。Can be one of the following values:
  • userFromRequest - HTTP トリガーでのみ有効です。userFromRequest - Only valid with HTTP trigger. 呼び出し元ユーザーの ID を使用します。Uses the identity of the calling user.
  • userFromId - 指定された ID を使用して以前ログインしたユーザーの ID を使用します。userFromId - Uses the identity of a previously logged-in user with the specified ID. userId プロパティをご覧ください。See the userId property.
  • userFromToken - 指定したトークンによって表される ID を使用します。userFromToken - Uses the identity represented by the specified token. userToken プロパティをご覧ください。See the userToken property.
  • clientCredentials - 関数アプリの ID を使用します。clientCredentials - Uses the identity of the function app.
UserIdUserId userIduserId identityuserFromId に設定された場合にのみ必要です。Needed if and only if identity is set to userFromId. 以前ログインしたユーザーに関連付けられたユーザー プリンシパル ID です。A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken に設定された場合にのみ必要です。Needed if and only if identity is set to userFromToken. 関数アプリの有効なトークンです。A token valid for the function app.
pathpath パスPath 必須 - OneDrive でのファイルへのパスです。Required - the path in OneDrive to the file.

ファイルの出力 - 使用方法File output - usage

このバインドには、Azure AD の次のアクセス許可が必要です。This binding requires the following Azure AD permissions:

リソースResource アクセス許可Permission
Microsoft GraphMicrosoft Graph ユーザー ファイルへのフル アクセスを持つHave full access to user files

バインドは、.NET 関数に次の種類を公開します。The binding exposes the following types to .NET functions:

  • byte[]byte[]
  • ストリームStream
  • 文字列string
  • Microsoft.Graph.DriveItemMicrosoft.Graph.DriveItem

Outlook の出力Outlook output

Outlook メッセージの出力バインドは、Outlook でメール メッセージを送信します。The Outlook message output binding sends a mail message through Outlook.

このセクションには、次のようにいくつかのサブセクションがあります。This section contains the following subsections:

Outlook の出力 - 例Outlook output - example

言語固有の例をご覧ください。See the language-specific example:

Outlook の出力 - C# スクリプトの例Outlook output - C# script example

次の例では、Outlook で電子メールを送信します。The following example sends an email through Outlook.

function.json ファイルは、Outlook メッセージの出力バインドを使用して HTTP トリガーを定義します。The function.json file defines an HTTP trigger with an Outlook message output binding:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "message",
      "type": "outlook",
      "direction": "out",
      "identity": "userFromRequest"
    }
  ],
  "disabled": false
}

C# スクリプト コードでは、クエリ文字列で指定された受信者に、呼び出し元からメールが送信されます。The C# script code sends a mail from the caller to a recipient specified in the query string:

using System.Net;
using Microsoft.Extensions.Logging;

public static void Run(HttpRequest req, out Message message, ILogger log)
{ 
    string emailAddress = req.Query["to"];
    message = new Message(){
        subject = "Greetings",
        body = "Sent from Azure Functions",
        recipient = new Recipient() {
            address = emailAddress
        }
    };
}

public class Message {
    public String subject {get; set;}
    public String body {get; set;}
    public Recipient recipient {get; set;}
}

public class Recipient {
    public String address {get; set;}
    public String name {get; set;}
}

Outlook の出力 - JavaScript の例Outlook output - JavaScript example

次の例では、Outlook で電子メールを送信します。The following example sends an email through Outlook.

function.json ファイルは、Outlook メッセージの出力バインドを使用して HTTP トリガーを定義します。The function.json file defines an HTTP trigger with an Outlook message output binding:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "message",
      "type": "outlook",
      "direction": "out",
      "identity": "userFromRequest"
    }
  ],
  "disabled": false
}

JavaScript コードでは、クエリ文字列で指定された受信者に、呼び出し元からメールが送信されます。The JavaScript code sends a mail from the caller to a recipient specified in the query string:

module.exports = function (context, req) {
    context.bindings.message = {
        subject: "Greetings",
        body: "Sent from Azure Functions with JavaScript",
        recipient: {
            address: req.query.to 
        } 
    };
    context.done();
};

Outlook の出力 - 属性Outlook output - attributes

C# クラス ライブラリでは、Outlook 属性を使用します。In C# class libraries, use the Outlook attribute.

Outlook の出力 - 構成Outlook output - configuration

次の表は、function.json ファイルと Outlook 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the Outlook attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
namename 必須 - メール メッセージの関数コードで使用される変数名。Required - the variable name used in function code for the mail message. コードから Outlook メッセージの出力バインドを使用する」をご覧ください。See Using an Outlook message output binding from code.
typetype 必須 - outlook に設定する必要があります。Required - must be set to outlook.
directiondirection 必須 - out に設定する必要があります。Required - must be set to out.
identityidentity IDIdentity 必須 - 操作を実行するために使用する ID です。Required - The identity that will be used to perform the action. 次のいずれかの値を指定できます。Can be one of the following values:
  • userFromRequest - HTTP トリガーでのみ有効です。userFromRequest - Only valid with HTTP trigger. 呼び出し元ユーザーの ID を使用します。Uses the identity of the calling user.
  • userFromId - 指定された ID を使用して以前ログインしたユーザーの ID を使用します。userFromId - Uses the identity of a previously logged-in user with the specified ID. userId プロパティをご覧ください。See the userId property.
  • userFromToken - 指定したトークンによって表される ID を使用します。userFromToken - Uses the identity represented by the specified token. userToken プロパティをご覧ください。See the userToken property.
  • clientCredentials - 関数アプリの ID を使用します。clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId identityuserFromId に設定された場合にのみ必要です。Needed if and only if identity is set to userFromId. 以前ログインしたユーザーに関連付けられたユーザー プリンシパル ID です。A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken に設定された場合にのみ必要です。Needed if and only if identity is set to userFromToken. 関数アプリの有効なトークンです。A token valid for the function app.

Outlook の出力 - 使用方法Outlook output - usage

このバインドには、Azure AD の次のアクセス許可が必要です。This binding requires the following Azure AD permissions:

リソースResource アクセス許可Permission
Microsoft GraphMicrosoft Graph ユーザーとしてのメールの送信Send mail as user

バインドは、.NET 関数に次の種類を公開します。The binding exposes the following types to .NET functions:

  • Microsoft.Graph.MessageMicrosoft.Graph.Message
  • Newtonsoft.Json.Linq.JObjectNewtonsoft.Json.Linq.JObject
  • 文字列string
  • カスタム オブジェクトの種類 (構造的なモデル バインドを使用)Custom object types (using structural model binding)

WebhookWebhooks

Webhook を使用すると、Microsoft Graph でのイベントに応答できます。Webhooks allow you to react to events in the Microsoft Graph. Webhook をサポートするには、webhook サブスクリプション の作成、更新、および対応のための関数が必要です。To support webhooks, functions are needed to create, refresh, and react to webhook subscriptions. webhook の完全なソリューションには、次のバインドの組み合わせが必要です。A complete webhook solution requires a combination of the following bindings:

バインド自体には Azure AD のアクセス許可は必要ありませんが、対応するリソースの種類に関連した、アクセス許可を要求する必要がある場合があります。The bindings themselves do not require any Azure AD permissions, but you need to request permissions relevant to the resource type you wish to react to. それぞれのリソースの種類で必要なアクセス許可の一覧については、サブスクリプションのアクセス許可をご覧ください。For a list of which permissions are needed for each resource type, see subscription permissions.

webhook について詳しくは、「Microsoft Graph の Webhooks での作業」をご覧ください。For more information about webhooks, see Working with webhooks in Microsoft Graph.

webhook トリガーWebhook trigger

Microsoft Graph webhook トリガーを使用すると、関数は、Microsoft Graph から受信した webhook に応答できます。The Microsoft Graph webhook trigger allows a function to react to an incoming webhook from the Microsoft Graph. このトリガーの各インスタンスは、それぞれ Microsoft Graph リソースの 1 つの種類に応答できます。Each instance of this trigger can react to one Microsoft Graph resource type.

このセクションには、次のようにいくつかのサブセクションがあります。This section contains the following subsections:

webhook トリガー - 例Webhook trigger - example

言語固有の例をご覧ください。See the language-specific example:

webhook トリガー - C# スクリプトの例Webhook trigger - C# script example

次の例では、Outlook の受信メッセージの webhook を処理します。The following example handles webhooks for incoming Outlook messages. webhook トリガーを使用するには、サブスクリプションを作成して、期限切れにならないようにサブスクリプションを更新します。To use a webhook trigger you create a subscription, and you can refresh the subscription to prevent it from expiring.

function.json ファイルは、webhook トリガーを定義します。The function.json file defines a webhook trigger:

{
  "bindings": [
    {
      "name": "msg",
      "type": "GraphWebhookTrigger",
      "direction": "in",
      "resourceType": "#Microsoft.Graph.Message"
    }
  ],
  "disabled": false
}

C# スクリプト コードでは、受信メール メッセージに応答し、受信者によって送信された、件名に "Azure Functions" が含まれるメール メッセージの本文がログに記録されます。The C# script code reacts to incoming mail messages and logs the body of those sent by the recipient and containing "Azure Functions" in the subject:

#r "Microsoft.Graph"
using Microsoft.Graph;
using System.Net;
using Microsoft.Extensions.Logging;

public static async Task Run(Message msg, ILogger log)  
{
    log.LogInformation("Microsoft Graph webhook trigger function processed a request.");

    // Testable by sending oneself an email with the subject "Azure Functions" and some text body
    if (msg.Subject.Contains("Azure Functions") && msg.From.Equals(msg.Sender)) {
        log.LogInformation($"Processed email: {msg.BodyPreview}");
    }
}

webhook トリガー - JavaScript の例Webhook trigger - JavaScript example

次の例では、Outlook の受信メッセージの webhook を処理します。The following example handles webhooks for incoming Outlook messages. webhook トリガーを使用するには、サブスクリプションを作成して、期限切れにならないようにサブスクリプションを更新します。To use a webhook trigger you create a subscription, and you can refresh the subscription to prevent it from expiring.

function.json ファイルは、webhook トリガーを定義します。The function.json file defines a webhook trigger:

{
  "bindings": [
    {
      "name": "msg",
      "type": "GraphWebhookTrigger",
      "direction": "in",
      "resourceType": "#Microsoft.Graph.Message"
    }
  ],
  "disabled": false
}

JavaScript コードでは、受信メール メッセージに応答し、受信者によって送信された、件名に "Azure Functions" が含まれるメール メッセージの本文がログに記録されます。The JavaScript code reacts to incoming mail messages and logs the body of those sent by the recipient and containing "Azure Functions" in the subject:

module.exports = function (context) {
    context.log("Microsoft Graph webhook trigger function processed a request.");
    const msg = context.bindings.msg
    // Testable by sending oneself an email with the subject "Azure Functions" and some text body
    if((msg.subject.indexOf("Azure Functions") > -1) && (msg.from === msg.sender) ) {
      context.log(`Processed email: ${msg.bodyPreview}`);
    }
    context.done();
};

webhook トリガー - 属性Webhook trigger - attributes

C# クラス ライブラリでは、GraphWebHookTrigger 属性を使用します。In C# class libraries, use the GraphWebHookTrigger attribute.

webhook トリガー - 構成Webhook trigger - configuration

次の表は、function.json ファイルと GraphWebHookTrigger 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the GraphWebHookTrigger attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
namename 必須 - メール メッセージの関数コードで使用される変数名。Required - the variable name used in function code for the mail message. コードから Outlook メッセージの出力バインドを使用する」をご覧ください。See Using an Outlook message output binding from code.
typetype 必須 - graphWebhook に設定する必要があります。Required - must be set to graphWebhook.
directiondirection 必須 - trigger に設定する必要があります。Required - must be set to trigger.
resourceTyperesourceType ResourceTypeResourceType 必須 - この関数が webhook に応答する必要がある、グラフ リソースです。Required - the graph resource for which this function should respond to webhooks. 次のいずれかの値を指定できます。Can be one of the following values:
  • #Microsoft.Graph.Message - Outlook メッセージに行われた変更です。#Microsoft.Graph.Message - changes made to Outlook messages.
  • #Microsoft.Graph.DriveItem - OneDrive ルート項目に行われた変更です。#Microsoft.Graph.DriveItem - changes made to OneDrive root items.
  • #Microsoft.Graph.Contact - Outlook の個人用連絡先に行われた変更です。#Microsoft.Graph.Contact - changes made to personal contacts in Outlook.
  • #Microsoft.Graph.Event - Outlook の予定表アイテムに行われた変更です。#Microsoft.Graph.Event - changes made to Outlook calendar items.

注意

関数アプリは、指定された resourceType 値に対して登録されている関数を、1 つだけ持つことができます。A function app can only have one function that is registered against a given resourceType value.

webhook トリガー - 使用方法Webhook trigger - usage

バインドは、.NET 関数に次の種類を公開します。The binding exposes the following types to .NET functions:

  • リソースの種類に関連がある、Microsoft Graph の SDK の種類 (Microsoft.Graph.MessageMicrosoft.Graph.DriveItem など)Microsoft Graph SDK types relevant to the resource type, such as Microsoft.Graph.Message or Microsoft.Graph.DriveItem.
  • カスタム オブジェクトの種類 (構造的なモデル バインドを使用)Custom object types (using structural model binding)

webhook の入力Webhook input

Microsoft Graph webhook の入力バインドを使用すると、この関数アプリで管理されているサブスクリプションの一覧を取得できます。The Microsoft Graph webhook input binding allows you to retrieve the list of subscriptions managed by this function app. バインドは関数アプリの記憶域から読み取りを行うため、アプリの外部から作成されたその他のサブスクリプションは反映されません。The binding reads from function app storage, so it does not reflect other subscriptions created from outside the app.

このセクションには、次のようにいくつかのサブセクションがあります。This section contains the following subsections:

webhook の入力 - 例Webhook input - example

言語固有の例をご覧ください。See the language-specific example:

webhook の入力 - C# スクリプトの例Webhook input - C# script example

次の例では、呼び出し元のユーザーのすべてのサブスクリプションを取得し、それらを削除します。The following example gets all subscriptions for the calling user and deletes them.

function.json ファイルは、サブスクリプションの入力バインドと、削除アクションを使用するサブスクリプションの出力バインドを使用して、HTTP トリガーを定義します。The function.json file defines an HTTP trigger with a subscription input binding and a subscription output binding that uses the delete action:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in",
      "filter": "userFromRequest"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToDelete",
      "direction": "out",
      "action": "delete",
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "res",
      "direction": "out"
    }
  ],
  "disabled": false
}

C# スクリプト コードは、サブスクリプションを取得し、それらを削除します。The C# script code gets the subscriptions and deletes them:

using System.Net;
using Microsoft.Extensions.Logging;

public static async Task Run(HttpRequest req, string[] existingSubscriptions, IAsyncCollector<string> subscriptionsToDelete, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");
    foreach (var subscription in existingSubscriptions)
    {
        log.LogInformation($"Deleting subscription {subscription}");
        await subscriptionsToDelete.AddAsync(subscription);
    }
}

webhook の入力 - JavaScript の例Webhook input - JavaScript example

次の例では、呼び出し元のユーザーのすべてのサブスクリプションを取得し、それらを削除します。The following example gets all subscriptions for the calling user and deletes them.

function.json ファイルは、サブスクリプションの入力バインドと、削除アクションを使用するサブスクリプションの出力バインドを使用して、HTTP トリガーを定義します。The function.json file defines an HTTP trigger with a subscription input binding and a subscription output binding that uses the delete action:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in",
      "filter": "userFromRequest"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToDelete",
      "direction": "out",
      "action": "delete",
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "res",
      "direction": "out"
    }
  ],
  "disabled": false
}

JavaScript コードは、サブスクリプションを取得した後に、それらを削除します。The JavaScript code gets the subscriptions and deletes them:

module.exports = function (context, req) {
    const existing = context.bindings.existingSubscriptions;
    var toDelete = [];
    for (var i = 0; i < existing.length; i++) {
        context.log(`Deleting subscription ${existing[i]}`);
        todelete.push(existing[i]);
    }
    context.bindings.subscriptionsToDelete = toDelete;
    context.done();
};

webhook の入力 - 属性Webhook input - attributes

C# クラス ライブラリでは、GraphWebHookSubscription 属性を使用します。In C# class libraries, use the GraphWebHookSubscription attribute.

webhook の入力 - 構成Webhook input - configuration

次の表は、function.json ファイルと GraphWebHookSubscription 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the GraphWebHookSubscription attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
namename 必須 - メール メッセージの関数コードで使用される変数名。Required - the variable name used in function code for the mail message. コードから Outlook メッセージの出力バインドを使用する」をご覧ください。See Using an Outlook message output binding from code.
typetype 必須 - graphWebhookSubscription に設定する必要があります。Required - must be set to graphWebhookSubscription.
directiondirection 必須 - in に設定する必要があります。Required - must be set to in.
filterfilter FilterFilter userFromRequest に設定すると、バインドは呼び出し元のユーザーが所有するサブスクリプションのみを取得します (HTTP トリガーでのみ有効)。If set to userFromRequest, then the binding will only retrieve subscriptions owned by the calling user (valid only with HTTP trigger).

webhook の入力 - 使用方法Webhook input - usage

バインドは、.NET 関数に次の種類を公開します。The binding exposes the following types to .NET functions:

  • string[]string[]
  • カスタム オブジェクトの種類の配列Custom object type arrays
  • Newtonsoft.Json.Linq.JObject[]Newtonsoft.Json.Linq.JObject[]
  • Microsoft.Graph.Subscription[]Microsoft.Graph.Subscription[]

webhook の出力Webhook output

webhook サブスクリプションの出力バインドを使用すると、Microsoft Graph で webhook サブスクリプションを作成、削除、および更新できます。The webhook subscription output binding allows you to create, delete, and refresh webhook subscriptions in the Microsoft Graph.

このセクションには、次のようにいくつかのサブセクションがあります。This section contains the following subsections:

webhook の出力 - 例Webhook output - example

言語固有の例をご覧ください。See the language-specific example:

webhook の出力 - C# スクリプトの例Webhook output - C# script example

次の例では、サブスクリプションを作成します。The following example creates a subscription. 期限切れにならないようにサブスクリプションを更新できます。You can refresh the subscription to prevent it from expiring.

function.json ファイルは、作成アクションを使用するサブスクリプションの出力バインドを使用して、HTTP トリガーを定義します。The function.json file defines an HTTP trigger with a subscription output binding using the create action:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "clientState",
      "direction": "out",
      "action": "create",
      "subscriptionResource": "me/mailFolders('Inbox')/messages",
      "changeTypes": [
        "created"
      ],
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "$return",
      "direction": "out"
    }
  ],
  "disabled": false
}

C# スクリプト コードは、呼び出し元のユーザーが Outlook メッセージを受信するとこの関数アプリに通知する、webhook を登録します。The C# script code registers a webhook that will notify this function app when the calling user receives an Outlook message:

using System;
using System.Net;
using Microsoft.Extensions.Logging;

public static HttpResponseMessage run(HttpRequestMessage req, out string clientState, ILogger log)
{
  log.LogInformation("C# HTTP trigger function processed a request.");
    clientState = Guid.NewGuid().ToString();
    return new HttpResponseMessage(HttpStatusCode.OK);
}

webhook の出力 - JavaScript の例Webhook output - JavaScript example

次の例では、サブスクリプションを作成します。The following example creates a subscription. 期限切れにならないようにサブスクリプションを更新できます。You can refresh the subscription to prevent it from expiring.

function.json ファイルは、作成アクションを使用するサブスクリプションの出力バインドを使用して、HTTP トリガーを定義します。The function.json file defines an HTTP trigger with a subscription output binding using the create action:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "clientState",
      "direction": "out",
      "action": "create",
      "subscriptionResource": "me/mailFolders('Inbox')/messages",
      "changeTypes": [
        "created"
      ],
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "$return",
      "direction": "out"
    }
  ],
  "disabled": false
}

JavaScript コードは、呼び出し元のユーザーが Outlook メッセージを受信するとこの関数アプリに通知する、webhook を登録します。The JavaScript code registers a webhook that will notify this function app when the calling user receives an Outlook message:

const uuidv4 = require('uuid/v4');

module.exports = function (context, req) {
    context.bindings.clientState = uuidv4();
    context.done();
};

webhook の出力 - 属性Webhook output - attributes

C# クラス ライブラリでは、GraphWebHookSubscription 属性を使用します。In C# class libraries, use the GraphWebHookSubscription attribute.

webhook の出力 - 構成Webhook output - configuration

次の表は、function.json ファイルと GraphWebHookSubscription 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the GraphWebHookSubscription attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
namename 必須 - メール メッセージの関数コードで使用される変数名。Required - the variable name used in function code for the mail message. コードから Outlook メッセージの出力バインドを使用する」をご覧ください。See Using an Outlook message output binding from code.
typetype 必須 - graphWebhookSubscription に設定する必要があります。Required - must be set to graphWebhookSubscription.
directiondirection 必須 - out に設定する必要があります。Required - must be set to out.
identityidentity IDIdentity 必須 - 操作を実行するために使用する ID です。Required - The identity that will be used to perform the action. 次のいずれかの値を指定できます。Can be one of the following values:
  • userFromRequest - HTTP トリガーでのみ有効です。userFromRequest - Only valid with HTTP trigger. 呼び出し元ユーザーの ID を使用します。Uses the identity of the calling user.
  • userFromId - 指定された ID を使用して以前ログインしたユーザーの ID を使用します。userFromId - Uses the identity of a previously logged-in user with the specified ID. userId プロパティをご覧ください。See the userId property.
  • userFromToken - 指定したトークンによって表される ID を使用します。userFromToken - Uses the identity represented by the specified token. userToken プロパティをご覧ください。See the userToken property.
  • clientCredentials - 関数アプリの ID を使用します。clientCredentials - Uses the identity of the function app.
userIduserId UserIdUserId identityuserFromId に設定された場合にのみ必要です。Needed if and only if identity is set to userFromId. 以前ログインしたユーザーに関連付けられたユーザー プリンシパル ID です。A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken に設定された場合にのみ必要です。Needed if and only if identity is set to userFromToken. 関数アプリの有効なトークンです。A token valid for the function app.
actionaction アクションAction 必須 - バインドが実行する必要があるアクションを指定します。Required - specifies the action the binding should perform. 次のいずれかの値を指定できます。Can be one of the following values:
  • create - 新しいサブスクリプションを登録します。create - Registers a new subscription.
  • delete - 指定したサブスクリプションを削除します。delete - Deletes a specified subscription.
  • refresh - 指定したサブスクリプションが期限切れにならないように更新します。refresh - Refreshes a specified subscription to keep it from expiring.
subscriptionResourcesubscriptionResource SubscriptionResourceSubscriptionResource actioncreate に設定された場合にのみ必要です。Needed if and only if the action is set to create. 変更を監視する Microsoft Graph リソースを指定します。Specifies the Microsoft Graph resource that will be monitored for changes. Microsoft Graph の Webhooks での作業」をご覧ください。See Working with webhooks in Microsoft Graph.
changeTypechangeType ChangeTypeChangeType actioncreate に設定された場合にのみ必要です。Needed if and only if the action is set to create. サブスクライブしているリソースで、通知が表示される変更の種類を表します。Indicates the type of change in the subscribed resource that will raise a notification. サポートされる値は createdupdateddeleted です。The supported values are: created, updated, deleted. コンマ区切りのリストを使用して複数の値を組み合わせることができます。Multiple values can be combined using a comma-separated list.

webhook の出力 - 使用方法Webhook output - usage

バインドは、.NET 関数に次の種類を公開します。The binding exposes the following types to .NET functions:

  • 文字列string
  • Microsoft.Graph.SubscriptionMicrosoft.Graph.Subscription

webhook サブスクリプションの更新Webhook subscription refresh

サブスクリプションを更新するには、次の 2 つの方法があります。There are two approaches to refreshing subscriptions:

  • アプリケーション ID を使用して、すべてのアプリケーションを処理します。Use the application identity to deal with all subscriptions. この場合、Azure Active Directory 管理者から同意を得る必要があります。この方法は、Azure Functions でサポートされているすべての言語で使用できます。This will require consent from an Azure Active Directory admin. This can be used by all languages supported by Azure Functions.
  • 各ユーザー ID を手動でバインドすることで、各サブスクリプションに関連付けられている ID を使用します。Use the identity associated with each subscription by manually binding each user ID. この場合、バインドを実行するためにカスタム コードが必要になります。This will require some custom code to perform the binding. この方法は、.NET 関数でのみ使用できます。This can only be used by .NET functions.

このセクションでは、それぞれの方法の例を示します。This section contains an example for each of these approaches:

webhook サブスクリプションの更新 - アプリケーション ID の例Webhook Subscription refresh - app identity example

言語固有の例をご覧ください。See the language-specific example:

アプリケーション ID の更新 - C# スクリプトの例App identity refresh - C# script example

次の例では、アプリケーション ID を使用してサブスクリプションを更新します。The following example uses the application identity to refresh a subscription.

function.json ファイルは、サブスクリプションの入力バインドとサブスクリプションの出力バインドを使用して、タイマー トリガーを定義します。The function.json defines a timer trigger with a subscription input binding and a subscription output binding:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 * * */2 * *"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToRefresh",
      "direction": "out",
      "action": "refresh",
      "identity": "clientCredentials"
    }
  ],
  "disabled": false
}

C# スクリプト コードは、サブスクリプションを更新します。The C# script code refreshes the subscriptions:

using System;
using Microsoft.Extensions.Logging;

public static void Run(TimerInfo myTimer, string[] existingSubscriptions, ICollector<string> subscriptionsToRefresh, ILogger log)
{
    // This template uses application permissions and requires consent from an Azure Active Directory admin.
    // See https://go.microsoft.com/fwlink/?linkid=858780
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    foreach (var subscription in existingSubscriptions)
    {
      log.LogInformation($"Refreshing subscription {subscription}");
      subscriptionsToRefresh.Add(subscription);
    }
}

アプリケーション ID の更新 - C# スクリプトの例App identity refresh - C# script example

次の例では、アプリケーション ID を使用してサブスクリプションを更新します。The following example uses the application identity to refresh a subscription.

function.json ファイルは、サブスクリプションの入力バインドとサブスクリプションの出力バインドを使用して、タイマー トリガーを定義します。The function.json defines a timer trigger with a subscription input binding and a subscription output binding:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 * * */2 * *"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToRefresh",
      "direction": "out",
      "action": "refresh",
      "identity": "clientCredentials"
    }
  ],
  "disabled": false
}

JavaScript コードは、サブスクリプションを更新します。The JavaScript code refreshes the subscriptions:

// This template uses application permissions and requires consent from an Azure Active Directory admin.
// See https://go.microsoft.com/fwlink/?linkid=858780

module.exports = function (context) {
    const existing = context.bindings.existingSubscriptions;
    var toRefresh = [];
    for (var i = 0; i < existing.length; i++) {
        context.log(`Refreshing subscription ${existing[i]}`);
        toRefresh.push(existing[i]);
    }
    context.bindings.subscriptionsToRefresh = toRefresh;
    context.done();
};

webhook サブスクリプションの更新 - ユーザー ID の例Webhook Subscription refresh - user identity example

次の例では、ユーザー ID を使用してサブスクリプションを更新します。The following example uses the user identity to refresh a subscription.

function.json ファイルは、タイマー トリガーを定義し、関数コードへのサブスクリプションの入力バインドを延期します。The function.json file defines a timer trigger and defers the subscription input binding to the function code:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 * * */2 * *"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in"
    }
  ],
  "disabled": false
}

C# スクリプト コードは、各ユーザーの ID を使用してサブスクリプションを更新し、出力バインドをコードで作成します。The C# script code refreshes the subscriptions and creates the output binding in code, using each user's identity:

using System;
using Microsoft.Extensions.Logging;

public static async Task Run(TimerInfo myTimer, UserSubscription[] existingSubscriptions, IBinder binder, ILogger log)
{
  log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    foreach (var subscription in existingSubscriptions)
    {
        // binding in code to allow dynamic identity
        using (var subscriptionsToRefresh = await binder.BindAsync<IAsyncCollector<string>>(
            new GraphWebhookSubscriptionAttribute() {
                Action = "refresh",
                Identity = "userFromId",
                UserId = subscription.UserId
            }
        ))
        {
            log.LogInformation($"Refreshing subscription {subscription}");
            await subscriptionsToRefresh.AddAsync(subscription);
        }

    }
}

public class UserSubscription {
    public string UserId {get; set;}
    public string Id {get; set;}
}

次の手順Next steps