Хранение данных внутри диалога
Используйте сессионную базу данных, когда нужно запомнить информацию только на время текущего разговора. Данные доступны в рамках сессии и удаляются после завершения диалога.
Вам не нужно создавать сессионную базу данных вручную. При вызове любой функции SessionDb будет создана Default session db — одна база на весь проект.
Данные в ней изолированы: информация из одного диалога не пересекается с другими.
Управлять данными можно через функции SessionDb внутри кода или подключив их к агенту.
Чтобы очистить данные текущего диалога и начать новую сессию, используйте функцию Context.resetSession(). Функция доступна, только если в проекте движок версии 2.
Пример
Разберем пример: дадим агенту 3 попытки, чтобы помочь пользователю. Если агент не справляется, он должен перевести диалог на поддержку.
Реализация зависит от версии движка в вашем проекте.
- Версия 2
- Версия 1
-
В начале диалога сохраняем стартовое значение счетчика:
// Создаем запись counters и устанавливаем лимит в 3 попытки
SessionDb.put({documentKey: "counters", value: { "notResolvedLimit": 3 }});Сессионная база данных создастся автоматически при вызове функции.
-
Если ответ агента не устроил пользователя, уменьшаем счетчик на единицу. Например, инструмент агента может содержать код:
// 1. Получаем текущие данные (весь объект)
let store = SessionDb.get({documentKey: "counters"});
// 2. Меняем значение нужного поля
// Остальные поля в store.value (если они есть) останутся нетронутыми
store.value.notResolvedLimit -= 1;
// 3. Сохраняем обновленный объект целиком
SessionDb.put({documentKey: "counters", value: store }); -
В логике процесса проверяем, есть ли еще попытки. Если счетчик на нуле — создаем заявку в поддержку:
let store = SessionDb.get({documentKey: "counters"});
if (store.value.notResolvedLimit <= 0) {
// Лимит исчерпан, создаем заявку в поддержку
// ...
}
-
В начале диалога сохраняем стартовое значение счетчика:
// Создаем запись counters и устанавливаем лимит в 3 попытки
await SessionDb.put("counters", { "notResolvedLimit": 3 });Сессионная база данных создастся автоматически при вызове функции.
-
Если ответ агента не устроил пользователя, уменьшаем счетчик на единицу. Например, инструмент агента может содержать код:
// 1. Получаем текущие данные (весь объект)
let store = await SessionDb.get("counters");
// 2. Меняем значение нужного поля
// Остальные поля в store.value (если они есть) останутся нетронутыми
store.value.notResolvedLimit -= 1;
// 3. Сохраняем обновленный объект целиком
await SessionDb.put("counters", store.value); -
В логике процесса проверяем, есть ли еще попытки. Если счетчик на нуле — создаем заявку в поддержку:
let store = await SessionDb.get("counters");
if (store.value.notResolvedLimit <= 0) {
// Лимит исчерпан, создаем заявку в поддержку
// ...
}