Skip to content

Ответ на мини-опрос ​

Метод сохраняет ответ клиента на мини-опрос и возвращает результаты голосования, если они включены в настройках опроса.

JS SDK вызывает метод сам, когда клиент отвечает на опрос в сторис. Для текстового опроса и опроса с несколькими вариантами — по нажатию кнопки, для опроса с одним вариантом — сразу при выборе.

POST https://app.rees46.ru/api/v3/polls/mini_polls/:code/answers

Где :code — код мини-опроса из личного кабинета.

Параметры ​

ПараметрТипОбязателен?Описание
shop_idStringДаAPI-ключ
didStringДаИдентификатор устройства. SDK передает его автоматически
sidStringНетИдентификатор сессии. SDK передает его автоматически
option_idsArrayНет*Идентификаторы выбранных вариантов. Для single_choice — ровно один, для multiple_choice — один или несколько
textStringНет*Текст ответа для опроса типа text. Не длиннее максимальной длины из настроек опроса
story_idIntegerНетИдентификатор сторис, в которой показан опрос
slide_idStringНетИдентификатор слайда, в котором показан опрос

Текст или варианты

Из параметров, отмеченных [*], передаётся один — в зависимости от типа опроса: 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.idIntegerИдентификатор сохраненного ответа
answer.option_idsArrayВыбранные варианты. Для текстового опроса — null
answer.textStringТекст ответа. Для опросов с вариантами — null
resultsObjectРезультаты голосования. Есть только если в опросе включено «Показывать результаты»
results.totalIntegerСколько всего ответов на опрос
results.options[].idIntegerИдентификатор варианта
results.options[].percentIntegerДоля ответов за вариант, в процентах

В случае ошибки ответ будет в формате:

json
{
  "status": "fail",
  "message": "Poll not found"
}

Возможные ошибки:

КодСообщениеПричина
400Invalid request parametersНеверные параметры запроса
400Missing user identifierНе передан идентификатор клиента
400Client not foundКлиент по переданным идентификаторам не найден
400текст ошибки валидацииНеизвестный вариант, пустой или слишком длинный текст и т. п.
402Payment requiredУслуга не подключена
403Access deniedПроект неактивен
404Resource not foundПроект с таким shop_id не найден
404Poll not foundМини-опрос с таким кодом не найден
429Too many requestsПревышен лимит: не больше 30 ответов в минуту от одного посетителя

Лимит запросов

Метод принимает не больше 30 ответов в минуту от одного посетителя. При превышении лимита возвращается ошибка 429, ответ не сохраняется — повторите запрос позже.