К содержанию
API v3

ИИ-ассистенты

Инструменты MCP

Все инструменты MCP-сервера: что делает каждый, какие параметры принимает и что возвращает

Markdown для нейросетей Актуально на 15.10.2026

Все инструменты

174 инструментов в реестре на 15.10.2026. API-ключ открывает полный каталог; через OAuth доступны 159 инструментов выбранного воркспейса. Фактический список для вашего подключения возвращает tools/list. Пометки отражают подсказки сервера о чтении, изменении и удалении данных.

export_answers_spss Выгрузка ответов в SPSS читает
get_quiz_integrations Состояние интеграций опроса читает
get_tariff_list Список тарифов читает
get_workspace_member_access Доступы участника читает
get_workspace_tariff Тариф аккаунта читает
manage_quiz_analytics Счётчики и пиксели меняет
manage_quiz_zapier Отправка в Zapier меняет
set_answer_note Пометка у ответа меняет
archive_quiz Архив опроса меняет
create_quiz Новый опрос меняет
create_quiz_from_template Опрос из шаблона меняет
delete_quiz Удаление опроса необратимо
duplicate_quiz Копия опроса меняет
generate_ai_quiz Сборка опроса по описанию меняет
get_quiz_versions История публикаций опроса читает
get_workspace_templates Шаблоны аккаунта читает
make_quiz_template Опрос как шаблон меняет
move_quiz Перенос опроса в папку меняет
publish_quiz Публикация опроса меняет
rename_quiz Переименование опроса меняет
restore_quiz Возврат опроса из корзины меняет
restore_quiz_version Возврат к прежней версии опроса меняет
search_quiz_templates Поиск готовых опросов читает
delete_favorite_question Удаление вопроса из избранного необратимо
get_favorite_questions Избранные вопросы читает
save_favorite_question Вопрос в избранное меняет
update_quiz_logic Логика переходов опроса меняет
update_quiz_note Заметка к опросу меняет
update_quiz_settings Настройки опроса меняет
update_quiz_texts Правка стандартных надписей меняет
update_quiz_widgets Вопросы и структура опроса меняет
upload_quiz_media Загрузка файла в опрос меняет
upload_quiz_widget_image Картинка к варианту ответа меняет
create_hidden_option Новая скрытая опция опроса меняет
create_quiz_variable Новая переменная опроса меняет
create_widget_hidden_option Новая скрытая опция вопроса меняет
delete_hidden_option Удаление скрытой опции опроса необратимо
delete_quiz_variable Удаление переменной опроса необратимо
delete_widget_hidden_option Удаление скрытой опции вопроса необратимо
update_hidden_option Правка скрытой опции опроса меняет
update_quiz_variable Правка переменной опроса меняет
update_widget_hidden_option Правка скрытой опции вопроса меняет
create_folder Новая папка меняет
get_workspace_members Участники аккаунта читает
manage_folder_access Доступ участников к папке необратимо
manage_workspace_folder Управление папкой необратимо
set_workspace_member_folders Папки, доступные участнику меняет
apply_quiz_theme Применение темы к опросу меняет
create_theme Новая тема оформления меняет
manage_theme Управление темами оформления необратимо
update_theme Правка темы оформления меняет
export_quiz_print Печатная версия опроса читает
manage_quiz_passwords Пароли к закрытому опросу необратимо
manage_quiz_qr_code QR-код опроса меняет
manage_quiz_unique_links Уникальные ссылки на опрос необратимо
set_quiz_link Адрес ссылки на опрос меняет
create_answer_tag Новый тег ответов меняет
delete_answer_tag Удаление тега ответов необратимо
delete_quiz_answers Удаление ответов необратимо
get_answer_extra_field_values Значения меток ссылки читает
get_answer_tags Теги ответов аккаунта читает
set_answers_order_mode Порядок вопросов в карточке ответа меняет
tag_answer Теги на ответе меняет
toggle_answer_visibility Скрытие ответа из отчётов меняет
count_quiz_answers Сколько ответов подойдёт меняет
create_report_appearance_preset Новый набор оформления отчёта меняет
delete_report_appearance_preset Удаление набора оформления необратимо
generate_ai_report Умный отчёт меняет
generate_filtered_report Отчёт по фильтрам меняет
get_ai_report Готовый умный отчёт читает
get_share_links Список публичных ссылок читает
get_workspace_report_appearance Оформление отчётов аккаунта читает
manage_quiz_filter_presets Мои фильтры меняет
save_quiz_report_filters Сохранение фильтров отчёта меняет
set_share_link_active Выключить или включить публичную ссылку необратимо
share_ai_report Публичная ссылка на умный отчёт меняет
share_answers_link Публичная ссылка на ответы меняет
share_report_link Публичная ссылка на отчёт меняет
share_summary_link Публичная ссылка на сводку меняет
update_workspace_report_palette Палитра отчётов аккаунта меняет
export_answers_csv Выгрузка ответов в CSV читает
export_answers_word Выгрузка ответов в Word читает
export_answers_xlsx Выгрузка ответов в Excel читает
export_filtered_report_pdf Выгрузка отчёта в PDF читает
export_filtered_report_word Выгрузка отчёта в Word читает
export_summary_pdf Выгрузка сводки в PDF читает
create_quiz_webhook Новый вебхук меняет
delete_quiz_webhook Удаление вебхука необратимо
get_integration_logs Журнал отправок мессенджера читает
get_quiz_crm_fields Поля CRM и текущее сопоставление читает
get_quiz_messenger_link Ссылка подключения бота читает
get_quiz_webhook_logs Журнал доставки вебхука читает
get_quiz_webhooks Вебхуки опроса читает
manage_quiz_amocrm_mapping Сопоставление полей amoCRM меняет
manage_quiz_crm Отправка ответов в CRM меняет
manage_quiz_crm_mapping Сопоставление полей Битрикс24 меняет
manage_quiz_google_sheets Выгрузка в Google Таблицы необратимо
manage_quiz_messenger Уведомления в Telegram и MAX необратимо
resend_integration_logs Досылка в мессенджер меняет
resend_quiz_webhook_log Досылка вебхука меняет
toggle_quiz_webhook Вебхук вкл и выкл меняет
update_quiz_webhook Правка вебхука меняет
add_quiz_email_recipient Новый получатель копий ответов меняет
add_quiz_email_team_member Участник аккаунта в получатели меняет
confirm_quiz_email_recipient Подтверждение адреса получателя меняет
delete_quiz_email_recipient Удаление получателя копий необратимо
get_quiz_email_log Журнал писем опроса читает
get_quiz_email_settings Настройки писем опроса читает
manage_workspace_smtp Своя почтовая служба меняет
resend_quiz_email_log Отправить письмо ещё раз меняет
save_quiz_email_notifications Правила, сводка и события писем меняет
save_quiz_email_template Шаблон письма опроса меняет
send_quiz_email_test Пример письма себе меняет
set_quiz_email_questions Состав вопросов в письме меняет
toggle_quiz_email Письма опроса вкл и выкл меняет
toggle_quiz_email_recipient Получатель копий вкл и выкл меняет
get_mailing_state Состояние рассылок читает
create_booking_block Блокировка времени записи меняет
delete_booking_block Снятие блокировки времени необратимо
delete_scheduler Удаление расписания записи необратимо
delete_workspace_logo Удаление логотипа аккаунта необратимо
delete_workspace_role Удаление роли участника необратимо
duplicate_scheduler Копия расписания записи меняет
get_booking_journal Журнал записей на встречи читает
get_schedulers Расписания записи на встречи читает
get_workspace_details Сведения об аккаунте читает
get_workspace_domain_status Состояние своего домена читает
get_workspace_hidden_files Скрытые файлы сверх квоты читает
get_workspace_roles Роли участников читает
get_workspace_storage Своё хранилище файлов читает
get_workspace_storage_usage Занятое место читает
invite_workspace_member Приглашение участника меняет
manage_user_sessions Входы в аккаунт необратимо
manage_workspace_domain Свой домен аккаунта меняет
manage_workspace_files Файлы аккаунта необратимо
remove_workspace_member Исключение участника необратимо
resend_workspace_member_invite Повторное приглашение участника меняет
save_scheduler Расписание записи на встречи меняет
save_workspace_role Роль участника меняет
set_workspace_member_role Смена роли участника меняет
update_booking Правка записи на встречу меняет
update_user_profile Правка своего профиля меняет
update_workspace_branding Логотип и копирайт аккаунта меняет
upload_workspace_logo Загрузка логотипа аккаунта меняет
verify_workspace_storage Проверка своего хранилища меняет
get_partner_program Партнёрская программа читает
get_respondent_campaigns Заказанные респонденты читает
manage_partner_source Метки партнёрских источников меняет
manage_quiz_payment Приём оплаты в опросе меняет
add_promocodes Добавление промокодов меняет
create_promocode_group Новый список промокодов меняет
get_promocode_list_quizzes Опросы списка промокодов читает
manage_promocode_group Управление списком промокодов необратимо
get_folder_list Список папок читает
get_promocode_codes Коды списка промокодов читает
get_promocode_list Списки промокодов читает
get_quiz_answers Ответы на опрос читает
get_quiz_hidden_options Скрытые опции опроса читает
get_quiz_list Список опросов читает
get_quiz_report Отчёт опроса читает
get_quiz_report_files Файлы из ответов читает
get_quiz_report_filters Сохранённые фильтры отчёта читает
get_quiz_report_inputs Текстовые ответы вопроса читает
get_quiz_structure Структура опроса читает
get_quiz_summary Сводка опроса читает
get_quiz_texts Стандартные надписи опроса читает
get_quiz_variables Переменные опроса читает
get_quiz_visit_segments Посещения по источникам, устройствам, браузерам и странам читает
get_quiz_visits Журнал посещений читает
get_quiz_widgets_hidden Скрытые опции вопросов читает
get_theme_details Тема оформления читает
get_theme_list Список тем оформления читает
get_user_me Мой профиль читает
get_workspace_list Список аккаунтов читает

Инструменты: формат ответа, права и тарифы

Инструменты (Tools)

Tools — действия, которые выполняются на стороне WebAsk по запросу ИИ-модели.

Формат ответа инструментов

Каждый инструмент возвращает объект с полями:

Поле Тип Описание
content array Блоки для модели. Первый — текст сообщения об успехе или об ошибке. Если в ответе есть доп. ключи, второй блок — те же данные JSON-текстом.
isError boolean false — успех, true — ошибка (валидация, доступ, сохранение и т.д.).
(доп. ключи) — При успехе добавляются поля с данными (например quiz, quiz_id, url, updated). При ошибке структуры виджетов может быть массив errors.

Клиенты (Claude, Cursor, Codex, mcp-remote) передают модели только content, поэтому доп. ключи продублированы в нём вторым блоком {"type": "text", "text": "<JSON доп. ключей>"} — и у успеха, и у ошибки. Сами доп. ключи остаются на верхнем уровне. Ответ без доп. ключей — один блок. Инструменты, отдающие JSON ресурса (структура опроса, ответы, отчёты), кладут его прямо в первый блок, второго нет.

Ответы на JSON-RPC запросы (результаты и ошибки методов) кодируются в UTF-8 без экранирования: кириллица и / идут как есть, а не \uXXXX и \/. Ранние отказы транспорта (авторизация, тариф, версия протокола) — короткие английские сообщения, их кодирование не менялось.

Примеры ниже показывают полную оболочку ответа. Значения внутри quiz, item и других данных иллюстративны: их состав зависит от инструмента. Если дополнительные поля показаны рядом с content, тот же объект данных находится JSON-строкой во втором текстовом блоке. Разбирайте JSON из content, а не текст сообщения об успехе.

Успех с дополнительными полями:

JSON
{
  "content": [
    {"type":"text","text":"Опрос #123 переименован в \"Новое название\"."},
    {"type":"text","text":"{\"quiz_id\":123,\"name\":\"Новое название\"}"}
  ],
  "isError":false,
  "quiz_id":123,
  "name":"Новое название"
}

Ошибка с деталями проверки:

errors ниже иллюстрирует ошибки логики; конкретный текст зависит от нарушения. Данные доступны и рядом с content, и во втором блоке.

JSON
{
  "content": [
    {"type":"text","text":"Логика не сохранена: есть ошибки."},
    {"type":"text","text":"{\"errors\":[\"Переход ссылается на отсутствующий вопрос.\"]}"}
  ],
  "isError":true,
  "errors":["Переход ссылается на отсутствующий вопрос."]
}

Инструмент, возвращающий JSON ресурса:

У get_quiz_structure данные находятся в первом блоке; widgets, conditions и остальные поля ресурса не дублируются на верхнем уровне. Пример содержит сокращённые иллюстративные данные ресурса.

JSON
{
  "content":[{"type":"text","text":"{\"id\":123,\"widgets\":{\"ids\":[],\"entities\":{}},\"conditions\":{},\"extra_fields\":[]}"}],
  "isError":false
}

Если JSON ресурса содержит строковое error, инструмент возвращает isError: true; сообщение об ошибке также остаётся JSON в первом блоке.

Ошибка без дополнительных полей:

JSON
{
  "content": [{"type": "text", "text": "Ошибка валидации: Поле quiz_id обязательно для заполнения."}],
  "isError": true
}

Права и тарифы

Инструменты записи проверяют то же, что и интерфейс конструктора.

Доступ к MCP по тарифу — опция mcp_access. Она есть на всех тарифах, включая бесплатный. Воркспейс без действующего заказа считается бесплатным и получает ответ бесплатного тарифа; заказ при проверке не создаётся.

Права участника воркспейса. Владелец воркспейса может выдать участнику урезанные права. Если права на действие нет, инструмент отвечает отказом, из которого видно, что делать дальше:

  • имя права и его код — Недостаточно прав: для этого действия нужно право «Удаление опросов» (delete_quiz);
  • значение у роли: allowed (разрешено, но объект в закрытой папке), partially — только свои объекты, причём над чужим объектом это названо прямо, forbidden — запрещено, не задано — считается запрещённым;
  • отличие по папке, если для папки объекта у роли стоит своё значение;
  • причина, из-за которой права не действуют вовсе: приглашение не принято, почта не подтверждена, не участник;
  • кто может право выдать: владелец или участник с member_crud, инструменты save_workspace_role и set_workspace_member_role.

Свои права по всем пространствам ассистент читает заранее из user://me (workspaces[].access), права другого участника — get_workspace_member_access. Расчёт там тот же, что у проверки при вызове.

Тарифный отказ называет закрытую возможность и дописывает, где посмотреть текущий тариф (get_workspace_tariff — лимиты и возможности) и что дают другие (get_tariff_list); сменить тариф может владелец или участник с правом payment.

Таблица прав по инструментам:

Действие Требуемое право
create_quiz create_quiz
update_quiz_widgets, update_quiz_logic, update_quiz_texts edit_quiz
create_quiz_variable, update_quiz_variable, delete_quiz_variable edit_quiz
create_hidden_option, update_hidden_option, delete_hidden_option, create_widget_hidden_option, update_widget_hidden_option, delete_widget_hidden_option edit_quiz
publish_quiz, restore_quiz_version edit_quiz; также проверяется блокировка оплаченной кампанией
duplicate_quiz copy_quiz
delete_quiz delete_quiz
rename_quiz rename_quiz
archive_quiz quiz_archive
move_quiz move_in_folder
update_quiz_settings settings
make_quiz_template template
create_folder create_folder
manage_folder_access (add, remove) invite_members
set_answer_note settings
manage_workspace_folder (rename) rename_folder
manage_workspace_folder (delete) delete_folder
get_quiz_versions settings
manage_quiz_passwords settings
manage_quiz_unique_links view_results на чтение (list_groups, get_group, list_links, export_links), settings на остальное
manage_promocode_group, get_promocode_list_quizzes settings
get_answer_extra_field_values view_results
get_quiz_visit_segments, get_quiz_visits view_results
generate_ai_report, get_ai_report, share_ai_report view_results
get_share_links, set_share_link_active view_results
get_quiz_integrations, get_integration_logs, resend_integration_logs, manage_quiz_messenger, get_quiz_messenger_link, manage_quiz_crm, get_quiz_crm_fields, manage_quiz_crm_mapping, manage_quiz_amocrm_mapping, manage_quiz_google_sheets integrations
manage_quiz_analytics, manage_quiz_zapier integrations
manage_workspace_smtp account_smtp
manage_workspace_domain domain
export_quiz_print settings или view_results — любого из двух
manage_quiz_qr_code, manage_quiz_payment settings
manage_workspace_files (чтение) files_view
manage_workspace_files (удаление) files_delete
get_respondent_campaigns только доступ к аккаунту
get_mailing_state mailing_view
update_user_profile, manage_user_sessions своё, права аккаунта не спрашиваются
create_quiz_from_template create_quiz
restore_quiz delete_quiz
manage_theme (copy, restore) theme
manage_theme (delete) theme_delete
duplicate_quiz (с folder_id) copy_in_folder
export_answers_spss view_results
create_theme, update_theme theme
apply_quiz_theme theme и edit_quiz
upload_quiz_media, upload_quiz_widget_image files_upload и edit_quiz
update_workspace_branding, upload_workspace_logo, delete_workspace_logo account_quiz_settings
update_workspace_report_palette account_quiz_settings
промокоды: create_promocode_group, add_promocodes, get_promocode_list, get_promocode_codes settings
запись на встречи: правка расписаний, записей и блокировок settings
запись на встречи: чтение расписаний и журнала view_results
результаты: чтение ответов и отчётов, выгрузки, сводка, публичные ссылки, tag_answer, toggle_answer_visibility, save_quiz_report_filters, manage_quiz_filter_presets, count_quiz_answers, set_answers_order_mode view_results

Правка вопросов, логики, текстов, переменных и скрытых опций требует edit_quiz. Доступ к опросу, пространство токена и права папки проверяются отдельно. Для структуры, логики, текстов, публикации и восстановления версии дополнительно действует блокировка оплаченной кампанией за респондентов. Отказ по праву не устраняется повторением запроса: сначала уточните роль и доступы. Проверка edit_quiz не заменяет settings, theme, integrations или files_upload там, где инструмент требует их.

update_quiz_settings требует settings. При передаче полей счётчиков и пикселей дополнительно проверяются integrations и тариф соответствующей интеграции. Инструменты писем опроса проверяют доступ к опросу и свои условия инициализации/тарифа; право settings им не следует приписывать по аналогии с booking.

Тарифные ограничения. Проверяются до выполнения действия:

Действие Ограничение
create_quiz, duplicate_quiz лимит числа опросов по тарифу; ошибка называет лимит и текущее значение
create_theme, update_theme своя тема недоступна на бесплатном тарифе
upload_quiz_media, upload_quiz_widget_image загрузка файлов и дисковая квота
upload_workspace_logo, delete_workspace_logo свой логотип доступен не на всех тарифах
update_workspace_branding скрытие копирайта доступно не на всех тарифах
экспорт ответов и отчётов выгрузка результатов
промокоды: создание группы, добавление кодов, чтение списков промокоды доступны не на всех тарифах

Опросы: создание, публикация, версии

Примеры ответов показывают оболочку content/isError и иллюстративные данные. Дополнительные поля ответа дублируются JSON-строкой вторым текстовым блоком. Точные текущие id и состав опроса читайте из соответствующих ресурсов.

Управление опросами

create_quiz

Создаёт новый опрос.

При чтении каталога через get_quiz_list можно выбрать type: "regular" (отдельная страница опроса) или type: "micro" (микроопрос на странице другого сайта). Пропуск type или null возвращает оба типа; это фильтр чтения, а не параметр create_quiz. Подробности — в инструментах чтения. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Опрос успешно создан (ID: 1)."
    },
    {
      "type": "text",
      "text": "{\"quiz\":{\"id\":1,\"workspace_id\":5,\"answer_count\":0,\"visits\":{\"visit\":0,\"u_visit\":0},\"ssid\":\"...\",\"shared\":false,\"isPublished\":false,\"is_archive\":false,\"is_template\":false,\"name\":\"Новый опрос\",\"virtual_id\":null,\"url_preview\":\"https://...\",\"url_shared\":\"https://...\",\"project\":null,\"quiz_data\":{\"ids\":[],\"entities\":{}},\"conditions\":null,\"settings\":{\"lang\":\"ru\",\"show_progressbar\":true,\"show_navigate\":true,\"numeration\":false,\"theme_id\":1,\"...\":\"...\"},\"info\":{\"info_title\":\"\",\"description\":\"\",\"og_image\":null,\"favicon\":null},\"integrations\":{}}}"
    }
  ],
  "isError": false,
  "quiz": {
    "id": 1,
    "workspace_id": 5,
    "answer_count": 0,
    "visits": {
      "visit": 0,
      "u_visit": 0
    },
    "ssid": "...",
    "shared": false,
    "isPublished": false,
    "is_archive": false,
    "is_template": false,
    "name": "Новый опрос",
    "virtual_id": null,
    "url_preview": "https://...",
    "url_shared": "https://...",
    "project": null,
    "quiz_data": {
      "ids": [],
      "entities": {}
    },
    "conditions": null,
    "settings": {
      "lang": "ru",
      "show_progressbar": true,
      "show_navigate": true,
      "numeration": false,
      "theme_id": 1,
      "...": "..."
    },
    "info": {
      "info_title": "",
      "description": "",
      "og_image": null,
      "favicon": null
    },
    "integrations": {}
  }
}
Параметр Тип Описание
folder_id integer (Обязательный) ID папки, в которой будет создан опрос.

rename_quiz

Переименовывает существующий опрос. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Опрос #1 переименован в \"Новое название опроса\"."
    },
    {
      "type": "text",
      "text": "{\"quiz_id\":1,\"name\":\"Новое название опроса\"}"
    }
  ],
  "isError": false,
  "quiz_id": 1,
  "name": "Новое название опроса"
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
name string (Обязательный) Новое название опроса (макс. 80 символов).

duplicate_quiz

Создаёт копию опроса со всеми данными и версиями. Счётчики и пиксели (Google Analytics, Яндекс.Метрика, VK, Facebook) копируются вместе со своими интеграциями: в копии они видны и отключаются через manage_quiz_analytics. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Опрос #1 успешно дублирован (новый ID: 2)."
    },
    {
      "type": "text",
      "text": "{\"quiz\":{\"id\":2,\"name\":\"Копия опроса\",\"url_shared\":\"https://...\",\"is_published\":false,\"created_at\":\"2024-01-15T12:00:00.000000Z\",\"updated_at\":\"2024-01-15T12:00:00.000000Z\"}}"
    }
  ],
  "isError": false,
  "quiz": {
    "id": 2,
    "name": "Копия опроса",
    "url_shared": "https://...",
    "is_published": false,
    "created_at": "2024-01-15T12:00:00.000000Z",
    "updated_at": "2024-01-15T12:00:00.000000Z"
  }
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса для дублирования.
name string (Опционально) Новое название опроса (макс. 80 символов).
folder_id integer (Опционально) Папка для копии. По умолчанию копия ложится рядом с оригиналом; копирование в другую папку требует права copy_in_folder.

archive_quiz

Архивирует или разархивирует опрос. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Опрос архивирован."
    },
    {
      "type": "text",
      "text": "{\"quiz_id\":1,\"archive_at\":\"2024-01-15 12:00:00\",\"is_archived\":true}"
    }
  ],
  "isError": false,
  "quiz_id": 1,
  "archive_at": "2024-01-15 12:00:00",
  "is_archived": true
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
archive boolean (Обязательный) true — архивировать, false — разархивировать.

delete_quiz

Удаляет опрос (мягкое удаление, с возможностью восстановления). Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Опрос #1 удален."
    },
    {
      "type": "text",
      "text": "{\"quiz_id\":1}"
    }
  ],
  "isError": false,
  "quiz_id": 1
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.

restore_quiz

Возвращает удалённый опрос из корзины — с вопросами, логикой и ответами.

Опрос снова занимает место в тарифном лимите, поэтому при исчерпанном лимите возврат не пройдёт. Живой и чужой опрос в возврат не попадают, о пропущенных приходит skipped_quiz_ids. Архив — другое: его снимает archive_quiz.

Параметр Тип Описание
workspace_id integer (Обязательный) ID workspace.
quiz_ids array (Обязательный) ID опросов, до 100 за раз.

publish_quiz

Публикует опрос: текущая локальная версия становится публичной.

Требуется право edit_quiz в дополнение к доступу к опросу. Сохранение структуры или логики само по себе не публикует черновик.

Опрос под оплаченной кампанией за респондентов не публикуется и не откатывается к прежней версии — инструмент отказывает и называет причину. Подробности — в tools-quiz-content.md.

Черновик должен укладываться в тариф целиком: если вопросов больше лимита тарифа или есть хоть один вопрос недоступного типа, инструмент отказывает (isError: true) и называет лимит либо типы и id вопросов. Ничего не публикуется — прежняя публичная версия продолжает работать и принимать ответы. Подсчёт вопросов и ключи типов — как в update_quiz_widgets (tools-quiz-content.md). restore_quiz_version состав не проверяет: он возвращает версию в черновик, а публикуется она только через publish_quiz. Черновик после AI-сборки (generate_ai_quiz) при записи тариф не сверяет, поэтому может не опубликоваться по тем же причинам.

Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Опрос #1 успешно опубликован."
    },
    {
      "type": "text",
      "text": "{\"quiz\":{\"id\":1,\"workspace_id\":5,\"answer_count\":0,\"name\":\"Мой опрос\",\"url_shared\":\"https://...\",\"isPublished\":true,\"quiz_data\":{\"ids\":[\"uuid-1\"],\"entities\":{\"uuid-1\":{\"type\":\"question\",\"title\":\"Вопрос\"}}},\"conditions\":{},\"settings\":{\"lang\":\"ru\",\"theme_id\":1,\"...\":\"...\"},\"info\":{},\"integrations\":{}}}"
    }
  ],
  "isError": false,
  "quiz": {
    "id": 1,
    "workspace_id": 5,
    "answer_count": 0,
    "name": "Мой опрос",
    "url_shared": "https://...",
    "isPublished": true,
    "quiz_data": {
      "ids": [
        "uuid-1"
      ],
      "entities": {
        "uuid-1": {
          "type": "question",
          "title": "Вопрос"
        }
      }
    },
    "conditions": {},
    "settings": {
      "lang": "ru",
      "theme_id": 1,
      "...": "..."
    },
    "info": {},
    "integrations": {}
  }
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.

