Контекст
Kонтекст - ключевой объект который содержит в себе уникальную для каждого пользователя информацию о проекте, пользователе и взаимодействии пользователя с виртуальным ассистентом за последние 20 сообщений. Контекст доступен 48 часов после закрытия сессии и может быть переиспользован если диалог продолжится.
Если вам нужно хранилище переменных на уровне проекта, то лучше использовать projectStorage.
Полезно использовать, когда
- для сценария нужна информация о пользователе, полученная по API;
- в сценарии нужно выводить текст в зависимости от данных конкретного пользователя;
- нужна переменная, доступная нескольким сниппетам.
Устройство контекста
Объект содержит следующие ключи:
| Ключ | Описание |
|---|---|
context.fact_name | Факты, установленные вручную, полученные по API и т. п. |
context.project_id | ID проекта. |
context.user_id | ID пользователя. |
context.channel_id | ID канала, с которого пришло сообщение (например, виджет или API). |
context.events | Массив событий (текстовых сообщений и прочих триггеров/реакций). |
context.current | Быстрый доступ к последнему событию от пользователя. |
context.events
Сообщения из переписки хранятся в context.events, который имеет следующую структуру:
[
{
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-чате
Если ключи в контексте имеют одинаковые названия, то будет храниться факт с наивысшим приоритетом.
Порядок приоритетности фактов контекста (от большего к меньшему):
- системные факты:
'project_id','user_id','channel_id','events','current' context.set('key', 'value')или заданные вручную- распознанные Lia
entities factsиз API
Контекст автоматически удаляется для пользователя в случае отсутствия от него обращений в течение 48 часов.
Примеры использования
| Переменная | Значение |
|---|---|
context.current.params.text | Последнее текстовое сообщение от пользователя |
context.entity_name.raw | Распознанная сущность, как ее написал пользователь |
context.entity_name.str | Распознанная сущность в отформатированном виде |
context.fact_name | Доступ к любому заранее установленному факту |