Получение ответов кампании

Получение ответов кампании

Метод

GET https://api.uxfeedback.ru/{version}/private/campaigns/{campaign_id}/answers

где

  • {version} - это версия метода, которая предполагает какое-то поведение метода. Рекомендуется использовать “последнюю” или “более высокую” версию метода, как самую актуальную.

Версии метода

v1

GET https://api.uxfeedback.ru/v1/private/campaigns/{campaign_id}/answers

  • в параметре items.fields в ответе на запрос: каждый элемент массива “fields": [] содержит значение поля: "fields": [ "value_1", "value_2"... ],

версия включает работу с доп.параметрами:

  • from - дата "от" в формате ISO 8601, например: 2019-11-09T06:58:43.885

  • limit - число ответов в запросе, по умолчанию 100 (min: 1, max: 100)

  • sort_order - порядок сортировки, например: asc или desc, по умолчанию asc

  • lang - язык вывода значений, например: ru или en, по умолчанию en

v2

GET https://api.uxfeedback.ru/v2/private/campaigns/{campaign_id}/answers

Внесены изменения в версию v1:

  • добавлены детали в параметре items.fields в ответе на запрос: каждый элемент массива “fields": [] содержит тип поля и его значение: { "type": "smiles", "value": "Хорошо" }

версия включает работу с доп.параметрами:

  • from - дата "от" в формате ISO 8601, например: 2019-11-09T06:58:43.885

  • limit - число ответов в запросе, по умолчанию 100 (min: 1, max: 100)

  • sort_order - порядок сортировки, например: asc или desc, по умолчанию asc

  • lang - язык вывода значений, например: ru или en, по умолчанию en

v3

GET https://api.uxfeedback.ru/v3/private/campaigns/{campaign_id}/answers

Внесены изменения в версию v2:

  • добавлена возможность выгружать информацию по “опросам по ссылке”

  • добавлены детали в параметре items.fields в ответе на запрос: каждый элемент массива “fields": [] содержит тип поля, его значение и “filedId": { "type": "smiles", "value": "Хорошо" }

версия включает работу с доп.параметрами:

  • from - дата "от" в формате ISO 8601, например: 2019-11-09T06:58:43.885

  • limit - число ответов в запросе, по умолчанию 100 (min: 1, max: 100)

  • sort_order - порядок сортировки, например: asc или desc, по умолчанию asc

  • lang - язык вывода значений, например: ru или en, по умолчанию en

v4

GET https://api.uxfeedback.ru/v4/private/campaigns/{campaign_id}/answers

Внесены изменения в версию v3:

  • добавлена возможность выгружать ответы по блоку stars

  • добавлены разъяснения использования запроса

версия включает работу с доп.параметрами:

  • from - дата "от" в формате ISO 8601, например: 2025-04-09T08:29:09.353

    1. это обязательный параметр в строке запроса, должен иметь значение;

    2. если “дата, с которой нужно запрашивать ответы по кампании” неизвестна, то необходимо отправить запрос вида: https://api.uxfeedback.ru/v4/private/campaigns/{campaign_id}/answers?from=0

    3. в вернувшемся ответе использовать дату из параметра: "last_item_date" - это дата с которой нужно начинать запрашивать ответы в будущем запросе (дата приходит в формате ISO 8601: "2025-04-09T08:29:09.353Z")

  • limit - число ответов в запросе, по умолчанию 100 (min: 1, max: 100)

  • sort_by - поле, по которому сортировать items, например: created_atили id и др.

  • sort_order - порядок сортировки, например: asc или desc, по умолчанию asc

  • lang - язык вывода значений, например: ru или en, по умолчанию en

Пример метода

Пример максимально полного запроса: https://api.uxfeedback.ru/v4/private/campaigns/30559/answers?from=2019-11-09T06:58:43.885&limit=50&sort_by=created_at&sort_order=asc&lang=ru

Структура ответа

