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

Две версии, которые важны

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

Жизненный цикл

  1. Откройте редактор. Если черновик существует, вы всегда видите черновик. Если нет — видите опубликованную версию.
  2. Сохраните. Первое сохранение после публикации создает новый черновик со следующим номером версии. Все последующие сохранения обновляют этот же черновик на месте — версии не накапливаются.
  3. Протестируйте. Тестовые звонки из редактора идут по черновику.
  4. Опубликуйте. Черновик становится опубликованной версией, а прежняя опубликованная версия уходит в архив.
Пока у вас есть неопубликованный черновик, опубликованная версия продолжает без изменений обслуживать все реальные звонки. Недоделанный черновик не может «протечь» в продакшн — единственный путь туда лежит через кнопку Опубликовать.

Какая версия используется при звонке?

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

Запуск привязан к версии, на которой начался

Когда звонок стартует, запуск привязывается к конкретной версии, и пайплайн выполняет именно этот снимок в течение всего звонка. Публикация во время идущего звонка не подменяет агента у собеседника: текущий звонок доигрывает на своей версии, а новую подхватит следующий. Каждая запись о запуске хранит версию, на которой она выполнялась, поэтому всегда можно понять, какое определение породило конкретный транскрипт. В CSV-отчетах это столбец Agent Definition ID — см. Использование и биллинг.

Публикация

Нажмите Опубликовать в шапке редактора. Кнопка появляется только при наличии черновика и заблокирована, если есть несохраненные изменения или ошибки валидации. Публикация — это и есть тот рубеж, где агент проверяется целиком. Черновик намеренно разрешено оставлять «сломанным» (нужно уметь сохраняться на середине мысли), но опубликованную версию исполняет рантайм, поэтому она обязана пройти:
  • Валидацию схемы — у каждого узла и ребра заполнены обязательные поля
  • Валидацию графа — граф корректен и достижим
  • Уникальность триггеров — ни один путь триггера не конфликтует с другим агентом
Если какая-то проверка не проходит, публикация отклоняется, а проблемные узлы и ребра перечисляются вместе с ошибкой — так к ним можно перейти сразу. Публикация без черновика — ошибка: продвигать нечего. Публикуется ровно та ревизия черновика, которая прошла проверки. Если черновик успели изменить между проверкой и публикацией (например, автосохранение из другой вкладки), публикация отклоняется с ошибкой 409 (version_conflict) — ничего не опубликовано; обновите страницу и опубликуйте снова. Номер ревизии черновика (_revision в workflow_configurations, его передают как base_version при сохранении) сквозной для всего агента и только растет: новый черновик — после публикации, отмены черновика или возврата к версии — продолжает счет выше всех ранее выданных ревизий, а не начинает с 1. Поэтому устаревшая вкладка, прочитавшая прежнюю версию, не может случайно совпасть по ревизии с новой и получит 409 (version_conflict) вместо тихой перезаписи.

История версий

Откройте иконку часов в шапке редактора, чтобы увидеть историю: новые сверху, по десять за раз, кнопка Загрузить еще подгружает более старые. В каждой записи видны номер версии, статус (Draft, Published или пусто для архивной) и время создания либо публикации. Выбор старой версии загружает ее на канвас только для чтения. Редактор говорит об этом прямо: появляется баннер режима чтения, а кнопки сохранения, публикации и телефонного звонка скрываются. Вы можете посмотреть точный граф, на котором шел прошлый звонок, без риска затереть текущую работу. Нажмите Вернуться к черновику, чтобы выйти из режима чтения. Если черновик есть, вы вернетесь в него; если нет — он будет создан из текущей опубликованной версии, и вы продолжите работу в нем.
Кнопки «восстановить эту старую версию» в один клик нет. Чтобы вернуться к старой версии, откройте ее в панели истории, посмотрите, что в ней было, и воспроизведите изменение в своем черновике.

Дублирование агента

Дублировать (в меню ⋯ шапки редактора) создает независимую копию с именем <оригинал> - Duplicate и открывает ее. В копию переносятся:
  • Последнее состояние — черновик, если он есть, иначе опубликованная версия
  • Конфигурации воркфлоу (модели, голос, настройки перебивания и т. д.)
  • Контекстные переменные
  • Загруженный файл фонового шума, если он был
Копия получает новые UUID триггеров — и это сделано намеренно. Путь триггера должен быть уникальным среди всех агентов, поэтому дубликат не может унаследовать UUID агента и пути триггеров оригинала. Внешняя система, которая вызывала оригинал, продолжит вызывать оригинал; чтобы она попадала в копию, укажите в ней новые идентификаторы. Копия не забирает запуски и историю версий оригинала — она начинает свою собственную. Сделайте дубликат перед рискованной переделкой, если хотите иметь запасной вариант, которому все еще можно звонить, пока вы экспериментируете.

Статус агента: активен или в архиве

Отдельно от версий сам агент бывает active или archived. Архивируйте его из меню ⋯ в списке агентов, разархивируйте — из списка архивных. Архивация ничего не удаляет: версии, запуски и транскрипты остаются, а разархивация возвращает агента ровно в прежнее состояние.
Архивация — это не аварийный выключатель для входящей телефонии. Эндпоинты API-триггера отказывают архивному агенту, но архивный агент, который все еще привязан к номеру телефона, продолжит отвечать на входящие звонки на этот номер. Чтобы прекратить входящие звонки, отвяжите агента от номера в настройках телефонии.