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

Хранение данных внутри диалога

Используйте сессионную базу данных, когда нужно запомнить информацию только на время текущего разговора. Данные доступны в рамках сессии и удаляются после завершения диалога.

примечание

Вам не нужно создавать сессионную базу данных вручную. При вызове любой функции SessionDb будет создана Default session db — одна база на весь проект.

Данные в ней изолированы: информация из одного диалога не пересекается с другими.

Управлять данными можно через функции SessionDb внутри кода или подключив их к агенту.

Чтобы очистить данные текущего диалога и начать новую сессию, используйте функцию Context.resetSession(). Функция доступна, только если в проекте движок версии 2.

Пример

Разберем пример: дадим агенту 3 попытки, чтобы помочь пользователю. Если агент не справляется, он должен перевести диалог на поддержку.

Реализация зависит от версии движка в вашем проекте.

  1. В начале диалога сохраняем стартовое значение счетчика:

    // Создаем запись counters и устанавливаем лимит в 3 попытки
    SessionDb.put({documentKey: "counters", value: { "notResolvedLimit": 3 }});

    Сессионная база данных создастся автоматически при вызове функции.

  2. Если ответ агента не устроил пользователя, уменьшаем счетчик на единицу. Например, инструмент агента может содержать код:

    // 1. Получаем текущие данные (весь объект)
    let store = SessionDb.get({documentKey: "counters"});

    // 2. Меняем значение нужного поля
    // Остальные поля в store.value (если они есть) останутся нетронутыми
    store.value.notResolvedLimit -= 1;

    // 3. Сохраняем обновленный объект целиком
    SessionDb.put({documentKey: "counters", value: store });
  3. В логике процесса проверяем, есть ли еще попытки. Если счетчик на нуле — создаем заявку в поддержку:

    let store = SessionDb.get({documentKey: "counters"});

    if (store.value.notResolvedLimit <= 0) {
    // Лимит исчерпан, создаем заявку в поддержку
    // ...
    }