Webhook v2.0.0
On visitor action (such as clicking on a choice, scoring, input...) Screeb can send a request to an external platform, containing the response data.
Entities
- Organization: A Screeb account, shared by many Screeb users of your company
- Channel: A distribution channel for your survey (Javascript SDK, Android SDK, iOS SDK...)
- Survey
- Survey scenario: A versioned survey: on survey update, your flow is saved in a new scenario. New users will see the last scenario.
- User: Information about the visitor
- Response: A response is a chain of question+answers. A user sometimes has many responses to a single survey.
- Question
- Answer: An answer is part of a response. Each answer is associated with a question.
- Field: An answer may have many fields (eg: multiple choices question)
Hook types
You can trigger webhooks on 3 different events:
- On survey display: a survey is shown to visitors, but no question is replied. You will get notified even if no response is given.
- On question answered: a question has been replied. This webhook will be triggered for each question of a single survey.
- On response end: a survey has been closed or fully replied to by the user.
Errors
On large synchronization order, the webhook destination may reply to Screeb with a 429 HTTP error (rate limiting). Screeb will resend these messages many times, with exponential delay.
Migrate from v1.3.0
- Each
correlation_id
has been renamedid
, and the previousid
property is not available anymore. payload.respondent
has been renamedpayload.user
payload.response.answer.field
has been converted into a array:payload.response.answer.fields
Example payload
Webhooks deliver the responses to your surveys in JSON format, via a POST HTTP request. Here is a typical webhook payload:
{
"event_id": "64c7ea3b-827b-4679-b25d-7fd61f6c3d33",
"event_type": "response.ended",
"version": "2.0.0",
"time": "2021-07-29T13:45:09.325344042Z",
"time_ms": 1627566309325,
"payload": {
"organization": {
"id": "b5969d13-5e5e-4648-9806-5339ddafd984",
"name": "ACME"
},
"channel": {
"id": "411ee7c3-7e64-409f-9d75-c782b3f73aa4",
"type": "android"
},
"survey": {
"id": "9b913c69-3daf-4a6e-a26d-042004fc7881",
"name": "Measure NPS",
"scenario_id": "cc4a3710-e8ee-4672-a35c-5c17485ec441",
"scenario_version": 9,
"scenario_time": "2021-07-29T00:08:31.069497Z",
"scenario_time_ms": 1627517311069
},
"user": {
"anonymous_id": "2eb83fb4-b1b3-4e48-be48-a8fd9c4e5a7d",
"user_id": "[email protected]",
"name": "Samuel Berthe",
"email": "[email protected]",
"group_names": ["Screeb", "10-100-companies", "plan-enterprise"]
},
"response": {
"id": "5854a797-628c-4906-bb4c-da03e418cf47",
"locale": "en-US",
"time": "2021-07-29T13:44:59.831Z",
"time_ms": 1627918228831,
"time_to_complete_second": 34,
"completion": "fully_completed",
"hidden_fields": {
"firstname": "Samuel",
"lastname": "Berthe",
"email": "[email protected]",
"locale": "en-US",
"support": "desktop",
"timezone": -120,
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...."
},
"question": {
"id": "a44252c3-ef3d-4156-90d6-a3d6364516c0",
"type": "input",
"title": "How can we improve your experience?"
},
"answer": {
"fields": [
{
"id": "c71dfe9d-6b47-452f-bda2-6091c13561b0",
"type": "string",
"value": "The new dashboard is buggy.",
"text": "The new dashboard is buggy.",
"number": null,
"boolean": null,
"time": null
}
],
"replied_at": "2021-07-29T13:45:09.286Z",
"replied_at_ms": 1627566309286,
"tags": ["screeb", "feedback"]
},
"tags": ["screeb", "feedback"],
"items": [
{ "question": {...}, "answer": {...} },
{ "question": {...}, "answer": {...} },
{ "question": {...}, "answer": {...} }
]
}
}
}
Spec
Current version: 2.0.0
When the destination server replies with a 4xx or 5xx status code, Screeb platform sends a new request after 60s (once).
Metadata
Field | Type | Optional | description |
---|---|---|---|
event_id | uuid | No | Unique id for this event (same id in retry request) |
event_type | enum: response.displayed , response.answered or response.ended | No | Type of event sent over webhook |
time | Date | No | Date of event |
time_ms | long | No | Timestamp of event in millisecond |
version | string | No | Semver version of the webhook payload |
payload | <Payload> | No | See "Payload" section |
Payload
Field | type | Optional | description |
---|---|---|---|
organization | Organization | No | Organization details |
channel | Channel | No | Channel details |
survey | Survey | No | Survey details |
user | User | No | User details |
response | Response | No | Response details |
Organization
Field | type | Optional | description |
---|---|---|---|
id | uuid | No | Unique identifier for the organization |
name | string | No | Name of the Screeb account |
Channel
Field | type | Optional | description |
---|---|---|---|
id | uuid | No | Unique identifier for the channel |
type | string | No | Channel type (widget, android, ios, hosted-page...) |
Survey
Field | type | Optional | description |
---|---|---|---|
id | uuid | No | Unique identifier for the survey |
name | string | No | Name of the survey |
scenario_id | string | No | Unique identifier for the survey scenario |
scenario_version | int | No | Version number of the survey scenario |
scenario_time | Date | No | Date of the scenario edition |
scenario_time_ms | int | No | Timestamp of the scenario edition (millisecond) |