使用变量
您可以使用变量来保存客户的回答,并在稍后的对话中重复使用他们的内容。
还可以使用变量创建逻辑表达式以沿着不同对话路径动态传递客户。 例如,将客户的姓名保存在名为 "customerName" 的变量中,代理可以在对话继续时按姓名处理该客户。
变量也可以传递到其他主题和Power Automate 流并从其中返回。
创建变量
提示您选择变量作为输出的任何节点,例如问题节点,都会自动创建一个合适类型的输出变量。
小费
重命名节点,使其更容易识别。 选择节点的名称字段以直接更新名称,或者选择节点的更多图标 (…),然后从菜单中选择重命名。 您也可以在代码编辑器中重命名节点。
无法重命名触发器节点和转到步骤节点。
节点名称最长可达 500 个字符。
选取要使用的实体
重命名变量
创建变量时会自动为变量分配一个名称。 最佳做法是为您的变量提供有意义的名称,以便向必须维护您的代理的其他人明确其用途。
选择变量以在变量属性窗格中打开它。
在变量名称下面,请为变量输入新名称。
设置变量
通常使用问题节点将用户输入存储到变量中。 但是,在某些情况下,您可能希望自己设置变量值。 在这种情况下,请使用设置变量值节点。
选择添加节点(+)以添加节点,然后选择变量管理>设置变量值。
选中设置变量下面的方框,然后选择创建新变量。
创建了新变量。 在为其赋值之前,其类型是未知。
对于目标值,使用以下选项之一分配一个值:
- 键入文字值。
- 选择同一类型的现有变量。 此操作会将您的变量设置为与您选择的变量相同的值。
- 使用 Power Fx 公式。 Power Fx 公式对于不能使用文字值的更复杂类型很有用,例如表和记录类型。
备注
在设置字符串类型变量时,如果遇到设置变量和目标值不匹配,则会出现错误信息和修复类型不匹配按钮。 选择该按钮可 Copilot Studio 自动生成 Power Fx 解决不匹配的公式 。
在操作节点中使用变量
当您在操作节点中使用变量时,如果其基本类型与为流或 Bot Framework 技能指定的参数类型匹配,您可以将其提供给该参数。 操作节点的输出会生成新变量。
为变量输入使用文字值
在可以为输入参数设置值的节点中,可以输入文字值,而不是选择其他变量作为值。
该节点尝试将文字值解释为字符串、数字或布尔值。 例如,123 将被解释为一个数字。 如果您希望将其解释为字符串值,您可以用双引号括住此值,如下所示:"123"。
在某些情况下(例如,使用复杂类型的情况),您可能需要使用 Power Fx 公式来设置特定类型。
将环境变量用于 Azure Key Vault 密码
环境变量可以引用密钥保管库中的密码。 密钥环境变量是一种特殊的环境变量,有唯一的注意事项。
要在 Power Apps 门户中创建密码环境变量,您必须配置其密钥保管库。
要授权 Copilot Studio 读取此密钥保管库,必须执行以下操作:
将
Key Vault Secrets User
角色分配给Microsoft Virtual Agents Service
应用程序。要授权环境中的所有代理访问密钥,请在密钥上创建标记
AllowedEnvironments
,并添加允许的环境 ID,以逗号分隔。若要仅授权环境中的特定代理使用此密钥保管库,请创建标记
AllowedAgents
并将代理标识符置于格式{envId}/{schemaName}
中。 对于多个值,用逗号分隔这些值。
如果达到最大字符数,但仍需要添加更多代理,请添加另一个具有描述性但唯一名称的标记(例如:AllowedAgents2
)。
密码值在对话运行时缓存五分钟。 不成功的读取会缓存 30 秒。
警告
通过在代理中添加密钥,您可以向可以在环境中编辑代理的所有用户公开此密钥的值,因为这些用户可以编辑代理以返回 SendMessage
节点中的值。
变量窗格
在变量窗格中,您可以查看某个主题的所有可用变量,无论这些变量在哪个节点中定义或使用。 对于每个变量,您可以选择它是可以从其他主题接收其值、将其值返回给其他主题,还是两者均可。 您还可以选择一个变量以在变量属性窗格中编辑其属性。
要打开变量窗格,请在主题的菜单栏中选择变量。
变量属性窗格
在变量属性窗格中,您可以重命名变量,查看变量使用位置,或者将变量转换为全局变量。 但是,不能将全局变量转换回主题变量。 您还可以选择主题变量是否可以接收值或将其值传递给其他主题。
要打开某个变量的变量属性窗格,请在变量窗格中选择所需的变量。 您还可以通过在任何节点中选择一个变量来打开变量属性窗格。
在主题之间传递变量
当您将一个主题重定向到另一个主题时,可以将变量的值从原始主题传递到目标主题,还可以将目标主题的值返回原始主题。 当前面的主题已经收集了后面的主题需要的信息时,在主题之间传递变量特别有用。 您的用户会很高兴不必再次回答相同的问题。
接收其他主题中的值
当主题定义变量时(例如,通过问题节点),代理会询问用户问题来填写变量值。 如果代理在前面的主题中已获取值,则没有理由再次提问。 在这些情况下,您可以将变量设置为接收其他主题中的值。 当另一个主题重定向到此主题时,它可以将任一变量值(或文字值)传递给此变量,并会跳过问题。 用户与代理交谈的体验是无缝的。
在此示例中,我们将使用问候语和与客户交谈这两个主题。 这两个主题都询问客户的名称。 但是,如果问候语主题先运行,与客户交谈主题会跳过它的问题。 而是使用了问候语主题中传递的变量值。
下面是与客户交谈主题的流:
如测试面板中所示,如果首先触发了此主题,它询问用户“我应该调用您什么?”它将值存储在一个称为 customerName 的字符串变量中。 customerName 变量也被设置为从其他主题获取值。 该主题以“希望您今天过得愉快,customerName!”结束。
下面是问候语主题的流:
如测试面板中所示,如果首先触发此主题,则它会询问用户“你叫什么名字?”它会将值存储在名为 customerName 的字符串变量中。 此主题发送消息“很高兴认识你,customerName!”,然后它重定向到与客户交谈主题,该主题发送消息“我希望你今天过得愉快,customerName!”但是请注意,与客户交谈主题跳过了再次询问用户姓名这一步骤。 相反,它使用从问候语主题传递的 customerName 变量的值。
最后,再次进行第二次对话,这次是从与客户交谈主题的角度出发:
我们来演练一下设置主题以从其他主题接收值的步骤。 我们的示例场景使用预定义主题问候语作为源主题,并使用新主题与客户交谈作为目标主题,但同样的步骤也适用于任何主题,只要有可能,都应使用先前主题的值。
设置目标主题
目标主题是被重定向到的主题,该主题将从其他主题接收值。 在我们的示例中,它是与客户交谈。
创建新主题并称其为“与客户交谈”。
添加触发短语,如“与我交谈”、“与我说话”、“与我聊天”。
添加问题节点,并输入“我该怎么称呼您?
在识别下面,选择预生成的实体人员姓名。
选择变量的名称。 这时会打开变量属性面板。
用 "customerName" 替换默认名称,然后选择从其他主题接收值。
添加消息节点。
在消息框中输入“我希望你今天过得愉快”。
选择插入变量图标 ({x}),然后选择 customerName。
选择变量后的空格并输入 "!"。
保存主题。
设置源主题
源主题是进行重定向的主题,该主题提供值且将其传递给目标主题。 在本示例中,此为问候语。
转到问候语主题,删除默认节点,触发器节点除外。
添加问题节点,输入“您叫什么名字?”。
在识别下面,选择预生成的实体人员姓名。
将默认名称替换为“customerNameFromGreeting”。
添加消息节点。
在信息框中输入“很高兴见到您”。
选择插入变量图标({x}),然后选择 customerNameFromGreeting。
选择变量后的空格并输入 "!"。
添加重定向节点,并选择目标主题与客户交谈。
选择添加输入,然后从要向其传递值的目标主题中选择变量。
选择 > 图标,然后选择要传递值的变量,本例中为 customerNameFromGreeting。
重定向节点应如下所示:
保存主题。
将值返回到原始主题
当一个主题通过提问或其他方式被重定向到并获取一个变量时,该变量可以返回到原始主题。 此变量会成为原始主题的一部分,可以像任何其他变量一样使用。 因此,代理获取的信息可跨主题提供,从而减少对全局变量的需要。
我们继续上一节中的示例。 我们在与客户交谈主题中提出一个新问题,然后将答案返回给问候语主题。
为返回的变量设置源主题
在将变量返回到主题时,源主题是提供要传递回原始主题的值的主题。 在本例中,源主题是与客户交谈。
转到源主题。
添加一个问题节点,输入“您住在哪个城市?”
在识别下面,选择预生成的实体城市。
选择变量以打开变量属性窗格。 将其命名为“customerCity”,然后选择将值返回到原始主题。
添加消息节点。
选择插入变量图标({x}),然后选择 customerCity。
在信息框中的变量后输入“每年的这个时候一定很美!”。
保存主题。
为返回的变量设置目标主题
在将变量返回到主题时,目标主题是从当前主题接收值的主题。 在我们的示例中,目标主题是问候语。
转到目标主题。
您在源主题中选择的变量应该作为输出变量出现在重定向节点中。
保存主题。
“分析值”节点
分析值节点允许您将一种类型的值转换为另一种类型的值。 向主题添加节点时,请选择添加节点图标 ,指向变量管理并选择解析值。
使用分析值节点的主要场景侧重于将原始 JSON 或非类型化变量(其值或结构直到运行时才知道;例如 ChannelData)转换为具体类型。
该流程在调用流时启动,而此流则会调用 API。 然后,API 返回结果。 通常,您需要解析该响应并返回一个或多个原始变量。 使用分析值节点,可以将整个 API 结果作为字符串发送。 例如:
{
"Name": "Parker",
"Position": "Product manager",
"Company": "Contoso",
"FormerPositions": [{
"Position": "Customer service representative"
}
]
}
使用这个新节点,您现在拥有的字符串变量可以通过 Power Fx 中的全面智能感知支持转换为记录变量。 使用示例数据的示例将有助于说明此过程。
使用“分析值”节点的示例
添加分析值节点,然后选择要解析的变量。
选择数据类型。 在这种情况下,请选择从示例数据。
选择 从 JSON 示例中获取模式,然后在打开的编辑器中输入所需的 JSON 示例。
最后,指定要将解析值放入哪个变量中。 通常要为此创建一个新变量。
请注意,输出变量现在是正确的类型:记录。
除了解析 JSON 字符串,解析值节点的一个主要用途是在运行时解析非类型对象。 最常见的使用案例是收到事件时需要解析该事件值。 或者您可能想解析 System.Activity.ChannelData 属性,该属性在运行时因区段而异。
如果您要解析来自 Teams 的事件信息,您需要使用 Teams 开发人员文档查找预期事件的示例,然后将此示例用作本节前面概述的示例数据。