Forms configuration
id
- [string] uuid of formorgId
- [string] uuid of organizationlocale
- [string] locale which the form was created foravailableForAgents
- [boolean] determines whether agents can access and send the formname
- [string] name of the formconfig
- [object] configuration of the form's inputs (see input types below)expireInterval
- (optional)[number] - milliseconds after which the form can no longer be submittedsendInterval
- (optional)[number] - milliseconds after which the form can be sent againblockIfPreviousUnsubmitted
- (optional)[boolean] - determines whether the form can be sent if previous has not been submitted yetrouteOnSubmit
- (optional)[boolean] - determines whether submitting the form should result in opening and assignment of the conversationtagGroupId
- (optional)[string] uuid of tag group. Form will be available only in rooms with giventagGroupId
. Form with emptytagGroupId
available in any room
Use this form to collect information
radioButtonsInputs
- array of objects representing radio buttons inputmultipleButtonsInputs
- array of objects representing multiple buttons inputradioListInputs
- array of objects representing radio list inputcheckboxListInputs
- array of objects representing checkbox list inputtextInputs
- array of objects representing text input
multipleButtonsInputs

Mulitple buttons input
The input above is represented by the following object:
{
"index": 0,
"name": "conversation_expectation",
"displayName": "I expect the conversation to be:",
"buttons": [
{
"value": "quick",
"displayName": "Quick"
},
{
"value": "nice",
"displayName": "Nice & kind"
},
{
"value": "helpful",
"displayName": "Helpful"
}
]
}
radioButtonsInputs

Radio buttons input
The input above is represented by the following object:
{
"index": 1,
"name": "device_type",
"displayName": "I have a problem with my:",
"buttons": [
{
"value": "phone",
"displayName": "Phone"
},
{
"value": "laptop",
"displayName": "Laptop"
},
{
"value": "elbow",
"displayName": "Elbow"
}
]
}
radioListInputs

Radio list input
The input above is represented by the following object:
{
"index": 2,
"name": "timeline",
"displayName": "I have been a customer for:",
"options": [
{
"value": "under_six_months",
"displayName": "<= 6 months"
},
{
"value": "six_months_to_two_years",
"displayName": "<= 2 years"
},
{
"value": "longer",
"displayName": "> 2 years"
}
]
}
checkboxListInputs

Checkbox list input
The input above is represented by the following object:
{
"index": 3,
"name": "favorite_colors",
"displayName": "Colors I like:",
"options": [
{
"value": "white",
"displayName": "White"
},
{
"value": "black",
"displayName": "Black"
},
{
"value": "yellow",
"displayName": "Yellow"
}
]
}
textInputs

Text input
Inputs order in the form is determined by `index` property of representing object
{
"id": "0b05797b-a15b-42a5-96ec-XXXXXXXXXXXX",
"orgId": "95a25389-5b2f-4b43-a311-XXXXXXXXXXXX",
"locale": "en",
"config": {
"radioButtonsInputs": [
{
"index": 1,
"name": "device_type",
"displayName": "I have a problem with my:",
"buttons": [
{
"value": "phone",
"displayName": "Phone"
},
{
"value": "laptop",
"displayName": "Laptop"
},
{
"value": "elbow",
"displayName": "Elbow"
}
]
}
],
"multipleButtonsInputs": [
{
"index": 0,
"name": "conversation_expectation",
"displayName": "I expect the conversation to be:",
"buttons": [
{
"value": "quick",
"displayName": "Quick"
},
{
"value": "nice",
"displayName": "Nice & kind"
},
{
"value": "helpful",
"displayName": "Helpful"
}
]
}
],
"radioListInputs": [
{
"index": 2,
"name": "timeline",
"displayName": "I have been a customer for:",
"options": [
{
"value": "under_six_months",
"displayName": "<= 6 months"
},
{
"value": "six_months_to_two_years",
"displayName": "<= 2 years"
},
{
"value": "longer",
"displayName": "> 2 years"
}
]
}
],
"checkboxListInputs": [
{
"index": 3,
"name": "favorite_colors",
"displayName": "Colors I like:",
"options": [
{
"value": "white",
"displayName": "White"
},
{
"value": "black",
"displayName": "Black"
},
{
"value": "yellow",
"displayName": "Yellow"
}
]
}
],
"textInputs": [
{
"index": 4,
"name": "name",
"displayName": "The best programming language is:",
"placeholder": "Type language name here..."
}
]
},
"availableForAgents": true,
"name": "Problem questionaire",
"expireInterval": 60000,
"sendInterval": 10000,
"blockIfPreviousUnsubmitted": true,
"routeOnSubmit": false
}
Use this form to route clients' conversations based on their choice