move_quiz

Перемещает опрос в другую папку пользователя. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Опрос перемещен в папку #5."
    },
    {
      "type": "text",
      "text": "{\"quiz_id\":1,\"folder_id\":5}"
    }
  ],
  "isError": false,
  "quiz_id": 1,
  "folder_id": 5
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
folder_id integer (Обязательный) ID целевой папки (folder://list).

make_quiz_template

Создаёт шаблон на основе текущего опроса. Счётчики и пиксели (Google Analytics, Яндекс.Метрика, VK, Facebook) в шаблон не переносятся; исходный опрос не меняется. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Шаблон успешно создан."
    },
    {
      "type": "text",
      "text": "{\"quiz_id\":1}"
    }
  ],
  "isError": false,
  "quiz_id": 1
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.

get_quiz_versions

Показывает историю публикаций опроса: каждая публикация оставляет снимок.

Черновик в список не попадает — это текущее состояние, а не история. Снимок с is_live — тот, который сейчас видят респонденты.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
limit integer Сколько снимков вернуть, 1–100. По умолчанию 20.
offset integer Сколько снимков пропустить. Список от новых к старым.

restore_quiz_version

Возвращает содержимое прежнего снимка в черновик — откат неудачной правки.

Требуется edit_quiz; оплаченная кампания за респондентов блокирует откат. Восстановление не снимает необходимость последующей публикации.

Респондентов откат сразу не касается: живая версия остаётся прежней, пока опрос не опубликуют заново (publish_quiz). В ответе приходит needs_publish: true.

Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Версия восстановлена в черновик. Чтобы её увидели респонденты, опубликуйте опрос."
    },
    {
      "type": "text",
      "text": "{\"quiz_id\":42,\"restored_from_version_id\":128,\"live_version_id\":128,\"needs_publish\":true}"
    }
  ],
  "isError": false,
  "quiz_id": 42,
  "restored_from_version_id": 128,
  "live_version_id": 128,
  "needs_publish": true
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
version_id integer (Обязательный) ID снимка из get_quiz_versions.

generate_ai_quiz

Запускает AI-генерацию опроса по пользовательскому описанию. Использует тот же backend flow, что и встроенное создание AI-опроса в приложении: модель сама собирает структуру, виджеты и (опционально) логику переходов. Структура ответа (успех):

JSON
{
  "content": [{"type": "text", "text": "AI-опрос успешно создан."}],
  "isError": false
}
Параметр Тип Описание
folder_id integer (Обязательный) ID папки, в которой будет создан опрос (folder://list).
prompt string (Обязательный) Свободное описание того, какой опрос нужно сгенерировать. Длиннее 2000 символов — усекается.
source_text string Исходный материал для вопросов, например текст статьи. До 100 000 символов (длиннее — ошибка валидации), в сборку идут первые 20 000, вопросы — на языке материала, если prompt не просит другой язык; модели велено не выполнять указания внутри материала (гарантии нет).
ai_type string Тип AI-опроса: quiz (по умолчанию) или test.
with_logic boolean Просить ли AI построить логику переходов между шагами.
project string Произвольная метка проекта (опционально).

get_workspace_templates

Собственные шаблоны аккаунта — те опросы, что сделали шаблонами через make_quiz_template.

Это не общий каталог сервиса, его ищет search_quiz_templates. Возвращённый id принимает create_quiz_from_template наравне с каталожным.

Параметр Тип Описание
workspace_id integer (Обязательный) ID workspace.
limit integer Сколько вернуть, 1–100. По умолчанию 20.
offset integer Сколько пропустить.

search_quiz_templates

Ищет опрос в каталоге готовых. Каталог собран на ru и en — других языков в нём нет.

Без query возвращает каталог целиком. Отдаёт template_id, название и метки — без оформления, чтобы ответ оставался читаемым.

Параметр Тип Описание
lang string (Обязательный) ru или en.
query string Поиск по названию, описанию и меткам.
limit integer Сколько вернуть, 1–100. По умолчанию 30.

create_quiz_from_template

Создаёт свой опрос из шаблона каталога — с вопросами, логикой и оформлением.

Личная тема автора шаблона копируется в аккаунт, чтобы опрос не ссылался на чужую запись. Счётчики и пиксели шаблона в опрос не переносятся, даже если шаблон сохранили с ними раньше. Опрос создаётся черновиком (needs_publish: true). Скопировать по template_id произвольный чужой опрос нельзя: берутся только те, что лежат в каталоге.

Параметр Тип Описание
template_id integer (Обязательный) ID шаблона из search_quiz_templates.
folder_id integer (Обязательный) Папка для нового опроса (folder://list).
name string Своё название. По умолчанию — название шаблона.

Содержимое и структура опроса

Правка структуры, текстов и логики требует доступа к опросу и права edit_quiz. Она меняет черновик; для показа респондентам нужна отдельная публикация. Настройки требуют settings, загрузка медиа — files_upload и edit_quiz. Примеры ответов показывают оболочку и иллюстративные данные: дополнительные поля дублируются JSON-строкой во втором блоке content.

Содержимое и структура опроса

Заморозка опроса кампанией. Пока по опросу идёт оплаченная кампания за респондентов, его состав менять нельзя: респонденты проходят то, что оплачено и промодерировано. update_quiz_widgets, update_quiz_texts, update_quiz_logic, а также publish_quiz и restore_quiz_version из tools-quiz-lifecycle.md в этом случае отказывают с пояснением про кампанию. update_quiz_settings, интеграции, темы и работа с ответами остаются доступны — так же, как в конструкторе. До оплаты кампании правки открыты: сумма пересчитывается перед платежом. Замок снимается сам по завершении кампании.

update_quiz_widgets

Сохраняет структуру виджетов опроса. Используется для изменения/добавления любых элементов формы. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Структура виджетов опроса успешно обновлена."
    },
    {
      "type": "text",
      "text": "{\"quiz\":{\"id\":1,\"workspace_id\":5,\"answer_count\":0,\"name\":\"Мой опрос\",\"url_shared\":\"https://...\",\"isPublished\":false,\"quiz_data\":{\"ids\":[\"a1b2c3d4-...\"],\"entities\":{\"a1b2c3d4-...\":{\"type\":\"question\",\"title\":\"Текст вопроса\",\"...\":\"...\"}}},\"conditions\":{},\"settings\":{\"lang\":\"ru\",\"theme_id\":1,\"show_progressbar\":true,\"...\":\"...\"},\"info\":{},\"integrations\":{}}}"
    }
  ],
  "isError": false,
  "quiz": {
    "id": 1,
    "workspace_id": 5,
    "answer_count": 0,
    "name": "Мой опрос",
    "url_shared": "https://...",
    "isPublished": false,
    "quiz_data": {
      "ids": [
        "a1b2c3d4-..."
      ],
      "entities": {
        "a1b2c3d4-...": {
          "type": "question",
          "title": "Текст вопроса",
          "...": "..."
        }
      }
    },
    "conditions": {},
    "settings": {
      "lang": "ru",
      "theme_id": 1,
      "show_progressbar": true,
      "...": "..."
    },
    "info": {},
    "integrations": {}
  }
}

При ошибке структуры виджетов дополнительно возвращается массив errors (список строк с описанием несоответствий).

Тариф. Сохранение отказывает (isError: true, структура не меняется), если опрос становится «хуже» сохранённого черновика:

  • вопросов больше лимита тарифа (widgets_count) и больше, чем в черновике — текст называет лимит и сколько получилось бы;
  • появился вопрос недоступного на тарифе типа, которого в черновике не было (новый id или вопрос сменил тип) — текст называет типы и id вопросов.

Опрос, переставший укладываться в тариф после перехода на меньший, остаётся редактируемым: тексты менять и вопросы удалять можно. Число вопросов — id из ids без welcome/submit плюс вопросы внутри групп (группа тоже считается). Ключ типа: у choice — choice-media (картинки), choice-multiple (choiceMultiple), иначе choice-single; у smile-rating — rating; у остальных — сам type; типа нет в тарифе — он доступен. Экраны (welcome, submit, finish, screenout) по типу не проверяются. Число вопросов в группах считается только у групп из ids.

AI-сборка опроса (кабинет, generate_ai_quiz, API v3 quiz/ai) пишет черновик через внутренний вызов этого инструмента, и при записи тариф не сверяется: генератор может поставить тип, недоступный на тарифе, или больше вопросов, чем лимит. Такой черновик сохраняется, но publish_quiz его не опубликует, пока лишнее не убрано. То же правило действует в API v3, см. ошибки.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
ids array (Обязательный) Массив UUID виджетов (порядок на странице).
entities object (Обязательный) Ключ-значение: {"uuid": {настройки виджета}}.

Запись идёт всей структурой целиком. Внутри виджета можно передать только изменённые поля — остальные не затрутся. Но состав виджетов передаётся полностью: каждый id из ids должен быть в entities, а виджет, которого нет в ids, из опроса удаляется. Поэтому правка одного поля — это три шага:

  1. get_quiz_structure(quiz_id) — получить widgets.ids и widgets.entities;
  2. поправить нужное поле в нужной сущности;
  3. update_quiz_widgets(quiz_id, ids, entities) — вернуть структуру обратно.

Структуру, полученную чтением, можно возвращать записью как есть: ничего вычищать из неё не нужно. Исключение — значения, которые не проходят проверки ниже (например, размер поля вне границ): такой вызов отклоняется целиком, и значение нужно исправить.

Размеры полей ввода

Размер задаётся в пикселях, а не в процентах. Границы те же, что у ручки растягивания в конструкторе:

Поле Тип виджета Границы, px По умолчанию
inputWidth input, number 200–780 780 — на всю ширину вопроса
inputHeight input, number; не проверяется при inputIsTextarea: false — у однострочного поля высота ни на что не влияет 100–390 100
fioWidth fio 200–780 780
emailWidth email 200–780 780
phoneWidth phone 200–780 780
  • Значение вне границ отклоняет весь вызов до сохранения. В errors приходят поле, значение, допустимый диапазон и значение по умолчанию.
  • У нового виджета поле размера можно не передавать: встанет значение по умолчанию.
  • У уже сохранённого виджета пропуск поля ничего не меняет, потому что остаётся прежнее значение. Чтобы вернуть стандартный размер, поле передают явно, со значением по умолчанию.
  • Размер проверяется только у типа, которому поле принадлежит. Например, inputWidth у виджета choice не проверяется.

Экраны опроса

Тип Что это Как добавить
welcome Экран приветствия Служебный id welcome, всегда первый в ids
submit Экран отправки с кнопкой «Отправить» Служебный id submit, всегда последний в ids
finish Экран благодарности («спасибо», thank you) Новый UUID в ids перед submit + сущность с type: "finish"
screenout Экран отсева Новый UUID в ids + сущность с type: "screenout", переход задаётся update_quiz_logic

Экрана благодарности в опросе по умолчанию нет. Правка полей submit его не создаёт — нужен отдельный виджет finish.

Спецответы вместо обычных вариантов

«Другое / Свой вариант», «Затрудняюсь ответить» и «Ничего из перечисленного» — это настройки виджета, а не пункты списка вариантов:

Спецответ Настройка Типы
Другое / Свой вариант choiceTextOther choice с текстовыми вариантами
Другое dropdownOther dropdown
Затрудняюсь ответить hardToAnswer + hardToAnswerLabel все, кроме экранов, html, message, inline_group
Ничего из перечисленного noneOfAbove + noneOfAboveLabel choice, dropdown

Такой пункт, добавленный в choiceTextEntities / dropdownEntities руками, не даёт поля свободного ввода, не снимает остальные отметки, не попадает в отдельные показатели отчёта (hardToAnswerCount, hardToAnswerPercent) и перемешивается вместе с обычными вариантами. Если настройка при этом включена — респондент видит два одинаковых пункта.

Инструмент такие подписи не запрещает (бывают и осознанные варианты ответа), но возвращает предупреждение в массиве warnings.

Проверка результата

Ответ содержит ключ saved с фактическим составом опроса после записи — по нему сверяется, что изменение применилось, без повторного чтения структуры:

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Структура виджетов опроса успешно обновлена. Сохранено виджетов: 5. Состав: welcome x1, choice x2, finish x1, submit x1."
    },
    {
      "type": "text",
      "text": "{\"saved\":{\"widgets\":5,\"types\":{\"welcome\":1,\"choice\":2,\"finish\":1,\"submit\":1}},\"warnings\":[\"Виджет ...: вариант «Другое» повторяет включённый спецответ (choiceTextOther) ...\"],\"quiz\":{\"...\":\"...\"}}"
    }
  ],
  "isError": false,
  "saved": {
    "widgets": 5,
    "types": {
      "welcome": 1,
      "choice": 2,
      "finish": 1,
      "submit": 1
    }
  },
  "warnings": [
    "Виджет ...: вариант «Другое» повторяет включённый спецответ (choiceTextOther) ..."
  ],
  "quiz": {
    "...": "..."
  }
}

update_quiz_texts

Сохраняет пользовательские тексты кнопок и интерфейсных элементов опроса. (Требуется платный тариф). Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Пользовательские тексты опроса успешно обновлены."
    },
    {
      "type": "text",
      "text": "{\"message\":\"OK\"}"
    }
  ],
  "isError": false,
  "message": "OK"
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
texts array (Обязательный) Массив объектов [{"code": "string", "text": "string"}].

update_quiz_settings

Обновляет настройки опроса (название, язык, отображение, навигация, ограничения по времени и числу ответов, капча, тема, скрипты, QR-код, таймер заполнения, IP/устройства и др.). Передаются только те поля, которые нужно изменить. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Настройки опроса обновлены."
    },
    {
      "type": "text",
      "text": "{\"updated\":[\"name\",\"lang\"]}"
    }
  ],
  "isError": false,
  "updated": [
    "name",
    "lang"
  ]
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса. Все остальные настройки необязательны; пропуск сохраняет текущее значение.
name string Название опроса (макс. 255 символов).
lang string Язык интерфейса опроса: ru, en, es или pt.
show_progressbar boolean Показывать прогресс-бар прохождения опроса.
show_navigate boolean Показывать навигацию (кнопки назад/вперёд).
numeration boolean Включить нумерацию вопросов.
auto_move_by_enter boolean Переход к следующему вопросу по нажатию Enter.
show_to_robots boolean Доступность страницы опроса для поисковых роботов.
show_by_one boolean Показывать по одному вопросу на экране.
allow_multiple_answer boolean Разрешить повторную отправку ответа (несколько прохождений).
repeat_interval_hours integer \| null Повтор через N часов (1–8760) после прошлого завершённого ответа. Только при allow_multiple_answer: true, иначе сохраняется null; null — без интервала. С sso_active, require_email_verification или extra_params в session_check_method — отказ валидации; сохранённый раньше интервал при их включении сбрасывается.
scripts_in_head string Код скриптов в <head>.
scripts_in_body string Код скриптов в <body>.
scripts_in_head_enabled boolean Включить выполнение скриптов в head.
scripts_in_body_enabled boolean Включить выполнение скриптов в body.
closed_quiz_message_enabled boolean Включить сообщение о закрытии опроса.
close_quiz_enabled boolean Опрос закрыт (приём ответов отключён).
limit_time_enabled boolean Включить ограничение по времени доступности опроса.
limit_time_value string Местное время окончания доступности Y-m-d H:i:s, без пояса.
limit_time_value_tz string Момент закрытия с поясом — считает сервер: limit_time_value в поясе limit_time_timezone. Если пришло одно из этих двух полей, присланное значение перезаписывается.
limit_time_timezone string Пояс срока, идентификатор IANA (Europe/Berlin). Смена пояса пересчитывает момент закрытия от сохранённого limit_time_value.
limit_answer_count_enabled boolean Включить ограничение максимального числа ответов.
limit_answer_count_value integer Максимальное число ответов.
limit_answer_count_mode string Что считать для лимита: all — включая незавершённые и отсев; completed — завершённые, включая отсев; completed_no_screenout — завершённые без отсеянных. Скрытые, модерируемые и удалённые записи в лимит не входят. При пропуске настройка сохраняется; обработчик приводит неизвестное значение или null к all, но схема допускает только строки из enum.
limit_message_title string Заголовок сообщения при достижении лимита ответов.
limit_message_body string Текст сообщения при достижении лимита ответов.
show_captcha boolean Показывать капчу при отправке ответа.
captcha_public_key string Публичный ключ капчи.
captcha_secret_key string Секретный ключ капчи.
multiple_ip boolean Разрешить прохождение с нескольких IP.
use_password boolean Требовать пароль для доступа к опросу.
session_check_method array Методы проверки сессии: ip, cookie, extra_params.
theme_id integer ID темы оформления воркспейса.
extra_fields array Список скрытых переменных (extra fields).
scoring_switcher boolean Включить переключатель подсчёта баллов в опросе.
correct_answers boolean Показывать и использовать правильные ответы в тестовом сценарии. Не задаёт сами правильные варианты или баллы — они находятся в вопросах. При пропуске текущее значение сохраняется.
block_jump_to_prev_widget boolean Запретить переход к предыдущему вопросу (виджету).
question_required_mode string Режим обязательности вопросов: individual, all_required, all_optional.
question_timer_mode string Таймер вопросов: individual — настройки отдельных вопросов; all_enabled — включить для всех; all_disabled — выключить для всех. При пропуске режим сохраняется.
question_timer_seconds integer Время вопроса в секундах для общего таймера. При пропуске сохраняется; схема не объявляет числовой минимум/максимум. Пример: 30 вместе с question_timer_mode: "all_enabled".
question_timer_button_mode string Показывать вопрос по кнопке: individual — настройки вопросов, all_enabled — для всех, all_disabled — ни для одного. При пропуске сохраняется.
question_lock_answer_mode string Запретить изменение после ответа на вопрос: individual — настройки вопросов, all_enabled — для всех, all_disabled — ни для одного. При пропуске сохраняется.
question_min_view_mode string Минимальное время просмотра вопроса: individual, all_enabled, all_disabled.
question_min_view_seconds integer Минимальное время просмотра в секундах (при all_enabled).
question_random_order boolean Показывать вопросы в случайном порядке.
disable_auto_redirect boolean Отключить автоматический переход после ответа.
auto_save_progress boolean Автосохранение прогресса: респондент может вернуться и продолжить с того же места.
allow_restart_progress boolean Разрешить вернувшемуся респонденту начать прохождение заново вместо продолжения незавершённого. Работает только вместе с auto_save_progress.
filling_time_enabled boolean Включить таймер времени на заполнение опроса.
filling_time_seconds integer Время на заполнение в секундах.
ip_list_enabled boolean Включить фильтрацию по спискам IP (белый/чёрный список).
ip_whitelist string Белый список IP.
ip_blacklist string Чёрный список IP.
available_devices array Доступные устройства: desktop, mobile, tablet.
info_title string Заголовок (мета).
description string Описание опроса (мета).
qr_code_format string Формат QR-кода.
qr_code_size integer Размер QR-кода в пикселях.
qr_code_color string Цвет QR-кода.
qr_code_background_color string Цвет фона QR-кода.
qr_code_margin integer Отступ QR-кода.
is_change_theme boolean Менять тему оформления по данным из QR-кода.
report_merge_versions boolean Склеивать версии вопросов в отчёте: ответы, собранные разными версиями опроса, показываются одним блоком.
multilogic_sequential_mode boolean Последовательная мульти-логика: несколько групп условий одного вопроса применяются по порядку, а не только первая сработавшая.
matrix_transpose boolean Транспонировать матричные вопросы в отчёте: строки и столбцы меняются местами.
question_random_mode string Что перемешивать при случайном порядке: all — всю анкету, groups — только вопросы, отмеченные полем randomGroupId (каждый набор перемешивается по своим позициям). По умолчанию all.
results_appearance array Оформление отчёта этого опроса: palette_id, custom_colors, bar_color_mode, font_family, show_value_labels, show_grid_lines. null возвращает стандартный вид. Передача этого объекта заодно выключает results_appearance_use_shared — иначе цвета не применились бы, потому что общая палитра аккаунта имеет приоритет. Допустимые значения и текущая палитра аккаунта: get_workspace_report_appearance.
results_appearance_use_shared boolean Следовать общей палитре отчётов аккаунта (update_workspace_report_palette). true — опрос рисует отчёты палитрой аккаунта; свои цвета опроса остаются на месте и вернутся, если выключить.
report_row_options array Настройки строк отчёта: sort_mode (default, asc, desc) и value_format (both, count, percent). null возвращает стандартное поведение.
schedule_enabled boolean Включить доступ к опросу по расписанию (дни недели + интервал времени).
schedule_days array Дни недели, в которые опрос доступен: массив чисел 1–7 по ISO (1 — понедельник, 7 — воскресенье).
schedule_time_from string Начало интервала доступности в формате H:i (например "09:00"). Трактуется в таймзоне schedule_timezone.
schedule_time_to string Конец интервала доступности в формате H:i (например "18:00"). Трактуется в таймзоне schedule_timezone.
schedule_timezone string Таймзона расписания, идентификатор IANA (например "Europe/Moscow").
yandex_analytics_code string Номер счётчика Яндекс.Метрики (макс. 100 символов).
yandex_analytics_is_webvisor boolean Включить Вебвизор в Яндекс.Метрике.
yandex_analytics_is_active boolean Включить отправку событий в Яндекс.Метрику.
google_analytics_code string Идентификатор Google Analytics (макс. 100 символов).
google_analytics_version string Версия Google Analytics (макс. 20 символов).
google_analytics_is_active boolean Включить отправку событий в Google Analytics.
vk_pixel_code string Идентификатор пикселя VK (макс. 100 символов).
vk_pixel_is_active boolean Включить пиксель VK.
fb_pixel_code string Идентификатор пикселя Facebook (макс. 100 символов).
fb_pixel_is_active boolean Включить пиксель Facebook.
sso_active boolean Требовать вход через SSO перед прохождением опроса.
sso_allow_retake boolean Разрешать SSO-респонденту пройти опрос повторно.
answers_allow_edit boolean Разрешить респонденту редактировать уже отправленный ответ. Работает только вместе с SSO (sso_active) или подтверждением e-mail (require_email_verification) — иначе ссылка на редактирование не выдаётся.
require_email_verification boolean Требовать подтверждение e-mail перед отправкой ответа.
anonymous_responses boolean Анонимные ответы: не сохранять данные, идентифицирующие респондента.
anonymous_responses_show_label boolean Показывать респонденту пометку о том, что опрос анонимный.
category_scoring boolean Включить категорийный скоринг: баллы опций суммируются по категориям, победившая категория пишется в ответ.
quiz_categories array Список категорий для категорийного скоринга: массив объектов { "id": "<строка>", "name": "<название>" }. Порядок значим: при равенстве баллов побеждает категория, идущая раньше. Веса категорий задаются у опций виджетов, а не здесь.

Пример частичного изменения настроек теста — объект arguments. Пропущенные настройки сохраняются; эти значения показывают выбранный сценарий, а не значения по умолчанию:

JSON
{
  "quiz_id":123,
  "correct_answers":true,
  "limit_answer_count_mode":"completed_no_screenout",
  "question_timer_mode":"all_enabled",
  "question_timer_seconds":30,
  "question_timer_button_mode":"all_enabled",
  "question_lock_answer_mode":"all_enabled"
}

update_quiz_logic

Сохраняет логические условия, переходы и правила по баллам. Формируется на основе UUID виджетов. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Логика опроса успешно обновлена."
    },
    {
      "type": "text",
      "text": "{\"quiz\":{\"id\":1,\"name\":\"Мой опрос\",\"quiz_data\":{\"ids\":[],\"entities\":{}},\"conditions\":{\"defaultConditions\":{},\"savedLogic\":{}},\"settings\":{},\"info\":{}}}"
    }
  ],
  "isError": false,
  "quiz": {
    "id": 1,
    "name": "Мой опрос",
    "quiz_data": {
      "ids": [],
      "entities": {}
    },
    "conditions": {
      "defaultConditions": {},
      "savedLogic": {}
    },
    "settings": {},
    "info": {}
  }
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
defaultConditions object Явные переходы, которые отличаются от следующего вопроса по порядку. Ключ — UUID исходного вопроса, значение — UUID цели строкой либо {"widgetId":"UUID_TARGET"}. Отсутствие записи означает обычный следующий шаг. Цель submit завершает опрос. При передаче карта заменяется целиком.
savedLogic object UUID вопроса → массив групп условий: {"UUID_SOURCE":[{"conditionGroupId":"g1","conditionsData":[]}]}. Обёртки rules нет; содержимое группы проверяется отдельно, пустые условия не задают обычный переход.
savedInlineGroupLogic object Карта UUID inline-группы → массив групп условий её дочерних вопросов. У группы есть actions и conditionsData; actionType/jumpTo здесь не используются.
savedScoring object Старый формат переходов по баллам, сохраняемый для совместимости существующих опросов. Карта UUID вопроса → ID score-правила → {score, jumpTo, inCase, inCaseMeaning}; также могут присутствовать служебные ключи scoringEnabledWidgets, correctAnswers, scoringSwitcher. Для нового условия по баллам используйте savedLogic с condition.score: true и источником баллов. Начисление баллов отдельным вариантам ответа настраивается в вопросах.
multiLogicFlags object UUID виджета → boolean: флаг мульти-логики.

