--- referenceVersion: 2 --- # Согласование `approval` добавляет ожидание решения человека к вызову `call`. ## Параметры | Параметр | Назначение | По умолчанию | | --- | --- | --- | | `when` | Нужно ли согласование; может читать `result` вызова | `true` | | `quorum` | Число разных голосов, 1–100 | 1 | | `sources` | Каналы решения | `account`, `telegram` | | `version_fields` | Какие поля определяют версию | Все, кроме `blocked_fields` | | `blocked_fields` | Поля занятости, запрещающие решение | `[]` | | `allow_skip` | Разрешить пропуск | `false` | | `toggle_votes` | Повторное нажатие отзывает голос | `false` | | `actions` | Действия редактирования и выбора | `[]` | | `recovery_actions` | Действия восстановления из списка actions | `[]` | ## Пример ```yaml [Согласование результата вызова] - id: draft call: prepare_draft inputs: topic: "{inputs.topic}" approval: quorum: 2 sources: [account, telegram] version_fields: [text, attachment] allow_skip: false ``` ## Результат Результат `call` не меняет форму. Решение доступно через `{state.draft.approval.status}`: `not_required`, `pending`, `approved`, `skipped`. ## Поведение Без `approval` согласования нет; пустой объект включает значения по умолчанию. Пропуск продолжает путь с подготовленным результатом, но не означает одобрение. Последующее действие проверяет статус через `when`. Новая версия результата сбрасывает голоса. Повторное событие не добавляет голос и не повторяет действие. Редактирование возвращает к ожиданию. ## Доработка Явно передаются `approval.previous`, `approval.feedback`, `approval.event`; начальные значения — `{}`, пустая строка и `null`. Событие содержит `source`, `id`, `action`, `payload`.
Сохранение результата перед следующей записью Аннотация `approval_checkpoint: value` на `data.build` сохраняет полный новый результат до последующих внешних действий, под защитой ресурса. Она сохраняет правила восстановления и не заменяется частичным обновлением или скрытым вызовом кода.