Вызов другого проекта
Продвинутая возможность
Из процесса можно вызвать другой процесс Agent Platform или сценарий JAICP. Такой вызов работает как запрос к внешнему сервису: ответ вызываемого процесса не отправляется пользователю, а возвращается в родительский процесс и используется в нем.
Эта функция позволяет создавать сложные системы из нескольких проектов и делегировать вызываемым проектам выполнение специфических задач — например, извлечение именованных сущностей (NER).
JAICP (Just AI Conversational Platform) — платформа для разработки диалоговых решений любой сложности. Подробнее о JAICP можно узнать на нашем сайте или в документации.
Как настроить
- Вызов сценария JAICP
- Вызов процесса Agent Platform
Чтобы вызвать сценарий JAICP:
-
В вызываемом проекте JAICP настройте входящий канал Chat API и получите токен:
- Нажмите на панели управления Каналы → Входящие → Подключить канал. Выберите канал Chat API и нажмите Создать.
- Перейдите в окно редактирования созданного канала Chat API и скопируйте значение поля Токен.
Подробная информация приведена в разделе Chat API документации JAICP.
-
В родительском проекте Agent Platform добавьте вызов функции
ProjectRouter.callProject(). Функцию можно использовать как отдельный шаг в процессе, как инструмент для AI-агента или вызвать в коде других блоков.Задайте параметры:
- token — вставьте токен Chat API вызываемого проекта.
- query — запрос к вызываемому проекту.
- customData — JSON-объект с дополнительными данными (необязательно).
Чтобы вызвать процесс Agent Platform:
-
В вызываемом проекте Agent Platform настройте входящий канал Chat API и получите токен:
- Перейдите в раздел Интеграции, выберите Подключить → Канал → Chat API. Задайте название и нажмите Добавить.
- Нажмите → Получить вебхук у канала на вкладке Интеграции. Токен — это часть URL вебхука после
https://bot.jaicp.com/chatapi/.
-
В родительском проекте Agent Platform добавьте вызов функции
ProjectRouter.callProject(). Функцию можно использовать как отдельный шаг в процессе, как инструмент для AI-агента или вызвать в коде других блоков.Задайте параметры:
- token — вставьте токен Chat API вызываемого проекта.
- query — запрос к вызываемому проекту.
- customData — JSON-объект с дополнительными данными (необязательно).
Какие данные получает вызываемый проект
Вызываемый процесс или сценарий получает изолированный контекст и не имеет доступа к сессии родительского процесса.
- Вызов сценария JAICP
- Вызов процесса Agent Platform
Сценарию JAICP доступны следующие данные:
| Параметр | Как получить |
|---|---|
| Идентификатор клиента | $request.data.chatId |
| query | $parseTree.text |
| customData | $request.data |
Процессу Agent Platform доступны следующие данные:
| Параметр | Как получить |
|---|---|
| Идентификатор клиента | Context.getClientInfo().id |
| query | Context.getRawRequest().query или Context.getMessageContent().text (можно использовать любой из способов) |
| customData | Context.getRawRequest().data.customData |
Возвращаемые данные
Функция ProjectRouter.callProject() возвращает ответ в формате, аналогичном ответу Chat API.
Особенности и ограничения
- Отправка ответов: чтобы родительский проект мог получить ответ, все реакции в вызываемом процессе или сценарии не уходят в канал пользователю, а возвращаются в теле ответа.
- Защита от циклических вызовов: если проект А вызывает проект Б, а проект Б снова вызывает проект А, процесс прервется с ошибкой.
- Тарификация: вызов JAICP из Agent Platform тарифицируется в JAICP (если пользователь новый).
Пример
Рассмотрим сценарий JAICP, который выделяет дату и время из запроса:
theme: /
state: Datetime
q!: * @duckling.time::extractedTime *
script:
$temp.time = $parseTree._extractedTime.value;
$reactions.answer($temp.time);
state: NoMatch
event!: noMatch
a: Я не нашел время и дату в запросе
Добавим в процесс функцию ProjectRouter.callProject() с параметрами:
Получив запрос клиента, например, «послезавтра в полдень», функция вызовет указанный сценарий JAICP и вернет следующие данные:
{
"token": "BVS…95f",
"clientId": "05be5c1d-0aba-1f54-edcc-d2c42cf061b0",
"questionId": "227471ad-b78f-4479-8dce-c21c3e1464ac",
"data": {
"replies": [{
"type": "text",
"text": "2026-03-03T12:00:00",
"state": "/Datetime",
"lang": "ru"
}
],
"answer": "2026-03-03T12:00:00",
"newSessionStarted": false,
"transitionHistory": ["/Datetime"],
"isNewClient": false,
"isNeedToSaveToReporter": true,
"endSession": false,
"messageTimestamp": 1772346816951
},
"timestamp": "2026-03-01T06:33:36.955",
"blockForm": false,
"customData": {}
}