При редактировании существующего опроса сохраняйте старую карту, если задача не требует её изменения. Непереданный savedScoring сохраняется; переданный заменяет эту карту целиком. Не преобразовывайте старые правила в новый формат автоматически.

Все карты необязательны. Переданная карта заменяет прежнюю целиком, а не дополняет её по UUID: отправка savedLogic только с одним вопросом удалит из этой карты прежние записи остальных вопросов. Непереданные карты сохраняются; перед объединением старые ссылки на удалённые вопросы очищаются. Это правило также действует для defaultConditions, savedInlineGroupLogic, savedScoring и multiLogicFlags. Пустой объект {} очищает именно переданную карту.

Для изменения одного правила:

  1. Получите get_quiz_structure с quiz_id; в conditions находятся карты текущего черновика, а в widgets — реальные UUID вопросов и вариантов.
  2. Измените нужную запись в полученной карте, сохранив остальные записи этой карты.
  3. Передайте quiz_id и полную изменённую карту. Другие карты можно опустить. Проверьте isError, детали errors и предупреждения warnings; только после проверки публикуйте.

Очистка всей условной логики — отдельное намеренное действие:

JSON
{"quiz_id":123,"savedLogic":{}}

Группы и условия savedLogic

Поле внутри группы Тип Значения и поведение
conditionGroupId string или integer Идентификатор группы; в схеме необязателен. При редактировании сохраняйте id из структуры.
actionType string jump, screenout, show, hide; при отсутствии — обычный переход jump.
logicType string routing или visibility. Сохраняйте значение полученной группы.
jumpTo string или object UUID цели либо {"widgetId":"UUID"}. Для jump — цель перехода; для show/hide — показываемый/скрываемый вопрос. Для screenout можно опустить: используется стандартный экран отсева.
visibilityActions array Дополнительные действия видимости: объекты с action: "show"/"hide" и targetWidget: {"widgetId":"UUID"}.
conditionsData array Список объектов условий. Для обычного условного правила нужен хотя бы один элемент; исключение — квота, описанная ниже.
screenoutConfig object mode: respondent_answer или answer_quota; sourceWidgetId: UUID вопроса. Для квоты quotaType: question_answers или answer_option, quotaLimit: строка с порогом, а для answer_option нужен quotaOptionId — UUID варианта.
Поле условия Тип Значения и ограничения
conditionId string или integer Идентификатор условия.
widget object widgetId — UUID источника условия; у inline-логики это дочерний вопрос.
option object id — целое число из таблицы операторов ниже. Выбирайте оператор по смыслу условия и типу исходного вопроса. Например, «меньше» — 7, «больше» — 9. Полный список 1–28 не означает, что любой оператор допустим для любого вопроса.
answer object Значение сравнения по типу вопроса: например UUID варианта в optionId, строка в label.
statement object signature: "", "AND", "OR". Связка соединяет это условие со следующим; у последнего она пустая. Перевёрнутые связки нормализуются с предупреждением.
extraField, extraFieldName boolean, string extraField:true сравнивает скрытую переменную с указанным именем; имя берите из extra_fields структуры. Операторы 1–10 и 27/28; последние проверяют наличие/отсутствие и не требуют answer.
score, scoreSourceType, scoreSourceWidgetId boolean, string, string или null score:true сравнивает баллы. scoreSourceType: survey (по умолчанию при пропуске) или widget; при widget нужен UUID источника, при survey — null. Порог — строка в answer.label/answer.optionId; операторы 1, 2, 7, 8, 9, 10.
matrixData object row/col — UUID строки и столбца из структуры. Нужны для соответствующих матричных операторов (18/19 у matrix, 1/2 у matrix_3d).
allocationData object Для allocation_slider: optionId — UUID слайдера из allocationSliderIds; порог — в answer.optionId.
semanticDifferentialData object Для semantic_differential: row — UUID из semanticDifferentialIds; значение сравнения — "1"–"5" в answer.optionId.

Операторы условий (option.id)

Оператор задаёт способ сравнения ответа или другого значения. Номер передаётся целым числом в option.id. Идентификаторы вопросов, вариантов ответа и строк матрицы берутся из get_quiz_structure.

ID Значение Применение и пояснение
1 Равно Сравнение значения или выбранного варианта; формат answer зависит от вопроса
2 Не равно Обратное сравнению на равенство
3 Начинается с Текстовое сравнение
4 Заканчивается на Текстовое сравнение
5 Содержит Текстовое сравнение
6 Не содержит Текстовое сравнение
7 Меньше Числовое сравнение, например значение шкалы < 10
8 Меньше или равно Числовое сравнение <=
9 Больше Числовое сравнение >
10 Больше или равно Числовое сравнение >=
11 Есть ответ Проверка факта ответа; обычно значение сравнения не требуется, исключение для file описано ниже
12 Файл загружен Существующие правила файлового вопроса; см. ограничение legacy ниже
13 Файл не загружен Существующие правила файлового вопроса; см. ограничение legacy ниже
14 Дата раньше Сравнение даты
15 Дата позже Сравнение даты
16 Дата раньше или в этот день Сравнение даты с включением границы
17 Дата позже или в этот день Сравнение даты с включением границы
18 Ячейка отмечена matrix; указать matrixData.row и matrixData.col
19 Ячейка не отмечена matrix; указать matrixData.row и matrixData.col
20 Позиция равна Ранжирование: место соответствует заданной позиции
21 Позиция меньше Ранжирование: числовая позиция меньше заданной
22 Позиция больше Ранжирование: числовая позиция больше заданной
23 Затрудняюсь ответить Специальный ответ; зависит от поддержки и включения hardToAnswer
24 Ни один из вариантов Специальный ответ; зависит от вида выбора и noneOfAbove
25 Увидел вариант A/B Проверяет показанный вариант, а не ответ; нужен включённый A/B-тест
26 Не увидел вариант A/B Обратная проверка показанного варианта; нужен включённый A/B-тест
27 Скрытая переменная передана extraField: true и имя переменной в extraFieldName; значение сравнения не требуется
28 Скрытая переменная не передана extraField: true и extraFieldName; значение сравнения не требуется

Особенности файлов и ранжирования. Для file сохраняйте код состояния в answer.optionId: "12" — файл загружен, "13" — не загружен. Это значения, предлагаемые конструктором; проверенный новый рендерер также принимает "11" для наличия ответа. Он определяет состояние файла по answer.optionId, поэтому одного option.id, даже 11, недостаточно. При редактировании берите пару option/answer из полученной структуры; базовые и legacy-операторы перечислены ниже.

ID 21/22 обозначают «выше/ниже» в редакторе. В проверенном локальном коде нового рендерера обработчик ранжирования не различает option.id и сравнивает только точную позицию. Исполнение этих сравнений на целевой версии нужно проверить в предпросмотре; успешное сохранение правила не подтверждает его поведение при прохождении.

Какие операторы выбирать для нового правила

Базовые наборы ниже соответствуют операторам, предлагаемым конструктором. У конкретного вопроса дополнительные операторы зависят от его настроек. Сохранённые старые правила могут содержать другие совместимые операторы — это не основание предлагать их для нового правила.

Тип вопроса/условия Базовые операторы
choice, choiceSingle, choiceMultiple, dropdown, yesno, area_select 1, 2, 11
input, fio, email, phone 1–6, 11
number, slider, rating, scale, nps, smile-rating, semantic_differential, allocation_slider 1, 2, 7, 8, 9, 10, 11
click_test, area_highlight, map 1, 2, 7, 8, 9, 10, 11; сравнение количества отметок
datetime 1, 2, 14, 15, 16, 17
matrix 18, 19
matrix_3d 1, 2, 11
ranking 20, 21, 22
file 1, 11; старые правила также могут использовать 2, 12, 13
pair 11; старые правила могут содержать сравнение конкретной пары
pair_manual 1, 11
payment 1
inline_group 11; правила дочерних вопросов строятся по типам этих вопросов
message, html Нет базовых операторов сравнения ответа для нового правила
Условие по скрытой переменной (extraField: true) 1–10, 27, 28
Условие по баллам (score: true) 1, 2, 7, 8, 9, 10

Дополнительные операторы:

  • 23 появляется, если тип вопроса поддерживает «Затрудняюсь ответить» и включён hardToAnswer.
  • 24 применяется для dropdown или текстового choice при включённом noneOfAbove.
  • 25/26 применяются при включённом abEnabled; в answer.optionId передаётся идентификатор A/B-варианта из структуры.
  • Для матричных и других составных вопросов передавайте специфические данные, описанные в таблице полей условия: matrixData, allocationData, semanticDifferentialData.

Для нового правила ориентируйтесь на возможности конкретного вопроса. Допуски старых правил при сохранении шире в отдельных случаях; успешная валидация сама по себе не означает, что оператор предлагается для нового вопроса в конструкторе.

Пример: «значение шкалы меньше 10»

Это одно условие, которое нужно вставить в группу полной текущей карты savedLogic. Это не самостоятельный запрос и не замена всей карты. Заменить UUID_SCALE на реальный UUID шкалы. Видимость или переход задаются на уровне группы отдельно.

JSON
{
  "conditionId": "c-scale-less-10",
  "widget": {"widgetId": "UUID_SCALE"},
  "option": {"id": 7},
  "answer": {"label": "10", "optionId": "10"},
  "statement": {"signature": ""}
}

Здесь 7 означает «меньше», а "10" — числовой порог в строковом виде, а не UUID варианта. Для «значение шкалы больше 5» использовать option.id: 9 и порог "5". У последнего условия группы statement.signature пустая; связка AND/OR относится к следующему условию, если оно есть.

Примеры записей для полной карты

Это фрагменты, которые нужно вставить в полную текущую карту, а не отправить вместо неё. Замените все строки UUID_* реальными id из структуры; имя скрытой переменной должно уже существовать. Примеры разных сценариев независимы.

Переход по выбранному варианту (запись внутри savedLogic):

JSON
{
  "UUID_SOURCE": [{
    "conditionGroupId":"g1","actionType":"jump","logicType":"routing",
    "jumpTo":{"widgetId":"UUID_TARGET"},
    "conditionsData":[{"conditionId":"c1","widget":{"widgetId":"UUID_SOURCE"},"option":{"id":1},"answer":{"optionId":"UUID_OPTION"},"statement":{"signature":""}}]
  }]
}

Показ одного вопроса и скрытие другого по тому же условию (запись внутри savedLogic):

JSON
{
  "UUID_SOURCE": [{
    "conditionGroupId":"g2","actionType":"show","logicType":"visibility",
    "jumpTo":{"widgetId":"UUID_SHOW"},
    "visibilityActions":[{"action":"hide","targetWidget":{"widgetId":"UUID_HIDE"}}],
    "conditionsData":[{"conditionId":"c2","widget":{"widgetId":"UUID_SOURCE"},"option":{"id":1},"answer":{"optionId":"UUID_OPTION"},"statement":{"signature":""}}]
  }]
}

Скрытая переменная utm_source равна yandex (запись внутри savedLogic; источник — вопрос-якорь группы):

JSON
{
  "UUID_SOURCE": [{
    "conditionGroupId":"g3","actionType":"jump","jumpTo":{"widgetId":"UUID_TARGET"},
    "conditionsData":[{"conditionId":"c3","widget":{"widgetId":"UUID_SOURCE"},"extraField":true,"extraFieldName":"utm_source","option":{"id":1},"answer":{"label":"yandex","optionId":"yandex"},"statement":{"signature":""}}]
  }]
}

Показ/скрытие внутри inline-группы — запись в savedInlineGroupLogic, не в savedLogic. Внешний UUID относится к группе, а UUID условия и целей — к её groupWidgets:

JSON
{
  "UUID_INLINE_GROUP": [{
    "conditionGroupId":"ig1",
    "actions":[{"action":"show","targetWidget":{"widgetId":"UUID_CHILD_SHOW"}},{"action":"hide","targetWidget":{"widgetId":"UUID_CHILD_HIDE"}}],
    "conditionsData":[{"conditionId":"ic1","widget":{"widgetId":"UUID_CHILD_SOURCE"},"option":{"id":1},"answer":{"optionId":"UUID_CHILD_OPTION"},"statement":{"signature":""}}]
  }]
}

Три правила, без которых маршрут собирается неверно.

1. Безусловный переход задаётся через defaultConditions, а не пустой группой условий.

Не заполняйте defaultConditions последовательными переходами между всеми вопросами. Чтобы респондент пошёл на следующий вопрос по порядку, оставьте исходный вопрос без записи в этой карте. Явная запись нужна, когда маршрут должен идти в другое место. Она сохраняет выбранную цель после перестановки или вставки вопросов; поэтому запись на нынешний соседний вопрос может перестать означать «следующий шаг» после изменения структуры.

Чтобы вернуть обычный следующий шаг, удалите запись исходного вопроса из прочитанной карты и сохраните полную оставшуюся карту. Не отправляйте только изменённый UUID: переданная карта заменяется целиком. Служебный defaultConditionsVersion ведёт backend; вручную передавать его инструменту не нужно.

Группа из savedLogic с пустым conditionsData не означает «переходить всегда» — наоборот, такая группа отбрасывается как всегда-истинная, и вопрос уходит к следующему по порядку. Если из вопроса всегда нужно вести в одно место, это defaultConditions:

JSON
{
  "defaultConditions": { "uuid-вопроса": {"widgetId": "uuid-цели"} }
}

Для обычного условного перехода или показа/скрытия в savedLogic нужно хотя бы одно условие в conditionsData. Дисквалификация по квоте — исключение. Пример defaultConditions выше также является фрагментом: сохраните остальные переходы этой карты.

2. Циклы запрещены.

Переход, который замыкает маршрут в кольцо (например, «вернуть на вопрос о формате участия» из вопроса ниже по потоку), инструмент отклоняет с ошибкой о зацикленном переходе. Это не ограничение MCP: конструктор при цикле отключает кнопку публикации, то есть такой опрос нельзя выпустить в принципе.

Если по замыслу человек должен что-то выбрать заново — заведите отдельный вопрос ниже по потоку вместо возврата к пройденному.

Переход назад сам по себе разрешён, если он не создаёт кольца: инструмент вернёт предупреждение о слиянии веток, но сохранит логику.

3. Дисквалификация по квоте — это группа без условий.

Квота — это группа с actionType = screenout, режимом answer_quota и пустым conditionsData. Условие в такой группе делает её обычной дисквалификацией по ответу: правило сработает, но квота считаться не будет. Инструмент на такую пару вернёт предупреждение.

Порог и источник квоты задаются внутри screenoutConfig, а не условиями:

JSON
{
  "conditionGroupId": "g1",
  "actionType": "screenout",
  "jumpTo": {"widgetId": "uuid-экрана-отсева"},
  "conditionsData": [],
  "screenoutConfig": {
    "mode": "answer_quota",
    "sourceWidgetId": "uuid-вопроса",
    "quotaType": "answer_option",
    "quotaLimit": "100",
    "quotaOptionId": "uuid-варианта"
  }
}

update_quiz_note

Добавляет или изменяет внутреннюю заметку опроса. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Заметка опроса обновлена."
    },
    {
      "type": "text",
      "text": "{\"quiz_id\":1,\"notes\":\"Текст внутренней заметки\"}"
    }
  ],
  "isError": false,
  "quiz_id": 1,
  "notes": "Текст внутренней заметки"
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
notes string (Обязательный) Текст заметки (видна только владельцу).

upload_quiz_media

Загрузка медиа (изображение, видео, аудио) для блока multimedia. (Требуется платный тариф). Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Медиа загружено. url: https://storage.webask.io/... — подставьте в multimedia.imgUrl."
    },
    {
      "type": "text",
      "text": "{\"url\":\"https://storage.webask.io/...\"}"
    }
  ],
  "isError": false,
  "url": "https://storage.webask.io/..."
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
type string (Обязательный) Тип медиа: image, video, audio.
url string Ссылка (если загружается из сети). Укажите url или file_base64.
file_base64 string Содержимое в base64. Укажите url или file_base64.
filename string Имя файла (опционально, для file_base64).

Отказ. Текст отказа называет причину: недопустимый формат (список форматов в сообщении), файл больше лимита тарифа на один файл, место кончилось или этот файл в свободное место не помещается (кроме пространства с рабочим своим хранилищем — там место не считается), недоступно на тарифе, не скачалось по url, некорректный base64. Если файл не сохранился по внутренней причине, в текст попадает её короткое описание (до 200 знаков) и пометка, что файл не сохранён — повтор того же запроса даст тот же результат, текст причины нужно передать в поддержку. Полная запись со стектрейсом — в канале mcp и media.

upload_quiz_widget_image

Загрузка картинки для виджета "Выбор из списка" с медиа-вариантами. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Изображение загружено. url: https://storage.webask.io/... — подставьте в choiceImageEntities[].link."
    },
    {
      "type": "text",
      "text": "{\"url\":\"https://storage.webask.io/...\"}"
    }
  ],
  "isError": false,
  "url": "https://storage.webask.io/..."
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
url string Ссылка (если загружается из сети). Укажите url или file_base64.
file_base64 string Картинка в base64. Укажите url или file_base64.
filename string Имя файла (опционально).

Отказ. Файл больше лимита тарифа на один файл (в тексте — лимит в байтах) или не помещается в свободное место пространства — картинка всегда ложится в наше хранилище, поэтому место проверяется и при подключённом своём.

Библиотека избранных вопросов

Вопросы, которые автор переиспользует в разных опросах. В библиотеке лежит снимок вопроса, а не ссылка: правка исходного опроса библиотеку не меняет, и наоборот. До 100 вопросов на workspace; JSON-кодирование data ограничено 65 536 байтами. Проверяется доступ к workspace.

Инструмент Что делает
get_favorite_questions список; в каждой записи снимок, готовый к передаче в update_quiz_widgets
save_favorite_question добавляет вопрос или перезаписывает сохранённый, если передан favorite_question_id
delete_favorite_question убирает из библиотеки; в опросах вопрос остаётся

get_favorite_questions

Параметр Тип Обязательность и поведение
workspace_id integer Обязателен. ID workspace.

Возвращает workspace_id, items со снимками вопросов и limit: 100.

save_favorite_question

Параметр Тип Обязательность, ограничения и значение при пропуске
workspace_id integer Обязателен. ID workspace.
favorite_question_id integer Необязателен, минимум 1. Если передан, обновляется существующая запись в этом workspace; иначе создаётся новая.
name string Обязателен, до 255 символов. Название записи в библиотеке.
widget_type string Обязателен, до 64 символов. Тип виджета из структуры исходного вопроса; закрытого enum у этого аргумента нет.
data object Обязателен. Полный снимок виджета из get_quiz_structure; структура снимка не разбирается, проверяется размер JSON.
choice_type string или null Необязателен, до 64 символов, при пропуске null. Подтип выбора из исходного виджета; enum не задан.
choice_multiple boolean Необязателен, при пропуске false. Признак множественного выбора. Обработчик также принимает null и превращает его в false, но схема инструмента ожидает boolean.
source_quiz_id integer Необязателен, при пропуске null. ID исходного опроса. Обработчик допускает null, схема — integer.
source_widget_id string Необязателен, до 255 символов, при пропуске null. ID исходного виджета. Обработчик допускает null, схема — string.

При обновлении обязательные name, widget_type и data нужны снова. Это перезапись снимка: пропущенные необязательные поля сбрасываются к указанным значениям, а не сохраняются из прежней записи. В ответе — workspace_id и question.

Пример аргументов обновления метаданных вместе со снимком (объект data и id нужно взять из своих ресурсов; пример не заменяет полный снимок):

JSON
{
  "workspace_id":5,
  "favorite_question_id":12,
  "name":"Предпочтительный канал связи",
  "widget_type":"choice",
  "data":{"id":"UUID_SOURCE","type":"choice"},
  "choice_type":null,
  "choice_multiple":false,
  "source_quiz_id":123,
  "source_widget_id":"UUID_SOURCE"
}

delete_favorite_question

Параметр Тип Обязательность и ограничения
workspace_id integer Обязателен. ID workspace.
favorite_question_id integer Обязателен, минимум 1. ID записи из get_favorite_questions.

В ответе — workspace_id и favorite_question_id. Вставленные в опросы копии вопроса сохраняются.

Запись на встречи

Респондент отвечает на вопросы и в конце выбирает свободное время. Расписание живёт на уровне аккаунта и подключается к опросам отдельно — одно расписание может обслуживать несколько опросов.

Полные параметры, условная обязательность полей и права восьми инструментов описаны в инструментах аккаунта.

Инструмент Что делает
get_schedulers расписания аккаунта и их настройки
save_scheduler создаёт расписание или правит существующее
duplicate_scheduler копирует расписание без записей
delete_scheduler удаляет расписание вместе с записями и блокировками
get_booking_journal кто записался за период: время, статус, отмены
update_booking подтвердить, отменить, отметить неявку, перенести
create_booking_block закрыть промежуток для записи — отпуск, занятое окно
delete_booking_block снова открыть время

Два способа задать время. weekly — повторяющиеся часы по дням недели, самый частый случай. slots — список конкретных дат и интервалов для разовых встреч. Режим выбирается полем schedule_mode.

Часовые пояса. Часы в weekly, manual_slots и overrides задаются в поясе расписания — респонденту слоты пересчитываются при показе. А границы записей и блокировок задаются в UTC: пояс расписания и пояс респондента различаются, и UTC — единственный способ не промахнуться.

Права. Чтение расписаний и журнала требует права на просмотр результатов — в журнале персональные данные респондентов. Любые правки — права на настройки опроса.

«Только свои». У расписания есть автор — кто его создал или скопировал; расписания, созданные до 12.10.2026, считаются расписаниями владельца. При праве на настройки «только свои» участник меняет, копирует, удаляет и закрывает время только в своих расписаниях — get_schedulers отдаёт у каждого can_edit. При праве на результаты «только свои» get_booking_journal показывает записи только по видимым участнику опросам, а update_booking меняет только их. Отказ — обычная ошибка инструмента с объяснением права.

Выключить приём записей можно, не удаляя расписание: save_scheduler с is_active: false. Удаление необратимо и уносит записи.

Переменные опроса и скрытые опции

Все операции записи в этом разделе требуют доступа к опросу и права edit_quiz. Имена переменных и ключи/значения скрытых опций — строки до 250 символов. UUID существующих объектов берите из ресурсов опроса; field_id — аргумент обновления/удаления, а в полученном объекте переменной UUID называется id.

Переменные опроса

create_quiz_variable

Создаёт новую скрытую переменную (extra field) опроса. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Скрытая переменная создана."
    },
    {
      "type": "text",
      "text": "{\"item\":{\"id\":\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\"name\":\"Имя переменной\"}}"
    }
  ],
  "isError": false,
  "item": {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "Имя переменной"
  }
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
name string (Обязательный) Имя переменной, до 250 символов; имя не должно дублировать существующее.
id string (Опционально) Кастомный UUID; при пропуске создаётся UUID. Обработчик также принимает null, но входная схема объявляет только string. Существующий id использовать повторно нельзя.

Аргументы создания:

JSON
{"quiz_id":123,"name":"utm_source"}

Повторное создание с тем же именем или id вернёт ошибку, а не обновит переменную.

update_quiz_variable

Обновляет имя скрытой переменной. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Скрытая переменная обновлена."
    },
    {
      "type": "text",
      "text": "{\"item\":{\"id\":\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\"name\":\"Новое имя переменной\"}}"
    }
  ],
  "isError": false,
  "item": {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "Новое имя переменной"
  }
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
field_id string (Обязательный) UUID переменной (quiz://{id}/variables).
name string (Обязательный) Новое уникальное имя, до 250 символов.

delete_quiz_variable

Удаляет скрытую переменную. Структура ответа (успех):

JSON
{
  "content": [{"type": "text", "text": "Скрытая переменная удалена."}],
  "isError": false
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
field_id string (Обязательный) UUID переменной.

Скрытые опции

create_hidden_option

Создаёт скрытую служебную опцию всего опроса. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Скрытая опция создана."
    },
    {
      "type": "text",
      "text": "{\"item\":{\"id\":10,\"name\":\"redirect_url\",\"value\":\"https://example.com/thanks\"}}"
    }
  ],
  "isError": false,
  "item": {
    "id": 10,
    "name": "redirect_url",
    "value": "https://example.com/thanks"
  }
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
name string (Обязательный) Ключ опции (напр. redirect_url).
value string (Обязательный) Значение.

update_hidden_option

Обновляет скрытую служебную опцию опроса. Структура ответа (успех):

