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

Контекст

Kонтекст - ключевой объект который содержит в себе уникальную для каждого пользователя информацию о проекте, пользователе и взаимодействии пользователя с виртуальным ассистентом за последние 20 сообщений. Контекст доступен 48 часов после закрытия сессии и может быть переиспользован если диалог продолжится.

warning

Если вам нужно хранилище переменных на уровне проекта, то лучше использовать projectStorage.

Полезно использовать, когда

  • для сценария нужна информация о пользователе, полученная по API;
  • в сценарии нужно выводить текст в зависимости от данных конкретного пользователя;
  • нужна переменная, доступная нескольким сниппетам.

Устройство контекста

Объект содержит следующие ключи:

КлючОписание
context.fact_nameФакты, установленные вручную, полученные по API и т. п.
context.project_idID проекта.
context.user_idID пользователя.
context.channel_idID канала, с которого пришло сообщение (например, виджет или API).
context.eventsМассив событий (текстовых сообщений и прочих триггеров/реакций).
context.currentБыстрый доступ к последнему событию от пользователя.

context.events

Сообщения из переписки хранятся в context.events, который имеет следующую структуру:

context.events structure
[
{
incoming: true, // От пользователя
type: 'text',
timestamp: 1591186466.1,
params: {
text: 'Привет, бот a@b.com'
},
meta: {
intents: {
'приветствие': { proba: 0.98 }
},
entities: {
email: { /* ... */ }
}
}
},
{
incoming: false, // От робота
type: 'text',
timestamp: 1591186466.2,
params: {
text: 'Привет, пользователь'
},
meta: {
reaction: 'reaction1'
}
},
// ...
]

В объекте 'params' лежат параметры сообщения в зависимости от типа.

В 'meta' во входящих сообщениях лежат намерения и сущности, в исходящих - название реакции из сценария.

В context.current содержится последнее входящее событие из context.events.

Установка фактов

Существует несколько способов добавления фактов в context:

  • в сниппете через context.set('key', 'value') : такие факты будут доступны во всех сниппетах через context.key
  • передача по Lia API в JSON-объект facts
  • сущности автоматически добавляются в контекст и доступны поcontext.entity_name. Поэтому сущностям следует давать название на латинице в соответствии с традиционными правилами названия переменных в коде.
  • Вручную через надстройку в debug-чате
к сведению

Если ключи в контексте имеют одинаковые названия, то будет храниться факт с наивысшим приоритетом.

Порядок приоритетности фактов контекста (от большего к меньшему):

  1. системные факты: 'project_id' , 'user_id', 'channel_id', 'events', 'current'
  2. context.set('key', 'value') или заданные вручную
  3. распознанные Lia entities
  4. facts из API
осторожно

Контекст автоматически удаляется для пользователя в случае отсутствия от него обращений в течение 48 часов.

Примеры использования

ПеременнаяЗначение
context.current.params.textПоследнее текстовое сообщение от пользователя
context.entity_name.rawРаспознанная сущность, как ее написал пользователь
context.entity_name.strРаспознанная сущность в отформатированном виде
context.fact_nameДоступ к любому заранее установленному факту