Контекст

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

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

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

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

  • нужна переменная, доступная нескольким сниппетам.

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

Объект контекст содержит следующие базовые ключи:

  • context.fact_name – факты, установленные вручную, полученные по API и т.п.

  • context.project_id – id проекта

  • context.user_id – id пользователя

  • 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.current содержится последнее входящее событие из context.events.

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

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

  • в сниппете через context.set('key', 'value') : такие факты будут доступны во всех сниппетах через context.key

  • передача по Lia API в JSON-объект facts

  • сущности, распознанные Lia, автоматически добавляются в контекст и доступны по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

Доступ к любому заранее установленному факту

Last updated