Webhooks
If you wish to receive notifications outside witboost you can setup a webhook. Webhook is a notification channel that can be used to deliver notifications through an HTTP POST request to a target URL.
Configuring a webhook
Webhooks can be configured by accessing the notifications.webhooks
table in the core database.
Each row of the webhooks
table represents all the needed details of a webhook to receive notifications.
The webhooks
table has the following columns:
uuid
: a UUID that uniquely identifies the webhook within this table.url
: the target URL that will receive the HTTP POST request with the notification.headers
: optional list of headers to embed into the HTTP POST request headers section.
To create setup a new webhook, what you have to do is:
- Generate a UUID v4, you can use
uuidgen
from your command-line or use any online tool - Make an insert SQL statement:
INSERT INTO
notifications.webhooks(
uuid,
url,
headers
)
VALUES
(
'<your UUID v4>',
'<your webhook URL>',
'{}'
)
Optionally, you can leverage Hasura, either with its embedded data editor or by making a GraphQL mutation:
mutation InsertWebhook {
insert_notifications_webhooks_one(
object: {
uuid: "<your generated UUID>"
url: "<URL where to send the notification>"
headers: "<optional headers>"
}
)
}
Make sure that you are tracking the webhooks
table and its relationships inside your Hasura instance, otherwise the above GraphQL mutation won't work.
Next, you have to bind your webhook to the notifications that you wish to receive. To do so, you will need to insert those bindings into the notifications.webhooks_notifications
table.
These are the steps:
- Execute this SQL statement:
INSERT INTO
notifications.webhooks_notifications(
webhook_uuid,
notification_kind,
enabled
)
VALUES
(
'<your webhook UUID>',
'<the notification kind that your webhook should receive>',
true/false
)
Optionally, you can leverage Hasura, either with its embedded data editor or by making a GraphQL mutation:
mutation InsertWebhook {
insert_notifications_webhooks_notifications_one(
object: {
webhook_uuid: "<your webhook UUID>"
notification_kind: "<the notification kind that your webhook should receive>"
enabled: true/false
}
)
}
Make sure that you are tracking the webhooks_notifications
table and its relationships inside your Hasura instance, otherwise the above GraphQL mutation won't work.
Forwarding user entity fields
By default, the webhook channel will forward a list of user entity references within the notification. Those references can be used to fetch user data from the witboost catalog. However, if you want to receive additional information about users without the need of contacting the witboost catalog, you can provide a set of user entities fields to be retrieved before sending the notification to your webhook's URL.
To setup the fields that you want to receive about a user entity, add the notifications.webhooks.userEntityFields
property in your app-config.yaml
:
notifications:
webhooks:
userEntityFields: [
'metadata.name',
'metadata.namespace',
'kind',
'spec.email',
] # this is just an example of fields that you can parse from a user entity, but this strictly depends on your witboost instance
The resulting user entities, all shaped the same way according to your configuration, will be attached to the webhook notification. If any user reference or configured field results to be invalid or empty, will be filled with a null
value.
Take a look at the JSON schema to learn more about the shape of these notifications
The payload can get very large if you select a considerable amount of fields and the recipient type has a lot of recipients (e.g. this could happen with the all witboost users recipient type). So pay attention not to overload the notification body.
Moreover, if you misconfigured the list of fields, the recipientsEntities
field will contain less recipients than the ones listed in the recipients
field.
JSON Schema
Your configured webhook is going to receive a POST HTTP request with the following JSON body:
The messages
section can be leveraged to send a dedicated text message to a specific audience. If instead you need to craft a different message, you can construct your notification by using the notification body
field.
Each notification body
is different and can vary among each notification kind. Head to the All notifications section to know about a specific notification body schema.
The recipients
field can be enriched with additional user information if you configure what said in the section above: Forwarding user entity fields.