JSON
{
  "content": [{"type": "text", "text": "Скрытая опция обновлена."}],
  "isError": false
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
opt_id integer (Обязательный) ID опции (quiz://{id}/hidden_options).
name string (Обязательный) Ключ опции.
value string (Обязательный) Значение.

delete_hidden_option

Удаляет скрытую опцию опроса. Структура ответа (успех):

JSON
{
  "content": [{"type": "text", "text": "Скрытая опция удалена."}],
  "isError": false
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
opt_id integer (Обязательный) ID опции (quiz://{id}/hidden_options).

create_widget_hidden_option

Создаёт скрытую служебную опцию конкретного виджета. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Скрытая опция виджета создана."
    },
    {
      "type": "text",
      "text": "{\"item\":{\"id\":11,\"widget_uuid\":\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\"name\":\"custom_key\",\"value\":\"custom_value\"}}"
    }
  ],
  "isError": false,
  "item": {
    "id": 11,
    "widget_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "custom_key",
    "value": "custom_value"
  }
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
widget_uuid string (Обязательный) Валидный UUID существующего виджета этого опроса, включая вопрос внутри группы.
name string (Обязательный) Ключ опции.
value string (Обязательный) Значение.

update_widget_hidden_option

Обновляет опцию конкретного виджета. Структура ответа (успех):

JSON
{
  "content": [{"type": "text", "text": "Скрытая опция виджета обновлена."}],
  "isError": false
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
opt_id integer (Обязательный) ID опции.
name string (Обязательный) Ключ опции.
value string (Обязательный) Значение.

delete_widget_hidden_option

Удаляет опцию конкретного виджета. Структура ответа (успех):

JSON
{
  "content": [{"type": "text", "text": "Скрытая опция виджета удалена."}],
  "isError": false
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
opt_id integer (Обязательный) ID опции.

Папки и доступ к ним

create_folder

Создаёт новую папку для группировки опросов. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Папка успешно создана."
    },
    {
      "type": "text",
      "text": "{\"message\":\"OK\"}"
    }
  ],
  "isError": false,
  "message": "OK"
}
Параметр Тип Описание
workspace_id integer (Обязательный) ID workspace (workspace://list).
name string (Обязательный) Название папки (макс. 255 символов).

manage_workspace_folder

Наводит порядок в папках: переименование, удаление, перестановка.

Удаление папки уносит и все опросы внутри неё вместе с ответами респондентов, поэтому непустая папка удаляется только с confirm_delete_quizzes. Папка по умолчанию не удаляется. Одноимённых папок в аккаунте не заводится.

Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Папка удалена."
    },
    {
      "type": "text",
      "text": "{\"message\":\"OK\",\"data\":{\"workspace_id\":1,\"folder_id\":12,\"deleted_quizzes\":3}}"
    }
  ],
  "isError": false,
  "message": "OK",
  "data": {
    "workspace_id": 1,
    "folder_id": 12,
    "deleted_quizzes": 3
  }
}
Параметр Тип Описание
workspace_id integer (Обязательный) ID workspace (workspace://list).
action string (Обязательный) rename, delete или reorder.
folder_id integer ID папки. Обязателен для rename и delete.
name string Новое название (макс. 255 символов). Обязательно для rename.
folder_ids array Полный список ID папок в нужном порядке. Обязателен для reorder. Порядок личный для пользователя подключения, другим участникам не меняется; папки без доступа пропускаются.
confirm_delete_quizzes boolean Подтверждение удаления опросов вместе с папкой.

manage_folder_access

Доступ к папке со стороны самой папки: members, add, remove.

Доступ участника к опросам держится на привязке к папкам. Соседний set_workspace_member_folders смотрит с другой стороны — перезаписывает весь список папок одного участника целиком, поэтому для точечной выдачи и снятия годится этот инструмент.

Признак active в списке говорит, принял ли человек приглашение: пока нет, доступ выдан, но им никто не пользуется. Снять доступ у самого себя нельзя — человек остался бы без единственной папки.

Параметр Тип Описание
workspace_id integer (Обязательный) ID workspace.
folder_id integer (Обязательный) ID папки (folder://list).
action string (Обязательный) members, add, remove.
member_id integer ID участника из get_workspace_members. Нужен для add и remove.

Темы оформления

Темы оформления

apply_quiz_theme

Применяет указанную тему оформления к опросу. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Тема #3 применена к опросу #1."
    },
    {
      "type": "text",
      "text": "{\"quiz\":{\"id\":1,\"name\":\"Мой опрос\",\"url_shared\":\"https://...\",\"answer_count\":0,\"quiz_data\":{\"ids\":[],\"entities\":{}},\"settings\":{\"theme_id\":3,\"...\":\"...\"},\"info\":{}}}"
    }
  ],
  "isError": false,
  "quiz": {
    "id": 1,
    "name": "Мой опрос",
    "url_shared": "https://...",
    "answer_count": 0,
    "quiz_data": {
      "ids": [],
      "entities": {}
    },
    "settings": {
      "theme_id": 3,
      "...": "..."
    },
    "info": {}
  }
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
theme_id integer (Обязательный) ID темы (публичной или из вашего workspace). (theme://list).

create_theme

Создаёт новую тему в workspace и применяет к опросу. (Требуется платный тариф). Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Тема создана и применена к опросу."
    },
    {
      "type": "text",
      "text": "{\"theme_id\":5,\"name\":\"Тема 1\"}"
    }
  ],
  "isError": false,
  "theme_id": 5,
  "name": "Тема 1"
}
Параметр Тип Описание
workspace_id integer (Обязательный) ID рабочего пространства.
quiz_id integer (Обязательный) ID опроса.
name string Название темы (макс. 255 символов).
base_font_id integer ID шрифта (1=Native, 2=Roboto, 3=Open Sans, 44=Golos Text...).
base_font string Имя шрифта строкой (новый способ), напр. Golos Text. Если не задано — берётся по base_font_id/дефолт.
background_type_id integer Тип фона: 1=color_image, 2=gradient.
bg_gradient_vector integer Направление градиента в градусах (0–360).
bg_gradient_start string Начальный цвет градиента в hex (напр. #00d4ff).
bg_gradient_end string Конечный цвет градиента в hex.
buttons_type_id integer Тип кнопок: 1=background, 2=border.
header_color string Цвет заголовка в формате #RRGGBB.
buttons_color string Цвет кнопок в формате #RRGGBB.
buttons_text_color string Цвет текста кнопок в формате #RRGGBB.
buttons_radius integer Радиус скругления кнопок (0–999 px).
bg_color string Цвет фона в формате #RRGGBB (для background_type_id=1).
widget_active_color string Цвет активного элемента виджета в формате #RRGGBB.
bg_image_file_id integer ID загруженного файла фонового изображения.
background_position_id integer Позиция фона (1–9).
background_opacity integer Прозрачность фона (0–100%).
background_lightness integer Яркость фона (-100 – +100).
background_placement_id integer Размещение фона: 1=stretch, 2=drawin, 3=cover.
background_saturate integer Насыщенность фона (-100 – +100).
background_contrast integer Контраст фона (-100 – +100).
bg_logo_file_id integer ID загруженного файла логотипа поверх фона.
bg_logo_position_id integer Позиция логотипа на фоне (min: 1).
bg_logo_size_id integer Размер логотипа (min: 1).
answer_options_radius integer Скругление карточек вариантов ответа в px.
answer_border integer Толщина рамки вариантов ответа в px.
welcome_and_finish_size_id integer Размер текста на приветствии и завершении.
welcome_and_finish_position_id integer Выравнивание текста на приветствии и завершении.
questions_size_id integer Размер текста вопросов.
questions_position_id integer Выравнивание текста вопросов.
container_width string Ширина содержимого: narrow, normal, wide, full.
button_full_width boolean Растянуть кнопку на всю ширину контейнера.
question_transition string Переход между вопросами: slide, fade, zoom, blur, none.
heading_font string Отдельный шрифт заголовков (Google Fonts). Пусто — как у остального текста.
input_style string Стиль полей ввода: box — в рамке, underline — одна линия.
progress_style string Индикатор прогресса: percent, line, steps.
custom_css string Свой CSS для страницы опроса, до 20000 символов.
service_text_enabled boolean Показывать служебный текст — строку для дисклеймера или согласия.
service_text string Служебный текст, до 500 символов. Простая разметка допустима, остальное вырезается.
service_text_placement_id integer Где на экране стоит служебный текст.
service_text_align_id integer Выравнивание служебного текста.
service_text_size integer Размер служебного текста: 12, 14 или 16.
service_text_color string Цвет служебного текста в формате #RRGGBB.
service_text_scope string Где показывать: all, welcome, questions или finish.
link_color string Цвет ссылок, #RRGGBB. null — цвет widget_active_color.
error_color string Цвет ошибок проверки, #RRGGBB. null — #e5484d.
dark_mode string Тёмная версия: off или auto (по теме устройства).
dark_colors object Цвета тёмной версии { поле: "#RRGGBB" }; ключи: bg_color, header_color, answers_text_color, widget_active_color, buttons_color, buttons_text_color, dropdown_bg_color, link_color, error_color, backdrop_color, bg_gradient_start, bg_gradient_end. Незнакомые ключи отбрасываются.
custom_font_name string Название своего шрифта, до 60 символов. Чтобы применился — то же название в base_font или heading_font.
custom_font_url string Адрес файла шрифта: путь от корня или http(s)://.
welcome_and_finish_size_percent integer Свой размер приветствия и завершения, 50–200 % от M.
questions_size_percent integer Свой размер вопросов, 50–200 % от M.
answers_size_id integer Размер вариантов ответа: 0, 1, 2.
answers_size_percent integer Свой размер вариантов ответа, 50–200 %; важнее answers_size_id.
answer_selected_style string Вид выбранного варианта: fill, frame, check.
answer_letters boolean Буквы A, B, C… у вариантов.
question_backdrop string Подложка под вопросами: none, card, glass.
backdrop_color string Цвет карточки подложки, #RRGGBB.
bg_gradient_animated boolean Живой градиент.
bg_video_url string Адрес видео фона (.mp4, .webm), при background_type_id: 3.
bg_mobile_image_url string Адрес своей картинки фона для телефона.

Недопустимое значение опций «Дизайна» — ошибка инструмента (isError: true); кабинет в таком случае молча сохраняет «нет значения». Адреса — без пробелов, кавычек, скобок, <> и \. custom_font_file_id, bg_video_file_id, bg_mobile_image_file_id инструменты не принимают: id появляются только при загрузке файла в кабинете, загрузки файлов темы через ассистента нет — передаётся адрес. background_type_id: 3 — видео на фоне.

update_theme

Обновляет существующую тему (настройки аналогичны create_theme). Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Тема успешно обновлена."
    },
    {
      "type": "text",
      "text": "{\"theme\":{\"id\":5,\"workspace_id\":1,\"name\":\"Тема 1\",\"base_font_id\":1,\"background_type_id\":2,\"bg_gradient_start\":\"#00d4ff\",\"bg_gradient_end\":\"#090979\",\"buttons_type_id\":1,\"created_at\":\"...\",\"updated_at\":\"...\"}}"
    }
  ],
  "isError": false,
  "theme": {
    "id": 5,
    "workspace_id": 1,
    "name": "Тема 1",
    "base_font_id": 1,
    "background_type_id": 2,
    "bg_gradient_start": "#00d4ff",
    "bg_gradient_end": "#090979",
    "buttons_type_id": 1,
    "created_at": "...",
    "updated_at": "..."
  }
}
Параметр Тип Описание
workspace_id integer (Обязательный) ID рабочего пространства.
theme_id integer (Обязательный) ID темы (theme://list).
Остальные параметры Аналогичны параметрам create_theme (от name до bg_mobile_image_url). Не переданное поле не меняется.

manage_theme

Копия, удаление и возврат темы оформления: copy, delete, restore.

Опросы, которые пользовались удалённой темой, переводятся на тему по умолчанию — и черновики, и опубликованные, у последних сбрасывается кэш рендера. В ответе reassigned_quizzes говорит, скольких это коснулось. Общие темы сервиса аккаунту не принадлежат: их нельзя ни удалить, ни восстановить.

Параметр Тип Описание
workspace_id integer (Обязательный) ID workspace.
action string (Обязательный) copy, delete, restore.
theme_id integer (Обязательный) ID темы из theme://list.

Цвет текста ответов и выпадающего списка

update_theme дополнительно принимает answers_text_color и dropdown_bg_color (оба string): цвет текста ответов и цвет фона выпадающего списка. Формат обоих — #RRGGBB (шесть шестнадцатеричных цифр). Это параметры верхнего уровня рядом с workspace_id и theme_id, а не вложенный объект. Пример аргументов:

JSON
{"workspace_id":7,"theme_id":14,"answers_text_color":"#20202A","dropdown_bg_color":"#FFFFFF"}

Необходимо передать хотя бы одно поле оформления. Требуются право theme с учётом владельца темы и платный тариф; тема должна принадлежать указанному воркспейсу.

Раздача опроса: ссылка, QR-код, пароли, печать

set_quiz_link меняет ту часть публичной ссылки, которую видит респондент: вместо машинного адреса — понятный.

Занятый адрес инструмент не подменит молча, а откажет. Со старого адреса заводится переадресация, так что уже разосланные ссылки продолжают работать. Возможность доступна не на всех тарифах.

Параметр Тип Обязательность и ограничения
quiz_id integer Обязательный ID доступного опроса.
uri string Обязательная адресная часть, 3–255 символов; s и S зарезервированы. Например, customer-feedback.

Требуются право settings и тарифная возможность изменения адреса. Результат содержит quiz_id, uri и previous_uri.

manage_quiz_qr_code

QR-код опроса: show, generate, delete_logo.

Код собирается по ссылке опубликованного опроса, поэтому неопубликованный опрос получает отказ — кодировать нечего. Незаданные настройки берутся из прошлой сборки, а не из умолчаний. Повторный generate с теми же настройками отдаёт готовый файл и regenerated: false: каждая сборка пишет новый файл и списывает место с тарифа. Пересобрать принудительно — force.

Логотип в центре кода загружают в кабинете: через ассистента картинку не передать. Уже загруженный логотип код учитывает, а убрать его можно — delete_logo; из самого кода он уйдёт после повторной сборки. SVG-логотип в код, собранный здесь, не вклеивается — код собирается без логотипа; с ним его рисует конструктор QR в кабинете. Не покрыто тестом.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
action string (Обязательный) show, generate, delete_logo.
format string png, svg, eps. По умолчанию — как в прошлый раз, иначе png.
size integer Сторона картинки, 100–1000. По умолчанию 320.
color, background string Шестизначный HEX: #000000, #ffffff.
margin integer Поля вокруг кода, 0–10. По умолчанию 1.
force boolean Пересобрать, даже если настройки не менялись.

manage_quiz_passwords

Ведёт список паролей доступа к закрытому опросу: list, add, update, delete.

Пароли хранятся хешами — прочитать заведённый пароль нельзя ни здесь, ни в конструкторе, только заменить новым. В списке видны номер и дата; по номеру в ответах (password_number визита) автор узнаёт, кто из приглашённых отвечал. Поэтому номера не переиспользуются после удаления.

Саму проверку пароля на входе включает настройка use_password в update_quiz_settings.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
action string (Обязательный) list, add, update, delete.
password string Пароль. Для update — новое значение.
passwords array Список паролей для add, до 500 за раз.
password_id integer ID пароля из list. Нужен для update и delete.

Ведёт наборы уникальных ссылок на опрос — отдельных адресов https://<домен опроса>/s/<код> с лимитом ответов, сроком, расписанием и паролем: list_groups, get_group, create_group, update_group, delete_group, list_links, add_links, update_link, bulk_links, export_links.

Чтение (list_groups, get_group, list_links, export_links) — по праву view_results, остальное — по праву settings. Ошибка проверки приходит машинным кодом поля: Проверка не пройдена: max_uses: max_uses_above_group. Набор или ссылка другого опроса — «нет такого набора или ссылки».

Выпускать ссылки (create_group, add_links) и менять настройки (update_group, update_link с чем-либо кроме active) можно на тарифе «Стандарт» и выше — опция publication.unique_links; без неё тарифный отказ. Чтение, выгрузка, включение, выключение и удаление уже выпущенного работают и без опции.

Инструмент помечен как необратимый (удаляет наборы и ссылки) и выходящий наружу (выпускает адреса, которые открываются респондентам).

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
action string (Обязательный) Одно из действий выше.
group_id integer ID набора. Нужен всем действиям, кроме list_groups, create_group и update_link.
link_id integer ID ссылки. Нужен для update_link.
name string Обязательно для create_group: непустое название после обрезки пробелов, до 120 символов.
count integer Сколько ссылок выпустить (create_group, add_links), 1..1000.
labels array<string> Названия ссылок (create_group, add_links): 1–1000 непустых имён после обрезки пробелов, каждое до 64 символов; с ними count не учитывается. Не передавайте пустой список.
max_uses integer\|null Лимит ответов на ссылку для create_group: 1–100000, по умолчанию 1; null — без лимита.
changes object Обязательно для update_group и update_link; поля перечислены ниже. Пропущенные настройки сохраняются.
dry_run boolean Для update_group: только посчитать becomes_used для нового max_uses, без сохранения. По умолчанию false; остальные действия его не используют.
page, per_page integer Страница list_links, по умолчанию 1; per_page 1–500, по умолчанию 50.
search, show string Отбор для list_links и для bulk_links без ids; show: all, no_answers, answered, limit_reached, unavailable.
bulk_action string Для bulk_links: enable, disable, delete.
ids array ID ссылок для bulk_links; без них действие идёт по отбору search / show на всех страницах. Для delete без ids нужен search или show, отличный от all, — иначе ошибка: весь набор удаляет delete_group.
format string Для export_links: xlsx (по умолчанию) или csv.

Во всех действиях обязательны quiz_id и action. Условия остальных полей:

action Дополнительно требуется Результат
list_groups Ничего groups, total
get_group group_id group
create_group name и count либо непустые labels group с created_links
update_group group_id, changes group; при dry_run:true — becomes_used
delete_group group_id group_id; удаляется набор со ссылками
list_links group_id links, meta с пагинацией
add_links group_id и count либо непустые labels added, links
update_link link_id, changes link; group_id не требуется
bulk_links group_id, bulk_action и ids либо отбор affected
export_links group_id group_id, format, download_url

В реестре именно эти десять действий. Одну ссылку удаляют через bulk_links с bulk_action: "delete" и ids: [501]. Пустой ids не означает весь набор. Без ids отбор действует на всех страницах; search по умолчанию пуст, show — all. Удаление без ids требует непустого search или show, отличного от all; целиком набор удаляет delete_group.

На опрос допускается до 50 живых наборов. create_group и add_links выпускают новые адреса при каждом успешном вызове: повтор запроса после потери ответа может создать дубликат набора или ещё одну пачку ссылок. Сначала прочитайте list_groups/list_links и проверьте результат. У этих действий нет ключа идемпотентности.

Поля changes для набора (update_group):

Поле Тип Ограничения и поведение
name string Непустое, до 120 символов.
active boolean Включить/выключить набор.
max_uses integer\|null 1–100000 или без лимита. Ссылки со своим лимитом не меняются.
starts_at, expires_at string\|null ISO-дата/время или очистка; окончание позже начала.
period_timezone, schedule_timezone string\|null IANA-зона, например Europe/Moscow.
schedule_enabled boolean Включить недельное расписание.
schedule_days array<integer> Дни 1–7, без повторов; при включённом расписании список непустой.
schedule_time_from, schedule_time_to string\|null HH:mm; при включённом расписании оба заданы и различаются.
password_mode string survey, none, own; для own нужен сохранённый или новый пароль.
password string Непустой, до 64 символов; значение обратно не возвращается.
message_used, message_invalid string Текст отказа, до 1000 символов без разметки; пустой — стандартный.

Поля changes для ссылки (update_link):

Поле Тип Ограничения и поведение
label string\|null До 64 символов; пустое — название по умолчанию.
active, own_max_uses, own_password boolean Выключатель ссылки; собственный лимит; собственное правило пароля.
max_uses integer\|null Собственный лимит 1–100000: не меньше набранных ответов; при лимите набора — не выше максимума из лимита набора и набранных ответов, null тогда запрещён. Для нового своего лимита передайте own_max_uses:true; false возвращает лимит набора.
password_add string Добавить непустой пароль до 64 символов.
password_edit object { "id": 7, "value": "new-password" }: изменить существующий пароль.
password_delete integer ID существующего пароля этой ссылки.
params array<object> Полная замена скрытых переменных, до 20 элементов {name,value}. Имя: латиница/_, до 64 символов, без повторов; значение непустое до 200. Служебные имена запрещены. [] очищает список.

Например, аргументы создания и проверки изменения лимита:

JSON
{"quiz_id":42,"action":"create_group","name":"Отдел продаж","labels":["Москва","Казань"],"max_uses":1}
JSON
{"quiz_id":42,"action":"update_group","group_id":12,"changes":{"max_uses":2},"dry_run":true}

export_links отдаёт тот же файл, что «Скачать» в кабинете: все ссылки набора, колонки — адрес, код, метка, число ответов, незаконченные, время последнего ответа и доступ. Результат — download_url, одноразовая подписанная ссылка на час, как у остальных выгрузок ассистента.

Пагинация, search и show не ограничивают выгрузку: в файл идут все не удалённые ссылки набора.

Ответы по ссылкам фильтруются в get_quiz_answers и generate_filtered_report полями unique_link_group_id / unique_link_ids.

export_quiz_print

Собирает печатную версию опроса — самих вопросов, не ответов.

Форматы pdf, word, txt, html; размер шрифта влияет на вёрстку печатной страницы. Возвращает подписанную ссылку на час. PDF собирает headless-браузер, поэтому падает независимо от остальных форматов — отказ приходит с внятным текстом.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
format string pdf (по умолчанию), word, txt, html.
font string little, medium (по умолчанию), large.
sheet object Что будет на листе — как в разделе «Печать» кабинета. Не передан — лист печатается как раньше. Поля ниже.

Поля sheet — все необязательны, не переданное берёт значение по умолчанию.

Поле Тип По умолчанию Что на листе
header boolean false Заголовок и описание приветствия в начале листа; без приветствия — название опроса
logo boolean false Логотип из темы опроса; нет в теме — ничего
qr boolean false Рамка «Пройти онлайн» с адресом опроса и QR-кодом
fields boolean false Поля «Имя», «Дата», «Подпись» после вопросов
lines integer нет 2, 4 или 6 линеек под многострочным свободным ответом вместо рамки
paper string a4 a4 или letter — только pdf и word
numbering boolean true Номер перед вопросом
page_numbers boolean false Номер страницы внизу каждого листа — только pdf и word
copyright boolean true Надпись сервиса внизу листа
  • Права: хватает любого из двух — settings или view_results; при значении «только свои» — только опросы, созданные участником. Нет ни того ни другого — отказ с объяснением по праву view_results.
  • Значение вне списка — отказ с текстом ошибки по полю.
  • Надпись сервиса снимается только на тарифе с отключаемым копирайтом, иначе copyright: false игнорируется. На таком тарифе надписи нет и тогда, когда её отключили в брендинге воркспейса.
  • В txt нет логотипа, QR-кода, размера листа и номеров страниц; в html — размера листа и номеров страниц.

Требуется право settings. Например, аргументы печати PDF с полями для заполнения:

JSON
{"quiz_id":42,"format":"pdf","font":"medium","sheet":{"header":true,"fields":true,"lines":4,"paper":"a4","numbering":true}}

Ответы: видимость, теги, пометки, чистка

Ответы и аналитика

toggle_answer_visibility

Скрывает или показывает конкретный ответ респондента. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Видимость ответа обновлена."
    },
    {
      "type": "text",
      "text": "{\"answer_id\":100,\"is_exclude\":true}"
    }
  ],
  "isError": false,
  "answer_id": 100,
  "is_exclude": true
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
answer_id integer (Обязательный) ID ответа.
is_hide boolean (Обязательный) true (скрыть) или false (показать).

tag_answer

Добавляет/синхронизирует теги для выбранного ответа. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Теги ответа обновлены."
    },
    {
      "type": "text",
      "text": "{\"result\":{\"attached\":[5],\"detached\":[]}}"
    }
  ],
  "isError": false,
  "result": {
    "attached": [
      5
    ],
    "detached": []
  }
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
answer_id integer (Обязательный) ID ответа.
tags array (Обязательный) Массив строк-тегов (заменяет старые).

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

Теги ответов

tag_answer сопоставляет теги одного ответа по именам, поэтому перед ним стоит прочитать справочник — иначе появятся новые теги вместо существующих.

Инструмент Что делает
get_answer_tags теги рабочего пространства
create_answer_tag создаёт тег; одноимённый не дублируется
delete_answer_tag удаляет тег вместе со всеми привязками к ответам

Аргументы delete_answer_tag

Параметр Тип Обязательность и ограничения
workspace_id integer Обязательный ID доступного рабочего пространства.
tag_id integer Обязательный ID тега, не меньше 1.

Значений по умолчанию нет. Удаление ограничено выбранным workspace: чужой или уже удалённый тег возвращает отказ. Результат содержит workspace_id и tag_id. Удаляются и все привязки этого тега к ответам.

JSON
{"workspace_id":1,"tag_id":5}

Пометка у ответа

set_answer_note ставит короткую пометку у отдельного прохождения — «перезвонить», «дубль», «жалоба». До 100 символов, пустое значение снимает.

Это не заметка к опросу целиком (update_quiz_note) и не тег (tag_answer): пометка живёт у самого ответа и видна в его строке.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
answer_id integer (Обязательный) ID ответа из quiz://{id}/answers.
note string Текст до 100 символов; пусто — снять пометку.

Чистка ответов

delete_quiz_answers убирает ответы в корзину, возвращает их обратно или удаляет насовсем — типичная уборка после тестовых прохождений.

Обычное удаление обратимо: ответ уходит из списка и отчёта, но лежит в корзине. Безвозвратное необратимо, вместе с ответом убираются файлы респондента, и поэтому оно требует явного подтверждения в самом запросе — одного намерения модели мало.

Скрытые и отправленные на модерацию ответы инструмент не трогает, как и конструктор.

