Логика переходов опроса
update_quiz_logicСохраняет логические условия опроса: условные переходы между виджетами, переходы по умолчанию, логику по баллам (score). Новый формат: score-правила идут в savedLogic как обычные группы с condition.score=true; legacy savedScoring сохраняется только для backward compatibility. group.actionType ∈ {"jump","screenout","show","hide"} ("show"/"hide" — логика видимости: jumpTo указывает виджет, который показывается или скрывается, а не следующий шаг маршрута; дополнительные цели — в visibilityActions). defaultConditions разрежен: запись нужна только там, где переход отличается от следующего вопроса по порядку. Все идентификаторы виджетов (widget_id, widgetId, jumpTo и т.д.) — те же уникальные UUID, что в quiz://{id}/structure (поле ids или ids внутри child-элементов inline_group). Перед вызовом прочитайте quiz://{id}/structure и используйте id без изменений. Обновление частичное: переданная карта заменяет одноимённую целиком (пустой объект очищает её), не переданные карты остаются как были. Служебные ключи conditions ведёт бэкенд: isQuota выводится из наличия групп дисквалификации по квоте, defaultConditionsVersion=2 проставляется при передаче defaultConditions — присылать их не нужно и нельзя. Валидация: проверка существования виджетов, корректности операторов, отсутствия циклов и тупиков в маршруте. Блокируют сохранение также противоречивые действия внутри одной группы: показ и скрытие одного вопроса, переход на вопрос, который эта же группа скрывает, и изменение видимости уже пройденного вопроса. В поле warnings возвращаются переходы назад, вопросы без входящих путей, правила-дубли перехода по умолчанию, условия по ответу вопроса ниже по порядку, порядок carry-forward и риски случайной сортировки вопросов — сохранению они не мешают.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| quiz_id | Yes | ID опроса для обновления логики. | |
| savedLogic | No | Группы условий переходов по widget_id (включая score-правила: condition.score=true, операторы 1/2/7/8/9/10, answer.optionId — порог totalScore). group.actionType: "jump" или "screenout". Источник баллов — пара condition.scoreSourceType ("survey" | "widget") и condition.scoreSourceWidgetId (UUID при "widget", null при "survey"). Отсутствие обоих полей = legacy "survey". Для условий на allocation_slider передайте allocationData.optionId — UUID из allocationSliderIds виджета; runtime сравнит значение этой опции с answer.optionId. | |
| savedScoring | No | Legacy-формат переходов по scoring (для backward compatibility). По ключам widget_id — объекты scoreConditionId→{score,jumpTo,inCase,inCaseMeaning}. Глобальные ключи: scoringEnabledWidgets, correctAnswers, scoringSwitcher. Для нового контента используйте savedLogic + score:true. | |
| multiLogicFlags | No | Флаги мульти-логики: {widget_id: boolean}. | |
| defaultConditions | No | Переходы по умолчанию по widget_id. | |
| savedInlineGroupLogic | No | Показ и скрытие вопросов внутри inline-группы, по widget_id самой группы: [{ conditionGroupId, actions: [{action: "show"|"hide", targetWidget: {widgetId}}], conditionsData: [...] }]. Без actionType и jumpTo — маршрута внутри группы нет. |