在主题间重用变量

变量存储客户对代理中问题的回答。 例如,可将一个客户的姓名保存到名称为 UserName 的变量中。 然后,代理可在对话继续时按姓名识别该客户。

默认情况下,变量的值只能在创建变量的主题中使用。 但是,可以跨主题重复使用同一值。 例如,“欢迎”主题将询问客户的姓名和电子邮件地址。 在“预约”主题中,您希望代理记住客户输入的内容,并且不再询问。

重用变量的一种方法是在主题之间传递变量。 另一种方法是使变量在范围内成为全局变量,这是本文介绍的内容。 之所以这样称呼全局变量,是因为它们在整个代理的所有主题中都可用。

全局变量在单个用户会话期间应用。 您指定应将哪些变量属于全局变量,以将其与主题级变量区分开来。

创建全局变量

您可以通过更改主题变量的范围来创建全局变量。

  1. 创建变量使用变量窗格打开现有变量。

  2. 变量属性面板上,选择全局(任何主题均可访问)

    将为变量名称提供前缀 Global.,以将其与主题级变量区分开来。 例如,变量 UserName 会显示为 Global.UserName

  3. 保存主题。

    全局变量的名称在所有主题中必须是唯一的。

使用全局变量

当您在消息节点或问题节点中撰写消息时,请选择 {x} 图标以查看主题可用的变量。 全局变量会与任何主题变量一起出现在自定义选项卡中。 变量按字母顺序列出。

使用全局变量查找所有主题

您可以找到全局变量的定义位置以及哪些其他主题正在使用它。 如果在使用新代理,或者如果有多个变量和复杂主题分支,此功能可能非常有用。

  1. 在创作画布上或变量面板中选择所需的全局变量。

  2. 变量属性面板的引用部分,选择查看所有引用

  3. 切换到其他选项卡,选择使用变量的任何主题,即可直接转到该主题和节点。

全局变量的生命周期

默认情况下,全局变量的值在会话结束之前将始终存在。 清除变量值节点将重置全局变量的值,并用于重置对话系统主题。 该主题可通过重定向或用户在输入触发短语(如“重新开始”)时触发。在这种情况下,将重置所有全局变量。

从外部来源设置全局变量的值

如果要确保代理启动具有特定上下文的对话,则可以使用外部源初始化全局变量。 假设您的站点要求用户登录。 由于您的代理已经知道用户的名称,因此它可以在客户开始输入第一个问题之前按名称问候客户。

  1. 选择全局变量。

  2. 变量属性窗格上,选择外部源可以设置值

在嵌入式代理中设置全局变量

如果您要将代理嵌入到一个简单的网页中,您可以将变量及其定义附加到代理的 URL。 或者,如果您想要更多控制,可以使用 <script> 代码块以编程方式调用和使用变量。

此 URL 的查询字符串中的变量名称必须与不含 Global. 前缀的全局变量的名称匹配。 例如,全局变量 Global.UserName 在查询中称为 UserName

下面的示例使用了变量的基本声明。 在生产场景中,您可以作为查询参数或变量定义传递已经存储了用户名称的另一个变量(例如,如果您有来自登录脚本的用户名)。

将变量及其定义作为查询字符串参数(以 botURL?variableName1=variableDefinition1&variableName2=variableDefinition2 格式)追加到代理的 URL。

例如:

参数名称不区分大小写。 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 替换为您的代理 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));