В сервисе воронок есть возможность выполнить серверный код на любом этапе воронки, используя данные события и объектов воронок.
Для этого используется блок "Пользовательский код"
Добавьте этот блок, затем нажмите "создать файл" и укажите путь для нового файла. *Для этого действия необходимо право пользователя "имеет доступ в IDE". Его может выдать только владелец аккаунта. В аккаунте будет создан файл с таким содержимым:
Вы можете перейти к нему, нажав кнопку "Перейти к коду" в настройках блока.
P.s. Не обязательно всегда создавать файл через настройки блока. Вы можете написать аналогичный код в любом файле аккаунта, указав идентификатор действия в пути:
В этом блоке вы можете писать любой javascript/typescript код для обработки события. Код выполняется на технологиях платформы Chatium. Она имеет тесную интеграцию с GetCourse, выполняется в контексте текущего аккаунта. Предоставляет множество возможностей для простой и быстрой разработки. Документация к платформе находится здесь.
Входящий объект params
имеет такой тип:
interface HookParams<Config = any> {
agentsByType: Record<AgentType, AgentInfo> // все агенты определенные в событии
eventData?: GenericEventData // данные события, разные в зависимости от исходного события
transition: {
id: string
title: string
from: string
to: string
scene: string
options: Record<string, any>
isRed?: boolean
} // информация о переходе (стрелке)
primaryAgent?: AgentInfo // агент, являющийся "главным" в текущем контексте. Может быть определен в настройках перехода
templateData: Config // данные шаблона, если есть
}
type AgentType = 'user' | 'deal' | 'chat' | 'session'
interface AgentInfo {
id: string // внутренний идентификатор агента. Не путать с идентификатором объекта, на который ссылается агент
type: string
externalId: string // внешний идентификатор объекта, на который ссылается агент. Например deal_id
isTerminated: boolean
props: Record<string, any>
mainAgentId: string
parentAgentIds: string[]
displayName: string
}
На выходе нужно вернуть объект следующего типа:
type Result = {
success: boolean
stopActionsChain?: boolean // позволяет остановить выполнение дальнейших действий
data?: Record<string, any> // данные, которые будут записаны в свойства агента, если в блоке стоит такая настройка
nextEventRegistered?: boolean // Продвинутая настройка. Если true, следующее событие не будет зафиксировано автоматически. Его нужно записать самостоятельно.
}
Значение data, будет записано в переменную, указанную в настройках блока
Обратите внимание на тип объекта, которому присваиваете переменную. Если этого типа объекта не будет в предыдущем событии, присвоение не сработает.
Если в процессе выполнения произойдет ошибка, вы увидите её в отладке. Текущее действие не выполнится, но воронка продолжит дальнейшее выполнение.