Webhooks
Viafoura supports third-party services to receive audience engagement events in near real-time. Business intelligence and reporting dashboards can be enriched and empower your staff with insights into the real-time activity of your audience as they engage with content and each other.
You will need to:
- Configure an endpoint and provide the API path
- Provide us with an Authentication header we can pass to your API to let you know it's coming from us
Please contact your client success representative with this information and they will get this set up with you.
Webhooks Details
Security
Note that:
_The service will be available over SSL (https) using a valid certificate
_Viafoura application will use the certificate for both Authentication and Authorization
Conversation Pattern
The conversation between client and server will be Fire and Forget.
RESTful Service Specification
Request
_Scheme: https
_URL: will be provided by you to your CS representative
*HTTP Method: POST
Parameters
Request Headers
Header name | Description |
---|---|
x-request-id | Random request ID provided by viafoura on each HTTP request, the value is the same as “request_uuid” in the request body |
authorization | At least 64 bytes, hexadecimal. Please provide this to your CS representative |
content-type | application/json; charset=utf-8 |
accept | application/json |
Request Body
The request body is a JSON encoded string that follows the schema below:
Field | Type | Description |
---|---|---|
request_uuid | number | Same as “X-Request-ID” in header |
time | number | The time in milliseconds |
version | number | The current value is 1 |
events | array | Array of Event object |
Response
HTTP Status
A 200, 201 or 202 response code is expected in the HTTP response code. However third-party service can return other status codes to let our customer success team help with diagnosing possible issues in the integration.
Error Code | Description |
---|---|
404 | Not Found |
500 | Any internal error |
400 | Data is not valid |
200-201 | Request accepted |
403 | Authorization failed |
Response Body from Third Party Service
The expected response from the third party service will only be parsed if the following schema is used.
Field | Type | Description |
---|---|---|
request_uuid | string | request_id of corresponding request |
results | array | Array of Result objects |
Result object
Field | Type | Description |
---|---|---|
event_uuid | string | Event ID |
type | string | Either “success” or “failure” |
error_type | string | Arbitrary value |
error_description | string | Arbitrary value |
JSON Object Definitions
Event
The event objects will describe all information related to any state change in the Viafoura system. Depending on the message_type and action additional set of fields will be included for each event.
Event triggers
Message Type | Action | Trigger |
---|---|---|
livecomment_post | created | new comment created |
livecomment_post | visible | comment enabled after moderation |
livecomment_post | disabled | comment disabled by moderation or if the report (flag) threshold has been reached |
livecomment_post | updated | comment modified |
livecomment_post | liked | comment liked by a user |
livecomment_post | unliked | comment like reverted by a user |
livecomment_post | disliked | comment disliked by a user |
livecomment_post | undisliked | comment dislike reverted by a user |
livecomment_post | flagged | comment has been reported |
livecomment_post | spammed | comment was marked as spam by moderation |
livecomment_post | pinned | comment was pinned to the top |
livecomment_post | unpinned | comment was unpinned from the top |
livecomment_post | picked | comment was marked as "editor's pick" |
livecomment_post | unpicked | removed the "editor's pick" mark from the comment |
reply_to_livecomment_post | created | new comment reply created |
reply_to_livecomment_post | visible | comment reply enabled after moderation |
chat_message | created | chat message is created |
chat_message | visible | chat message is enabled after moderation |
chat_message | liked | chat message liked by a user |
chat_message | unliked | chat message like reverted by a user |
chat_message | disliked | chat message disliked by a user |
chat_message | undisliked | chat message dislike reverted by a user |
reply_to_chat_message | created | chat message reply is created |
reply_to_chat_message | visible | chat message reply is enabled after moderation |
liveblog_post | created | liveblog post is created |
liveblog_post | disabled | liveblog post disabled by admin |
liveblog_post | updated | liveblog post modified |
liveblog_post | liked | liveblog post liked by a user |
liveblog_post | unliked | liveblog post like reverted by a user |
liveblog_post | disliked | liveblog post disliked by a user |
liveblog_post | undisliked | liveblog post dislike reverted by a user |
liveblog_post | picked | liveblog post was marked as "editor's pick" |
liveblog_post | unpicked | removed the "editor's pick" mark from the liveblog post |
liveblog_post | pinned | liveblog post was pinned to the top |
liveblog_post | unpinned | liveblog post was unpinned from the top |
livereview_post | created | new review was created |
livereview_post | visible | review enabled after moderation |
livereview_post | disabled | review disabled due to moderation |
livereview_post | updated | review edited/changed |
livereview_post | liked | review marked as helpful by a user |
livereview_post | unliked | review marked as not helpful by a user |
livereview_post | disliked | review unmarked as helpful by a user |
livereview_post | undisliked | review unmarked as not helpful by a user |
livereview_post | flagged | review has been reported |
livereview_post | spammed | review marked as spam |
livereview_post | pinned | review pinned to the top |
livereview_post | unpinned | review unpinned from top |
livereview_post | picked | review marked as "editors pick" |
livereview_post | unpicked | removed the "editor's pick" mark from the review |
reply_to_livereview_post | created | a reply to a review was created |
reply_to_livereview_post | visible | review reply enabled after moderation |
Event fields
Field | Type | Description |
---|---|---|
event_uuid | string | Event ID |
time | number | The time in milliseconds |
message_type | string | livecomment_post reply_to_livecomment_post liveblog_post chat_message reply_to_chat_message |
action | created visible disabled updated liked unliked disliked undisliked flagged spammed pinned unpinned picked unpicked | |
content_uuid | string | id of the content item that was interacted on |
actor_uuid | string | id of the user or actor who caused the interaction (this could be internal ids in the case of moderation events) |
author_uuid | string | id of the user who created the content (e.g. the author of the comment) |
content_container_uuid | string | id of the content container that was interacted on |
section_uuid | string | id of the viafoura section where the action occurred |
page_url | string | a full URL in which the action occurred |
Example
Request
{
request_uuid: 'abcc2254-b0a4-492c-a8f2-ae7820f4968a',
time: 1593205167183,
version: 1,
events:
[
{ event_uuid: '99d2a532-e1a1-4455-834a-775148570e9d',
time: 1593205166938,
section_uuid: '00000000-0000-4000-8000-337a437adec1',
content_container_uuid: '0dc371b9-cecd-4dc3-954b-e5255794e2e7',
content_uuid: 'bf890170-4828-4d1d-a1b0-a0072a6117d3',
actor_uuid: '00000000-0000-4000-8000-017ea245f200',
author_uuid: '00000000-0000-4000-8000-485fe358a524',
message_type: 'livecomment_post',
page_url: 'https://action.click/livecomments/actioncomments.html',
action: 'liked'
}
]
}
Response
{
"request_uuid": "c71b5cb1-ce44-4239-8b6e-87b99cf2b1f0",
"results": [
{
"event_uuid":"c71b5cb1-ce44-4239-8b6e-87b99cf2b1a0",
"type": "failure",
"error_type": "unknown",
"error_description": "unable to store"
},
{
"event_uuid":"dd519c8a-3619-4cb0-b31b-0ffd14d24aab",
"type": "success"
},
{
"event_uuid":"d8a6a231-0cef-4385-83d8-66b6160811a5",
"type": "success"
},
{
"event_uuid":"5c0c5ab3-f3be-4194-bfc5-2000f94665ad",
"type": "success"
}
]
}
Integration Testing
- Sign up for RequestBin which is a free Webhook testing platform.
- Pipedream will provide a public callback URL which you need to configure in Viafoura Admin → General → Notifications for the site you want to test as shown below.
- You will also need to get your API key from your pipe dream account by going to your Pipedream Account Settings page.
- In Viafoura Admin → General → Notifications under the server-to-server callback authorization header parameter, configure the Pipedream API Key as ‘Bearer [API Key]’ as shown below.
- Contact your Viafoura Customer Success Manager to enable Server-to-Server callbacks for your domain.
Done! Now when you perform actions that trigger webhook messages on the site you configured you will see the Webhook messages in Pipdream under the page for the Requestbin you created.
Updated about 16 hours ago