По умолчанию действие работает над перечисленными ответами (answer_ids, до 500 за раз). Для «очисти опрос» есть область scope: all — она идёт запросом, а не списком, и потому справляется с десятками тысяч ответов. В этом режиме answer_ids не нужен, зато можно передать excluded_answer_ids — что оставить как есть.

Область all затрагивает всю собранную работу, и списка id, по которому видно объём, в запросе нет — поэтому она требует confirm_purge даже для обычного удаления в корзину. Возврат из корзины ничего не стирает и подтверждения не требует. Скрытые и отправленные на модерацию ответы массовый режим тоже не трогает.

set_answers_order_mode

Порядок вопросов внутри карточки ответа. Тот же порядок получают публичная ссылка на ответы и выгрузка в Word, поэтому настройка меняет и то, что видят другие.

Параметр Тип Описание
quiz_id integer Обязательный. ID опроса.
answers_order_mode string Обязательный. respondent — в том порядке, в каком человек проходил опрос; survey — в порядке вопросов самого опроса.

get_answer_extra_field_values

Показывает, какие значения встречались у метки ссылки в ответах опроса.

Метки цепляют к ссылке — utm_source, идентификатор ученика, номер курса — и они приходят вместе с ответом; по ним отбирают ответы в отчёте. Имена меток отдаёт quiz://{id}/hidden_options, а этот инструмент — значения выбранного имени, с поиском и постранично: у крупного опроса их бывают тысячи. Отбор по меткам доступен не на всех тарифах.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
key string (Обязательный) Имя метки, например utm_source.
search string Поиск среди значений.
page integer Страница, с 1.
per_page integer Значений на странице, 1–100. По умолчанию 20.

Отчёты: фильтры, AI-отчёты, оформление, ссылки

generate_filtered_report

Формирует отчёт по опросу с фильтрацией (даты, виджеты, теги). Возвращает report_uuid. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Фильтрованный отчет сформирован."
    },
    {
      "type": "text",
      "text": "{\"data\":{\"report_uuid\":\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\"total\":150}}"
    }
  ],
  "isError": false,
  "data": {
    "report_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "total": 150
  }
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
dateFrom string Начало (формат d.m.Y, напр. 01.01.2024).
dateTo string Конец (формат d.m.Y).
is_complete boolean Необязательный параметр совместимости; при пропуске устанавливается true. Итоговый срез берётся из сохранённых statuses, а не из этого флага.
widgets array<object> Необязательные объекты условий по вопросам, не список UUID. Структура и пример ниже.
tags array Массив тегов.
unique_link_group_id integer Необязательный положительный ID набора уникальных ссылок (manage_quiz_unique_links). Работает на любом тарифе, в отличие от остальных фильтров.
unique_link_ids array<integer> Необязательный список до 1000 положительных ID. Только ответы этих ссылок набора; без unique_link_group_id не учитывается.
period string Скользящий период: today, yesterday, last_7_days, last_30_days (по сегодня включительно), this_week (с понедельника), this_month, last_month. Дни — на момент запроса в часовом поясе владельца опроса. Если задан, dateFrom/dateTo не учитываются.
viewed boolean false — только непросмотренные в «Ответах», true — только просмотренные.
payment string Оплата ЮKassa: paid — прошла, unpaid — успешной оплаты нет.
source array Откуда ответ, любое из own, panel (панель WebОтвет), import, autofill (автозаполнение и ИИ). Значения не пересекаются.
complained boolean true — только ответы с жалобой, false — только без жалобы.
stopped_at array id из filters.stopped_at (uuid вопроса, бывает id группы или информационного блока): только незаконченные ответы, у которых последний показанный элемент — один из них.
quality array Подозрительные ответы, любое из: too_fast (законченный ответ быстрее трети медианы времени прохождения опроса), same_answers (матрица из 4+ отвеченных строк с одним столбцом во всех), gibberish (текстовый ответ короче 3 символов или из одной повторённой буквы).
city array id городов GeoNames из filters.city отчёта: город визита по IP.
exclude object {country, device, browser, city, tags, categories} — исключить ответы, подходящие под любое значение (city — id городов). Побеждает одноимённый фильтр.

Новые поля, как и остальные фильтры кроме уникальных ссылок, работают только на тарифе с опцией фильтров результатов; неверное значение — ошибка проверки. Те же ключи хранит набор save_quiz_report_filters. В data есть meta.period — посчитанные дни скользящего периода ({dateFrom, dateTo}), null — периода нет. timeFrom, timeTo, scoreValue — только числа: строка — ошибка проверки, а не условие. save_quiz_report_filters их не проверяет, но при применении нечисловое значение игнорируется.

Требуется право view_results. Без дат, условий по вопросам и тегов соответствующие дополнительные ограничения не задаются. Даты, условия и теги применяются при доступной тарифной опции фильтрации результатов. unique_link_group_id без списка выбирает весь набор, с unique_link_ids — пересечение набора и ссылок. Передавать is_screenout или is_deleted этому инструменту нельзя: таких аргументов в схеме нет.

widgets задаёт отбор ответов по условиям, а не выбор столбцов отчёта. Входная схема требует массив, но не описывает вложенные элементы: обработчик передаёт их слою фильтрации. Для рабочего условия нужны поля формы, которую читает этот слой:

Поле объекта widgets[] Тип Назначение
id integer Идентификатор условия.
widget_uuid string Валидный UUID вопроса из структуры этого опроса.
type string Тип именно этого вопроса, например input.
operator string Оператор данного типа. Для input: equal, not_equal, contains, begin_with.
value string Значение для сравнения; для input — текст. Формат для других типов отличается.
condition string AND или OR; при пропуске слой фильтрации использует OR.

Строки UUID вместо объектов не соответствуют формату слоя фильтрации. Операторы и дополнительные координаты матрицы/распределения зависят от типа вопроса; форму сохранённых условий можно прочитать через get_quiz_report_filters. Не переносите пример input на другой тип вопроса.

Для статусов используются сохранённые statuses типа report (см. save_quiz_report_filters): без сохранённого выбора — completed; unfinished и screenout зависят от тарифной опции. Ни пропуск, ни true, ни false в is_complete не заменяют этот выбор. Настройка среза меняет состояние отчёта, поэтому перед её записью учитывайте, кто ещё использует этот отчёт.

Пример аргументов:

JSON
{"quiz_id":42,"dateFrom":"01.10.2026","dateTo":"08.10.2026","unique_link_group_id":12,"unique_link_ids":[501,502]}

Пример условия «свободный ответ содержит Да»; замените UUID и тип данными своего вопроса:

JSON
{"quiz_id":42,"dateFrom":"01.10.2026","dateTo":"08.10.2026","widgets":[{"id":1,"widget_uuid":"a1b2c3d4-e5f6-4789-abcd-ef1234567890","type":"input","operator":"contains","value":"Да","condition":"OR"}]}

count_quiz_answers

Считает, сколько ответов войдёт в отчёт или в список ответов с переданными фильтрами, не выбирая сами ответы. Ответы не отмечаются просмотренными. Право view_results, нужна опция фильтров результатов в тарифе (иначе — ошибка: число означало бы «все ответы»).

Параметр Тип Описание
quiz_id integer Обязательный. ID опроса.
section string Обязательный. report — выборка отчёта (срез statuses), answers — список ответов (вкладка is_complete / is_screenout / is_deleted, поиск search).
filters object Фильтры той же формы, что у generate_filtered_report.

В data: quiz_id, section, count. У отчёта считаются и ответы без единого отвеченного вопроса.

manage_quiz_filter_presets

Именные наборы фильтров раздела («Мои фильтры»). Набор, применённый последним (save_quiz_report_filters), от них не зависит. Список видит каждый с правом view_results; менять и удалять может автор, владелец пространства или администратор.

Параметр Тип Описание
quiz_id integer Обязательный. ID опроса.
action string Обязательный. list, create, update, delete.
section string report или answers. Нужен для list и create.
preset_id integer ID набора из list. Нужен для update и delete.
name string 1–60 символов, пробелы по краям обрезаются. Нужно для create.
filters object Набор той же формы, что у generate_filtered_report; хранится как есть.

list отдаёт items (новые первыми), create и update — item: id, section, name, filters, author ({id, name} или null), created_at, updated_at. Ошибки: пустое имя (name_required), у раздела уже 50 наборов, набора нет или он от другого опроса, не автор и не владелец/администратор.

save_quiz_report_filters

Сохраняет набор фильтров списка ответов или отчёта. Тот же набор читают экран, публичная ссылка, PDF и Word, поэтому он меняет и то, что видят другие. Текущее состояние — в quiz://{id}/report_filters.

Параметр Тип Описание
quiz_id integer Обязательный. ID опроса.
type string Обязательный. answers — список ответов, report — отчёт.
filters object Обязательный. Объект фильтров той же формы, что при чтении.

У типа report в наборе есть ключ statuses — срез по статусам прохождения, то есть по каким ответам считается отчёт: массив из completed (завершившие), unfinished (ушедшие, не дойдя до конца) и screenout (дисквалифицированные). Ключ не передан — прежний срез остаётся: сохранение фильтров без него не сбрасывает вкладку. Пустой массив и неизвестные значения приводятся к [completed]; unfinished и screenout закрыты опцией тарифа и на закрытом тарифе отбрасываются. Срез действует не только на экране — по нему же считаются PDF, Word и отчёт по публичной ссылке. У типа answers ключа нет.

На тарифах без опции сохранённых фильтров набор не сохраняется — инструмент вернёт отказ по тарифу. Срез отчёта — исключение: он сохраняется и без опции, потому что это состояние отчёта, а не платный фильтр.

generate_ai_report

Строит AI-отчёт по ответам опроса.

Отчёт состоит из трёх независимых разделов: текстовый анализ, сравнительный и количественный. Каждый строится отдельно, поэтому текстовый можно пересобрать, не трогая остальные. Работа идёт в очереди — инструмент сообщает, какие разделы поставлены в работу, а готовый текст забирает get_ai_report.

Пока ответов меньше порога (report_ai_v2.min_answer_count), ни один раздел не запускается: приходит отказ с числами, а не пустой успех. Повторный запуск раздела, который уже строится, ничего не ломает — он попадёт в already_running_sections. Тариф ограничивает число опросов с отчётом; пересборка существующего лимит не расходует.

Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Разделы отчёта поставлены в работу. Готовый текст — в get_ai_report."
    },
    {
      "type": "text",
      "text": "{\"quiz_id\":42,\"queued_sections\":[\"text_analysis\",\"comparative\"],\"already_running_sections\":[\"quantitative\"],\"refused_sections\":{}}"
    }
  ],
  "isError": false,
  "quiz_id": 42,
  "queued_sections": [
    "text_analysis",
    "comparative"
  ],
  "already_running_sections": [
    "quantitative"
  ],
  "refused_sections": {}
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
section string all (по умолчанию), text_analysis, comparative, quantitative.
locale string Язык отчёта. По умолчанию — язык владельца ключа.

get_ai_report

Отдаёт готовый AI-отчёт — тот самый, что автор видит в разделе результатов.

У каждого из трёх разделов свой статус: готов, строится сейчас или не построен, и почему — мало ответов либо нет подходящих вопросов. Читать отчёт следует этим инструментом: генерация тратит лимит тарифа и упирается в задержку между перезапусками.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.

share_ai_report

Даёт поделиться AI-отчётом: публичной ссылкой или файлом PDF.

Ссылку открывают без входа в аккаунт. Делиться можно только построенным отчётом, и опрос должен быть опубликован: страница отчёта живёт на его адресе. Ссылка требует тарифа на публикацию результатов, PDF — на выгрузку. Ссылка на скачивание PDF действительна час.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
format string link (по умолчанию) или pdf.

Создаёт публичные ссылки для шеринга аналитики с заказчиками (без авторизации). Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Публичная ссылка summary создана."
    },
    {
      "type": "text",
      "text": "{\"url\":\"https://webask.io/results/...\"}"
    }
  ],
  "isError": false,
  "url": "https://webask.io/results/..."
}

Все три инструмента требуют доступ к опросу и право view_results. Ссылка открывает выбранные данные без входа в аккаунт; результат создания ссылки не подтверждает, что её уже просмотрел заказчик.

Параметр Тип Обязательность и default
quiz_id integer Обязателен.
date_from, date_to string Необязательные границы Y-m-d; при пропуске соответствующая граница не задаётся.
Параметр Тип Обязательность и default
quiz_id integer Обязателен.
is_complete boolean Пропуск/true — сохранённый срез statuses отчёта; false — unfinished.
is_screenout boolean По умолчанию false; true выбирает screenout вместо среза выше.
is_deleted boolean По умолчанию false; true выбирает мягко удалённые ответы, независимо от двух флагов выше.

Для незавершённых и отсеянных тариф ограничивает сохранённый/выбранный срез: недоступные статусы исключаются, пустой срез заменяется completed. Поэтому is_complete:true здесь не обещает только завершённые — сохранённый срез может включать несколько доступных статусов. Даты отдельными аргументами этому инструменту не передаются.

JSON
{"quiz_id":42,"is_complete":false,"is_screenout":false,"is_deleted":false}
Параметр Тип Обязательность и default
quiz_id integer Обязателен.
type string По умолчанию full; также in, not_in, answer.
answerIds array<integer> Необязательный список ID для выбранного типа ссылки; при пропуске — []. Регистр имени важен.
date_from, date_to string Необязательные границы Y-m-d; пропуск — без соответствующей границы.
timezone string Часовая зона; при пропуске берётся зона пользователя, резервно UTC.
is_complete boolean Пропуск/true — завершённые; false — незавершённые.
is_screenout boolean По умолчанию false; true — завершённые отсеянные, независимо от is_complete.
is_deleted boolean По умолчанию false; true — мягко удалённые, независимо от завершённости и отсева.

Приоритет флагов — удалённые → отсеянные → завершённость. При is_screenout:false отсеянные исключаются из обычного среза. Ссылка получает снимок сохранённых фильтров списка ответов; отбор по уникальным ссылкам сохраняется и без платной опции фильтров. Эти фильтры и даты дополнительно сужают выбранный срез. Результат содержит url и shared_url; повтор создаёт новую ссылку.

JSON
{"quiz_id":42,"type":"full","date_from":"2026-10-01","date_to":"2026-10-08","is_complete":true,"is_screenout":false,"is_deleted":false}

