Webhooks
A system hook that extends a function call by an HTTP call under defined conditions.
Table of Contents
Introduction
In order to insert an additional action into the process flow of a functional sequence, the ability for reacting to a function call is required. In yuuvis® Momentum, webhooks are a suitable option for this purpose. They belong to the system hooks and thus are triggered by function calls under specified conditions defined on their predicate
attribute.
A webhook extends the function by an HTTP call. Whenever the predicate
of a webhook delivers a t
rue
result, an optional HTTP call to a web URL defined in the webhook configuration is performed. The process flow is interrupted until the webhook activity is finished. Thus, the webhook can perform additional processing steps before passing the data back to resume the interrupted main process. If the predicate
of a webhook delivers a f
alse
result, the HTTP call is skipped.
Import and content update webhooks are called in the Repository service, all others in the API-gateway service.
Any changes to the webhook configuration require a restart of the services that are responsible for the call of the affected functions.
Webhook Types
Depending on their type, webhooks are triggered in different situations within the data processing chain.
The webhook type dms.response.objects
can be triggered in various situations. For some of them there are special webhook types (dms.response.objects.insert
, dms.response.objects.update
, dms.response.objects.search
, dms.response.objects.delete
). These sub-webhooks are triggered directly after dms.response.objects
.
HTTP Method | Webhook Type | Evaluation Target of the Predicate | Description | Affected Requests |
---|---|---|---|---|
GET | The tenant name of the user who sent the request. | Retrieves roles and any additional available information about the current user logging in to the authentication system from the URL. | Authentication process | |
POST | Objects provided by an import request body | This webhook can be triggered by
| POST /api/dms/objects/{objectId} POST /api/dms/objects/{objectId}/contents/file POST /api/dms/objects/tags/{name}/state/{state}?query=<SQL> DELETE /api/dms/objects/{objectId}/tags/{name} | |
POST as of 2021 Autumn | dms.request.objects.upsert.database-before | Enriched objects just before they are indexed | This webhook can be triggered by
| POST /api/dms/objects/{objectId} POST /api/dms/objects/{objectId}/contents/file POST /api/dms/objects/tags/{name}/state/{state}?query=<SQL> DELETE /api/dms/objects/{objectId}/tags/{name} |
POST | dms.request.update.metadata (deprecated) | Single object in the request body JSON list | Triggers upon metadata updates, before the JSON request body is evaluated and used to update the object. Can be used to modify or validate the metadata, i.e., to facilitate role-based user authorization. | |
POST | dms.request.search | Incoming search queries | The search endpoint and any endpoint containing a search request can trigger this webhook. Check the value of the incoming search query parameter. | |
POST | dms.request.objects.delete | The active version of the object or the specific version that is to be deleted | The webhook is triggered if the object or version to delete exists and is deletable, i.e., if the user has sufficient permissions and if the object is not a non-empty folder. | |
POST | dms.response.objects | Objects within a list of objects that is to be returned to the user, i.e., in search queries | Delivers a list of predicate-matching objects to a secondary recipient. Any request returning an object list triggers this webhook directly before the return. Applies whenever object lists are part of the HTTP response:
| POST /api/dms/objects/{objectId} DELETE /api/dms/objects/{objectId} (since 2021 summer) DELETE /api/dms/objects/{objectId}/tags/{name} POST /api/dms/objects/{objectId}/actions/move/contents/repositories/{repositoryId} GET /api/dms/objects/{objectId} |
POST | dms.response.objects.insert | The final object after import | Import requests trigger this webhook after successful import directly before the return. | POST /api/dms/objects |
POST | dms.response.objects.update | The object after the update | Update requests trigger this webhook after successful update directly before the return. This concerns content updates, metadata updates and tag updates. | POST /api/dms/objects/{objectId} POST /api/dms/objects/{objectId}/contents/file POST /api/dms/objects/tags/{name}/state/{state}?query=<SQL> DELETE /api/dms/objects/{objectId}/tags/{name} POST /api/dms/objects/{objectId}/tags/{name}/state/{state} POST /api/dms/objects/{objectId}/tags/{name}/state/{state}?overwrite=true |
POST | dms.response.objects.delete | The active version of the object or the specific version that is deleted | This webhook is triggered directly after the successful deletion of a document and after the equivalent AMQP hook, and can for instance inform other systems. | |
POST | dms.response.objects.search | Search result entry | Search requests trigger this webhook if they were successful directly before the return. | POST /api/dms/objects/search |
Predicate
The predicate specifies the condition for the call of individual webhooks. It is declared in the webhook configuration.
If multiple webhooks are registered for the same webhook type, the predicate is applied to the original predicate target for each of them and in the order of definition. Imagine an example scenario with two registered webhooks of the type dms.response.objects.search
:
{ "enable": true, "predicate": "spel:true", "type": "dms.response.objects.search", "url": <suitable endpoint removing the property 'appEmail:bcc'>, "useDiscovery": true }, { "enable": true, "predicate": "spel:properties['appEmail:bcc']!=null", "type": "dms.response.objects.search", "url": <any suitable endpoint>, "useDiscovery": true }
If objects in a search result have the appEmail:bcc
property and the first webhook removes this property from the objects, the predicate of the second webhook still matches.
The same behavior holds for the webhook type dms.response.objects
and one of its sub-webhook types dms.response.objects.*
:
{ "enable": true, "predicate": "spel:true", "type": "dms.response.objects", "url": <suitable endpoint removing the property 'appEmail:bcc'>, "useDiscovery": true }, { "enable": true, "predicate": "spel:properties['appEmail:bcc']!=null", "type": "dms.response.objects.search", "url": <any suitable endpoint>, "useDiscovery": true }
Configuring Webhooks
As a type of system hooks, webhooks are configured in the \service-manager\config\system\systemHookConfiguration.json
configuration file within the service manager in JSON format. Any changes to the system hook configuration will not apply until the affected services have been restarted.
>> systemHookConfiguration.json
Summary
This article gave an overview of the webhook types that are available in yuuvis® Momentum. Check out the "Preprocessing Metadata using Webhooks" tutorial for an example application which shows different webhook types.