{ "data": { "first_item_date": "", // дата первой записи "last_item_date": "", // дата последней записи "count": 0, // кол-во записей в ответе "has_more": true, // есть ли ещё записи по этому запросу "headers": [ // массив заголовков полей опроса "заголовок поля_1 на опросной форме", "заголовок поля_2 на опросной форме", ... "заголовок поля_N на опросной форме", ], "items": [ // записи { "id": 1669646, "created_at": "2019-11-09T07:20:30.257Z", "fields": [ { "type": "smiles", "value": "Хорошо", "fieldId": "VEe20XO9" }, ... ], "info": { ... }, // инфо о девайсе, с котрого получен ответ "tags": [], "google_client_id": "1234567890.1234567890", // id для GTM "ym_id": "1576761531677677050", // id для Я.Метрика "properties": { "name": "user name", "propkey1": "propValue 1", "propkey2": "propValue 2" } ] }, "errors": [] }

где

  • "data": [] - содержит информацию о записях по кампании, где каждая запись items.id содержит:

    • “fields”: [] - массив полей ответа

    • “properties”: {} - массив дополнительных параметров ответа

  • "errors": [] - содержит информацию о ошибках.

При обработке ответа клиентского api, может вернуться массив, содержащий 0
ответов, но это не показатель, что все ответы выгружены.
Надо ориентироваться на атрибут has_more.
Если он true, то следует использовать дату last_item_date в качестве начальной
в следующем запросе и продолжать отправлять запросы, до тех пор, пока не будет
получен ”has_more”: false

Коды ответов и ошибок

Код ответа

Пример JSON'а

Код ответа

Пример JSON'а

401 Unauthorized

Запрос:
https://api.uxfeedback.ru/v4/private/campaigns/{{campaign_id}}/answers?from=2025-04-08T06:58:43.885&limit=50&sort_by=created_at&sort_order=asc&lang=ru

Ответ:

{ "errors": [ { "code": "error.unauthorized.access-denied", "comment": "access-denied" } ] }

Пояснения:
Ошибка возникает, когда сам запрос корректный, но в ключе-токене допущена ошибка: используется токен авторизации от другого проекта или допустили опечатку в символах валидного токена => авторизация Клиента не проходит.

404 Not Found

Запрос:
https://api.uxfeedback.ru/v4/private/campaigns/{{campaign_id}}/answeRR?from=2025-04-08T06:58:43.885&limit=50&sort_by=created_at&sort_order=asc&lang=ru

Ответ:

{ "errors": [ { "code": "error.not-found.resource-not-found", "comment": "resource-not-found" } ] }

Пояснения:
Ошибка возникает, когда ресурс не найден, например: ошиблись с наименованием и написали …/answeRR (или что-то другое) вместо …/answers.

422
Unprocessable Entity

Запрос:
https://api.uxfeedback.ru/v4/private/campaigns/0123/answers?from=2025-04-08T06:58:43.885&limit=50&sort_by=created_at&sort_order=asc&lang=ru

Ответ:

{ "data": {}, "errors": [ "campaign not found" ] }

Пояснения:
Ошибка возникает в случаях, когда пытаются передать в запросе несуществующие данные, например: указан несуществующий campaign_id в рамках текущего проекта.

Необходимо сверить: токен + проект + кампанию. Убедиться, что кампания находится в том проекте, от которого взят токен.

400 Bad request

Запрос:
https://api.uxfeedback.ru/v4/private/campaigns/{{campaign_id}}/answers?from
ИЛИ
https://api.uxfeedback.ru/v4/private/campaigns/{{campaign_id}}/answers

Ответ:

{ "errors": [ { "in": [ "from" ], "value": null, "code": "error.input.missing-required-key" } ] }

Пояснения:
Ошибка возникает в случаях, когда доп.параметры в строке запроса указаны неверно или вовсе не указаны, но являются обязательными.

В описании ошибки сообщается: каких значений не хватает или на что обратить внимание.

503 Service unavailable

Запрос:
https://api.uxfeedback.ru/v4/private/campaigns/{{campaign_id}}/answers?from=2025-04-08T06:58:43.885

Ответ:

{ "statusCode": 503, "error": "Service unavailable", "message": "Max request count per period exceed. Try later" }

Пояснения:
Ошибка возникает, когда превышен лимит на количество запросов в единицу времени. На данный момент limit выставлен - 120 запросов в минуту.

200 Ok

Запрос:

  1. когда “дата, с которой нужно запрашивать ответы по кампании” неизвестна: https://api.uxfeedback.ru/v4/private/campaigns/{{campaign_id}}/answers?from=0

  2. когда “дата, с которой нужно запрашивать ответы по кампании” известна:
    https://api.uxfeedback.ru/v4/private/campaigns/{{campaign_id}}/answers?from=2025-04-09T08:29:09.353
    // дата в запросе указывается без “кавычек” и “символа Z на конце”

Ответ:

1. когда “дата, с которой нужно запрашивать ответы по кампании” неизвестна

{ "data": { "first_item_date": null, "last_item_date": "2025-04-09T08:29:09.353Z", "count": 0, "has_more": false, "headers": [ "Насколько вероятно, что вы порекомендуете нашу компанию друзьям или знакомым?", "Текст заголовка" ], "items": [] }, "errors": [] }

2. когда “дата, с которой нужно запрашивать ответы по кампании” известна:

{ "data": { "first_item_date": "2025-04-09T08:29:09.353Z", "last_item_date": "2025-04-09T08:29:09.353Z", "count": 1, "has_more": false, "headers": [ "Насколько вероятно, что вы порекомендуете нашу компанию друзьям или знакомым?", "Текст заголовка" ], "items": [ { "id": 114324417, "created_at": "2025-04-09T08:29:09.353Z", "fields": [ { "type": "nps", "value": 7, "field_id": "VEe20XO9" }, { "type": "smiles", "value": "Хорошо", "field_id": "u6oXzRRS" } ], "info": { "browser": "Chrome 135", "width": 3840, "deviceModel": "Desktop", "dateTime": "1744187340", "url": "https://demo.uxfeedback.ru/demo", "device": "desktop", "os": "Windows 10.0", "height": 2160 }, "tags": [], "google_client_id": "1007557971.1743685386", "properties": {}, "ym_id": "1743685386767941011" } ] }, "errors": [] }

Пояснения:
Успешный ответ: оба ответа - “1” и “2” - считаются успешными, но в случаях, когда “дата, с которой нужно запрашивать ответы по кампании” неизвестна, параметр: “items”: [] в ответе будет пустым. Поэтому стоит сначала узнать дату “старта”, а после получить заполненный “items”: [ . . . ] согласно неё.