Auto assign form
The form above is represented by the following object:
{
"id": "2909d885-d34c-49b9-8e8e-XXXXXXXXXXXX",
"orgId": "d90482fe-17bf-48d5-aa75-XXXXXXXXXXXX",
"locale": "en",
"config": {
"type": "auto_assign_form",
"tagGroups": [
{
"tagGroupId": "23b133fa-f2d1-4140-bddc-XXXXXXXXXXXX",
"displayName": "First tag group"
},
{
"tagGroupId": "c0f47b47-8269-4002-9734-XXXXXXXXXXXX",
"displayName": "Second tag group"
},
{
"tagGroupId": "c972191f-ddea-40df-bbbe-XXXXXXXXXXXX",
"displayName": "Third tag group"
}
]
},
"availableForAgents": true,
"name": "assignment_form",
}
Predefined message is a form to send simple text without any inputs as a adviser message. Form configuration accepts the only property
message`
. Such form could be used to send links and messages with additional conversation data:- {{roomId}} - conversation room id

Predefined meesage
The form above is represented by the following object:
{
"id": "b5cb64ec-9d85-4fe1-8df7-c8a4b8131b2d",
"orgId": "95a25389-5b2f-4b43-a311-7625f73da813",
"locale": "pl",
"config": {
"type": "predefined_message_form",
"message": "Simple predefined message with in room id = {{roomId}}"
},
"availableForAgents": true,
"name": "Simple message",
"routeOnSubmit": false
}
POST - /api/message-widgets/{locale}
- Creates new form
- Requires apiKey header of an adviser with
settings_action_forms
permission - Requires body with following fields:
- required:
name
,availableForAgents
,config
(described above) - optional:
expireInterval
,sendInterval
,blockIfPreviousUnsubmitted
Example
curl --location --request POST 'https://spinner.closer.app/api/message-widgets/en' \
--header 'x-api-key: your-api-key-here' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "a_problem_questionaire",
"availableForAgents": true,
"tagGroupId": "0000-0000-0000-000000000000",
"config": {
"textInputs": [
{
"index": 0,
"name": "best_language",
"displayName": "The best programming language is:",
"placeholder": "Type language name here..."
}
]
}
}'
PUT - /api/message-widgets/{uuid}
- Updates existing form
- Requires apiKey header of an adviser with
settings_action_forms
permission - Requires body with same schema as POST request
Example
curl --location --request PUT 'https://spinner.closer.app/api/message-widgets/d7f68940-e47f-4cd3-bc99-79e112749559' \
--header 'x-api-key: your-api-key-here' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "a_problem_questionaire",
"availableForAgents": false,
"config": {
"textInputs": [
{
"index": 0,
"name": "best_language",
"displayName": "The best programming language is:",
"placeholder": "Type language name here..."
}
]
}
}'
GET - /api/message-widgets/{locale}
- Gets all created forms' DTOs
- Requires apiKey of organization's adviser
GET - /api/message-widgets/{orgId}/{messageWidgetId}
- Gets single form DTO
- Does not require authentication
Last modified 10mo ago