Передача управления другому проекту
Продвинутая возможность
Из процесса можно передать управление другому процессу Agent Platform или сценарию JAICP, который далее ведет диалог с клиентом, а после завершения своей задачи может вернуть управление исходному процессу.
Например, вы можете использовать основного бота как диспетчера, который определяет намерение пользователя и передает управление специализированному боту для оформления заказа или технической поддержки.
Как настроить
- Переход в JAICP
- Переход в Agent Platform
Чтобы передать управление из процесса Agent Platform в сценарий JAICP:
-
Опубликуйте сценарий JAICP в любом входящем канале, например чат-виджете, и скопируйте ID бота:
- Нажмите на панели управления Каналы → Входящие → Подключить канал. Выберите канал Чат-виджет и нажмите Создать.
- Скопируйте botId из свойств канала.
-
В исходном проекте Agent Platform добавьте вызов функции
ProjectRouter.switchTo(). Функцию можно использовать как отдельный шаг в процессе, как инструмент для AI-агента или вызвать в коде других блоков.Задайте параметры:
- botId — вставьте ID целевого проекта.
- state — стейт, в который нужно перейти в целевом проекте (необязательно, по умолчанию
/). - customData — JSON-объект с дополнительными данными (необязательно).
Чтобы передать управление из одного процесса Agent Platform в другой:
-
В целевом проекте Agent Platform найдите ID процесса в логах:
- Нажмите Тестировать на панели управления. В окне тестирования введите сообщение.
- Нажмите в левом нижнем углу холста, чтобы открыть панель Логи.
Идентификатор можно найти в строках, которые начинаются с
Bot, например:Bot 1000001-quick_start-1000001-Abc-1234 request processing time 3629ms, self processing time 349msЗдесь
1000001-quick_start-1000001-Abc-1234— нужный идентификатор. -
В исходном проекте Agent Platform добавьте вызов функции
ProjectRouter.switchTo(). Функцию можно использовать как отдельный шаг в процессе, как инструмент для AI-агента или вызвать в коде других блоков.Задайте параметры:
- botId — вставьте ID процесса из логов целевого проекта.
- state — не заполняйте, при передаче управления в проект Agent Platform значение игнорируется.
- customData — JSON-объект с дополнительными данными (необязательно).
Диалог не возвращается обратно, пока в вызываемом проекте не будет выполнена функция backToOriginalProject().
Какие данные получает вызываемый проект
- Переход в JAICP
- Переход в Agent Platform
Сценарию JAICP доступны следующие данные из исходного процесса:
| Параметр | Как получить |
|---|---|
| Сообщение клиента | $request.query |
| Полные данные запроса | $request.rawRequest |
customData | $request.data |
Процессу Agent Platform доступны следующие данные из исходного процесса:
| Параметр | Как получить |
|---|---|
| Данные клиента | Context.getClientInfo() |
| Тип канала | Context.getChannelType() |
| Сообщение клиента | Context.getMessageContent() |
| Полные данные запроса | Context.getRawRequest() |
| customData | ProjectRouter.getCustomData() |
Возврат управления
Возврат управления происходит в начало («корень») исходного процесса Agent Platform. Выбрать конкретный блок невозможно. После возврата исходный процесс не выполняет никаких действий, а ожидает срабатывания триггера — например, сообщения от клиента.
- Возврат из JAICP
- Возврат из Agent Platform
Для возврата из сценария JAICP в исходный процесс используйте метод $agentPlatform.backToOriginalProject().
У метода $agentPlatform.backToOriginalProject() есть необязательный параметр customData, но в исходном процессе Agent Platform эти данные недоступны.
Для возврата из процесса Agent Platform в исходный процесс используйте встроенную функцию $ProjectRouter.backToOriginalProject().
У функции есть необязательные параметры state и customData, но в случае возврата управления в процесс Agent Platform state игнорируется, а customData недоступны в исходном процессе.
Эти параметры используются только в случае возврата управления в сценарий JAICP. Подробнее об этом смотрите в документации JAICP.
Особенности и ограничения
- Общий аккаунт: передача управления возможна только между проектами одного аккаунта.
- Защита от циклических вызовов: чтобы предотвратить бесконечные переходы, установлено ограничение: не более 6 последовательных переключений в рамках одного запроса пользователя. При превышении лимита диалог будет прерван.
- Одно переключение на блок: избегайте следующих конструкций, они могут привести к нестабильной работе:
- два вызова
switchTo()из одного блока; - два вызова
backToOriginalProject()из одного блока; - вызов
switchTo()иbackToOriginalProject()из одного блока.
- два вызова
Пример
Процесс Agent Platform принимает заказ у клиента и передает его в сценарий JAICP для обработки.
Для передачи заказа используется функции ProjectRouter.switchTo() с параметрами:
- botId: ID бота JAICP, например
12345-jaicp-bot-12345 - state:
/HandleOrder - customData:
{ "productId": "product-123", "amount": 7 }
Сценарий JAICP обрабатывает заказ и возвращает управление в Agent Platform:
theme: /
state: HandleOrder
script:
$context.productId = $request.data.productId; // "product-123"
$context.amount = $request.data.amount; // 7
// Логика обработки
…
// Возврат управления
$agentPlatform.backToOriginalProject();