Webhooks
Use Webhooks to send information to external systems when a new event has occurred in CXM.
Currently the following events can trigger a webhook:
Configuring webhooks
Navigate to Settings > System > Webhooks
to see a list of the webhooks configured in the system.
This table is searchable, and shows the webhook Name
, whether its Status
is enabled or disabled,
the number of Triggers
for the webhook, and links to perform Actions
for each webhook.
We will explain this in more detail in the following sections.
In order to create a new webhook, click on New Webhook
and enter the values for the fields.
The
Name
is used to identify the webhook.The target
URL
is the location where the data will be sent to. Needs to be a valid URL using HTTPS.The
Secret
will need to be known by the external system in order to verify the request, this should not be shared anywhere else.The
Enabled
switch can be used to enable or disable sending of webhook requests. Requests will not be queued up whilst the webhook is disabled.The webhook will send requests whenever any of the selected
Event triggers
occur.
In order to edit an existing webhook, click on its name in the list and, under the General
tab,
edit the fields as needed.
Click on Delete
to permanently remove the webhook from the system.
Under the Event Triggers
tab, there is a list of the triggers for the webhook.
This list shows the name of the Trigger
and its Payload version
,
and contains links to perform Actions
for each trigger.
Existing event triggers can be removed by clicking Delete
,
and new event triggers can be added by clicking Add Event Triggers
.
Webhook Event Triggers
When any of the events described in this section occur in CXM, the webhooks configured to do so, will be triggered. This means that a HTTP request will be sent to the target URL specified for the webhook, including specific headers and the corresponding data payload, as described below.
Delivery request time limits
When CXM attempts to deliver a webhook, the time to establish the initial TCP connection to your application's web
server is limited to 1 second and the overall request time is limited to 15 seconds. If either of these time limits are
exceeded the webhook delivery will be marked and logged as error
, and will be retried as described in the
errors section.
Once either of these time limits has been exceeded, CXM will no longer wait for a response from your application's web server, successful or not. In case your application continues to process the request, it is important to record the webhook's delivery ID to prevent your application from processing the same delivery more than once.
HTTP Headers
Every webhook request from CXM contains the following headers.
- User-Agent:
Standard header with the value"Jadu CXM Webhook"
. It allows the external system to identify CXM as the requesting software agent. [Read more] - Content-Type:
Standard header with the value"application/json"
. It tells the external system that the payload content is JSON. [Read more] - X-Hook-Delivery:
Custom header with the value"{uuid}"
, where{uuid}
is the universally unique identifier for each webhook delivery, which is displayed in the Webhook Log. - X-Hook-Event:
Custom header with the value"{type}"
, where{type}
is the type of the main entity the webhook relates to (e.g."user"
or"case"
). - X-Hook-Signature:
Custom header with the value"sha1={hash}"
, where{hash}
is a keyed hash of the payload. It allows the external system to confirm that the request actually comes from CXM.
The hash is generated using the HMAC method, SHA-1 algorithm, and the webhook secret as the encryption key. For example, if the payload is{"data": "The webhook data..."}
and the webhook secret iss3cr3t
, the resulting value for the header will be"sha1=db0b02a84d83e82526d1d14cdd42652cc217536e"
.
Data payload
The data for the webhook event trigger is sent as the request body, in JSON format.
All webhook requests will be a JSON object, including always the keys action
(with the name of the event) and
version
(with the version of the payload), and then one or more keys for the entities related to the event.
For example, for the Case created
event, CXM will send something like:
{
"version": 1,
"action": "case_created",
"case": {...},
"created_by": {...}
}
It is guaranteed that a given webhook will always send the data payload with the same JSON structure for a given event in a given version. However, following JSON specification, the order of the entries might vary.
Types of events
Attachment added
Triggered when a new file is added to a case, either attached to a timeline message,
or uploaded directly from the Files
tab.
Note: for security reasons, the
download_url
included in the webhook payload is only available for a short period of time, specified in thedownload_url_expiry
date.
After that time, the Get Attachment by Identifier Service API endpoint can be used to fetch the attachment again, which will include a fresh download URL. The Service API endpoint URL is built using the case reference and the attachment identifier from the webhook payload, like/case/{reference}/attachment/{identifier}
.
Example payload:
{
"action": "attachment_added",
"version": 1,
"added_by": {
"email": "john.smith@test.com",
"name": "John Smith",
"reference": "123"
},
"attachment": {
"description": "The description of the attachment.",
"file_name": "some_picture.jpeg",
"mime_type": "image/jpeg",
"size": 1024,
"identifier": "555",
"download_url": "http://attachment.test",
"download_url_expiry": "2020-02-02T14:32:25+00:00"
},
"case": {
"type": {
"slug": "my_case_type",
"title": "My case type"
},
"reference": "ABC000123"
}
}
User created
Triggered whenever a user record is created, for example when creating it manually from the User Administration
tab,
or when a user signs up using public registration.
Example payload:
{
"version": 1,
"action": "create",
"user": {
"created_at": "2019-01-01T01:00:00+00:00",
"email": "john.smith@test.com",
"email_verified": true,
"enabled": true,
"forename": "John",
"group": {
"slug": "the-user-group",
"title": "The User Group"
},
"id": 123,
"incomplete": false,
"name": "John Smith",
"photo": "http:\/\/user-photo.test",
"privilege_level": {
"slug": "the-user-role",
"title": "The User Role"
},
"reference": "r3f3r3nc3",
"surname": "Smith",
"timezone": "Europe\/London",
"type": {
"slug": "the-user-type",
"title": "The User Type"
},
"updated_at": "2019-02-02T02:00:00+00:00"
}
}
User updated
Triggered when the details of a user are changed, either by someone else on the User Administration
tab,
or by themselves using My Details
form.
Example payload:
{
"version": 1,
"action": "update",
"user": {
"created_at": "2019-01-01T01:00:00+00:00",
"email": "john.smith@test.com",
"email_verified": true,
"enabled": true,
"forename": "John",
"group": {
"slug": "the-user-group",
"title": "The User Group"
},
"id": 123,
"incomplete": false,
"name": "John Smith",
"photo": "http:\/\/user-photo.test",
"privilege_level": {
"slug": "the-user-role",
"title": "The User Role"
},
"reference": "r3f3r3nc3",
"surname": "Smith",
"timezone": "Europe\/London",
"type": {
"slug": "the-user-type",
"title": "The User Type"
},
"updated_at": "2019-02-02T02:00:00+00:00"
}
}
Case created
Triggered when a new case is created, directly using a form inside CXM, or from an external system through a Service API.
Note: currently cases created through the Case Import functionality do not trigger this event.
Example payload:
{
"action": "case_created",
"version": 1,
"case": {
"address_relationships": [
{
"address": {
"administrative_area": "addr_admin_area",
"custom": false,
"easting": 5000,
"external_reference": "ADD123_EXTERNAL",
"locality": "addr_locality",
"northing": 6000,
"paon": "addr_paon",
"post_code": "LE191RJ",
"post_town": "Leicester (post town)",
"reference": "ADD123",
"saon": "addr_saon",
"street": "Leicester Street",
"summary": "Addr_saon, Addr_paon, Leicester Street, Addr_locality, Leicester (town), Leicester (post Town), LE191RJ",
"town": "Leicester (town)",
"type": "property",
"uprn": "addr_uprn-123",
"usrn": "addr_usrn-123"
}
}
],
"status": {
"slug": "start",
"title": "Start",
"type": "initial"
},
"type": {
"service": {
"slug": "my_case_type_service",
"title": "My case type service"
},
"slug": "my_case_type",
"title": "My case type"
},
"values": {
"checkbox_field_a": {
"type": "checkbox",
"name": "checkbox_field_a",
"redacted": false,
"value": true
},
"checkbox_field_b": {
"type": "checkbox",
"name": "checkbox_field_b",
"redacted": false,
"value": false
},
"choices_field_a": {
"type": "choice",
"name": "choices_field_a",
"redacted": false,
"value": [
"choice_b",
"choice_a"
]
},
"choice_field_a": {
"type": "choice",
"name": "choice_field_a",
"redacted": false,
"value": "choice_b"
},
"date_time_field_a": {
"type": "datetime",
"name": "date_time_field_a",
"redacted": false,
"value": "2019-10-20T14:31:32+00:00"
},
"date_field_a": {
"type": "date",
"name": "date_field_a",
"redacted": false,
"value": "2019-10-09"
},
"encrypted_textarea_field_a": {
"type": "textarea",
"name": "encrypted_textarea_field_a",
"redacted": false,
"value": "my encrypted textarea value"
},
"encrypted_text_field_a": {
"type": "text",
"name": "encrypted_text_field_a",
"redacted": false,
"value": "my encrypted text value"
},
"textarea_field_a": {
"type": "textarea",
"name": "textarea_field_a",
"redacted": false,
"value": "my textarea value"
},
"text_field_a": {
"type": "text",
"name": "text_field_a",
"redacted": false,
"value": "my text value"
},
"url_field_a": {
"type": "url",
"name": "url_field_a",
"redacted": false,
"value": "https://jadu.net"
},
"text_field_redacted": {
"type": "text",
"name": "text_field_redacted",
"redacted": true,
"value": null
}
},
"created_at": "2019-10-09T13:10:10+00:00",
"organisation_relationships": [
{
"organisation": {
"address": {
"administrative_area": "org_admin_area",
"custom": false,
"easting": 5000,
"external_reference": "ORG123_EXTERNAL",
"locality": "org_locality",
"northing": 6000,
"paon": "org_paon",
"post_code": "LE191RJ",
"post_town": "Leicester (post town)",
"reference": "ADD123",
"saon": "org_saon",
"street": "Leicester Street",
"summary": "Org_saon, Org_paon, Leicester Street, Org_locality, Leicester (town), Leicester (post Town), LE191RJ",
"town": "Leicester (town)",
"type": "property",
"uprn": "org_uprn-123",
"usrn": "org_usrn-123"
},
"name": "Acme Inc",
"reference": "ORG123"
}
}
],
"person_relationships": [
{
"person": {
"addresses": [
{
"administrative_area": "addr_admin_area",
"custom": false,
"easting": 5000,
"external_reference": "ADD123_EXTERNAL",
"locality": "addr_locality",
"northing": 6000,
"paon": "addr_paon",
"post_code": "LE191RJ",
"post_town": "Leicester (post town)",
"reference": "ADD123",
"saon": "addr_saon",
"street": "Leicester Street",
"summary": "Addr_saon, Addr_paon, Leicester Street, Addr_locality, Leicester (town), Leicester (post Town), LE191RJ",
"town": "Leicester (town)",
"type": "property",
"uprn": "addr_uprn-123",
"usrn": "addr_usrn-123"
},
{
"administrative_area": "addr_admin_area",
"custom": false,
"easting": 5000,
"external_reference": "ADD123_EXTERNAL",
"locality": "addr_locality",
"northing": 6000,
"paon": "addr_paon",
"post_code": "LE191RJ",
"post_town": "Leicester (post town)",
"reference": "ADD123-2",
"saon": "addr_saon",
"street": "Leicester Street",
"summary": "Addr_saon, Addr_paon, Leicester Street, Addr_locality, Leicester (town), Leicester (post Town), LE191RJ",
"town": "Leicester (town)",
"type": "property",
"uprn": "addr_uprn-123",
"usrn": "addr_usrn-123"
}
],
"email": "bob@test.com",
"name": "Bob Bartholomew Leopold Tester",
"primary_address": {
"administrative_area": "addr_admin_area",
"custom": false,
"easting": 5000,
"external_reference": "ADD123_EXTERNAL",
"locality": "addr_locality",
"northing": 6000,
"paon": "addr_paon",
"post_code": "LE191RJ",
"post_town": "Leicester (post town)",
"reference": "ADD123",
"saon": "addr_saon",
"street": "Leicester Street",
"summary": "Addr_saon, Addr_paon, Leicester Street, Addr_locality, Leicester (town), Leicester (post Town), LE191RJ",
"town": "Leicester (town)",
"type": "property",
"uprn": "addr_uprn-123",
"usrn": "addr_usrn-123"
},
"reference": "PER123"
}
}
],
"reference": "CASE12345678",
"updated_at": "2019-10-09T19:10:11+00:00"
},
"created_by": {
"email": "john.bobson@cxmtest.com",
"group": {
"slug": "my_user_group",
"title": "My user group"
},
"name": "John Bobson",
"person": {
"addresses": [
{
"administrative_area": "addr_admin_area",
"custom": false,
"easting": 5000,
"external_reference": "ADD123_EXTERNAL",
"locality": "addr_locality",
"northing": 6000,
"paon": "addr_paon",
"post_code": "LE191RJ",
"post_town": "Leicester (post town)",
"reference": "CREATING_USER_ADDR_123",
"saon": "addr_saon",
"street": "Leicester Street",
"summary": "Addr_saon, Addr_paon, Leicester Street, Addr_locality, Leicester (town), Leicester (post Town), LE191RJ",
"town": "Leicester (town)",
"type": "property",
"uprn": "addr_uprn-123",
"usrn": "addr_usrn-123"
},
{
"administrative_area": "addr_admin_area",
"custom": false,
"easting": 5000,
"external_reference": "ADD123_EXTERNAL",
"locality": "addr_locality",
"northing": 6000,
"paon": "addr_paon",
"post_code": "LE191RJ",
"post_town": "Leicester (post town)",
"reference": "CREATING_USER_ADDR_123-2",
"saon": "addr_saon",
"street": "Leicester Street",
"summary": "Addr_saon, Addr_paon, Leicester Street, Addr_locality, Leicester (town), Leicester (post Town), LE191RJ",
"town": "Leicester (town)",
"type": "property",
"uprn": "addr_uprn-123",
"usrn": "addr_usrn-123"
}
],
"email": "bob@test.com",
"name": "Bob Bartholomew Leopold Tester",
"primary_address": {
"administrative_area": "addr_admin_area",
"custom": false,
"easting": 5000,
"external_reference": "ADD123_EXTERNAL",
"locality": "addr_locality",
"northing": 6000,
"paon": "addr_paon",
"post_code": "LE191RJ",
"post_town": "Leicester (post town)",
"reference": "CREATING_USER_ADDR_123",
"saon": "addr_saon",
"street": "Leicester Street",
"summary": "Addr_saon, Addr_paon, Leicester Street, Addr_locality, Leicester (town), Leicester (post Town), LE191RJ",
"town": "Leicester (town)",
"type": "property",
"uprn": "addr_uprn-123",
"usrn": "addr_usrn-123"
},
"reference": "PER123"
},
"privilege_level": {
"slug": "my_privilege_level",
"title": "My privilege level"
},
"reference": "USR123",
"type": {
"slug": "my_user_type",
"title": "My user type"
}
}
}
Case transitioned
Triggered when a new case is transitioned, directly from inside CXM, or from an external system through a Service API. If the transition has a case form attached, the payload will contain the new values set with this form.
Note: The
transitioned_by
property will benull
if the case was transitioned by a rule action.
Example payload:
{
"action": "case_transitioned",
"version": 1,
"case": {
"address_relationships": [],
"status": {
"slug": "in_progress",
"title": "In progress",
"type": "normal"
},
"type": {
"service": {
"slug": "my_case_type_service",
"title": "My case type service"
},
"slug": "my_case_type",
"title": "My case type"
},
"values": {
"choice_field_a": {
"type": "choice",
"name": "choice_field_a",
"redacted": false,
"value": "choice_b"
},
"text_field_a": {
"type": "text",
"name": "text_field_a",
"redacted": false,
"value": "my text value"
}
},
"created_at": "2019-10-09T13:10:10+00:00",
"organisation_relationships": [],
"person_relationships": [],
"reference": "CASE12345678",
"updated_at": "2019-10-09T19:10:11+00:00"
},
"transition": {
"slug": "start",
"title": "Start"
},
"transitioned_by": {
"email": "john.bobson@cxmtest.com",
"name": "John Bobson",
"reference": "USR123"
},
"previous_status": {
"slug": "open",
"title": "Open",
"type": "initial"
},
"new_status": {
"slug": "in_progress",
"title": "In progress",
"type": "normal"
}
}
Rule action
The Rule action
webhook trigger allows a webhook to be sent using a rule. By adding a Trigger webhook
action to a
rule and selecting a webhook, the webhook will be sent when the rule is triggered for a case, and the rule's
conditions are met.
The initiated_by
property is the user that performed the action which triggered the rule. If it was one of the following
system triggers, Time in Status
, Date
, Date and time
, then initiated_by
will be set as null
.
Note: If a webhook is in use by a rule, neither the webhook nor the
Rule action
event can be deleted.
Rule triggers and trigger contexts
The context surrounding what triggered the rule will be encapsulated as a context
object within the payload. The structure
of the context object depends on the type of rule trigger. Not all triggers include a context, so this will be
set to null
if there is none.
Case field changed
{
…
"context": {
"original_value": {
"type": "text",
"name": "text_field_a",
"redacted": false,
"value": "my text value"
},
"updated_value": {
"type": "text",
"name": "text_field_a",
"redacted": false,
"value": "my new text value"
}
},
"trigger": {
"type": "field_changed",
"field": {
"slug": "text_field_a",
"type": "text",
"title": "Text field A"
}
},
…
}
Date
{
…
"context": null,
"trigger": {
"type": "date",
"date_definition": {
"based_on": "case_created_at",
"delta": "+1 day",
"slug": "my_date",
"title": "My date"
}
},
…
}
If the date definition is based on a case field, then the trigger
object will include a field
property:
{
…
"trigger": {
"type": "date",
"date_definition": {
"based_on": "case_field",
"delta": "+1 day",
"field": {
"slug": "date_field_a",
"type": "date",
"title": "My date field"
},
"slug": "my_date",
"title": "My date"
}
},
…
}
Date and Time
{
…
"context": null,
"trigger": {
"type": "date_time",
"trigger_at": "2020-01-01T01:30:00+00:00"
},
…
}
Event - Case created
{
…
"context": null,
"trigger": {
"type": "event",
"event": "case.created"
},
…
}
Event - New attachment
{
…
"context": {
"attachment": {
"file_name": "a_picture.jpeg",
"description": "This is a picture.",
"identifier": "555",
"mime_type": "image\/jpeg",
"size": 1024,
"download_url": "http:\/\/attachment.test",
"download_url_expiry": "2020-02-02T20:02:20+02:00"
}
},
"trigger": {
"type": "event",
"event": "case.attachment.new"
},
…
}
Event - Message sent/Message reply sent
Note: This context structure is identical for both of these triggers, but note that
trigger.event
iscase.message.new
orcase.message.reply
respectively.
{
…
"context": {
"message": {
"created_at": "2020-01-01T01:30:00+00:00",
"recipients": [
{
"type": "user",
"user": {
"email": "john.testersson@test.com",
"group": {
"slug": "webhooks-group",
"title": "Webhooks Group"
},
"name": "John Testersson",
"privilege_level": {
"slug": "webhook-manager-role",
"title": "Webhook Manager Role"
},
"reference": "123",
"type": {
"slug": "webhooks-user-type",
"title": "Webhooks User Type"
}
}
},
{
"type": "user_group",
"user_group": {
"slug": "webhooks-group",
"title": "Webhooks Group"
}
},
{
"type": "user_type",
"user_type": {
"slug": "webhooks-user-type",
"title": "Webhooks User Type"
}
}
]
}
},
"trigger": {
"type": "event",
"event": "case.message.reply"
},
…
}
Event - New note
{
…
"context": {
"note": {
"created_at": "2020-01-01T01:30:00+00:00"
}
},
"trigger": {
"type": "event",
"event": "case.note.new"
},
…
}
Event - Membership added/Membership removed
Note: This context structure is identical for both of these triggers, but note that
trigger.event
iscase.membership.added
orcase.membership.removed
respectively.
{
…
"context": {
"membership": {
"type": "user",
"user": {
"email": "john.testersson@test.com",
"group": {
"slug": "webhooks-group",
"title": "Webhooks Group"
},
"name": "John Testersson",
"privilege_level": {
"slug": "webhook-manager-role",
"title": "Webhook Manager Role"
},
"reference": "123",
"type": {
"slug": "webhooks-user-type",
"title": "Webhooks User Type"
}
}
}
},
"trigger": {
"type": "event",
"event": "case.membership.added"
},
…
}
Time in status
{
…
"context": null,
"trigger": {
"type": "time_in_status",
"status": {
"slug": "start",
"title": "Start",
"type": "initial"
},
"minutes": 10
},
…
}
Transition applied
{
…
"context": {
"previous_status": {
"slug": "start",
"title": "Start",
"type": "initial"
},
"new_status": {
"slug": "end",
"title": "End",
"type": "final"
}
},
"trigger": {
"type": "transition",
"transition": {
"slug": "progress",
"title": "Progress"
}
},
…
}
Example payload:
{
"action": "rule_action",
"version": 1,
"case": {
"address_relationships": [
{
"address": {
"administrative_area": "addr_admin_area",
"custom": false,
"easting": 5000,
"external_reference": "ADD123_EXTERNAL",
"locality": "addr_locality",
"northing": 6000,
"paon": "addr_paon",
"post_code": "LE191RJ",
"post_town": "Leicester (post town)",
"reference": "ADD123",
"saon": "addr_saon",
"street": "Leicester Street",
"summary": "Addr_saon, Addr_paon, Leicester Street, Addr_locality, Leicester (town), Leicester (post Town), LE191RJ",
"town": "Leicester (town)",
"type": "property",
"uprn": "addr_uprn-123",
"usrn": "addr_usrn-123"
}
}
],
"status": {
"slug": "start",
"title": "Start",
"type": "initial"
},
"type": {
"service": {
"slug": "my_case_type_service",
"title": "My case type service"
},
"slug": "my_case_type",
"title": "My case type"
},
"values": {
"checkbox_field_a": {
"type": "checkbox",
"name": "checkbox_field_a",
"redacted": false,
"value": true
},
"checkbox_field_b": {
"type": "checkbox",
"name": "checkbox_field_b",
"redacted": false,
"value": false
},
"choices_field_a": {
"type": "choice",
"name": "choices_field_a",
"redacted": false,
"value": [
"choice_b",
"choice_a"
]
},
"choice_field_a": {
"type": "choice",
"name": "choice_field_a",
"redacted": false,
"value": "choice_b"
},
"choice_field_null": {
"type": "choice",
"name": "choice_field_null",
"redacted": false,
"value": null
},
"date_time_field_a": {
"type": "datetime",
"name": "date_time_field_a",
"redacted": false,
"value": "2019-10-20T14:31:32+00:00"
},
"date_field_a": {
"type": "date",
"name": "date_field_a",
"redacted": false,
"value": "2019-10-09"
},
"encrypted_textarea_field_a": {
"type": "textarea",
"name": "encrypted_textarea_field_a",
"redacted": false,
"value": "my encrypted textarea value"
},
"encrypted_text_field_a": {
"type": "text",
"name": "encrypted_text_field_a",
"redacted": false,
"value": "my encrypted text value"
},
"textarea_field_a": {
"type": "textarea",
"name": "textarea_field_a",
"redacted": false,
"value": "my textarea value"
},
"text_field_a": {
"type": "text",
"name": "text_field_a",
"redacted": false,
"value": "my text value"
},
"text_value_null_field": {
"type": null,
"name": "text_value_null_field",
"redacted": false,
"value": "my text value with null field"
},
"url_field_a": {
"type": "url",
"name": "url_field_a",
"redacted": false,
"value": "https://jadu.net"
},
"text_field_redacted": {
"type": "text",
"name": "text_field_redacted",
"redacted": true,
"value": null
}
},
"created_at": "2019-10-09T13:10:10+00:00",
"organisation_relationships": [
{
"organisation": {
"address": {
"administrative_area": "org_admin_area",
"custom": false,
"easting": 5000,
"external_reference": "ORG123_EXTERNAL",
"locality": "org_locality",
"northing": 6000,
"paon": "org_paon",
"post_code": "LE191RJ",
"post_town": "Leicester (post town)",
"reference": "ADD123",
"saon": "org_saon",
"street": "Leicester Street",
"summary": "Org_saon, Org_paon, Leicester Street, Org_locality, Leicester (town), Leicester (post Town), LE191RJ",
"town": "Leicester (town)",
"type": "property",
"uprn": "org_uprn-123",
"usrn": "org_usrn-123"
},
"name": "Acme Inc",
"reference": "ORG123"
}
}
],
"person_relationships": [
{
"person": {
"addresses": [
{
"administrative_area": "addr_admin_area",
"custom": false,
"easting": 5000,
"external_reference": "ADD123_EXTERNAL",
"locality": "addr_locality",
"northing": 6000,
"paon": "addr_paon",
"post_code": "LE191RJ",
"post_town": "Leicester (post town)",
"reference": "ADD123",
"saon": "addr_saon",
"street": "Leicester Street",
"summary": "Addr_saon, Addr_paon, Leicester Street, Addr_locality, Leicester (town), Leicester (post Town), LE191RJ",
"town": "Leicester (town)",
"type": "property",
"uprn": "addr_uprn-123",
"usrn": "addr_usrn-123"
},
{
"administrative_area": "addr_admin_area",
"custom": false,
"easting": 5000,
"external_reference": "ADD123_EXTERNAL",
"locality": "addr_locality",
"northing": 6000,
"paon": "addr_paon",
"post_code": "LE191RJ",
"post_town": "Leicester (post town)",
"reference": "ADD123-2",
"saon": "addr_saon",
"street": "Leicester Street",
"summary": "Addr_saon, Addr_paon, Leicester Street, Addr_locality, Leicester (town), Leicester (post Town), LE191RJ",
"town": "Leicester (town)",
"type": "property",
"uprn": "addr_uprn-123",
"usrn": "addr_usrn-123"
}
],
"email": "bob@test.com",
"name": "Bob Bartholomew Leopold Tester",
"primary_address": {
"administrative_area": "addr_admin_area",
"custom": false,
"easting": 5000,
"external_reference": "ADD123_EXTERNAL",
"locality": "addr_locality",
"northing": 6000,
"paon": "addr_paon",
"post_code": "LE191RJ",
"post_town": "Leicester (post town)",
"reference": "ADD123",
"saon": "addr_saon",
"street": "Leicester Street",
"summary": "Addr_saon, Addr_paon, Leicester Street, Addr_locality, Leicester (town), Leicester (post Town), LE191RJ",
"town": "Leicester (town)",
"type": "property",
"uprn": "addr_uprn-123",
"usrn": "addr_usrn-123"
},
"reference": "PER123"
}
}
],
"reference": "CASE12345678",
"updated_at": "2019-10-09T19:10:11+00:00"
},
"context": null,
"trigger": {
"type": "date",
"date_definition": {
"based_on": "case_created_at",
"delta": "+1 day",
"slug": "my_date",
"title": "My date"
}
},
"initiated_by": null
}
Webhook Log
For each webhook, under the Log
tab, there is a list of all the past requests for that webhook. Exploring this
list may be useful to identify issues in case the webhook is not configured correctly, or external system is
failing to process the webhook.
When an event occurs in CXM that triggers a webhook, one webhook delivery is generated with pending
status.
Then CXM tries to make a request with the webhook data to the external system, and if it receives a successful
response, it sets the status of the delivery as success
.
Errors
If the external system replies with a response status code other than 200, CXM will retry the request up to 7 more times
over a period of approximately 1.5 hours, after which the delivery status will be set as error
. All requests for the
same delivery will have the same delivery ID and data payload.
- The
Created
column shows the date when the webhook delivery was created, which is just after the event occurred in CXM. - The
Event type
column shows the type of event that triggered the webhook. - The
Status
column shows the current status of the delivery (which can bepending
,success
orerror
). - The
Delivery ID
column contains the universally unique identifier for the delivery, which is sent in the headers of the request. - The
Entity
column provides a link to the main entity related to the webhook delivery (e.g. a link to the case that was created or to the user record that was updated). - Clicking on the link in the
Details
column opens up a panel with extra information about the delivery.
On the details panel, the Info
section at the top contains the same details displayed on the list plus
the Last requested
date, which is the moment when CXM last tried to make the delivery, and the number of
Total attempts
tried.
The Last reponse
section contains details of the last response received from the external system the last time
CXM attempted to send the webhook request. This is just standard HTTP information such as the Response status
and the Headers
.
When the delivery is in pending
or error
status, the details panel also includes a Request
section at the bottom,
which contains the Body
of the last request made by CXM. This information is erased once the delivery is successful.