Поделиться через


Использование переменных в разных темах

Переменные хранят ответы ваших клиентов на вопросы агента. Например, вы можете сохранить имя клиента в переменной с именем UserName. Затем агент может обратиться к клиенту по имени, поскольку разговор продолжается.

По умолчанию значение переменной может использоваться только в теме, в которой эта переменная создана. Однако можно повторно использовать одно и то же значение в разных темах. Например, в теме "Добро пожаловать" запрашивается имя клиента и адрес электронной почты. В теме «Резервирование встречи» нужно, чтобы агент запомнил, что ввел клиент, и не переспрашивал.

Одним из способов повторного использования переменной является передача переменной между темами. Другой способ — сделать переменную глобальной в области действия, и это то, что рассматривается в этой статье. Глобальные переменные называются так, потому что они доступны во всех темах всего агента.

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

Создание глобальной переменной

Вы создаете глобальную переменную, изменяя область действия переменной темы.

  1. Создайте переменную или используйте панель Переменные, чтобы открыть существующую переменную.

  2. На панели Свойства переменной выберите Глобальная (любая тема может получить доступ).

    Имя переменной получает префикс Global., чтобы отличить ее от переменных уровня темы. Например, переменная UserName отображается как Global.UserName.

  3. Сохраните тему.

    Имя глобальной переменной должно быть уникальным во всех темах.

Использование глобальных переменных

Когда вы создаете сообщение в узле Сообщение или Вопрос, выберите значок {x} для просмотра переменных, доступных для темы. Глобальные переменные отображаются на вкладке Пользовательские вместе с любыми переменными темы. Переменные перечислены в алфавитном порядке.

Поиск всех тем, использующих глобальную переменную

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

  1. Выберите нужную глобальную переменную на холсте разработки или на панели Переменные.

  2. На панели Свойства переменной в разделе Ссылка выберите Просмотреть все ссылки.

  3. Переключитесь на вкладку Прочее и выберите любую тему, в которой используется переменная, чтобы перейти непосредственно к этой теме и узлу.

Жизненный цикл глобальных переменных

По умолчанию значение глобальной переменной сохраняется до тех пор, пока сеанс не завершится. Узел Очистить значения переменных сбрасывает значения глобальных переменных и используется в системной теме Сброс разговора. Эта тема может быть вызвана либо перенаправлением, либо когда пользователь вводит фразу-триггер, например "Начать сначала". В этом случае все глобальные переменные сбрасываются.

Установка значения глобальной переменной из внешних источников

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

  1. Выберите глобальную переменную.

  2. На панели Свойства переменных выберите Внешние источники могут задавать значения.

Установите глобальные переменные во встроенном агенте

Если вы встраиваете свой агент в простую веб-страницу, вы можете добавить переменные и их определения к URL-адресу агента. Или, если вы хотите немного больше контроля, вы можете использовать блок кода <script> для программного вызова и использования переменных.

Имя переменной в строке запроса URL-адреса должно совпадать с именем глобальной переменной, без префикса Global.. Например, глобальная переменная Global.UserName в запросе будет указываться как UserName.

В приведенных ниже примерах используется базовое объявление переменных. В производственном сценарии вы можете передать в качестве параметра запроса или определения переменной другую переменную, в которой уже хранится имя пользователя (например, если у вас есть имя пользователя из сценария входа).

Добавьте переменные и их определения в URL-адрес агента как параметры строки запроса в формате botURL?variableName1=variableDefinition1&variableName2=variableDefinition2.

Например:

Имя параметра не зависит от регистра. username=Ana будет работать и в этом примере.

Добавление глобальных переменных на пользовательский холст

Вы также можете добавить переменную на пользовательский холст.

  1. В разделе <script> на странице, где у вас есть агент, определите переменные следующим образом, подставив variableName1 для имени переменной без префикса Global. и variableDefinition1 для определения. Разделите несколько переменных запятыми (,).

       const store = WebChat.createStore({}, ({ dispatch }) => next => action => {
         if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
           dispatch({
              type: "WEB_CHAT/SEND_EVENT",
              payload: {
                name: "pvaSetContext",
                value: {
                   "variableName1": "variableDefinition1",
                   "variableName2": "variableDefinition2"
                }
              },
            });
          }
            return next(action);
        });
    
  2. В разделе <script> вызовите store, когда вы встраиваете свой агент, как в следующем примере, где store вызывается непосредственно перед вызовом styleOptions (вы должны заменить BOT_ID идентификатором вашего агента):

    const BOT_ID = "12345-5678";
    const theURL = "https://powerva.microsoft.com/api/botmanagement/v1/directline/directlinetoken?botId=" + BOT_ID;
    
    fetch(theURL)
        .then(response => response.json())
        .then(conversationInfo => {
            window.WebChat.renderWebChat(
                {
                    directLine: window.WebChat.createDirectLine({
                        token: conversationInfo.token,
                    }),
                    store,
                    styleOptions
                },
                document.getElementById('webchat')
            );
        })
        .catch(err => console.error("An error occurred: " + err));