使用变量在主题之间传送内容

变量 存储您的客户对代理中问题的回答。 例如,可将一个客户的姓名保存到名称为 UserName 的变量中。 然后,随着对话的继续,代理可以按姓名称呼客户。

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

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

代理变量在单个用户会话期间应用。 您可以指定哪些变量应被视为代理变量,以将它们与主题级变量区分开来。

创建全局变量

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

  1. 创建变量 或使用 Variables(变量)窗格 打开现有变量。

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

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

    显示“变量属性”窗格的屏幕截图,其中突出显示了全局设置。

  3. 保存主题。

    全局变量的名称在所有主题中都必须唯一。 如果有冲突,您需要在保存主题之前重命名变量。

使用全局变量

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

显示全局变量选择的屏幕截图。

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

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

  1. 在创作画布中选择全局变量,或打开变量窗格,并选择全局变量。

  2. 变量属性窗格上,在引用部分中,选择将变量直接用于该主题和节点的任一主题。

    显示变量属性窗格中变量使用的主题列表的屏幕截图。

全局变量的生命周期

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

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

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

  1. 选择全局变量。

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

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

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

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

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

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

例如:

参数名称不区分大小写。 username=Renata 在此示例中也有效。

将全局变量添加到自定义画布

您还可以将变量添加到自定义画布中。

  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 when you embed your 代理,如以下示例所示,where store is called 就在 where styleOptions 被调用的上方(你需要将 the 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));