Каждый вызов создаёт новую ссылку. Номер в названии новой ссылки («Сводка #3») — порядок создания среди ссылок раздела, считая выключенные; это number из get_share_links.

Список публичных ссылок на сводку, отчёт или ответы опроса — сначала новые, вместе с выключенными. Нужно право view_results. Только чтение.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
section string (Обязательный) summary, report или answers.
limit integer От 1 до 100, по умолчанию 100.

Ответ — total (сколько всего ссылок у раздела, с выключенными) и items: uuid, number (порядок создания с 1, выключенные считаются), url, created_at (ISO 8601 в часовом поясе пользователя), is_active, а у answers — answers_count (сколько ответов в ссылке, null — все ответы). В answers входят только ссылки на все и на выбранные ответы: ссылки респондентов на свой ответ и ссылки «все, кроме выбранных» не входят.

Выключает или включает публичную ссылку. Выключенная перестаёт открываться — публичная страница отвечает как на ссылку, которой нет; строка остаётся, ссылку можно включить обратно. Нужно право view_results. Пометки: выключение обрывает доступ (destructiveHint), включение снова открывает ссылку наружу (openWorldHint).

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
section string (Обязательный) summary, report или answers.
uuid string (Обязательный) uuid ссылки из get_share_links.
is_active boolean (Обязательный) false — выключить, true — включить. Только boolean.

Успех — link: ссылка в том же виде, что в get_share_links. Повторный вызов с тем же значением ничего не меняет. Нет ссылки с таким uuid у раздела опроса — ошибка «У этого раздела опроса нет ссылки с таким uuid».


Оформление отчётов

Цвета и подписи графиков в отчёте настраиваются на двух уровнях.

  • Общая палитра аккаунта — одна на весь воркспейс. Её используют опросы, у которых включён флаг results_appearance_use_shared.
  • Своя палитра опроса — поле results_appearance в update_quiz_settings.

Приоритет у общей: пока флаг включён, свои цвета опроса хранятся, но не применяются, и возвращаются, когда флаг выключают. Поэтому передача results_appearance заодно выключает флаг — иначе правка не дала бы эффекта.

Объект оформления одинаков везде:

Поле Значения
palette_id default, pastel, vivid, ocean, contrast, warm, mono, custom
custom_colors цвета своей палитры, #RRGGBB, от 2 до 14; меньше двух — палитра откатится на default
bar_color_mode single — один цвет на график, palette — свой цвет каждому варианту
font_family название гарнитуры Google Fonts или null
show_value_labels показывать значения на графике
show_grid_lines показывать линии сетки

Настройки строк отчёта задаются отдельным полем report_row_options: sort_mode (default, asc, desc) и value_format (both, count, percent). null в любом из этих полей возвращает стандартный вид.

Действующее оформление опроса приходит в quiz://{id}/structure: results_appearance (своё), results_appearance_use_shared (флаг), report_row_options и effective_results_appearance — то, которое реально применится.

get_workspace_report_appearance

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

Параметр Тип Описание
workspace_id integer Обязательный. ID воркспейса из workspace://list.

update_workspace_report_palette

Задаёт общую палитру аккаунта. Все опросы с включённым флагом начинают рисовать отчёты ею сразу.

Параметр Тип Описание
workspace_id integer Обязательный. ID воркспейса.
settings object Обязательный. Объект оформления (таблица выше).

create_report_appearance_preset

Сохраняет набор оформления в библиотеку аккаунта, чтобы применять его к другим опросам. Набор — шаблон: его удаление или правка не меняют опросы, к которым его применяли. В воркспейсе можно хранить до 20 наборов.

Параметр Тип Описание
workspace_id integer Обязательный. ID воркспейса.
name string Обязательный. Название, до 40 символов.
settings object Обязательный. Объект оформления.

delete_report_appearance_preset

Удаляет набор из библиотеки. Опросы, к которым его применяли, своё оформление сохраняют.

Параметр Тип Описание
workspace_id integer Обязательный. ID воркспейса.
preset_id integer Обязательный. ID набора из get_workspace_report_appearance.

Выгрузки ответов и отчётов

export_answers_csv / export_answers_xlsx / export_answers_word / export_answers_spss

Выгружают выбранный срез ответов: CSV, Excel, Word или SPSS (.sav). Требуются доступ к опросу, право view_results и тарифная возможность выгрузки. Фильтры не совпадают по умолчанию с get_quiz_answers: здесь пропущенный is_complete означает завершённые.

Каждый из четырёх инструментов принимает следующую схему; обязательным является только quiz_id.

Параметр Тип Пропуск, значения и ограничения
quiz_id integer Обязательный ID опроса.
is_complete boolean Пропуск/true — завершённые; false — незавершённые.
is_screenout boolean По умолчанию false; true — завершённые отсеянные, независимо от is_complete.
is_deleted boolean По умолчанию false; true — мягко удалённые, независимо от завершённости и отсева.
ids array<integer> Необязательное включение ID; при пропуске/[] ограничения нет. Ограничение проверенной реализации описано ниже.
excludedIds array<integer> Необязательное исключение ID; при пропуске/[] ограничения нет. Регистр excludedIds важен.

Приоритет флагов: удалённые → отсеянные → завершённость. При is_screenout:false отсеянные исключаются из обычного среза. Фильтры ID дополнительно сужают этот срез, не заменяют его. При одновременном включении и исключении применяется пересечение: включённый и исключённый ID в файл не попадает.

В проверенной реализации из массивов ids и excludedIds учитывается только первый элемент. Для надёжного отдельного среза передавайте один ID; несколько ID в массиве не гарантируют нужную выборку. ids также требует тарифной опции фильтрации результатов, без неё включение ID не применяется; excludedIds применяется независимо. Перед отправкой файла заказчику проверьте фактический состав выгрузки. Аргументов unique_link_group_id / unique_link_ids у этих четырёх инструментов нет.

Пример аргументов выгрузки с исключением одного тестового ответа:

JSON
{"quiz_id":42,"is_complete":true,"is_screenout":false,"is_deleted":false,"excludedIds":[100]}

Полный результат CSV с данными (URL и текст сообщения иллюстративны):

JSON
{
  "content": [
    {"type":"text","text":"Файл CSV готов. Скачать по ссылке (действует 1 час, после скачивания файл удаляется): https://mcp.webask.io/export/example"},
    {"type":"text","text":"{\"quiz_id\":42,\"format\":\"csv\",\"download_url\":\"https://mcp.webask.io/export/example\"}"}
  ],
  "isError": false,
  "quiz_id": 42,
  "format": "csv",
  "download_url": "https://mcp.webask.io/export/example"
}

Данные остаются соседними полями и дублируются JSON-текстом в следующем блоке content; отдельный вложенный result добавлять не нужно. Это результат инструмента внутри JSON-RPC result. Отказ инструмента отмечается isError:true; дополнительные детали, если они есть, также попадают в JSON-блок content.

Ссылка подписана на один час; после скачивания файл удаляется. Забытые файлы убирает почасовая уборка. У Word поле format результата равно doc, у SPSS — spss. Если ответов для выгрузки нет, CSV/XLSX/Word возвращают пустую строку download_url, SPSS — null; отсутствие ссылки не надо заменять выдуманным URL. SPSS включает параметры ссылки вместе с ответами.

export_summary_pdf

Выгружает сводную аналитику в PDF. Обязателен только quiz_id: integer; дополнительных фильтров в схеме нет. Пример аргументов:

JSON
{"quiz_id":42}

export_filtered_report_pdf / export_filtered_report_word

Выгружают отчёт с сохранённым состоянием и фильтрами в PDF/Word. Обязателен только quiz_id: integer; даты, ID ответов, флаги завершённости и report_uuid этим инструментам не передаются. Сначала прочитайте сохранённые фильтры через get_quiz_report_filters и проверьте срез отчёта. Изменение сохранённых фильтров меняет состояние отчёта и для других пользователей.

JSON
{"quiz_id":42}

Для всех трёх выгрузок отчётов требуется право view_results и доступная тарифная выгрузка. Результат содержит quiz_id, format (pdf или doc) и download_url с той же оболочкой и сроком ссылки, что выше.

Интеграции: CRM, мессенджеры, таблицы, вебхуки

Интеграции опроса

get_quiz_integrations показывает, куда опрос отправляет ответы кроме почты — Telegram, MAX, AmoCRM, Битрикс24, Zapier, Google Таблицы.

По каждой видно три вещи: подключена ли она, включена ли отправка и разрешает ли её тариф. Поле blocked называет причину, по которой ответы не уходят: not_connected, disabled или blocked_by_tariff; пусто — значит отправка работает.

Подключение остаётся в интерфейсе: это вход в чужой аккаунт или ввод токена. Вебхуки живут отдельными инструментами — там доступны и настройка, и журнал доставки.

manage_quiz_crm

Отправка ответов в CRM: show, activate, deactivate, check для amocrm или bitrix24.

Переключатель отправки и проверка живости подключения. Токен CRM отзывают на её стороне, и со стороны опроса это выглядит как молчащая интеграция — check отвечает отказом, когда доступа нет, а не «связь в порядке». Без подключённого портала любое действие отказывает: подключение требует входа в аккаунт CRM и делается в кабинете. Сопоставление полей здесь не настраивается — см. get_quiz_crm_fields.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
crm string (Обязательный) amocrm или bitrix24.
action string (Обязательный) show, activate, deactivate, check.

get_quiz_crm_fields

Справочники CRM и текущее сопоставление полей. Только чтение.

Отдаёт то же, что человек видит в форме настройки: поля лида, сделки, контакта и компании, воронки со стадиями, ответственных, типы — и рядом сохранённое у опроса сопоставление. Справочники читаются живыми запросами в портал, поэтому вызов не мгновенный и вернёт отказ при отозванном доступе. По умолчанию берутся только lead и contact: каждый раздел — отдельный запрос в CRM.

Менять сопоставление нельзя намеренно: настройки хранятся свободным JSON, форму которого задаёт адаптер доставки, и блок не той формы молча ломает отправку заявок. В ответе стоит mapping_editable: false.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
crm string (Обязательный) amocrm или bitrix24.
sections array lead, deal, contact, company, users, pipelines, types. По умолчанию lead и contact.
deal_category_id integer Номер воронки: стадии принадлежат воронке. Только Bitrix24.

manage_quiz_crm_mapping

Сопоставление полей опроса с полями Bitrix24. Одна сущность за вызов: lead, contact, company, deal.

Сущность заменяется целиком, остальные вызов не трогает; набор полей тоже заменяется целиком, иначе убранное поле осталось бы в настройках. Правка полей не выключает отправку: незаданный enabled берётся из прежних настроек.

Форма настроек — свободный JSON, и её задаёт адаптер доставки, а не валидация запроса (кабинет проверяет из всего блока два поля). Поэтому блок неверной формы не отклоняется, а молча ломает отправку заявок.

Форма блока сущности:

Пример
<entity> = {
    enabled: bool,            // сущность участвует в отправке
    fields: {                 // ключ — имя поля Bitrix24 (TITLE, PHONE, UF_CRM_…)
        <field>: {
            widget_id?: string,     // UUID вопроса: значение берётся из ответа
            static_value?: string   // либо постоянное значение
        }
    },
    category_id?: string,     // воронка, только у deal
    stage_id?: string         // стадия этой воронки, только у deal
}

В поле берётся widget_id, а при его отсутствии static_value. Название сущности обязательно: если TITLE собрать не удалось, адаптер подставляет Lead #<id ответа> или Deal #<id ответа>. У воронки по умолчанию стадия не начинается с C, у воронки N — начинается с CN:.

Инструмент отклоняет до записи: поле, где заданы и вопрос, и постоянное значение (адаптер взял бы вопрос, значение потерялось бы); поле без источника; стадию из чужой воронки; стадию у сущности, кроме сделки. Если стадия всё же отвалилась при сохранении, в ответе stage_dropped.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
entity string (Обязательный) lead, contact, company, deal.
enabled boolean Отправлять ли сущность. Незаданное остаётся прежним.
fields object Имя поля Bitrix24 → {widget_id} или {static_value}. Набор заменяется целиком.
title_type string Field (из ответа) или Static (заданный текст).
title_value string ID вопроса при Field, текст при Static.
company_title_value string То же для названия компании (lead, company).
status string Статус лида (STATUS_ID). Только lead.
add_id_to_title boolean Дописать номер заявки в название. Только lead.
category_id integer Номер воронки, 0 — по умолчанию. Только deal.
default_stage string Стадия. У воронки по умолчанию не с C, у воронки N — с CN:. Только deal.
link_to_lead boolean Привязать сделку к созданному лиду. Только deal.

manage_quiz_amocrm_mapping

Сопоставление полей опроса с полями amoCRM. Отдельный инструмент, потому что форма другая: не «сущность → поля», а «что активно» плюс словари по номерам.

Блоки: deal — сделки в перечисленных воронках, list — контакт (0), компания (1) и каталоги, task — задачи. Один блок за вызов, блок заменяется целиком, соседние не трогаются, незаданные словари остаются прежними — правка стадии не стирает сопоставление полей. Пустой active сохраняется как осмысленное значение «не создавать».

Каждое значение проверяется по живым справочникам портала до записи: воронка существует, стадия принадлежит своей воронке, идентификатор поля есть в справочнике, ответственный есть в списке пользователей. В bind значение обязано быть идентификатором вопроса — постоянных значений эта форма не поддерживает, и текст молча дал бы пустое поле в CRM. Если портал справочники не отдал, инструмент отказывает, а не пишет «на удачу».

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
block string (Обязательный) deal, list, task.
active array Номера воронок; для list — 0, 1 и номера каталогов. Пустой список — не создавать.
titles object Номер → ID вопроса или текст названия.
statuses object Номер воронки → стадия.
users object Номер воронки (для list — 0 / 1) → ответственный. Словарь ответственных общий для сделок, списков и задач: присланные номера дописываются в него, остальные остаются.
use_price object Номер воронки → отправлять ли баллы в сумму сделки.
bind object ID поля amoCRM → ID вопроса опроса.
subtype object ID поля → уточнение вида значения (например, какой телефон).

manage_quiz_messenger

Настройки отправки ответов в мессенджер: telegram или max.

Отвечает на вопрос «куда именно уходят заявки»: список чатов, групп и людей, тема сообщения, какие вопросы из него исключены, есть ли кнопки. Действия: show, activate, deactivate, delete, toggle_buttons, save_widgets, remove_recipient, test.

Токены здесь не вводят: бот платформенный. activate заводит подключение и отдаёт bot_url — по этой ссылке человек добавляет бота в чат, и до этого шага отправлять некуда. Любое действие кроме activate отвечает отказом, если интеграция не подключена. test отказывает при выключенной отправке и при пустом списке получателей. Выбор темы форума в группе Telegram в инструмент не входит — текущая тема каждого получателя видна в show. Журнал доставки — get_integration_logs.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
messenger string (Обязательный) telegram или max.
action string (Обязательный) Действие из списка выше.
buttons_enabled boolean (Обязательный для toggle_buttons) Кнопки под сообщением.
subject string Тема сообщения, до 70 символов. Применяется при save_widgets.
hidden_widget_ids array ID вопросов, которые НЕ включать в сообщение. Список задаётся целиком: чего в нём нет, то вернётся в сообщение.
recipient_id string (Обязательный для remove_recipient) ID получателя из show.

Ссылка, по которой человек добавляет бота Telegram или MAX в чат, — только чтение.

В отличие от manage_quiz_messenger с activate, не заводит интеграцию и не включает отправку — записывает только временный код ссылки. Интеграция уже есть — отдаётся её ссылка. Нет — ссылка с временным кодом (живёт 7 дней, повторный вызов отдаёт тот же код и продлевает срок); запись интеграции появляется, только когда человек открывает ссылку и нажимает «Старт» в боте. Если к этому моменту интеграцию уже завели в кабинете, бот подключается к ней — её ссылка в кабинете не меняется.

Ответ: connected (интеграция включена: бот добавлен «Стартом» или отправку включили в кабинете), bot_url, для Telegram ещё group_url (добавить бота в группу). Гейт как у manage_quiz_messenger: тариф на интеграцию и право integrations.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
messenger string (Обязательный) telegram или max.

Например, аргументы запроса ссылки:

JSON
{"quiz_id":42,"messenger":"telegram"}

Этот вызов не выполняет activate, не включает отправку и не добавляет получателя сам. Получение ссылки и подключение человеком — отдельные шаги. Повторный вызов без подключения повторно использует временный код, продлевая его срок.

get_integration_logs

Журнал отправки ответов в мессенджер: telegram или max.

Отдаёт текст отказа (бота выгнали из группы, чат удалён, токен отозван) и unsent_count. Журнал вебхуков — отдельный get_quiz_webhook_logs. Неподключённая интеграция отвечает отказом, а не пустым журналом.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
integration string (Обязательный) telegram или max.
page integer Страница, с 1. От новых к старым.
per_page integer 1–200, по умолчанию 20.
status string sent, failed или queued — только записи с этим статусом. Без него — все.

total и last_page — с учётом status. counts (all, failed, queued) — по всему журналу, от status и страницы не зависит; counts.failed = unsent_count.

resend_integration_logs

Дослать в мессенджер то, что не ушло: одну запись по log_id или все неудачные за период.

Отправка идёт очередью, поэтому в ответе queued — сколько поставлено, а не сколько дошло. Повтор пачкой берёт ограниченное число записей за раз; если срезано, приходит truncated: true и вызов нужно повторить.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
integration string (Обязательный) telegram или max.
log_id integer Одна запись. Без неё — все неудачные.
date_from, date_to string Период для повтора пачкой, ГГГГ-ММ-ДД.

manage_quiz_google_sheets

Выгрузка ответов в Google Таблицы: show, activate, deactivate, delete, save_widgets, save_switchers, set_sync_mode, sync_now, export_all.

show отвечает на «почему в таблице нет новых ответов»: адрес и название таблицы, живой ли доступ (его отзывают на стороне Google), режим обновления, когда выгружали последний раз, какие вопросы исключены.

Состав вопросов задаётся целиком, поэтому вызов save_widgets без hidden_widget_ids отклоняется: иначе он снял бы все исключения и в таблицу поехали бы вопросы, которые автор оттуда убрал. Переключатели меняются по одному, но хотя бы один нужен. Подключение аккаунта и выбор таблицы — в кабинете: там вход в аккаунт Google и окно Google Диска.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
action string (Обязательный) Действие из списка выше.
hidden_widget_ids array ID вопросов, которые НЕ попадают в таблицу. Список задаётся целиком.
enable_timestamp boolean Столбец со временем ответа.
enable_personal_data boolean Выгружать персональные данные респондента.
sync_mode string realtime, scheduled, manual.
schedule_hour, schedule_minute integer Время обновления. Обязательны при scheduled.
export_mode string Для export_all: new_file, new_sheet, replace.

Вебхуки опроса

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

Инструмент Что делает
get_quiz_webhooks список вебхуков и их состояние; идентификаторы также приходят в items создания
create_quiz_webhook добавляет вебхук — выключенным
update_quiz_webhook меняет вебхук; не переданные поля сохраняют текущие значения
toggle_quiz_webhook включает и выключает
get_quiz_webhook_logs журнал отправок: дошло или нет, что ответил приёмник
resend_quiz_webhook_log повторяет отправку: одну запись по log_id либо все недоставленные за период (date_from, date_to)
delete_quiz_webhook удаляет вебхук вместе с заголовками и журналом

Адрес должен быть публичным http или https — внутренние адреса не принимаются.

Имя заголовка — только латиница, цифры и символы ! # $ % & ' * + - . ^ _ ` | ~. Пробел, кириллица или двоеточие в имени — отказ валидации: такой заголовок в запрос не ушёл бы.

Повтор из журнала (resend_quiz_webhook_log) уходит с текущими заголовками и полями вебхука, а не с теми, что были при исходной отправке. Поэтому после смены токена в заголовке достаточно поправить вебхук и повторить отправку.

В теле каждого запроса есть answer_id и is_complete: при включённых незавершённых ответах один ответ может прийти дважды — сначала незавершённым, потом финальной версией, и приёмник связывает их по answer_id.

Журнал (get_quiz_webhook_logs) принимает status — sent, failed или queued, без него отдаёт все записи. В meta — total и last_page с учётом status, unsent_count и counts (all, failed, queued) по всему журналу эндпоинта. У каждой записи на верхнем уровне answer_id — какой ответ ушёл, null у тестового запроса.

Новый вебхук создаётся выключенным намеренно: сначала стоит убедиться, что приёмник отвечает, и только потом включать отправку.

Отправка ответов доступна не на всех тарифах. Если опция не входит в тариф, вебхук нельзя создать, изменить или включить — но список, журнал, выключение и удаление остаются доступны, чтобы прежнюю настройку можно было разобрать.

После серии неудачных отправок вебхук отключается сам. Это видно в списке, включить обратно можно тем же toggle_quiz_webhook.

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

create_quiz_webhook

Создаёт выключенный вебхук. Все параметры верхнего уровня перечислены ниже; поля is_active у создания нет.

Параметр Тип Обязательность, default и ограничения
quiz_id integer Обязательный ID доступного опроса.
title string Обязательное непустое название до 255 символов.
url string Обязательный публичный HTTP/HTTPS URL; внутренние адреса отклоняются.
method string Обязательный: get, post, put, patch; default отсутствует.
body array<string> ID вопросов и имена скрытых переменных, включаемых в отправку. При пропуске — пустой список.
body_naming object Переименование полей из body: ID/имя → свой ключ; при пропуске — пустой объект.
headers array<object> Дополнительные заголовки {name,value}; при пропуске — []. В каждой строке обязательны непустые строки name (до 255) и value (до 1000).
incomplete boolean Отправлять также незавершённые ответы; по умолчанию false.
hours integer Задержка в часах: 0, 1, 6, 12, 24; по умолчанию 0 — сразу.

Ответ содержит quiz_id и актуальный items: сервис не возвращает отдельный ID созданной строки. Найдите новый вебхук в списке; повтор создания не является обновлением и может создать ещё один вебхук. Доставку проверяют в журнале после согласованной отправки; отдельного MCP-инструмента тестовой отправки вебхука здесь нет.

Пример аргументов (UUID замените идентификатором своего вопроса):

JSON
{"quiz_id":42,"title":"CRM","url":"https://receiver.example/webask","method":"post","body":["question-uuid","utm_source"],"body_naming":{"question-uuid":"rating"},"headers":[{"name":"X-Project","value":"survey"}],"incomplete":false,"hours":0}

update_quiz_webhook

Обязательны quiz_id: integer и webhook_id: integer (не меньше 1, из get_quiz_webhooks или items создания). Остальные поля необязательны: title, url, method, body, body_naming, headers, incomplete, hours имеют те же типы и ограничения, что у создания. Дополнительно принимается is_active: boolean.

Пропущенные поля сохраняют текущие значения, включая заголовки. Переданный headers заменяет весь список: [] удаляет все заголовки. Непустые body/body_naming заменяют соответствующие настройки, но пустые значения в проверенной реализации не очищают уже сохранённые списки. Тариф проверяется при любом обновлении, включая is_active:false; чтобы выключить вебхук после смены тарифа, используйте toggle_quiz_webhook.

JSON
{"quiz_id":42,"webhook_id":7,"hours":6,"incomplete":true}

toggle_quiz_webhook

Параметр Тип Обязательность и поведение
quiz_id integer Обязательный ID опроса.
webhook_id integer Обязательный ID вебхука, не меньше 1.
is_active boolean Обязательно: true включает, false выключает. Это установка состояния, не инверсия; default отсутствует.

Включение требует тарифной опции вебхуков; выключение доступно и без неё. Ответ: quiz_id, webhook_id, is_active.

JSON
{"quiz_id":42,"webhook_id":7,"is_active":false}

get_quiz_webhook_logs

Параметр Тип Обязательность, default и ограничения
quiz_id integer Обязательный ID опроса.
webhook_id integer Обязательный ID вебхука, не меньше 1.
page integer Необязателен, не меньше 1, по умолчанию 1.
per_page integer Необязателен, 1–30, по умолчанию 20.

Возвращает logs и meta; значения заголовков в журнале маскируются. Код и тело ответа приёмника позволяют отличить настройку от фактической доставки.

JSON
{"quiz_id":42,"webhook_id":7,"page":1,"per_page":20}

resend_quiz_webhook_log

Параметр Тип Обязательность, default и ограничения
quiz_id integer Обязательный ID опроса.
webhook_id integer Обязательный ID вебхука, не меньше 1.
log_id integer Необязательный ID записи, не меньше 1. Передан — повтор одной записи, период не используется.
date_from, date_to string Необязательный период Y-m-d, применяется без log_id; пропуск означает отсутствие соответствующей границы.

Повтор требует тарифной опции вебхуков. Без log_id выбираются недоставленные записи за период, до 1000 за вызов; truncated:true сообщает об оставшихся. queued — количество поставленных повторов, не подтверждение доставки. После повтора прочитайте журнал; одинаковый повтор может ещё раз отправить данные приёмнику.

JSON
{"quiz_id":42,"webhook_id":7,"date_from":"2026-10-01","date_to":"2026-10-08"}

delete_quiz_webhook

Обязательны только quiz_id: integer и webhook_id: integer (не меньше 1). Удаляет вебхук, его заголовки и журнал; повтор для отсутствующего ID возвращает отказ. Тарифная опция для удаления не требуется.

JSON
{"quiz_id":42,"webhook_id":7}

Zapier

manage_quiz_zapier — со стороны опроса это один переключатель: show, activate, deactivate, delete.

Связки собираются на стороне Zapier по подписке, ключей здесь вводить не нужно. delete снимает и подписки: связка перестанет получать ответы, и собирать её придётся заново в Zapier. show заодно показывает, сколько связок слушает опрос.

Счётчики и пиксели

manage_quiz_analytics ведёт Google Аналитику, Яндекс.Метрику и пиксели VK и Facebook: show, save, activate, deactivate, delete. Сервис выбирается параметром service — google, yandex, vk, fb.

Номер счётчика не секрет, он виден в коде любой страницы, поэтому здесь ничего чужого вводить не приходится. Значение пишется в двух местах — в строку интеграции и в версию опроса, откуда его читает рендер; иначе счётчик числился бы включённым, а на странице не появлялся. У Google есть version (ga4 или ua), у Яндекса — is_webvisor.

Параметр Тип Обязательность, default и ограничения
quiz_id integer Обязателен, не меньше 1.
service string Обязателен: google, yandex, vk, fb.
action string Обязателен: show, save, activate, deactivate, delete.
counter string\|null Для save, до 20 символов; пропущен — номер не меняется, пустая строка/null стирает его.
version string Для save Google: ga4 или ua; пропущена — сохранённое значение не меняется.
is_webvisor boolean Для save Яндекса; пропущен — сохранённое значение не меняется.

Требуются право integrations, тарифная опция выбранного счётчика и черновик опроса. save сам не включает счётчик; это отдельный activate. При show возвращаются connected, counter, is_active и дополнительные поля сервиса.

JSON
{"quiz_id":42,"service":"google","action":"save","counter":"G-EXAMPLE123","version":"ga4"}

Почта опроса

Уведомление автору о новом ответе и копия ответа респонденту — два независимых письма со своими переключателями, шаблонами и исключениями вопросов. Рассылки по контактным спискам описаны в tools-mailing.md.

Инструменты с quiz_id проверяют доступ к опросу, включая доступ к его папке и область OAuth-токена. Копия респонденту и число адресов автора ограничены тарифом. Для управления SMTP действуют отдельные право и тариф, указанные ниже.

Порядок настройки. Сначала вызовите get_quiz_email_settings. Если template: null, включите нужное письмо через toggle_quiz_email с enabled: true: это создаёт настройки. После этого можно сохранять шаблон, добавлять адреса и задавать исключения. add_quiz_email_recipient сам настройки не создаёт и отказывает, пока их нет. Вызов toggle_quiz_email с enabled: false на ещё не настроенном опросе возвращает текущее выключенное состояние и также не создаёт настройки.

Подтверждение адреса. Новый адрес получает письмо с кодом; до подтверждения уведомления на него не идут. Подтвердите его через confirm_quiz_email_recipient, затем проверяйте checked и is_active в списке получателей. Если адрес уже подтверждён в другом опросе того же пространства, подтверждение может переиспользоваться.

Инструмент Что делает
get_quiz_email_settings что включено, адреса автора и их подтверждение, шаблоны писем
toggle_quiz_email включает и выключает письма автору (owner) или респонденту (client)
save_quiz_email_template тема и текст писем, адрес для ответа, промокод в письме
add_quiz_email_recipient добавляет адрес для уведомлений автору
toggle_quiz_email_recipient включает и выключает конкретный адрес
delete_quiz_email_recipient убирает адрес
set_quiz_email_questions какие вопросы не попадают в письмо
save_quiz_email_notifications правила, сводка, события, напоминание респонденту, баллы в письме респонденту
get_quiz_email_log журнал писем опроса за 30 дней: кому, тема, ушло или нет и почему
resend_quiz_email_log отправить ещё раз письмо, которое не ушло
send_quiz_email_test пример письма себе — на почту текущего пользователя
add_quiz_email_team_member адрес участника аккаунта в получатели, сразу подтверждённый

Примеры ниже показывают только объект arguments для tools/call. ID 123 и 456, адреса на example.com, UUID и код 1234 условные: замените их значениями своего опроса и кодом от владельца адреса. Примеры не вызывают инструменты и не отправляют письма.

get_quiz_email_settings

Читает переключатели, получателей, шаблоны и исключённые вопросы.

Параметр Тип Обязательность / пропуск Ограничения
quiz_id integer Обязательный ID доступного опроса.

Если настройки ещё не созданы, результат содержит owner_enabled: false, client_enabled: false, recipients и template: null. В этой ветке own_smtp_connected и списки исключений не возвращаются.

После инициализации template содержит owner_subject, owner_letter, owner_use_default_tmpl, owner_reply_to_address, соответствующие client_*, client_source, owner_formatted_letter, client_formatted_letter, owner_raw_enabled, client_raw_enabled, owner_raw_html, client_raw_html. Отдельно возвращаются own_smtp_connected, owner_excluded_questions и client_excluded_questions.

Каждый получатель содержит email_id, email, checked, is_active, is_active_booking. Последний флаг относится к письмам о записи на встречу и независим от уведомлений о новых ответах. Коды и хеши подтверждения не возвращаются.

JSON
{"quiz_id": 123}

toggle_quiz_email

Задаёт желаемое состояние письма. Повтор с тем же enabled сохраняет состояние.

Параметр Тип Обязательность / пропуск Ограничения
quiz_id integer Обязательный ID опроса.
type string Обязательный owner — автору, client — респонденту.
enabled boolean Обязательный true — включить, false — выключить.

Первое включение создаёт настройки писем. Уведомления автору дополнительно зависят от подтверждения и активности адреса; адрес респондента берётся из источника, указанного в client_source. Включение client может быть отклонено тарифом.

JSON
{"quiz_id": 123, "type": "owner", "enabled": true}

save_quiz_email_template

Меняет переданные поля шаблонов. Требует уже созданных настроек писем и хотя бы одного поля помимо quiz_id. У непереданных тем сохраняется текущая тема; если сохранённой темы нет, используется название опроса.

Типы в таблице соответствуют входной JSON Schema. Для сохранения текущего значения пропускайте поле; null в этой схеме не объявлен допустимым значением.

Параметр Тип Обязательность / пропуск Ограничения и назначение
quiz_id integer Обязательный ID опроса.
owner_subject string Необязательный; текущая тема Тема автору, до 500 символов.
owner_letter string Необязательный; текущее значение Текст письма автору, до 5000 символов.
owner_use_default_tmpl boolean Необязательный; текущее значение Использовать стандартный шаблон автору.
owner_reply_to_address string Необязательный; текущее значение Адрес для ответа в письме автору.
owner_send_promo_code boolean Необязательный; текущее значение Добавлять промокод в письмо автору.
client_subject string Необязательный; текущая тема Тема респонденту, до 500 символов.
client_letter string Необязательный; текущее значение Текст письма респонденту, до 5000 символов.
client_use_default_tmpl boolean Необязательный; текущее значение Использовать стандартный шаблон респонденту.
client_reply_to_address string Необязательный; текущее значение Корректный e-mail.
client_send_promo_code boolean Необязательный; текущее значение Добавлять промокод в письмо респонденту.
client_source string Необязательный; текущее значение Имя скрытой переменной или UUID вопроса с e-mail; до 255 символов. Источник адреса, а не сам адрес.
owner_formatted_letter string Необязательный; текущее значение HTML визуального шаблона автору, до 50 000 символов.
client_formatted_letter string Необязательный; текущее значение HTML визуального шаблона респонденту, до 50 000 символов.
owner_raw_html string Необязательный; текущее значение Полностью свой HTML автору, до 200 000 символов.
client_raw_html string Необязательный; текущее значение Полностью свой HTML респонденту, до 200 000 символов.
owner_raw_enabled boolean Необязательный; текущее значение Включить полностью свой HTML автору.
client_raw_enabled boolean Необязательный; текущее значение Включить полностью свой HTML респонденту.

Стандартное письмо управляется owner_use_default_tmpl / client_use_default_tmpl, визуальный шаблон — owner_formatted_letter / client_formatted_letter. Полностью свой HTML применяется при включённом *_raw_enabled, непустом *_raw_html и подключённом своём SMTP. Без SMTP письмо уйдёт визуальным шаблоном; сохранение может быть успешным с warnings. Предупреждение также возвращается при включённом raw-режиме с пустым HTML. Этот инструмент сохраняет шаблон, но не включает письма.

JSON
{
  "quiz_id": 123,
  "owner_subject": "Получен новый ответ",
  "owner_reply_to_address": "support@example.com",
  "client_subject": "Копия вашего ответа",
  "client_reply_to_address": "support@example.com"
}

add_quiz_email_recipient

Добавляет адрес для уведомлений автору. Требует существующих настроек писем. Новый адрес требует подтверждения кодом; уже подтверждённый в пространстве адрес может использовать прежнее подтверждение. Повторное добавление существующего адреса возвращает его, но проверка тарифного лимита выполняется до поиска дубликата.

Параметр Тип Обязательность / пропуск Ограничения
quiz_id integer Обязательный ID опроса.
email string Обязательный Корректный e-mail, до 255 символов.

Число адресов ограничено тарифом; добавление нового неподтверждённого адреса расходует попытки отправки подтверждения. Результат содержит quiz_id, email и обновлённый recipients; email_id для следующих действий берите из этого списка.

JSON
{"quiz_id": 123, "email": "owner@example.com"}

toggle_quiz_email_recipient

Переключает активность адреса для уведомлений об ответах. Вызов не идемпотентен: следующий вызов снова инвертирует состояние. Аргумента enabled нет. Сначала прочитайте is_active через get_quiz_email_settings, затем вызывайте переключение только если состояние нужно изменить.

«Уведомления»: правила, сводка, события

Текущие значения — поле notifications в get_quiz_email_settings, менять — save_quiz_email_notifications. Передаются только меняемые поля; объекты digest, events, client_reminder накладываются поверх текущих, rules заменяется списком целиком. Границы — в схеме инструмента: до 20 правил и 10 условий в правиле, шаг «каждые N ответов» 2–100 000, процент тарифа 1–99, дни тишины 1–90, задержка напоминания 1–168 часов. Значение вне границ — ошибка, ничего не сохраняется.

Адресаты — email_id из recipients. Письма уходят только на подтверждённые адреса аккаунта; неизвестный id не ошибка, он просто пропускается.

Условие правила — вопрос (widget_id = question_uuid), оператор логики (option_id) и значение (value). Значение по типу: у вариантов — id варианта или other, у шкал и чисел — число строкой, у текста — текст, у даты — ДД.ММ.ГГГГ, у матрицы — id строки:id столбца, у ранжирования — id варианта:место. Невыполнимое условие (вопрос удалён, оператор не подходит типу, нет значения) — ложь; правило без условий не срабатывает.

Что и когда уходит. Правила и события «каждые N ответов», «опрос закрылся по лимиту», «израсходован процент ответов тарифа» — на завершённом ответе. «Опрос закрылся по дате» и «нет ответов N дней» — проверкой раз в час. Сводка — в выбранный час по поясу владельца аккаунта, за период без ответов не приходит. Напоминание — респонденту, оставившему адрес в незавершённом ответе, один раз на ответ; ссылка ведёт на опрос, продолжить тот же ответ нельзя.

Журнал писем (get_quiz_email_log) отвечает на «письма не приходят»: по каждому письму видно, ушло ли оно (sent/failed) и почему. Письмо, ещё стоящее в очереди, не показывается. resend_quiz_email_log повторяет только failed и только один раз на запись — дальше повторяют новую запись.

Пример письма (send_quiz_email_test) уходит на почту текущего пользователя, не чаще раза в минуту (счётчик общий с кабинетом и API, отказ «не опубликован» минуту не тратит), и только у опубликованного опроса — письмо собирается по опубликованной версии.

Участник в получатели (add_quiz_email_team_member) — по user_id из get_workspace_members; только принявший приглашение. Адрес сразу подтверждён, код не нужен.

Параметр Тип Обязательность / пропуск Ограничения
quiz_id integer Обязательный ID опроса.
email_id integer Обязательный Не меньше 1; ID адреса из списка получателей этого пространства.

Адрес из общего пула пространства может быть привязан к текущему опросу при включении. Требуются существующие настройки писем; при добавлении новой активной привязки проверяется тарифный лимит. Переключение не заменяет подтверждение адреса. Результат возвращает обновлённый recipients.

JSON
{"quiz_id": 123, "email_id": 456}

delete_quiz_email_recipient

Удаляет адрес из списка текущего опроса. В других опросах пространства он остаётся получателем. Если адрес удалён из последнего опроса, он исчезает из общего пула.

Параметр Тип Обязательность / пропуск Ограничения
quiz_id integer Обязательный ID опроса.
email_id integer Обязательный Не меньше 1; ID адреса из списка получателей этого пространства.
JSON
{"quiz_id": 123, "email_id": 456}

set_quiz_email_questions

Задаёт полный список исключённых вопросов. Требует существующих настроек писем и передачи хотя бы одного списка.

Параметр Тип Обязательность / пропуск Ограничения
quiz_id integer Обязательный ID опроса.
owner_excluded_questions array<string> Необязательный; текущий список UUID вопросов черновика, исключённых из письма автору.
client_excluded_questions array<string> Необязательный; текущий список UUID вопросов черновика, исключённых из письма респонденту.

Переданный список заменяет старый целиком; [] возвращает все вопросы в соответствующее письмо. Непереданный список сохраняется. UUID должны существовать в черновике этого опроса: чужие или вымышленные значения вызывают отказ. Списки независимы.

JSON
{
  "quiz_id": 123,
  "owner_excluded_questions": ["00000000-0000-4000-8000-000000000001"],
  "client_excluded_questions": []
}

confirm_quiz_email_recipient

Подтверждает адрес кодом из письма или повторно отправляет код. Код сообщает владелец адреса; в результатах чтения настроек его нет.

Параметр Тип Обязательность / пропуск Ограничения
quiz_id integer Обязательный Не меньше 1; ID опроса.
action string Обязательный confirm или resend_code; значения по умолчанию нет.
email_id integer Обязательный Не меньше 1; ID адреса из списка получателей этого пространства.
confirmation_code integer Для confirm обязателен; для resend_code не нужен Код из письма.

Успешное подтверждение отмечает адрес как подтверждённый и включает его активность. Неверный код расходует попытку; повторная отправка ограничена числом попыток и допускается не чаще раза в минуту. Не подбирайте код повторными запросами.

JSON
{"quiz_id": 123, "action": "confirm", "email_id": 456, "confirmation_code": 1234}
JSON
{"quiz_id": 123, "action": "resend_code", "email_id": 456}

manage_workspace_smtp

Показывает и переключает своё SMTP-подключение, читает журнал или отправляет тестовое письмо. Все действия требуют доступа к пространству, права account_smtp и тарифной возможности SMTP.

Подключение используется письмами опроса и рассылками. Хост, логин и пароль человек задаёт в кабинете: инструмент их не принимает. Пароль не возвращается, только has_password. enable отказывает, если подключения нет. test отправляет письмо на адрес аутентифицированного пользователя; адрес назначения в аргументах задать нельзя.

Тариф: без опции smtp все действия, кроме disable, отказывают по тарифу; disable проходит на любом тарифе. На тарифе без smtp письма опроса уходят через сервис, даже если свой SMTP включён: настройка остаётся и снова действует после перехода на тариф с опцией. В get_quiz_email_settings и save_quiz_email_template такой SMTP считается неподключённым (own_smtp_connected: false, свой HTML письма не действует).

Параметр Тип Обязательность / пропуск Ограничения
workspace_id integer Обязательный Не меньше 1; ID пространства.
action string Обязательный show, logs, enable, disable, test.
limit integer Необязательный; 50 Для logs: 1–200 записей.
offset integer Необязательный; 0 Для logs: неотрицательное число пропускаемых записей.
JSON
{"workspace_id": 123, "action": "logs", "limit": 50, "offset": 0}

E-mail рассылки

Кампании по контактным спискам аккаунта: письма уходят людям, которых автор завёл сам, а не участникам прохождения опроса. Письма, которые шлёт сам опрос (уведомление автору о новом ответе, копия ответа респонденту), — в tools-quiz-emails.md.

Ассистент рассылки только читает. Отправка кампании, правка кампаний, списков и шаблонов, покупка писем через него недоступны: письмо уходит живым людям и отменить его нельзя, а цена ошибки — репутация домена аккаунта. Контакты загружают файлом. Это решение, а не недоделка: всё перечисленное делается в кабинете.

get_mailing_state

Состояние e-mail рассылок аккаунта. Только чтение.

Разделы: campaigns — список со сводкой, campaign — одна кампания с показателями, recipients — получатели с фильтром по статусу доставки, contact_lists — списки и сводка по контактам, contacts — контакты одного списка, templates — шаблоны писем, reputation — доля отказов и жалоб (по ней почтовые службы решают, пускать ли письма дальше), balance — сколько писем осталось, settings — отправитель и своя почтовая служба, smtp_logs — журнал отправок.

Параметр Тип Описание
workspace_id integer (Обязательный) ID workspace.
section string (Обязательный) Раздел из списка выше.
campaign_id integer Обязателен для campaign и recipients.
list_id integer Обязателен для contacts.
search string По названию и теме в campaigns, по адресу в recipients.
statuses array Статус письма у получателя, для recipients. Пустой список — все.
quiz_statuses array Прохождение опроса получателем, для recipients. Пустой список — все.
days integer Период репутации, по умолчанию 30.
limit, offset integer Постранично, 1–200 (по умолчанию 50).

Фильтры раздела recipients

Два независимых фильтра, оба необязательные.

statuses — что случилось с письмом: sent (отправлено), delivered (доставлено), opened (открыл), clicked (перешёл по ссылке), bounced (не доставлено), unsubscribed (отписался), complaint (пожаловался на спам). Статус у получателя один — последнее случившееся событие, поэтому открывший письмо в delivered не попадает, а перешедший по ссылке — в opened. Чтобы получить «письмо дошло» целиком, перечисляют все подходящие значения.

quiz_statuses — что получатель сделал с опросом: none (не начинал), started (начал и не закончил), completed (прошёл до конца). По этому фильтру в кабинете отбирают тех, кому досылать письмо. Прохождение считается по скрытой переменной с id получателя в ссылке письма, поэтому у кампании без привязки к опросу оно неизвестно ни у кого — фильтр вернёт пустой список, а в самих записях quizStatus будет null.

Неизвестное значение в любом из фильтров — ошибка валидации, а не молчаливое игнорирование: иначе ответ выглядел бы отфильтрованным, не будучи им.

Отправитель и своя почтовая служба аккаунта — общие с письмами опроса, настраиваются инструментом manage_workspace_smtp (см. tools-quiz-emails.md).

Аккаунт: профиль, участники, брендинг, домен, файлы

update_user_profile

Правка своего профиля: имя, язык интерфейса, часовой пояс, оформление, подписки на письма.

Часовой пояс важен отдельно — от него зависят все даты в отчётах и выгрузках. Передаются только те поля, которые нужно поменять; подписки можно менять по одной, остальные останутся как были. Смена почты и пароля недоступна (код из письма и текущий пароль), аватар тоже — это загрузка картинки. Чтение профиля — user://me.

Параметр Тип Описание
name string Имя, 3–255 символов. У владельца им же называются его аккаунты.
lang string Язык интерфейса и писем.
timezone string Часовой пояс вида Europe/Moscow.
theme string light, dark, auto.
subscribe_action, subscribe_billing, subscribe_marketing boolean Подписки на письма.

manage_user_sessions

Активные входы в аккаунт: list, close, close_all.

Показывает устройство, браузер, город и когда заходили последний раз. Отличие от кабинета: там «закрыть все» означает «все, кроме текущей», потому что запрос идёт из браузерной сессии. Ассистент работает по ключу и своей сессии не имеет, поэтому close_all закрывает все входы, включая тот, в котором человек сейчас работает в кабинете, — и требует confirm_close_all. Закрыть чужой вход нельзя: идентификатор сверяется со своим списком. Если список входов недоступен, инструмент отказывает.

Параметр Тип Описание
action string (Обязательный) list, close, close_all.
session_id string (Обязательный для close) Идентификатор входа из list.
confirm_close_all boolean (Обязательный для close_all) Подтверждение.

Сведения об аккаунте и права

get_workspace_details отвечает на «что это за аккаунт и что мне в нём можно»: название, владелец ли текущий пользователь, включены ли AI-отчёты и вход через SSO, сколько папок, опросов и участников, и полный список его прав.

Половина отказов инструментов — это отсутствующее право, и по списку rights видно заранее, что получится. Рядом permissions — то же с оговоркой «только свои объекты». Возможности тарифа отдельно, в get_workspace_tariff.

В конструкторе всё это приходит одним куском вместе со списком опросов открытой папки, и тот эндпоинт заодно запоминает последний открытый аккаунт и папку. Здесь он не используется: от чтения побочных действий не ждут.

Участники и роли

Ассистент видит состав аккаунта и может раздавать доступы: приглашать людей, менять роли и папки, исключать участников, настраивать сами роли.

Инструмент Что делает
get_workspace_members состав аккаунта: роль, принято ли приглашение, доступные папки, последняя активность
get_workspace_roles роли аккаунта с правами и числом участников на каждой
get_workspace_member_access права одного участника — те же, по которым система отказывает в действии
invite_workspace_member приглашает человека: на его адрес уходит письмо со ссылкой
set_workspace_member_role меняет роль участника
set_workspace_member_folders задаёт, какие папки он видит; пустой список открывает все
remove_workspace_member исключает из аккаунта
resend_workspace_member_invite отправляет приглашение повторно
save_workspace_role создаёт роль или меняет её права
delete_workspace_role удаляет роль, её участники переходят на роль по умолчанию

Все эти действия закрыты тем же правом, что и в интерфейсе, — управлять участниками может владелец аккаунта и те, кому он это разрешил. Настройка ролей вдобавок доступна не на всех тарифах, число участников тоже ограничено тарифом.

О чём стоит помнить, поручая это ассистенту:

  • приглашение — письмо живому человеку, а исключение отбирает доступ сразу; вернуть исключённого можно только новым приглашением, и папки придётся назначить заново;
  • правка роли меняет возможности всех, кто на ней сидит, а не одного человека;
  • список папок задаётся целиком: передали три — участник видит ровно их.

Права принимают три значения: allowed — разрешено, partially — только свои объекты, forbidden — запрещено.

У роли есть базовые права на весь аккаунт и, дополнительно, отличия по отдельным папкам: в такой папке действует своё значение, в остальных — базовое. Отличия задаются аргументом folder_permissions у save_workspace_role: аргумент не передан — отличия не меняются, пустой список снимает все. По папкам настраиваются только действия с опросами и самими папками; участники, биллинг, рассылки, файлы, API, почта, шаблоны и темы остаются правами аккаунта целиком.

Что действует у конкретного участника, показывает get_workspace_member_access: общий набор в поле access, отличия — в folder_access (папка, её имя и права, которые действуют именно в ней). Папки, к которым участника не пускают, в отличия не попадают: там они ни на что не влияют.

Три повода, по которым доступ пропадает, а в роли всё выглядит правильно:

  • приглашение отправлено, но человек по нему не перешёл;
  • участник не подтвердил почту — до подтверждения ему отказывают независимо от роли;
  • у участника ограничен список папок — тогда опросы из других папок он не видит.

Первые две причины get_workspace_member_access называет прямо в поле blocked.

Брендинг воркспейса

Логотип и копирайт — настройки воркспейса, а не отдельного опроса: они действуют сразу на все его опросы, отчёты и PDF. Поэтому у них свои инструменты, а в update_quiz_settings этих полей нет.

update_workspace_branding

Показ логотипа и копирайта.

Параметр Тип Описание
workspace_id integer Обязательный. ID воркспейса из workspace://list.
logo_show boolean Показывать логотип воркспейса.
show_copyright boolean Показывать копирайт WebAsk.

Нужно передать хотя бы один из двух параметров.

Скрытие копирайта (show_copyright: false) доступно не на всех тарифах — на остальных инструмент вернёт ошибку, а значение останется включённым.

Загрузка логотипа по ссылке или из base64. Укажите ровно один способ.

Параметр Тип Описание
workspace_id integer Обязательный. ID воркспейса.
url string Публичная http(s) ссылка на файл.
file_base64 string Содержимое файла в base64 (допускается префикс data:...;base64,).
filename string Имя файла — для загрузки из base64.

Форматы: jpeg, jpg, png, webp. Предел размера — около 1 МБ (1048 КБ). Через API v3 (POST /workspace/{workspace_id}/branding/logo) предел другой — до 5 МБ: файл крупнее 1 МБ ассистент отклонит, даже если API его принимает. Свой логотип доступен не на всех тарифах.

Удаляет логотип воркспейса. Параметр один — workspace_id.

Своё хранилище файлов

Аккаунт на Premium и выше может складывать файлы ответов в собственное хранилище — S3 или Яндекс.Диск. Подключение остаётся в интерфейсе: для S3 это ввод ключа доступа и секрета, для Яндекс.Диска — вход в аккаунт. Ассистенту доступно состояние и диагностика.

Инструмент Что делает
get_workspace_storage что подключено, работает ли, шаблон пути, сколько файлов лежит в хранилище
get_workspace_storage_usage занятое место: диск платформы отдельно от своего хранилища
verify_workspace_storage проверяет связь: пробует записать и прочитать пробный файл
get_workspace_hidden_files сколько файлов скрыто из-за нехватки места и сколько стоит их раскрыть

Два состояния, которые стоит знать:

  • Хранилище отвалилось. Запись временно уходит на диск платформы, статус становится fallback. Удачная проверка через verify_workspace_storage возвращает запись обратно; запустить её может только владелец аккаунта.
  • Файлы скрыты. Сверх дисковой квоты вложения не удаляются, а скрываются — со стороны автора это выглядит как их пропажа. Раскрывает апгрейд тарифа или оплата; оплату ассистент не проводит.

Идентификатор ключа доступа S3 ассистент видит только последними символами, секрет и токены — никогда.

Две особенности: подсчёт занятого места в своём S3 при первом обращении обходит бакет и может занять несколько секунд, а проверка связи, в отличие от правок настроек опроса, попадает не в журнал правок ассистента, а в журнал хранилища.

manage_workspace_files

Файлы аккаунта: overview, list, delete.

overview — сколько занято, сколько разрешает тариф, разбивка по опросам. list — файлы с фильтрами по опросу, виду медиа, хранилищу и владельцу, с поиском и сортировкой.

Удаление необратимо, а файл респондента приложен к его ответу — после удаления в ответе останется ссылка в никуда. Поэтому confirm_delete обязателен всегда, а не только для режима «все». delete_all вместе со списком файлов отклоняется. Режим «все» уходит очередью, поэтому числа удалённых в ответе нет — приходит queued: true. Загрузка файлов и скачивание архивом недоступны.

Параметр Тип Описание
workspace_id integer (Обязательный) ID workspace.
action string (Обязательный) overview, list, delete.
owner string owner, respondent, both.
media_type string image, video, audio.
storage string default, s3, yandex_disk.
quiz_id integer Файлы только этого опроса.
search string Поиск по имени файла.
sort_by, sort_direction string quiz_id/size/created_at/storage, asc/desc.
page, per_page integer Страница и размер, 1–200 (по умолчанию 30).
quiz_ids array (Обязательный для delete) Опросы, в которых удаляем.
file_ids integer[] До 500 ID конкретных файлов. Можно выбрать файлы через file_uuids; иначе нужен delete_all.
file_uuids string[] До 500 UUID файлов, каждый до 64 символов. Альтернатива file_ids; область удаления задаёт обязательный quiz_ids (1–200 ID).
delete_all boolean Все файлы перечисленных опросов.
confirm_delete boolean (Обязательный для delete) Подтверждение.

manage_workspace_domain

Адрес аккаунта: show, set_subdomain, set_type.

show отдаёт текущий вид адреса, поддомены, свой домен, состояние сертификата и что разрешает тариф. Подключение своего домена в инструмент не входит: там правка DNS на стороне владельца и выпуск сертификата с недельным лимитом на повторы — это делают в кабинете. Адрес отдельного опроса внутри домена меняет set_quiz_link.

Параметр Тип Описание
workspace_id integer (Обязательный) ID workspace.
action string (Обязательный) show, set_subdomain, set_type.
subdomain string Имя поддомена. Обязателен для set_subdomain; пустая строка убирает поддомен и возвращает аккаунт на служебный адрес.
subdomain_kind string default или other_subdomain.
domain_type string default, subdomain, other_subdomain, domain.

get_workspace_domain_status

Свой домен или поддомен аккаунта и состояние его сертификата. Только чтение: привязка домена — это правка DNS на стороне владельца. Нужен, когда публичная ссылка не открывается: чаще всего домен привязан, а сертификат ещё не выпущен.

Параметр Тип Описание
workspace_id integer Обязательный. ID воркспейса из workspace://list.

invite_workspace_member

Отправляет приглашение по e-mail. Требуется право member_crud; действуют тарифный предел участников и принадлежность роли/папок воркспейсу. Повторный вызов может повторить отправку — проверьте состав участников до приглашения.

Параметр Тип Обязательность и ограничения
workspace_id integer Обязательный, доступный воркспейс
email string Обязательный, корректный e-mail
name string Обязательный, 3–250 символов
role_id integer Обязательный, роль этого воркспейса
folder_ids integer[] Необязательный, папки этого воркспейса; пустой список открывает все
comment string Необязательный текст приглашения, 3–250 символов

Пример аргументов: {"workspace_id":7,"email":"colleague@example.com","name":"Коллега","role_id":12,"folder_ids":[3],"comment":"Доступ к исследованию"}.

set_workspace_member_role

Обязательные целочисленные workspace_id, member_id (ID записи участника из get_workspace_members) и role_id. Требует member_crud. Участник и роль должны принадлежать выбранному воркспейсу; роль владельца изменить нельзя.

Пример аргументов: {"workspace_id":7,"member_id":21,"role_id":12}.

save_workspace_role

Создаёт роль без role_id или правит существующую с role_id. Требует member_crud и тарифную возможность настройки ролей. Изменение касается всех участников с этой ролью.

Параметр Тип Обязательность и ограничения
workspace_id integer Обязательный
role_id integer Только при изменении роли этого воркспейса
name string Обязательный, 3–250 символов
permissions object[] Обязательный непустой список {"name":"<право>","value":"allowed"}, значение: allowed, partially или forbidden
folder_permissions object[] Необязательный список {"folder_id":3,"permissions":{"view_results":"allowed"}}; отсутствие сохраняет отличия, [] снимает все

Пример аргументов: {"workspace_id":7,"role_id":12,"name":"Аналитик","permissions":[{"name":"view_results","value":"allowed"}],"folder_permissions":[]}.

delete_workspace_role

Обязательные целочисленные workspace_id и role_id. Требует member_crud. Удаляется только пользовательская роль выбранного воркспейса: встроенные роли удалять нельзя. Участники переходят на роль по умолчанию.

Пример аргументов: {"workspace_id":7,"role_id":12}.

Запись на встречи: расписания, записи и блокировки

Респондент выбирает свободное время в опросе. Расписание принадлежит пространству и подключается к опросам отдельно; одно расписание может обслуживать несколько опросов. Создание расписания само по себе не подключает его к опросу.

Все инструменты этого раздела требуют доступа к указанному workspace_id. Чтение через get_schedulers и get_booking_journal требует права view_results; остальные шесть инструментов — права settings. ID расписаний берите из get_schedulers, ID записей и блокировок — из get_booking_journal или результата их создания.

Время. weekly, manual_slots и overrides задаются в часовом поясе расписания, указанном в timezone. Границы журнала, записи и блокировки задаются в UTC. Используйте ISO 8601 с суффиксом Z; строка со смещением переводится в UTC, строка без пояса трактуется как UTC.

Все JSON ниже — примеры объекта arguments для tools/call, без выполнения операций. ID 123, 456, 789, 321, даты, название и цвет условные: замените их реальными значениями перед вызовом.

get_schedulers

Читает расписания пространства и их настройки; результат содержит workspace_id и массив items.

Параметр Тип Обязательность / пропуск Ограничения
workspace_id integer Обязательный ID доступного пространства.
JSON
{"workspace_id": 123}

save_scheduler

Без scheduler_id создаёт новое расписание, с ним — обновляет существующее. Повтор создания без ID создаст ещё одно расписание. При обновлении непереданные поля сохраняются; нужно передать хотя бы одно изменяемое поле. Переданные weekly, manual_slots, overrides и max_advance заменяют соответствующее сохранённое значение целиком, поэтому сначала прочитайте текущие настройки.

Хотя входная схема помечает обязательным только workspace_id, обработчик при создании также требует name, color, schedule_mode, timezone, slot_duration и присутствие weekly. Таблица учитывает эту проверку. Значения по умолчанию относятся только к созданию и пропуску необязательного поля; при обновлении пропуск сохраняет текущее значение.

Параметр Тип Обязательность Ограничения / значение при создании
workspace_id integer Всегда ID пространства.
scheduler_id integer Для обновления Не меньше 1. Пропуск означает создание, null не допускается.
name string При создании До 250 символов.
description string Нет До 1000 символов; по умолчанию пустая строка.
color string При создании До 16 символов.
is_active boolean Нет По умолчанию true; false выключает приём новых записей без удаления расписания.
schedule_mode string При создании weekly или slots; значения по умолчанию нет.
timezone string При создании Корректный идентификатор часового пояса, например Europe/Moscow; значения по умолчанию нет.
slot_duration integer При создании Длительность встречи в минутах, 5–1440.
slot_increment integer\|null Нет Шаг начала слотов в минутах, 5–1440; по умолчанию null — равен slot_duration.
buffer_before integer Нет Буфер перед встречей, 0–1440 минут; по умолчанию 0.
buffer_after integer Нет Буфер после встречи, 0–1440 минут; по умолчанию 0.
min_notice_minutes integer Нет Минимальное время до записи, 0–129600 минут; по умолчанию 120.
max_advance object Нет Горизонт записи; по умолчанию {"type":"rolling","days":30}. Вложенные поля ниже.
daily_limit integer\|null Нет 1–10000 записей в день; по умолчанию null — лимит не задан.
seats_per_slot integer Нет Мест на слот, 1–10000; по умолчанию 1.
confirmation_mode string Нет auto или manual; по умолчанию auto.
notify_respondent boolean Нет Уведомлять респондента; по умолчанию true.
allow_respondent_cancel boolean Нет Разрешать отмену респондентом; по умолчанию true.
notify_admin boolean Нет Уведомлять администратора; по умолчанию true.
admin_emails string Нет Адреса через запятую, до 2000 символов; пустая строка по умолчанию означает почту владельца пространства.
location_type string Нет online, phone, address, custom; по умолчанию online.
location_value string Нет Ссылка, телефон, адрес или свой текст; до 2000 символов, по умолчанию пустая строка.
weekly array<object> Должен присутствовать при создании Недельная сетка; [] допустим, в том числе при создании в режиме slots.
manual_slots array<object> Нет Конкретные даты и интервалы для режима slots; по умолчанию [].
overrides array<object> Нет Исключения из недельной сетки; по умолчанию [].

Режим weekly использует повторяющуюся недельную сетку, slots — конкретные даты. Смена schedule_mode сама по себе не очищает данные другого режима.

Вложенное поле Тип Обязательность / ограничение
max_advance.type string Обязателен, если передан max_advance: rolling, range, infinite.
max_advance.days integer Обязателен для rolling: 1–3650.
max_advance.from string Обязателен для range: дата YYYY-MM-DD.
max_advance.to string Обязателен для range: дата YYYY-MM-DD.
weekly[].day integer Обязателен в каждой записи: 1–7.
weekly[].intervals array<object> Должен присутствовать; [] означает отсутствие интервалов.
weekly[].intervals[].start string Обязателен: время HH:mm в поясе расписания.
weekly[].intervals[].end string Обязателен: время HH:mm в поясе расписания.
manual_slots[].date string Обязателен: YYYY-MM-DD.
manual_slots[].start string Обязателен: HH:mm.
manual_slots[].end string Обязателен: HH:mm.
manual_slots[].seats integer Обязателен: 1–10000.
overrides[].dateFrom string Обязателен: YYYY-MM-DD. Регистр имени поля значим.
overrides[].dateTo string Обязателен: YYYY-MM-DD.
overrides[].intervals array<object> Должен присутствовать; [] закрывает время на указанные даты.
overrides[].intervals[].start string Обязателен: HH:mm.
overrides[].intervals[].end string Обязателен: HH:mm.
overrides[].comment string или null Необязателен; до 1000 символов.

Создание недельного расписания:

JSON
{
  "workspace_id": 123,
  "name": "Консультации",
  "color": "#26A59A",
  "schedule_mode": "weekly",
  "timezone": "Europe/Moscow",
  "slot_duration": 30,
  "weekly": [
    {"day": 1, "intervals": [{"start": "09:00", "end": "17:00"}]}
  ]
}

Создание разовых слотов — weekly всё равно присутствует:

JSON
{
  "workspace_id": 123,
  "name": "Разовые встречи",
  "color": "#26A59A",
  "schedule_mode": "slots",
  "timezone": "Europe/Moscow",
  "slot_duration": 30,
  "weekly": [],
  "manual_slots": [
    {"date": "2026-11-02", "start": "10:00", "end": "12:00", "seats": 1}
  ],
  "max_advance": {"type": "range", "from": "2026-11-01", "to": "2026-11-30"}
}

Обновление без удаления расписания:

JSON
{"workspace_id": 123, "scheduler_id": 456, "is_active": false}

Результат содержит workspace_id и сохранённое scheduler.

duplicate_scheduler

Копирует настройки расписания без записей, блокировок и резервов. Каждая успешная операция создаёт новую копию; повтор не возвращает прежнюю копию.

Параметр Тип Обязательность / пропуск Ограничения
workspace_id integer Обязательный ID пространства.
scheduler_id integer Обязательный Не меньше 1; ID расписания в этом пространстве.
JSON
{"workspace_id": 123, "scheduler_id": 456}

Результат содержит workspace_id и новое scheduler.

delete_scheduler

Удаляет расписание вместе с его записями и блокировками; живые резервы также снимаются. Если нужно только прекратить приём новых записей, используйте save_scheduler с is_active: false. Отдельного MCP-инструмента восстановления расписания нет.

Параметр Тип Обязательность / пропуск Ограничения
workspace_id integer Обязательный ID пространства.
scheduler_id integer Обязательный Не меньше 1; ID расписания в этом пространстве.
JSON
{"workspace_id": 123, "scheduler_id": 456}

Результат содержит workspace_id и удалённый scheduler_id; повтор после удаления вернёт отказ «расписание не найдено».

get_booking_journal

Читает записи и блокировки всех расписаний пространства, пересекающие заданный период: начало объекта раньше to, конец позже from. Объект, заканчивающийся ровно в from или начинающийся ровно в to, не включается.

Параметр Тип Обязательность / пропуск Ограничения
workspace_id integer Обязательный ID пространства.
from string Обязательный Начало периода в UTC; дата/время, рекомендуемый формат ISO 8601 с Z.
to string Обязательный Конец периода в UTC; должен быть позже from.
JSON
{"workspace_id": 123, "from": "2026-11-01T00:00:00Z", "to": "2026-12-01T00:00:00Z"}

Результат содержит workspace_id, from, to и два массива: bookings и blocks. Идентификаторы записей и блокировок берите из соответствующих массивов.

update_booking

Меняет статус, комментарий или время существующей записи. Нужно передать хотя бы одно изменяемое поле; непереданные поля сохраняются. Уведомления зависят от изменения статуса/времени и настроек расписания.

Параметр Тип Обязательность / пропуск Ограничения
workspace_id integer Обязательный ID пространства.
booking_id integer Обязательный Не меньше 1; ID записи в этом пространстве.
status string Нет; текущий статус pending, confirmed, cancelled, no_show.
comment string Нет; текущий комментарий До 5000 символов. Пустая строка очищает комментарий.
start_utc string Вместе с end_utc для переноса Непустая дата/время в UTC; рекомендуемый формат ISO 8601 с Z.
end_utc string Вместе с start_utc для переноса Непустая дата/время в UTC, позже начала.

Для переноса передавайте обе границы: одна граница, пустые строки или null вызывают отказ. Для изменения только статуса или комментария пропустите обе границы. scheduler_id этот инструмент не принимает.

JSON
{
  "workspace_id": 123,
  "booking_id": 789,
  "start_utc": "2026-11-02T10:00:00Z",
  "end_utc": "2026-11-02T10:30:00Z",
  "comment": "Время согласовано с респондентом"
}

Результат содержит workspace_id и обновлённую booking.

create_booking_block

Закрывает промежуток для новых записей. Уже сделанные записи не отменяются. Каждый успешный вызов создаёт новую блокировку; для последующего удаления сохраните её ID.

Параметр Тип Обязательность / пропуск Ограничения
workspace_id integer Обязательный ID пространства.
scheduler_id integer Обязательный Не меньше 1; ID расписания в этом пространстве.
start_utc string Обязательный Начало в UTC; дата/время, рекомендуемый формат ISO 8601 с Z.
end_utc string Обязательный Конец в UTC, позже начала.
comment string Нет; пустой комментарий До 5000 символов. Входная схема объявляет строку; для пропуска комментария не передавайте поле.
JSON
{
  "workspace_id": 123,
  "scheduler_id": 456,
  "start_utc": "2026-11-02T13:00:00Z",
  "end_utc": "2026-11-02T14:00:00Z",
  "comment": "Занятое окно"
}

Результат содержит workspace_id и block. Блокировка относится только к указанному расписанию.

delete_booking_block

Снимает блокировку и снова открывает время для записи с учётом остальных правил расписания.

Параметр Тип Обязательность / пропуск Ограничения
workspace_id integer Обязательный ID пространства.
block_id integer Обязательный Не меньше 1; ID блокировки в этом пространстве.
JSON
{"workspace_id": 123, "block_id": 321}

Результат содержит workspace_id и удалённый block_id. scheduler_id, границы и комментарий не передаются; повтор после удаления вернёт отказ «блокировка не найдена».

Тариф, оплата в опросе, партнёрка, респонденты

Тариф аккаунта

get_workspace_tariff отвечает на вопрос, который стоит за половиной отказов: что именно мешает — кончился лимит, истёк срок или возможности нет в тарифе.

Показывает код тарифа, оплачен ли он и сколько дней осталось; остатки по опросам, ответам, участникам, темам, месту на диске и адресам для писем; и полный список возможностей — свой домен, своё хранилище, роли, выгрузка ответов, публичные ссылки на результаты, AI-отчёт, каждая интеграция отдельно.

Приём оплаты в опросе стоит отдельным признаком features.quiz_payment, а не среди интеграций: тарифная опция у него своя, и раньше он всегда показывался недоступным. Интеграции лежат в features.integrations под своими кодами (google_sheets, telegram, webhook и остальные).

Только чтение: сменить тариф или оплатить через ассистента нельзя.

Список тарифов

get_tariff_list показывает все тарифы с ценами, периодами и составом. Нужен, когда упёрлись в «недоступно на текущем тарифе»: по списку видно, какой тариф решает задачу. Цены считаются с учётом текущего тарифа — доплата при переходе уже учтена.

Только чтение: оплатить или сменить тариф через ассистента нельзя.

manage_quiz_payment

Приём оплаты в опросе через ЮKassa: show, save.

Счета продавца здесь не заводятся: для них нужны идентификатор магазина и секретный токен ЮKassa, а платёжные ключи через ассистента не передают. По той же причине токен вырезан из списка счетов — наружу уходит только то, по чему счёт можно выбрать.

Отдельного переключателя «включить оплату» нет, и это не упущение: такой колонки в настройках не существует. Оплата работает, когда у аккаунта есть счёт продавца и тариф разрешает виджет оплаты (в ответе — payment_ready), а показ самого вопроса с оплатой задаётся его виджетом через update_quiz_widgets.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
action string (Обязательный) show или save.
yookassa_account_id integer (Обязательный для save) Счёт продавца из show. Чужой отклоняется.
payment_type string (Обязательный для save) fixed или scoring.
fixed_amount number Сумма. Обязательна при fixed: иначе оплата ушла бы на ноль.
contact_widget_id string/null Вопрос, из которого берут контакт для чека.

get_respondent_campaigns

Заказанные респонденты: кампании закупки прохождений и их результат. Только чтение.

Без campaign_id — список кампаний аккаунта плюс цена одного ответа и минимальный размер группы. С campaign_id — карточка: статус и модерация, просмотры, ответы, конверсия, первое и последнее прохождение, среднее время, соцдем заказа и данные об оплате. Заказать кампанию и оплатить через ассистента нельзя: это списание денег. Расчёт доступной аудитории по соцдему — в кабинете.

Параметр Тип Описание
workspace_id integer (Обязательный) ID workspace.
campaign_id integer Одна кампания. Без него — список.

Партнёрская программа

get_partner_program показывает партнёрскую статистику: баланс к выплате и удержанное, кто пришёл по партнёрской ссылке и сколько раз оплатил, начисления за период и метки источников — их партнёр вешает на свои каналы, чтобы отличать, откуда идут люди.

Период задаётся датами, выдачу можно сузить одной меткой. Только чтение: заявка на выплату и платёжные реквизиты остаются в кабинете.

Метки партнёрских источников

manage_partner_source заводит, переименовывает и удаляет метки: create, rename, delete. Название — от 3 до 25 символов; при create без названия подставляется имя по порядку, как в кабинете.

Метка отделяет один канал продвижения от другого — по ней в статистике видно, откуда пришёл человек. Сами метки и статистику по ним показывает get_partner_program. Метки принадлежат партнёру, а не аккаунту: чужую не тронуть.

get_partner_program

Работает только с API-ключом, не с OAuth-токеном выбранного воркспейса. Все параметры необязательные.

Параметр Тип Ограничения
date_from, date_to string Корректные даты; используйте YYYY-MM-DD
source_id integer Срез статистики по метке источника
limit integer 1–200, по умолчанию 20

Пример аргументов: {"date_from":"2026-10-01","date_to":"2026-10-08","source_id":4,"limit":20}. Дополнительные данные успешного ответа находятся в соседних полях результата и продублированы JSON-текстом в content[1].

manage_partner_source

Работает только с API-ключом. Метка принадлежит текущему пользователю.

Параметр Тип Обязательность
action string Обязательный: create, rename, delete
source_id integer Обязательный положительный ID для rename и delete
name string Обязательный для rename, 3–25 символов; при create необязательный

Пример аргументов: {"action":"rename","source_id":4,"name":"Исследования"}. create заводит новую метку при повторном вызове; не повторяйте его автоматически после неизвестного исхода. delete удаляет метку.

Промокоды

Промокоды (Доступно на платных тарифах)

create_promocode_group

Создаёт новый список промокодов для workspace. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Список промокодов создан."
    },
    {
      "type": "text",
      "text": "{\"list_id\":10}"
    }
  ],
  "isError": false,
  "list_id": 10
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса в нужном workspace.
name string (Обязательный) Название списка.
codes array (Обязательный) Массив строковых кодов (до 1000).

