Appearance
Ответ на мини-опрос
Метод сохраняет ответ клиента на мини-опрос и возвращает результаты голосования, если они включены в настройках опроса.
JS SDK вызывает метод сам, когда клиент отвечает на опрос в сторис. Для текстового опроса и опроса с несколькими вариантами — по нажатию кнопки, для опроса с одним вариантом — сразу при выборе.
POST https://app.rees46.ru/api/v3/polls/mini_polls/:code/answersГде :code — код мини-опроса из личного кабинета.
Параметры
| Параметр | Тип | Обязателен? | Описание |
|---|---|---|---|
| shop_id | String | Да | API-ключ |
| did | String | Да | Идентификатор устройства. SDK передает его автоматически |
| sid | String | Нет | Идентификатор сессии. SDK передает его автоматически |
| option_ids | Array | Нет* | Идентификаторы выбранных вариантов. Для single_choice — ровно один, для multiple_choice — один или несколько |
| text | String | Нет* | Текст ответа для опроса типа text. Не длиннее максимальной длины из настроек опроса |
| story_id | Integer | Нет | Идентификатор сторис, в которой показан опрос |
| slide_id | String | Нет | Идентификатор слайда, в котором показан опрос |
Текст или варианты
Из параметров, отмеченных [*], передаётся один — в зависимости от типа опроса: text для текстового, option_ids для опросов с вариантами.
Повторный ответ
Можно ли ответить повторно, задается в элементе слайда, а не в самом опросе. Поэтому передавайте story_id и slide_id, если опрос показан в сторис.
Если повторный ответ в слайде запрещен, а клиент уже отвечал, новый ответ не сохраняется: метод без ошибки вернет прежний ответ клиента.
Запрос
Пример запроса:
shell
curl 'https://app.rees46.ru/api/v3/polls/mini_polls/gift_recipient/answers' \
-X 'POST' \
-H 'Content-Type: application/json' \
--data-raw '{"shop_id":"SHOP_ID", "did":"DID", "sid":"SID", "option_ids":[2], "story_id":5, "slide_id":"101"}'shell
curl 'https://app.rees46.ru/api/v3/polls/mini_polls/wishes/answers' \
-X 'POST' \
-H 'Content-Type: application/json' \
--data-raw '{"shop_id":"SHOP_ID", "did":"DID", "sid":"SID", "text":"Больше скидок на обувь", "story_id":5, "slide_id":"102"}'Ответ
Пример ответа сервера:
json
{
"status": "success",
"payload": {
"answer": {
"id": 77,
"option_ids": [2],
"text": null
},
"results": {
"total": 121,
"options": [
{ "id": 1, "percent": 40 },
{ "id": 2, "percent": 60 }
]
}
}
}Расшифровка свойств ответа:
| Свойство | Тип | Описание |
|---|---|---|
| answer.id | Integer | Идентификатор сохраненного ответа |
| answer.option_ids | Array | Выбранные варианты. Для текстового опроса — null |
| answer.text | String | Текст ответа. Для опросов с вариантами — null |
| results | Object | Результаты голосования. Есть только если в опросе включено «Показывать результаты» |
| results.total | Integer | Сколько всего ответов на опрос |
| results.options[].id | Integer | Идентификатор варианта |
| results.options[].percent | Integer | Доля ответов за вариант, в процентах |
В случае ошибки ответ будет в формате:
json
{
"status": "fail",
"message": "Poll not found"
}Возможные ошибки:
| Код | Сообщение | Причина |
|---|---|---|
| 400 | Invalid request parameters | Неверные параметры запроса |
| 400 | Missing user identifier | Не передан идентификатор клиента |
| 400 | Client not found | Клиент по переданным идентификаторам не найден |
| 400 | текст ошибки валидации | Неизвестный вариант, пустой или слишком длинный текст и т. п. |
| 402 | Payment required | Услуга не подключена |
| 403 | Access denied | Проект неактивен |
| 404 | Resource not found | Проект с таким shop_id не найден |
| 404 | Poll not found | Мини-опрос с таким кодом не найден |
| 429 | Too many requests | Превышен лимит: не больше 30 ответов в минуту от одного посетителя |
Лимит запросов
Метод принимает не больше 30 ответов в минуту от одного посетителя. При превышении лимита возвращается ошибка 429, ответ не сохраняется — повторите запрос позже.