SharePoint webhook の使用を開始するGet started with SharePoint webhooks

この記事では、SharePoint webhook 要求を追加し、処理するためのアプリケーションを作成する方法について説明します。This article describes how to build an application that adds and handles SharePoint webhook requests. Postman クライアントを使用して SharePoint webhook 要求の構築と実行を迅速に行いながら、webhook レシーバーとして単純な ASP.NET Web API と対話する方法を説明します。You will learn how to use Postman client to construct and execute SharePoint webhook requests quickly while interacting with a simple ASP.NET Web API as the webhook receiver.

webhook の動作を理解しやすくするため、単純な HTTP 要求を使用します。You will use plain HTTP requests, which is useful for helping you to understand how webhooks work.

この記事の段階的な指示を実行するには、次のツールをダウンロードしてインストールします。To complete the step-by-step instructions in this article, download and install the following tools:

手順 1: Postman クライアント用に Azure AD アプリケーションを登録するStep 1: Register an Azure AD application for Postman client

Postman クライアントが SharePoint とやり取りするには、Office 365 テナントと関連する Microsoft Azure Active Directory (Azure AD) テナントに Azure AD アプリを登録する必要があります。In order for the Postman client to communicate with SharePoint, you need to register a Microsoft Azure Active Directory (Azure AD) app in your Azure AD tenant associated with your Office 365 tenant.

  1. アプリケーションは、Web アプリケーションとして登録する必要があります。Ensure that you register the application as a Web Application.

  2. SharePoint Online にアクセスするには、Azure AD アプリに Office 365 SharePoint Online アプリケーションへのアクセス許可を付与し、すべてのサイト コレクションのアイテムとリストの読み取り/書き込みアクセス許可を選ぶことが重要です。To access SharePoint Online, it's important to grant the Azure AD app permissions to the Office 365 SharePoint Online application and select the read and write items and lists in all site collections permission.

    注意

    Azure AD アプリケーションの追加と、アプリケーションへのアクセス許可の詳細については、「アプリケーションの追加」をご覧ください。For more information about adding an Azure AD application and granting permissions to applications, see Adding an application.

  3. 以下のエンドポイントをアプリの返信 (リダイレクト) URL として入力します。これは、Azure AD が認証応答を送信する相手のエンドポイントです。認証が成功だった場合はアクセス トークンも含まれます。Enter the following endpoint as the Reply (Redirect) URL for the app. This is the endpoint to which Azure AD will send the authentication response, including the access token, if authentication was successful.

    https://www.getpostman.com/oauth2/callback
    
  4. クライアント シークレットになる Key を生成します。Generate a Key, which will be the client secret.

  5. 次のプロパティは後の手順で必要になるため、安全な場所にコピーしておきます。The following properties are required in later steps, so copy them to a safe place:

    • クライアント IDClient Id
    • クライアント シークレットClient Secret

手順 2:webhook レシーバーを作成するStep 2: Build a webhook receiver

このプロジェクトでは、webhook レシーバーを作成するために Visual Studio Web API プロジェクトを使用します。For this project, use the Visual Studio Web API project to build the webhook receiver.

