Перейти к основному содержимому

Вызов другого проекта

Продвинутая возможность

Из процесса можно вызвать другой процесс Agent Platform или сценарий JAICP. Такой вызов работает как запрос к внешнему сервису: ответ вызываемого процесса не отправляется пользователю, а возвращается в родительский процесс и используется в нем.

Эта функция позволяет создавать сложные системы из нескольких проектов и делегировать вызываемым проектам выполнение специфических задач — например, извлечение именованных сущностей (NER).

к сведению

JAICP (Just AI Conversational Platform) — платформа для разработки диалоговых решений любой сложности. Подробнее о JAICP можно узнать на нашем сайте или в документации.

Как настроить

Чтобы вызвать сценарий JAICP:

  1. В вызываемом проекте JAICP настройте входящий канал Chat API и получите токен:

    1. Нажмите на панели управления Каналы → Входящие → Подключить канал. Выберите канал Chat API и нажмите Создать.
    2. Перейдите в окно редактирования созданного канала Chat API и скопируйте значение поля Токен.

    Подробная информация приведена в разделе Chat API документации JAICP.

  2. В родительском проекте Agent Platform добавьте вызов функции ProjectRouter.callProject(). Функцию можно использовать как отдельный шаг в процессе, как инструмент для AI-агента или вызвать в коде других блоков.

    Задайте параметры:

    • token — вставьте токен Chat API вызываемого проекта.
    • query — запрос к вызываемому проекту.
    • customData — JSON-объект с дополнительными данными (необязательно).

Какие данные получает вызываемый проект

к сведению

Вызываемый процесс или сценарий получает изолированный контекст и не имеет доступа к сессии родительского процесса.

Сценарию JAICP доступны следующие данные:

ПараметрКак получить
Идентификатор клиента$request.data.chatId
query$parseTree.text
customData$request.data

Возвращаемые данные

Функция 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() с параметрами:

Параметры функции 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": {}
}