add_promocodes

Добавляет новые промокоды в существующий список. Структура ответа (успех):

JSON
{
  "content": [
    {
      "type": "text",
      "text": "Промокоды успешно добавлены."
    },
    {
      "type": "text",
      "text": "{\"added_count\":5}"
    }
  ],
  "isError": false,
  "added_count": 5
}
Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса в нужном workspace.
list_id integer (Обязательный) ID списка промокодов (promocode://list).
codes array (Обязательный) Массив строковых кодов.

manage_promocode_group

Правит списки промокодов: update (название, вид и размер кода), delete, attach, detach, delete_code.

Завести список и досыпать кодов — это create_promocode_group и add_promocodes. Удаление списка уносит все его коды и требует confirm_delete. Промокоды доступны не на всех тарифах.

Параметр Тип Описание
quiz_id integer (Обязательный) Опрос, от которого проверяются права и тариф.
action string (Обязательный) update, delete, attach, detach, delete_code.
list_id integer ID списка. Не нужен для detach и delete_code.
name string Новое название списка. Обязательно для update.
code_format string text, qr, barcode, datamatrix.
code_width, code_height integer Размер кода в пикселях, 20–2000.
quiz_ids array Опросы для attach и detach, до 200. Опрос чужого аккаунта не проглатывается молча — приходит отказ со списком.
code_id integer ID кода для delete_code (get_promocode_codes).
confirm_delete boolean Подтверждение удаления списка вместе с кодами.

get_promocode_list_quizzes

Показывает, к каким опросам аккаунта привязан список промокодов.

Сверху идут привязанные и текущий опрос, как в кабинете. Нужен, чтобы не отвязывать вслепую: саму привязку и отвязку делает manage_promocode_group.

Параметр Тип Описание
quiz_id integer (Обязательный) Опрос, от которого проверяются права и тариф.
list_id integer (Обязательный) ID списка из get_promocode_list.
search string Поиск опроса по названию.
limit integer Сколько вернуть, 1–500. По умолчанию 50.
offset integer Сколько пропустить.

Чтение данных: get-инструменты

Чтение данных (Get tools)

Эти инструменты читают данные ресурсов для клиентов, не поддерживающих resources/read. Форма результата и обработка параметров могут отличаться; ниже указаны ограничения конкретных инструментов.

get_user_me

Возвращает информацию о текущем авторизованном пользователе. Параметры не требуются.

get_workspace_list

Возвращает список рабочих пространств. Параметры не требуются.

get_folder_list

Возвращает список папок текущего пользователя (папки шаблонов не входят).

Параметр Тип Описание
workspace_id integer Необязательный. ID аккаунта из get_workspace_list: только его папки — у владельца все, у участника только выданные ему. Без параметра — папки всех доступных аккаунтов, как у ресурса folder://list. Аккаунт, к которому нет доступа (или нет такого), — ошибка workspace_not_found.

get_quiz_list

Возвращает список опросов аккаунта. Без параметров — все живые опросы, как раньше.

Архивные опросы в обычный список не попадают: их показывает archived: true. У каждого опроса есть признак is_archived и формат type.

Архив виден только с правом роли quiz_archive (владельцу воркспейса — всегда), как в кабинете и API v3. С workspace_id и без права — ошибка с объяснением права. Без workspace_id архив воркспейсов, где права нет, в список и в total просто не попадает.

При непустых аргументах total считает, сколько опросов подходит под фильтры вообще, returned — сколько отдано на этой странице. Фильтр type учитывается в обоих. Вызов с {} делегирует ресурсу quiz://list: у него total и items, без returned. Сам ресурс не применяет query-фильтры; для фильтрации и пагинации используйте инструмент.

Параметр Тип Описание
name string Поиск по названию, частичное совпадение без учёта регистра.
folder_id integer Только опросы этой папки (folder://list).
workspace_id integer Только опросы доступного рабочего пространства; не меньше 1.
archived boolean true — архивные вместо обычных. По умолчанию false.
type string Только опросы одного формата: regular — обычные, micro — опросы на сайте. Без параметра приходят оба; неизвестное значение — ошибка валидации.
limit integer Сколько вернуть, 1–200; пропущен — без лимита.
offset integer Сколько пропустить, не меньше 0; пропущен — с начала.

Все аргументы необязательны. Например, первая страница обычных опросов:

JSON
{"type":"regular","limit":20,"offset":0}

Результат инструмента с непустыми аргументами содержит данные и соседними полями, и JSON-текстом в content. При делегировании ресурсу JSON находится в первом блоке, например для пустого списка:

JSON
{"content":[{"type":"text","text":"{\"total\":0,\"items\":[]}"}],"isError":false}

get_quiz_structure

Возвращает структуру виджетов опроса. Аналог quiz://{id}/structure.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.

get_quiz_answers

Возвращает ответы респондентов. Аналог quiz://{id}/answers.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
limit integer Количество ответов (по умолчанию 20, макс. 100).
offset integer Смещение (по умолчанию 0).
date string Фильтр по дате (формат Y-m-d).
is_complete boolean true — завершённые. При пропуске — оба состояния, если тариф разрешает незавершённые, иначе завершённые. Ограничение false описано ниже.
is_screenout boolean По умолчанию false: отсеянные исключаются. true выбирает завершённые отсеянные ответы.
is_deleted boolean По умолчанию false. true выбирает мягко удалённые ответы и имеет приоритет над is_screenout/is_complete.
sort string Поле сортировки: date_end или date_start.
order string Направление: asc или desc.
unique_link_group_id integer Необязательный положительный ID набора уникальных ссылок (manage_quiz_unique_links). Работает на любом тарифе.
unique_link_ids array<integer> Необязательный список до 1000 положительных ID. Только ответы этих ссылок указанного набора; без unique_link_group_id не учитывается.

У каждого ответа есть поле unique_link — {id, label, group_id, group_name} или null для основного адреса опроса.

Для чтения требуется право view_results. Флаги не сбрасывают друг друга: приоритет выбора — удалённые, затем отсеянные, затем завершённость; дата и отбор по уникальным ссылкам дополнительно сужают выборку. Без unique_link_ids выбирается весь указанный набор; с ними — пересечение набора и списка ссылок.

В проверенной реализации get_quiz_answers значение JSON is_complete:false действует как пропуск поля. Для отдельного среза незавершённых используйте resources/read с URI quiz://42/answers?is_complete=false: строковое значение ресурса обрабатывается корректно. Без тарифной опции незавершённых ресурс всё равно сужает этот срез до завершённых. Не используйте строку "false" в аргументах инструмента: она не соответствует его схеме boolean.

Пример аргументов чтения завершённых ответов двух ссылок:

JSON
{"quiz_id":42,"limit":20,"offset":0,"is_complete":true,"is_screenout":false,"is_deleted":false,"unique_link_group_id":12,"unique_link_ids":[501,502]}

У инструмента, делегирующего ресурсу, JSON данных или отказа лежит в первом текстовом блоке content; отказ ресурса отмечается isError:true. Если иной инструмент возвращает дополнительные детали ошибки, они также дублируются отдельным JSON-текстом. Это результат инструмента, не объект ошибки JSON-RPC.

answer_total_count считает ответы по тем же фильтрам, что и список (date, is_complete, is_screenout, is_deleted, срез по уникальным ссылкам), без учёта limit и offset — по нему можно листать страницы. Раньше он считал все не скрытые ответы опроса без фильтров. Нет ответов — answers: [], а не null; у вопроса без скрытых опций hidden_options: [].

get_quiz_hidden_options

Возвращает скрытые служебные опции опроса. Аналог quiz://{id}/hidden_options.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.

get_quiz_texts

Возвращает надписи (тексты) опроса. Аналог quiz://{id}/texts.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.

get_quiz_variables

Возвращает скрытые переменные (UTM/extra_fields). Аналог quiz://{id}/variables.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.

get_quiz_summary

Возвращает сводную аналитику опроса. Аналог quiz://{id}/summary.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.

Ответ приходит в одной из двух форм — по формату опроса.

Обычный опрос (type = regular) — как раньше: визиты, устройства, география, воронка по дням. Плюс посещения для воронки «открыл → ответил → завершил»: visits_opens (открытий опроса), visits_unique (уникальных браузеров, равно all_visited), visits_with_answer (посещений хотя бы с одним ответом), visits_completed (с завершённым ответом). «Открыли и не ответили» = visits_opens − visits_with_answer.

Опрос на сайте (type = micro) показывается карточкой внутри чужой страницы и своей страницы не имеет, поэтому визитов у него нет и обычная сводка отдала бы нули. Вместо неё приходит воронка показов:

Поле Тип Описание
quiz_type string Всегда micro. У обычного опроса ключа нет вовсе — по нему форма и различается.
is_connected boolean false — опрос ещё не подключён ни к одному сайту, показов не было, остальных полей нет.
site_domain string Домен сайта, на котором показывается опрос.
summary object Воронка и разрезы: показы (события и посетители), открытия, начатые и завершённые прохождения, отказы, на каком вопросе бросают, по дням, страницам, устройствам и странам, а также причины, по которым опрос не показали.

Пока подключения нет, ответ ограничен признаками:

JSON
{ "quiz_type": "micro", "is_connected": false }

get_quiz_visit_segments

Посещения опроса (каждое открытие — одно посещение), разбитые по одному признаку: значению параметра ссылки, устройству, браузеру или стране. Аналог «Источников», «Устройств и браузеров» и «Географии» в «Сводке». Право — просмотр результатов.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
by string (Обязательный) param, device, browser, country.
key string Имя параметра ссылки при by=param (обязателен для него), до 255 символов. Имена — в quiz://{id}/hidden_options.
date_from, date_to string YYYY-MM-DD, включительно. Период — по дню посещения в часовом поясе владельца.
device string desktop, mobile, tablet.

Ответ: quiz_id, by, key (как в запросе, null без by=param), rows[] — value, opens (посещений), unique_browsers, with_answer (посещений хотя бы с одним ответом), completed (с завершённым ответом), при by=country ещё code (код ISO 3166-1 alpha-2 страны, null — не определена); truncated — строк было больше 200. У by=param строка value: null — посещения без параметра, "" — параметр был пустым, это разные строки. У устройства, браузера и страны null — неизвестно или скрыто анонимностью. Порядок — по opens, null последней, всего строк не больше 200. В опросе с анонимными ответами разбивка по устройству, браузеру и стране пустая.

Ошибка проверки (нет by, нет key при by=param, плохие даты, неизвестное устройство) — isError с текстом. На очень крупном опросе подсчёт может не уложиться в 20 секунд — тогда isError с советом сузить период; то же у get_quiz_visits.

get_quiz_visits

Журнал посещений опроса, сначала новые. Аналог журнала посещений «Сводки». Право — просмотр результатов.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
status string all (по умолчанию), no_answer, started (все с ответом), completed, unfinished, screenout.
param_key string Имя параметра ссылки. Нужен param_value или param_missing.
param_value string Только с этим значением параметра; пустая строка — параметр был пустым.
param_missing boolean true — только пришедшие без параметра. Вместе с param_value нельзя.
segment_by string device, browser, country. Нужен segment_value или segment_unknown.
segment_value string Значение признака — как в get_quiz_visit_segments.
segment_unknown boolean true — только с неизвестным значением признака. Вместе с segment_value нельзя.
date_from, date_to, device string Как у get_quiz_visit_segments.
limit integer 1–100, по умолчанию 30.
offset integer 0–1000000, по умолчанию 0.

Ответ: quiz_id, total — посещений под всеми фильтрами, counts — по статусам без учёта status (all, no_answer, started, completed, unfinished, screenout), items[] — id, created_at (ISO 8601 в поясе владельца), device, browser, country (null — неизвестно или скрыто анонимностью), country_code (код ISO страны, null — неизвестно или скрыто), params (параметры ссылки посещения), status (по лучшему ответу: completed > screenout > unfinished, нет ответа — no_answer), answer_id (ответ, задавший статус; null — ответа нет, а на тарифе без незавершённых ответов — и у unfinished / screenout).

get_quiz_report

Возвращает детальный отчёт по виджетам. Аналог quiz://{id}/report. Возвращает report_uuid, нужный для get_quiz_report_files и get_quiz_report_inputs.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
is_complete boolean Параметр совместимости. В проверенной реализации итоговый срез определяется сохранёнными statuses отчёта; false не переключает его на незавершённые.
date_from string Необязательное начало периода (Y-m-d); при пропуске граница не задаётся.
date_to string Необязательный конец периода (Y-m-d); при пропуске граница не задаётся.

Имена дат зависят от способа чтения: инструмент принимает date_from/date_to и сам преобразует их в dateFrom/dateTo. У ресурса quiz://{id}/report используются query-имена dateFrom/dateTo; snakecase-алиасов сам ресурс не добавляет. Даты дополнительно сужают сохранённый срез при доступной тарифной опции фильтрации результатов. Для фильтров по условиям вопросов используйте generate_filtered_report: у него даты в формате d.m.Y и widgets — массив объектов условий.

Пример аргументов инструмента чтения:

JSON
{"quiz_id":42,"date_from":"2026-10-01","date_to":"2026-10-08"}

get_quiz_widgets_hidden

Возвращает скрытую мета-информацию виджетов. Аналог quiz://{id}/widgets_hidden.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.

get_quiz_report_filters

Возвращает сохранённые фильтры отчётов. Аналог quiz://{id}/report_filters.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.

get_quiz_report_files

Возвращает файловые ответы для виджета из отчёта. Аналог quiz://{id}/report/{uuid}/files.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
report_uuid string (Обязательный) UUID отчёта из get_quiz_report.
widget_id string (Обязательный) UUID виджета из get_quiz_structure.
widget_hash string (Обязательный) Hash виджета из get_quiz_structure.
limit integer Количество записей (по умолчанию 50).
offset integer Смещение (по умолчанию 0).

get_quiz_report_inputs

Возвращает текстовые ответы на input-виджеты из отчёта. Аналог quiz://{id}/report/{uuid}/inputs.

Параметр Тип Описание
quiz_id integer (Обязательный) ID опроса.
report_uuid string (Обязательный) UUID отчёта из get_quiz_report.
widget_id string (Обязательный) UUID виджета из get_quiz_structure.
widget_hash string (Обязательный) Hash виджета из get_quiz_structure.
limit integer Количество записей (по умолчанию 50).
offset integer Смещение (по умолчанию 0).

get_theme_list

Возвращает список тем оформления. Аналог theme://list. Параметры не требуются.

get_theme_details

Возвращает детальные настройки темы. Аналог theme://{id}/details.

Параметр Тип Описание
theme_id integer (Обязательный) ID темы.

get_promocode_list

Возвращает списки промокодов воркспейса. Аналог promocode://list.

Параметр Тип Описание
workspace_id integer (Обязательный) ID рабочего пространства.
search string Поисковая строка.
sort string Поле сортировки.
order string asc или desc.
offset integer Смещение (по умолчанию 0).
limit integer Количество записей (по умолчанию 20).

get_promocode_codes

Возвращает коды конкретного списка промокодов. Аналог promocode://{id}/codes.

Параметр Тип Описание
list_id integer (Обязательный) ID списка из get_promocode_list.
workspace_id integer (Обязательный) ID рабочего пространства.
search string Поисковая строка.
used integer 1 — использованные, 0 — неиспользованные.
sort string Поле сортировки.
order string asc или desc.
offset integer Смещение (по умолчанию 0).
limit integer Количество записей (по умолчанию 20).