新しい ASP.NET Web API プロジェクトの作成Create a new ASP.NET Web API project

  1. Visual Studio を開きます。Open Visual Studio.

  2. [ファイル] > [新規作成] > [プロジェクト] の順に選択します。Select File > New > Project.

  3. [テンプレート] ウィンドウで、[インストールされているテンプレート] を選び、[Visual C#] ノードを展開します。In the Templates pane, select Installed Templates, and expand the Visual C# node.

  4. [Visual C#] では [Web] を選択します。Under Visual C#, select Web.

  5. プロジェクト テンプレートのリストで、ASP.NET Web Application を選択します。In the list of project templates, select ASP.NET Web Application.

  6. プロジェクトに「SPWebhooksReceiver」という名前を付けて、[OK] を選択します。Name the project SPWebhooksReceiver, and select OK.

  7. [新しい ASP.NET プロジェクト] ダイアログで [Web API] テンプレートを ASP.NET 4.5. In the New ASP.NET Project dialog, select the Web API template from the ASP.NET 4.5. グループから選びます。group.

  8. [認証の変更] ボタンを選んで認証を [認証なし] に変更します。Change the authentication to No Authentication by selecting the Change Authentication button.

  9. [OK] を選んで Web API プロジェクトを作成します。Select OK to create the Web API project.

注意

このプロジェクトはクラウドに展開しないので、[クラウドにホストする] チェック ボックスをオフにできます。You can clear the Host in the cloud check box because this project will not be deployed to the cloud.

Visual Studio によってプロジェクトが作成されます。Visual Studio creates your project.

webhook レシーバーを作成するBuild the webhook receiver

NuGet パッケージをインストールするInstall NuGet packages

ASP.NET Web API Tracing を使用して SharePoint からの要求をログに記録します。Use ASP.NET Web API Tracing to log the requests coming from SharePoint. 次の手順で、トレースのパッケージをインストールします。The following steps install the tracing package:

  1. Visual Studio でソリューション エクスプローラーに移動します。Go to Solution Explorer in Visual Studio.

  2. プロジェクトのコンテキスト メニュー (右クリック) を開き、[NuGet パッケージの管理] を選びます。Open the context menu (right-click) for the project, and select Manage NuGet Packages.

  3. 検索ボックスに「Microsoft.AspNet.WebApi.Tracing」と入力します。In the search box, enter Microsoft.AspNet.WebApi.Tracing.

  4. 検索結果で「Microsoft.AspNet.WebApi.Tracing」パッケージを選び、[インストール] を選んでパッケージをインストールします。In the search results, select the Microsoft.AspNet.WebApi.Tracing package, and then select Install to install the package.

SPWebhookNotification モデルを作成するBuild SPWebhookNotification model

サービスによって生成されるそれぞれの通知は、webhookNotifiation インスタンスにシリアル化されます。Each notification generated by the service is serialized into a webhookNotification instance. この通知インスタンスを表す単純なモデルを作成する必要があります。You need to build a simple model that represents this notification instance.

  1. Visual Studio でソリューション エクスプローラーに移動します。Go to Solution Explorer in Visual Studio.

  2. Models フォルダーのコンテキスト メニュー (右クリック) を開き、[追加] > [クラス] の順に選択します。Open the context menu (right-click) for the Models folder, and select Add > Class.

  3. クラス名として「SPWebhookNotification」を入力し、[追加] を選んでクラスをプロジェクトに追加します。Enter SPWebhookNotification as the class name and select Add to add the class to your project.

  4. SPWebhookNotification クラスの本文に以下のコードを追加します。Add the following code to the body of the SPWebhookNotification class:

    public string SubscriptionId { get; set; }
    
    public string ClientState { get; set; }
    
    public string ExpirationDateTime { get; set; }
    
    public string Resource { get; set; }
    
    public string TenantId { get; set; }
    
    public string SiteUrl { get; set; }
    
    public string WebId { get; set; }
    

SPWebhookContent モデルを作成するBuild SPWebhookContent model

複数の通知が 1 つの要求として webhook レシーバーに送信されることがあるため、複数の通知は 1 つの配列値を持つ 1 つのオブジェクトにまとめられます。配列を表す単純なモデルを作成します。Because multiple notifications can be submitted to your webhook receiver in a single request, they are combined together in an object with a single array value. Build a simple model that represents the array.

  1. Visual Studio でソリューション エクスプローラーに移動します。Go to Solution Explorer in Visual Studio.

  2. Models フォルダーのコンテキスト メニュー (右クリック) を開き、[追加] > [クラス] の順に選択します。Open the context menu (right-click) for the Models folder, and select Add > Class.

  3. クラス名として「SPWebhookContent」を入力し、[追加] を選んでクラスをプロジェクトに追加します。Enter SPWebhookContent as the class name, and select Add to add the class to your project.

  4. SPWebhookContent クラスの本文に以下のコードを追加します。Add the following code to the body of the SPWebhookContent class:

     public List<SPWebhookNotification> Value { get; set; }
    

SharePoint webhook クライアントの状態を追加するAdd SharePoint webhook client state

webhook は、サブスクリプションへの通知メッセージに入れて送り返されるオプションの文字列値を使用する機能を提供します。これは、要求が実際に信頼できるソース (この場合は SharePoint) からのものであることを検証するために使用できます。Webhooks provide the ability to use an optional string value that is passed back in the notification message for your subscription. This can be used to verify that the request is indeed coming from the source you trust, which in this case is SharePoint.

アプリケーションが着信要求を検証するために使用できるよう、クライアント状態値を追加します。Add a client state value with which the application can verify the incoming requests.

  1. Visual Studio でソリューション エクスプローラーに移動します。Go to Solution Explorer in Visual Studio.

  2. web.config ファイルを開き、クライアントの状態として次のキーを <appSettings> セクションへ追加します。Open the web.config file, and add the following key as the client state to the <appSettings> section:

    <add key="webhookclientstate" value="A0A354EC-97D4-4D83-9DDB-144077ADB449"/>
    

トレースを有効にするEnable tracing

web.config ファイルで <configuration> セクションの <system.web> 要素内に以下のキーを追加してトレースを有効にします。In the web.config file, enable tracing by adding the following key inside the <system.web> element in the <configuration> section:

<trace enabled="true"/>

トレース ライターが必要なため、コントローラー構成にトレース ライターを追加する必要があります (この場合は、System.Diagnostics のトレース ライターを使用します)。A trace writer is required, so you must add a trace writer to the controller configuration (in this case use the one from System.Diagnostics).

  1. Visual Studio で [ソリューション エクスプローラー] に移動します。Go to Solution Explorer in Visual Studio.

  2. App_Start フォルダーの WebApiConfig.cs を開きます。Open WebApiConfig.cs in the App_Start folder.

  3. 次の行を Register メソッド内に追加します。Add the following line inside the Register method:

    config.EnableSystemDiagnosticsTracing();
    

SharePoint webhook コントローラーを作成するBuild SharePoint webhook controller

これで、SharePoint から受信した要求を処理し、それに応じてアクションを実行する webhook レシーバーのコントローラーを作成できるようになりました。Now build the webhook receiver controller that handles the incoming requests from SharePoint and take action accordingly.

  1. Visual Studio でソリューション エクスプローラーに移動します。Go to Solution Explorer in Visual Studio.

  2. Controllers フォルダーのコンテキスト メニュー (右クリック) を開き、[追加] > [コントローラー] の順に選択します。Open the context menu (right-click) for the Controllers folder, and select Add > Controller.

  3. [スキャフォールディングの追加] ダイアログで [Web API 2 コントローラー – 空] を選びます。In the Add Scaffold dialog, select Web API 2 Controller - Empty.

  4. [追加] を選択します。Select Add.

  5. コントローラーに「SPWebhookController」という名前を付けて [追加] を選び、API コントローラーをプロジェクトに追加します。Name the controller SPWebhookController, and select Add to add the API controller to your project.

  6. using ステートメントを次のコードと置き換えます。Replace the using statements with the following code:

    using Newtonsoft.Json;
    using SPWebhooksReceiver.Models;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Threading.Tasks;
    using System.Web;
    using System.Web.Http;
    using System.Web.Http.Tracing;
    
  7. SPWebhookController クラス内のコードを次のコードと置き換えます。Replace the code in the SPWebhookController class with the following code:

    [HttpPost]
    public HttpResponseMessage HandleRequest()
    {
        HttpResponseMessage httpResponse = new HttpResponseMessage(HttpStatusCode.BadRequest);
        var traceWriter = Configuration.Services.GetTraceWriter();
        string validationToken = string.Empty;
        IEnumerable<string> clientStateHeader = new List<string>();
        string webhookClientState = ConfigurationManager.AppSettings["webhookclientstate"].ToString();
    
        if (Request.Headers.TryGetValues("ClientState", out clientStateHeader))
        {
            string clientStateHeaderValue = clientStateHeader.FirstOrDefault() ?? string.Empty;
    
            if (!string.IsNullOrEmpty(clientStateHeaderValue) && clientStateHeaderValue.Equals(webhookClientState))
            {
                traceWriter.Trace(Request, "SPWebhooks", 
                    TraceLevel.Info, 
                    string.Format("Received client state: {0}", clientStateHeaderValue));
    
                var queryStringParams = HttpUtility.ParseQueryString(Request.RequestUri.Query);
    
                if (queryStringParams.AllKeys.Contains("validationtoken"))
                {
                    httpResponse = new HttpResponseMessage(HttpStatusCode.OK);
                    validationToken = queryStringParams.GetValues("validationtoken")[0].ToString();
                    httpResponse.Content = new StringContent(validationToken);
    
                    traceWriter.Trace(Request, "SPWebhooks", 
                        TraceLevel.Info, 
                        string.Format("Received validation token: {0}", validationToken));                        
                    return httpResponse;
                }
                else
                {
                    var requestContent = Request.Content.ReadAsStringAsync().Result;
    
                    if (!string.IsNullOrEmpty(requestContent))
                    {
                        SPWebhookNotification notification = null;
    
                        try
                        {
                            var objNotification = JsonConvert.DeserializeObject<SPWebhookContent>(requestContent);
                            notification = objNotification.Value[0];
                        }
                        catch (JsonException ex)
                        {
                            traceWriter.Trace(Request, "SPWebhooks", 
                                TraceLevel.Error, 
                                string.Format("JSON deserialization error: {0}", ex.InnerException));
                            return httpResponse;
                        }
    
                        if (notification != null)
                        {
                            Task.Factory.StartNew(() =>
                            {
                                 //handle the notification here
                                 //you can send this to an Azure queue to be processed later
                                //for this sample, we just log to the trace
    
                                traceWriter.Trace(Request, "SPWebhook Notification", 
                                    TraceLevel.Info, string.Format("Resource: {0}", notification.Resource));
                                traceWriter.Trace(Request, "SPWebhook Notification", 
                                    TraceLevel.Info, string.Format("SubscriptionId: {0}", notification.SubscriptionId));
                                traceWriter.Trace(Request, "SPWebhook Notification", 
                                    TraceLevel.Info, string.Format("TenantId: {0}", notification.TenantId));
                                traceWriter.Trace(Request, "SPWebhook Notification", 
                                    TraceLevel.Info, string.Format("SiteUrl: {0}", notification.SiteUrl));
                                traceWriter.Trace(Request, "SPWebhook Notification", 
                                    TraceLevel.Info, string.Format("WebId: {0}", notification.WebId));
                                traceWriter.Trace(Request, "SPWebhook Notification", 
                                    TraceLevel.Info, string.Format("ExpirationDateTime: {0}", notification.ExpirationDateTime));
    
                            });
    
                            httpResponse = new HttpResponseMessage(HttpStatusCode.OK);
                        }
                    }
                }
            }
            else
            {
                httpResponse = new HttpResponseMessage(HttpStatusCode.Forbidden);
            }
        }
    
        return httpResponse;
    }
    
  8. ファイルを保存します。Save the file.

手順 3: webhook レシーバーをデバッグするStep 3: Debug the webhook receiver

  1. F5 キーを選択し、webhook レシーバーをデバッグします。Select F5 to debug the webhook receiver.

  2. ブラウザーが開いたら、アドレス バーからポート番号をコピーします。When you have the browser open, copy the port number from the address bar. 例: http://localhost:<_port-number_>For example: http://localhost:<_port-number_>

手順 4: ngrok プロキシを実行するStep 4: Run ngrok proxy

  1. コンソール ターミナルを開きます。Open a console terminal.

  2. 抽出した ngrok フォルダーに移動します。Go to the extracted ngrok folder.

  3. 前の手順のポート番号 URL と以下を入力して ngrok を開始します。Enter the following with the port number URL from the previous step to start ngrok:

    ./ngrok http port-number --host-header=localhost:port-number
    

    ngrok が実行していることがわかります。You should see ngrok running.

  4. 転送先の HTTPS アドレスをコピーします。Copy the Forwarding HTTPS address. SharePoint が要求を送信するためのサービス プロキシとして、このアドレスを使用します。You will use this address as the service proxy for SharePoint to send requests.

手順 5: Postman を使用して webhook サブスクリプションを追加するStep 5: Add webhook subscription using Postman

新しいアクセス トークンを取得するGet new access token

Postman を使用すると API の処理が本当に簡単になります。最初の手順は、Postman が Azure AD の認証を受けられるように構成することです。こうして、API 要求を SharePoint に送信できるようにします。手順 1 で登録した Azure AD アプリを使用します。Postman makes it really simple to work with APIs. The first step is to configure Postman to authenticate with Azure AD so you can send API requests to SharePoint. You will use the Azure AD app that you registered in Step 1.

  1. Postman を開きます。Open Postman. サイドバー要求エディターが表示されます。You are presented with a Sidebar and Request Editor.

  2. 要求エディター[認証] タブを選びます。Select the Authorization tab in the Request Editor.

  3. [種類] リストで、OAuth 2.0 を選択します。Select OAuth 2.0 in the Type list.

  4. [新しいアクセス トークンを取得する] ボタンを選びます。Select the Get New Access Token button.

  5. ダイアログ ウィンドウに以下のように入力します。In the dialog window, enter the following:

    • 認証 URL:Auth URL:
      • https://login.microsoftonline.com/common/oauth2/authorize?resource=https%3A%2F%2F<_your-sharepoint-tenant-url-without-https_>
      • your-sharepoint-tenant-url-without-httpshttps のプレフィックスなしで、テナントの URL と置き換えます。Replace your-sharepoint-tenant-url-without-https with your tenant url without the https prefix.
    • アクセス トークン URL: https://login.microsoftonline.com/common/oauth2/tokenAccess Token URL: https://login.microsoftonline.com/common/oauth2/token
    • クライアント ID: 前の手順 1 で登録したアプリのクライアント ID です。Client Id: Client Id of the app you registered previously in Step one.
    • クライアント シークレット: 前の手順 1 で登録したアプリのクライアント シークレットです。Client Secret: Client Secret of the app you registered previously in Step one.
    • トークン名: sp_webhooks_tokenToken name: sp_webhooks_token
    • 許可タイプ: 承認コードGrant type: Authorization Code
  6. [トークンを要求する] を選び、サインインして同意し、セッションのトークンを取得します。Select the Request Token to sign in, consent, and get the token for the session.

  7. トークンを正常に取得すると、access_token 変数が [認証] タブに追加されます。When the token is successfully retrieved, you should see access_token variable added to the Authorization tab.

  8. [ヘッダーにトークンを追加する] オプションを選びます。Select the option to Add token to header.

  9. access_token 変数をダブルクリックして、要求のヘッダーにトークンを追加します。Double-click the access_token variable to add the token to the header for the request.

    Postman が新しいアクセス トークンを取得する

ドキュメント リスト ID の取得Get Documents list Id

既定のドキュメント ライブラリ用の webhook を管理する必要があります。これは、既定のサイト コレクション内で、Documents という名前のもとでプロビジョニングされます。You need to manage webhooks for the default document library, which is provisioned in your default site collection under the name Documents. このリストの ID は、GET 要求を発行して取得します。Get the Id of this list by issuing a GET request:

  1. 以下の要求 URL を入力します。Enter the following request URL:

    https://site-collection/_api/web/lists/getbytitle('Documents')?$select=Title,Id
    
  2. site-collection を実際のサイト コレクションと置き換えます。Replace site-collection with your site collection.

    Postman が要求を実行し、成功すると結果が表示されます。Postman executes your request and if successful, you should see the result.

  3. 結果から ID をコピーします。Copy the Id from the results. 後でこの ID を使用して webhook 要求を作成します。Later you will use the Id to make webhook requests.

webhook サブスクリプションを追加するAdd webhook subscription

これで必要な情報が揃ったので、webhook サブスクリプションを追加するためのクエリと要求を構築します。次の手順には要求エディターを使用します。Now that you have the required information, construct the query and the request to add a webhook subscription. Use the request editor for the following steps:

  1. 要求を GET から POST に変更します。Change the request to POST from GET.

  2. 要求 URL として次のように入力します。Enter the following as the request URL:

    https://site-collection/_api/web/lists('list-id')/subscriptions
    
  3. site-collection を実際のサイト コレクションと置き換えます。Replace site-collection with your site collection.

  4. [ヘッダー] タブに移動します。Go to the Headers tab.

  5. Authorization ヘッダーがまだあることを確認します。Make sure you still have the Authorization header. ない場合は、新しいアクセス トークンを要求する必要があります。If not, you need to request a new access token.

  6. 次のヘッダーのキー > のペアを追加します。Add the following header key > value pairs:

    • Accept -> application/json;odata=nometadataAccept > application/json;odata=nometadata
    • Content-Type -> application/jsonContent-Type > application/json
  7. [本文] タブに移動して [raw (未加工)] の形式を選びます。Go to the Body tab and select raw format.

  8. 本文として以下の JSON を貼り付けます。Paste the following JSON as the body:

    {
      "resource": "https://site-collection/_api/web/lists('list-id')",
      "notificationUrl": "https://ngrok-forwarding-address/api/spwebhook/handlerequest",
      "expirationDateTime": "2016-10-27T16:17:57+00:00",
      "clientState": "A0A354EC-97D4-4D83-9DDB-144077ADB449"
    }
    


    Postman が webhook 本文を追加する

  9. expirationDateTime が最大でも今日から 6 か月先であることを確認します。Make sure the expirationDateTime is at most 6 months from today.

  10. 手順 4 に示すように、必ず webhook レシーバーをデバッグします。Make sure you are debugging the webhook receiver as in Step 4.

  11. [送信] を選択して要求を実行します。Select Send to execute the request.

    要求が成功した場合は、サブスクリプションの詳細を示す SharePoint からの応答が表示されます。次の例では、新しく作成したサブスクリプションの応答を示しています。If the request is successful, you should see the response from SharePoint that provides the subscription details. The following example shows a response for a newly created subscription:

    {
      "clientState": "A0A354EC-97D4-4D83-9DDB-144077ADB449",
      "expirationDateTime": "2016-10-27T16:17:57Z",
      "id": "32b95d9-4d20-4a17-bfa3-2957cb38ead8",
      "notificationUrl": "https://85557d4b.ngrok.io/api/spwebhook/handlerequest",
      "resource": "c34420f9-2ad7-4e54-94c9-b67798d2299b"
    }
    
  12. サブスクリプション ID をコピーします。これは次の要求セットで必要になります。Copy the subscription id. You will need it for the next set of requests.

  13. Visual Studio の webhook レシーバー プロジェクトに移動して、[出力] ウィンドウを確認します。Go to the webhook receiver project in Visual Studio and examine the Output window. 以下のトレースのようなトレース ログとその他のメッセージが表示されます。You should see the trace logs that look similar to the following trace, along with other messages:

    iisexpress.exe Information: 0 : Message='Received client state: A0A354EC-97D4-4D83-9DDB-144077ADB449'
    iisexpress.exe Information: 0 : Message='Received validation token: daf2803c-43cf-44c7-8dff-7066eaa40f13'
    

    トレースは、webhook が最初に検証要求を受信したことを示します。コードを確認すると、SharePoint が要求を検証できるように、すぐに検証トークンが返されていることがわかります。The trace indicates that the webhook received initially received a validation request. If you look at the code, you'll see that it returns the validation token immediately so that SharePoint can validate the request:

    if (queryStringParams.AllKeys.Contains("validationtoken"))
    {
        httpResponse = new HttpResponseMessage(HttpStatusCode.OK);
        validationToken = queryStringParams.GetValues("validationtoken")[0].ToString();
        httpResponse.Content = new StringContent(validationToken);
    
        traceWriter.Trace(Request, "SPWebhooks", 
            TraceLevel.Info, 
            string.Format("Received validation token: {0}", validationToken));                        
        return httpResponse;
    }
    

手順 6:サブスクリプションの詳細を取得するStep 6: Get subscription details

ここで、Postman のクエリを実行してサブスクリプションの詳細を取得します。Now you'll run queries in Postman to get the subscription details.

  1. Postman クライアントを開きます。Open the Postman client.

  2. 要求を POST から GET に変更します。Change the request to GET from POST.

  3. 要求として次のように入力します。Enter the following as the request:

    https://site-collection/_api/web/lists('list-id')/subscriptions
    
  4. site-collection を実際のサイト コレクションと置き換えます。Replace site-collection with your site collection.

  5. [送信] を選択して要求を実行します。Select Send to execute the request.

    成功すると、SharePoint からこのリスト リソースのサブスクリプションが返されることがわかります。1 つだけ追加したため、少なくとも 1 つのサブスクリプションが返されます。次の例では、1 つのサブスクリプションの応答を示しています。If successful, you should see SharePoint return the subscriptions for this list resource. Because we just added one, you should at least see one subscription returned. The following example shows a response with one subscription:

    {
      "value": [
        {
          "clientState": "A0A354EC-97D4-4D83-9DDB-144077ADB449",
          "expirationDateTime": "2016-10-27T16:17:57Z",
          "id": "32b95add-4d20-4a17-bfa3-2957cb38ead8",
          "notificationUrl": "https://85557d4b.ngrok.io/api/spwebhook/handlerequest",
          "resource": "c34420f9-2a67-4e54-94c9-b67798229f9b"
        }
      ]
    }
    
  6. 以下のクエリを実行すると、特定のサブスクリプションの詳細を取得できます。Run the following query to get details of the specific subscription:

    https://site-collection/_api/web/lists('list-id')/subscriptions('subscription-id')
    
  7. subscription-id をサブスクリプション ID と置き換えます。Replace subscription-id with your subscription id.

手順 7: webhook 通知をテストするStep 7: Test webhook notification

ここで、ファイルをドキュメント ライブラリに追加して、SharePoint からの通知を webhook レシーバーで取得するかどうかをテストします。Now add a file to the Documents library and test if you get a notification from SharePoint in the webhook receiver.

  1. Visual Studio に移動します。Go to Visual Studio.

  2. SPWebhookController で、次のコード行にブレークポイントを配置します。In the SPWebhookController, place a breakpoint on the following line of code:

    var requestContent = Request.Content.ReadAsStringAsync().Result;
    
  3. ドキュメント ライブラリに移動します。Go to the Documents library. 既定のサイト コレクションでは、「Shared Documents」という名前のライブラリになります。It is named Shared Documents library in your default site collection.

  4. 新しいファイルを追加します。Add a new file.

  5. Visual Studio に移動し、ブレークポイントに達するまで待ちます。Go to Visual Studio and wait for the breakpoint to be hit.

    待機時間は数秒から 5 分にも及ぶ場合があります。The wait time may vary from a few seconds to up to five minutes. ブレークポイントに達する直前に、webhook レシーバーは SharePoint からの通知を受け取っています。When the breakpoint is hit, the webhook receiver has just received a notification from SharePoint.

  6. F5 を選んで続けます。Select F5 to continue.

  7. 通知データをトレース ログに追加しているため、通知データを確認するには、[出力] ウィンドウで次のエントリを確認します。To see the notification data, look in the Output window for the following entries, since you added the notification data into the trace log:

    iisexpress.exe Information: 0 : Message='Resource: c34420f9-2a67-4e54-94c9-b6770892299b'
    iisexpress.exe Information: 0 : Message='SubscriptionId: 32b95ad9-4d20-4a17-bfa3-2957cb38ead8'
    iisexpress.exe Information: 0 : Message='TenantId: 7a17cb7d-6898-423f-8839-45f363076f06'
    iisexpress.exe Information: 0 : Message='SiteUrl: /'
    iisexpress.exe Information: 0 : Message='WebId: 62b80e0b-f889-4974-a519-cc138413be40'
    iisexpress.exe Information: 0 : Message='ExpirationDateTime: 2016-10-27T16:17:57.0000000Z'
    

このプロジェクトでは、トレース ログに情報が書き込まれまるだけです。This project only writes the information to the trace log. ただし、レシーバーでテーブルやキューにこの情報を送信し、SharePoint からの情報を取得するために、受信データを処理することができます。However, in your receiver, you send this information into a table or a queue that can process the received data to get information from SharePoint.

このデータを使用すると、URL を作成し、GetChanges API で最新の変更内容を取得することができます。With this data, you can construct the URL and use the GetChanges API to get the latest changes.

次の手順Next steps

この記事では、Postman クライアントとシンプルな Web API を使用してサブスクライブし、SharePoint から webhook 通知を受け取りました。In this article, you used Postman client and a simple web API to subscribe and receive webhook notifications from SharePoint.

次に、SharePoint webhooks サンプル リファレンス実装を確認します。これは、Azure Storage Queues を使用して情報を処理し、SharePoint から変更を取得し、それらの変更を SharePoint リストに再びプッシュする、エンドツーエンドのサンプルを示します。Next, take a look at SharePoint webhooks sample reference implementation, which shows an end-to-end sample that uses Azure Storage Queues to process the information, get changes from SharePoint, and push those changes back into a SharePoint list.