Тестирование в проекте

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

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

  • для сценария нужна информация о пользователе, полученная по 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](mailto: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;

  • передача по Лия API в JSON-объект facts;

  • сущности, распознанные Лией, автоматически добавляются в контекст и доступны поcontext.entity_name — поэтому сущностям следует давать название на латинице в соответствии с традиционными правилами названия переменных в коде;

  • вручную через надстройку под дебаг-чатом (такой способ удобен для тестирования работы сниппетов).

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

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

  1. Системные факты: 'project_id' , 'user_id', 'channel_id', 'events', 'current'.

  2. context.set('key', 'value') или заданные вручную.

  3. Распознанные сущности.

  4. facts из API.

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


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

В сниппетах

ПеременнаяЗначение

context.current.params.text

Последнее текстовое сообщение от пользователя

context.entity_name.raw

Распознанная сущность, как ее написал пользователь

context.entity_name.str

Распознанная сущность в отформатированном виде (https://liaplatform.atlassian.net/wiki/spaces/docs/pages/1319632974)

context.fact_name

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

Mustache-синтаксис

Внутри текстового блока сценария можно получить доступ к контексту. Рассмотрим пример с установкой фактов из сниппета:

Создадим сценарий, в котором данный сниппет выполнится в качестве реакции на некоторое намерение пользователя, и выведем в последующем блоке текст, зависящий от установленного контекста:

По умолчанию mustache заменяет спец. символы на их html-код (например кавычку превращает в “"”). Если вы хотите получить строку без кодирования, используйте в шаблоне тройные фигурные скобки.

Результат выполнения сценария:

В случае ошибки выполнения сниппета (переход в ветку Ошибка) факты контекста, установленные в данном сниппете, не сохраняются. Любые события (реакции), генерируемые внутри сниппета, не отправляются.

Тестирование

Для проверки работы сниппетов бывает необходимо установить контекст вручную.

Для проверки работы сценария или обучения намерения можно использовать дебаг-чат.

Last updated