Before looking out at the implementation of webhook models
in SharePoint, here let us look at how Serverless web hooks concept can be
feasible.
What is Serverless architecture? It allows us to build the
required services, without the need of servers. Some Azure services like Azure
functions helps building such Serverless models.
The components like webhook service, storage queues, web
jobs and SQL database are hosted on Azure. The following picture depicts the
Serverless webhooks process, with the help of Serverless components. The components present on the Azure box, depicts serverless architecture model.
Required Components for Building Serverless SharePoint Webhooks:
To implement Serverless webhooks for SharePoint online
events, the following are the required components.
- SharePoint Online Subscription
- Azure Subscription
- AD tenant – For enabling permissions
- Azure Functions – Building the system to receive the notifications
- Azure Webjobs – To process the data stored on queues
- Azure Storage – Queues, Databases
- Postman client – For sending the requests (request test tool on desktops)
In the previous post, we have seen theoretically how the events can be processed from SharePoint services.
The previous posts might help in understanding the webbook services better.
The previous posts might help in understanding the webbook services better.
- Introduction to SharePoint Webhooks
- Working with SharePoint Events using Webhooks
- Processing Events from SharePoint Webhook Services
Process the Notifications sent by SharePoint service
The webhook service requires two components.
- Create the Azure Function,
- Create the Azure storage queue.
The Azure function acts as webhook service, which will process the notifications sent by
SharePoint service. And the notifications will be pushed to the Azure storage
queue.
The following code snippet depicts the above flow.
Subscribing to the Event Notifications
To access the SharePoint list item for subscription or from services related to webhooks, authentication token has to be generated from the Azure AD.
- Register the application on Azure AD, with the necessary reply URL and providing read/write permissions on the SharePoint lists.
- Or you need to hardcode the credentials for accessing the SharePoint list data.
Postman tool can be used for subscribing to the events. This
step will help registering the webhook service (built in the previous step) on
the SharePoint list for event changes.
Paste the subscription URL of the list and select the action as POST.
https://nakkeerann.sharepoint.com/_api/web/lists('9AC9CF26-55E2-46DE-96B7-310714417132')/subscriptions
Get the access token, with the following parameters passed.
- Auth URL - https://login.microsoftonline.com/common/oauth2/authorize?resource=https://nakkeerann.sharepoint.com
- Access Token URL - https://login.microsoftonline.com/common/oauth2/token
- Client ID and Client Secret – Copied from the Azure AD APP registered before.
- Grant Type – Authorization code
Generate oAuth Token for Subscriptions |
Once you have the oAuth token, use it for subscription. Then
using the post request with the following parameters, register the webhook
service.
- Headers – Accept : application/json;odata=nometadata
- Content-Type : application/json
- Request Body will contain the
- Resource URL
- Notification URL
- Expiration date time and
- Client state (optional).
"resource":
"https://nakkeerann.sharepoint.com/_api/web/lists('9AC9CF26-55E2-46DE-96B7-310714417132')",
"notificationUrl":
"https://azurefunctionurl/api/webhookservice",
"expirationDateTime": "2018-04-27T12:11:37+00:00",
"clientState":
"GUID"
}
Once the request is posted using postman tool,
- The SharePoint will send a request with the validation token to webhook service built using Azure functions.
- The webhook service should respond back with the valid token within 5 seconds.
- If that happens, SharePoint will respond back to postman tool with a success message.
- Subscription ID
- Expiration date
- Resource ID
- Tenant ID
- Site URL and
- Web ID.
Processing the notifications using WebJobs
Next, let us see how to process the notifications present on
Azure storage queues and extract the change information from the respective
lists. Then the changes will be saved on SharePoint lists as history or logs.
The following code snippet shows the webjob which will
process the notifications present on Azure storage queue and save the changes
into the logs list present in the SharePoint.