ИИ-ассистенты
Инструменты MCP
Все инструменты MCP-сервера: что делает каждый, какие параметры принимает и что возвращает
Все инструменты
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, а не текст сообщения об успехе.
Успех с дополнительными полями:
{
"content": [
{"type":"text","text":"Опрос #123 переименован в \"Новое название\"."},
{"type":"text","text":"{\"quiz_id\":123,\"name\":\"Новое название\"}"}
],
"isError":false,
"quiz_id":123,
"name":"Новое название"
}Ошибка с деталями проверки:
errors ниже иллюстрирует ошибки логики; конкретный текст зависит от нарушения. Данные доступны и рядом с content, и во втором блоке.
{
"content": [
{"type":"text","text":"Логика не сохранена: есть ошибки."},
{"type":"text","text":"{\"errors\":[\"Переход ссылается на отсутствующий вопрос.\"]}"}
],
"isError":true,
"errors":["Переход ссылается на отсутствующий вопрос."]
}Инструмент, возвращающий JSON ресурса:
У get_quiz_structure данные находятся в первом блоке; widgets, conditions и остальные поля ресурса не дублируются на верхнем уровне. Пример содержит сокращённые иллюстративные данные ресурса.
{
"content":[{"type":"text","text":"{\"id\":123,\"widgets\":{\"ids\":[],\"entities\":{}},\"conditions\":{},\"extra_fields\":[]}"}],
"isError":false
}Если JSON ресурса содержит строковое error, инструмент возвращает isError: true; сообщение об ошибке также остаётся 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. Подробности — в инструментах чтения.
Структура ответа (успех):
{
"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
Переименовывает существующий опрос. Структура ответа (успех):
{
"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.
Структура ответа (успех):
{
"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
Архивирует или разархивирует опрос. Структура ответа (успех):
{
"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
Удаляет опрос (мягкое удаление, с возможностью восстановления). Структура ответа (успех):
{
"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) при записи тариф не сверяет, поэтому может не опубликоваться по
тем же причинам.
Структура ответа (успех):
{
"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
Перемещает опрос в другую папку пользователя. Структура ответа (успех):
{
"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) в шаблон не переносятся; исходный опрос не меняется. Структура ответа (успех):
{
"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.
Структура ответа (успех):
{
"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-опроса в приложении: модель сама собирает структуру, виджеты и (опционально) логику переходов. Структура ответа (успех):
{
"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
Сохраняет структуру виджетов опроса. Используется для изменения/добавления любых элементов формы. Структура ответа (успех):
{
"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, из опроса удаляется. Поэтому правка одного поля — это три шага:
get_quiz_structure(quiz_id)— получитьwidgets.idsиwidgets.entities;- поправить нужное поле в нужной сущности;
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 с фактическим составом опроса после записи — по нему сверяется, что изменение применилось, без повторного чтения структуры:
{
"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
Сохраняет пользовательские тексты кнопок и интерфейсных элементов опроса. (Требуется платный тариф). Структура ответа (успех):
{
"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/устройства и др.). Передаются только те поля, которые нужно изменить. Структура ответа (успех):
{
"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. Пропущенные настройки сохраняются; эти значения показывают выбранный сценарий, а не значения по умолчанию:
{
"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 виджетов. Структура ответа (успех):
{
"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. Пустой объект {} очищает именно переданную карту.
Для изменения одного правила:
- Получите
get_quiz_structureсquiz_id; вconditionsнаходятся карты текущего черновика, а вwidgets— реальные UUID вопросов и вариантов. - Измените нужную запись в полученной карте, сохранив остальные записи этой карты.
- Передайте
quiz_idи полную изменённую карту. Другие карты можно опустить. ПроверьтеisError, деталиerrorsи предупрежденияwarnings; только после проверки публикуйте.
Очистка всей условной логики — отдельное намеренное действие:
{"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 шкалы. Видимость или переход задаются на уровне группы отдельно.
{
"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):
{
"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):
{
"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; источник — вопрос-якорь группы):
{
"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:
{
"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:
{
"defaultConditions": { "uuid-вопроса": {"widgetId": "uuid-цели"} }
}Для обычного условного перехода или показа/скрытия в savedLogic нужно хотя бы одно условие в conditionsData. Дисквалификация по квоте — исключение. Пример defaultConditions выше также является фрагментом: сохраните остальные переходы этой карты.
2. Циклы запрещены.
Переход, который замыкает маршрут в кольцо (например, «вернуть на вопрос о формате участия» из вопроса ниже по потоку), инструмент отклоняет с ошибкой о зацикленном переходе. Это не ограничение MCP: конструктор при цикле отключает кнопку публикации, то есть такой опрос нельзя выпустить в принципе.
Если по замыслу человек должен что-то выбрать заново — заведите отдельный вопрос ниже по потоку вместо возврата к пройденному.
Переход назад сам по себе разрешён, если он не создаёт кольца: инструмент вернёт предупреждение о слиянии веток, но сохранит логику.
3. Дисквалификация по квоте — это группа без условий.
Квота — это группа с actionType = screenout, режимом answer_quota и пустым conditionsData. Условие в такой группе делает её обычной дисквалификацией по ответу: правило сработает, но квота считаться не будет. Инструмент на такую пару вернёт предупреждение.
Порог и источник квоты задаются внутри screenoutConfig, а не условиями:
{
"conditionGroupId": "g1",
"actionType": "screenout",
"jumpTo": {"widgetId": "uuid-экрана-отсева"},
"conditionsData": [],
"screenoutConfig": {
"mode": "answer_quota",
"sourceWidgetId": "uuid-вопроса",
"quotaType": "answer_option",
"quotaLimit": "100",
"quotaOptionId": "uuid-варианта"
}
}update_quiz_note
Добавляет или изменяет внутреннюю заметку опроса. Структура ответа (успех):
{
"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. (Требуется платный тариф). Структура ответа (успех):
{
"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
Загрузка картинки для виджета "Выбор из списка" с медиа-вариантами. Структура ответа (успех):
{
"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 нужно взять из своих ресурсов; пример не заменяет полный снимок):
{
"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) опроса. Структура ответа (успех):
{
"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 использовать повторно нельзя. |
Аргументы создания:
{"quiz_id":123,"name":"utm_source"}Повторное создание с тем же именем или id вернёт ошибку, а не обновит переменную.
update_quiz_variable
Обновляет имя скрытой переменной. Структура ответа (успех):
{
"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
Удаляет скрытую переменную. Структура ответа (успех):
{
"content": [{"type": "text", "text": "Скрытая переменная удалена."}],
"isError": false
}| Параметр | Тип | Описание |
|---|---|---|
quiz_id |
integer |
(Обязательный) ID опроса. |
field_id |
string |
(Обязательный) UUID переменной. |
Скрытые опции
create_hidden_option
Создаёт скрытую служебную опцию всего опроса. Структура ответа (успех):
{
"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
Обновляет скрытую служебную опцию опроса. Структура ответа (успех):
{
"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
Удаляет скрытую опцию опроса. Структура ответа (успех):
{
"content": [{"type": "text", "text": "Скрытая опция удалена."}],
"isError": false
}| Параметр | Тип | Описание |
|---|---|---|
quiz_id |
integer |
(Обязательный) ID опроса. |
opt_id |
integer |
(Обязательный) ID опции (quiz://{id}/hidden_options). |
create_widget_hidden_option
Создаёт скрытую служебную опцию конкретного виджета. Структура ответа (успех):
{
"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
Обновляет опцию конкретного виджета. Структура ответа (успех):
{
"content": [{"type": "text", "text": "Скрытая опция виджета обновлена."}],
"isError": false
}| Параметр | Тип | Описание |
|---|---|---|
quiz_id |
integer |
(Обязательный) ID опроса. |
opt_id |
integer |
(Обязательный) ID опции. |
name |
string |
(Обязательный) Ключ опции. |
value |
string |
(Обязательный) Значение. |
delete_widget_hidden_option
Удаляет опцию конкретного виджета. Структура ответа (успех):
{
"content": [{"type": "text", "text": "Скрытая опция виджета удалена."}],
"isError": false
}| Параметр | Тип | Описание |
|---|---|---|
quiz_id |
integer |
(Обязательный) ID опроса. |
opt_id |
integer |
(Обязательный) ID опции. |
Папки и доступ к ним
create_folder
Создаёт новую папку для группировки опросов. Структура ответа (успех):
{
"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. Папка по умолчанию не удаляется. Одноимённых папок в аккаунте не заводится.
Структура ответа (успех):
{
"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
Применяет указанную тему оформления к опросу. Структура ответа (успех):
{
"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 и применяет к опросу. (Требуется платный тариф). Структура ответа (успех):
{
"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).
Структура ответа (успех):
{
"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, а не вложенный объект. Пример аргументов:
{"workspace_id":7,"theme_id":14,"answers_text_color":"#20202A","dropdown_bg_color":"#FFFFFF"}Необходимо передать хотя бы одно поле оформления. Требуются право theme с учётом владельца темы и платный тариф; тема должна принадлежать указанному воркспейсу.
Раздача опроса: ссылка, QR-код, пароли, печать
set_quiz_link
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. |
manage_quiz_unique_links
Ведёт наборы уникальных ссылок на опрос — отдельных адресов 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. Служебные имена запрещены. [] очищает список. |
Например, аргументы создания и проверки изменения лимита:
{"quiz_id":42,"action":"create_group","name":"Отдел продаж","labels":["Москва","Казань"],"max_uses":1}{"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 с полями для заполнения:
{"quiz_id":42,"format":"pdf","font":"medium","sheet":{"header":true,"fields":true,"lines":4,"paper":"a4","numbering":true}}Ответы: видимость, теги, пометки, чистка
Ответы и аналитика
toggle_answer_visibility
Скрывает или показывает конкретный ответ респондента. Структура ответа (успех):
{
"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
Добавляет/синхронизирует теги для выбранного ответа. Структура ответа (успех):
{
"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. Удаляются и все привязки этого тега к ответам.
{"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.
Структура ответа (успех):
{
"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 не заменяют этот выбор. Настройка среза меняет состояние отчёта, поэтому перед её записью учитывайте, кто ещё использует этот отчёт.
Пример аргументов:
{"quiz_id":42,"dateFrom":"01.10.2026","dateTo":"08.10.2026","unique_link_group_id":12,"unique_link_ids":[501,502]}Пример условия «свободный ответ содержит Да»; замените UUID и тип данными своего вопроса:
{"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. Тариф ограничивает число опросов с отчётом; пересборка существующего лимит не расходует.
Структура ответа (успех):
{
"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. |
share_summary_link / share_report_link / share_answers_link
Создаёт публичные ссылки для шеринга аналитики с заказчиками (без авторизации). Структура ответа (успех):
{
"content": [
{
"type": "text",
"text": "Публичная ссылка summary создана."
},
{
"type": "text",
"text": "{\"url\":\"https://webask.io/results/...\"}"
}
],
"isError": false,
"url": "https://webask.io/results/..."
}Все три инструмента требуют доступ к опросу и право view_results. Ссылка открывает выбранные данные без входа в аккаунт; результат создания ссылки не подтверждает, что её уже просмотрел заказчик.
Аргументы share_summary_link
| Параметр | Тип | Обязательность и default |
|---|---|---|
quiz_id |
integer |
Обязателен. |
date_from, date_to |
string |
Необязательные границы Y-m-d; при пропуске соответствующая граница не задаётся. |
Аргументы share_report_link
| Параметр | Тип | Обязательность и 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 здесь не обещает только завершённые — сохранённый срез может включать несколько доступных статусов. Даты отдельными аргументами этому инструменту не передаются.
{"quiz_id":42,"is_complete":false,"is_screenout":false,"is_deleted":false}Аргументы share_answers_link
| Параметр | Тип | Обязательность и 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; повтор создаёт новую ссылку.
{"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.
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 входят только ссылки на все и на выбранные ответы: ссылки
респондентов на свой ответ и ссылки «все, кроме выбранных» не входят.
set_share_link_active
Выключает или включает публичную ссылку. Выключенная перестаёт открываться —
публичная страница отвечает как на ссылку, которой нет; строка остаётся, ссылку
можно включить обратно. Нужно право 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 у этих четырёх инструментов нет.
Пример аргументов выгрузки с исключением одного тестового ответа:
{"quiz_id":42,"is_complete":true,"is_screenout":false,"is_deleted":false,"excludedIds":[100]}Полный результат CSV с данными (URL и текст сообщения иллюстративны):
{
"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; дополнительных фильтров в схеме нет. Пример аргументов:
{"quiz_id":42}export_filtered_report_pdf / export_filtered_report_word
Выгружают отчёт с сохранённым состоянием и фильтрами в PDF/Word. Обязателен только quiz_id: integer; даты, ID ответов, флаги завершённости и report_uuid этим инструментам не передаются. Сначала прочитайте сохранённые фильтры через get_quiz_report_filters и проверьте срез отчёта. Изменение сохранённых фильтров меняет состояние отчёта и для других пользователей.
{"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. |
get_quiz_messenger_link
Ссылка, по которой человек добавляет бота 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. |
Например, аргументы запроса ссылки:
{"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 замените идентификатором своего вопроса):
{"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.
{"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.
{"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; значения заголовков в журнале маскируются. Код и тело ответа приёмника позволяют отличить настройку от фактической доставки.
{"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 — количество поставленных повторов, не подтверждение доставки. После повтора прочитайте журнал; одинаковый повтор может ещё раз отправить данные приёмнику.
{"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 возвращает отказ. Тарифная опция для удаления не требуется.
{"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 и дополнительные поля сервиса.
{"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. Последний флаг относится к письмам о записи на встречу и независим от уведомлений о новых ответах. Коды и хеши подтверждения не возвращаются.
{"quiz_id": 123}toggle_quiz_email
Задаёт желаемое состояние письма. Повтор с тем же enabled сохраняет состояние.
| Параметр | Тип | Обязательность / пропуск | Ограничения |
|---|---|---|---|
quiz_id |
integer |
Обязательный | ID опроса. |
type |
string |
Обязательный | owner — автору, client — респонденту. |
enabled |
boolean |
Обязательный | true — включить, false — выключить. |
Первое включение создаёт настройки писем. Уведомления автору дополнительно зависят от подтверждения и активности адреса; адрес респондента берётся из источника, указанного в client_source. Включение client может быть отклонено тарифом.
{"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. Этот инструмент сохраняет шаблон, но не включает письма.
{
"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 для следующих действий берите из этого списка.
{"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.
{"quiz_id": 123, "email_id": 456}delete_quiz_email_recipient
Удаляет адрес из списка текущего опроса. В других опросах пространства он остаётся получателем. Если адрес удалён из последнего опроса, он исчезает из общего пула.
| Параметр | Тип | Обязательность / пропуск | Ограничения |
|---|---|---|---|
quiz_id |
integer |
Обязательный | ID опроса. |
email_id |
integer |
Обязательный | Не меньше 1; ID адреса из списка получателей этого пространства. |
{"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 должны существовать в черновике этого опроса: чужие или вымышленные значения вызывают отказ. Списки независимы.
{
"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 не нужен |
Код из письма. |
Успешное подтверждение отмечает адрес как подтверждённый и включает его активность. Неверный код расходует попытку; повторная отправка ограничена числом попыток и допускается не чаще раза в минуту. Не подбирайте код повторными запросами.
{"quiz_id": 123, "action": "confirm", "email_id": 456, "confirmation_code": 1234}{"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: неотрицательное число пропускаемых записей. |
{"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) доступно не на всех тарифах — на остальных инструмент вернёт ошибку, а значение останется включённым.
upload_workspace_logo
Загрузка логотипа по ссылке или из 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 его принимает. Свой логотип доступен не на всех тарифах.
delete_workspace_logo
Удаляет логотип воркспейса. Параметр один — 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 доступного пространства. |
{"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 символов. |
Создание недельного расписания:
{
"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 всё равно присутствует:
{
"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"}
}Обновление без удаления расписания:
{"workspace_id": 123, "scheduler_id": 456, "is_active": false}Результат содержит workspace_id и сохранённое scheduler.
duplicate_scheduler
Копирует настройки расписания без записей, блокировок и резервов. Каждая успешная операция создаёт новую копию; повтор не возвращает прежнюю копию.
| Параметр | Тип | Обязательность / пропуск | Ограничения |
|---|---|---|---|
workspace_id |
integer |
Обязательный | ID пространства. |
scheduler_id |
integer |
Обязательный | Не меньше 1; ID расписания в этом пространстве. |
{"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 расписания в этом пространстве. |
{"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. |
{"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 этот инструмент не принимает.
{
"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 символов. Входная схема объявляет строку; для пропуска комментария не передавайте поле. |
{
"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 блокировки в этом пространстве. |
{"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. Структура ответа (успех):
{
"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
Добавляет новые промокоды в существующий список. Структура ответа (успех):
{
"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; пропущен — с начала. |
Все аргументы необязательны. Например, первая страница обычных опросов:
{"type":"regular","limit":20,"offset":0}Результат инструмента с непустыми аргументами содержит данные и соседними полями, и JSON-текстом в content. При делегировании ресурсу 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.
Пример аргументов чтения завершённых ответов двух ссылок:
{"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 |
Воронка и разрезы: показы (события и посетители), открытия, начатые и завершённые прохождения, отказы, на каком вопросе бросают, по дням, страницам, устройствам и странам, а также причины, по которым опрос не показали. |
Пока подключения нет, ответ ограничен признаками:
{ "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 — массив объектов условий.
Пример аргументов инструмента чтения:
{"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). |