如何在PVA中访问Bot Framework Composer对话变量及引用Builder变量
如何在PVA中访问Bot Framework相关变量的解决方案
我来帮你解决这两个在PVA与Bot Framework集成时常见的变量引用问题:
1. 在PVA中访问Bot Framework Composer的对话变量
当你已经把Composer构建的Bot和PVA集成后,访问Composer的对话变量其实很直接,核心是利用PVA的表达式语法跨环境读取变量:
- 先确认Composer里的变量作用域:如果是conversation级(全局对话内有效)的变量,比如
conversation.userCity,或者turn级(当前对话轮次有效)的turn.tempInput,这些变量会自动同步到PVA的上下文里。 - 在PVA的响应消息、条件判断或者动作中,使用PVA的表达式语法引用:直接写
@{conversation.userCity}或者@{turn.tempInput}即可获取对应的值。 - 举个实际例子:如果在Composer里通过“设置变量”动作把
conversation.username设为"Bob",那在PVA的回复里写欢迎回来,@{conversation.username},用户就会看到“欢迎回来,Bob”。
注意:如果Composer里的变量是dialog级(仅当前Dialog内有效),你需要确保PVA触发的是对应的Dialog流程,或者把变量提升到conversation/turn作用域才能被PVA访问到。
2. 在PVA中引用Bot Framework Builder中定义的变量(如conversation.something)
如果你的变量是在Bot Framework Builder的代码(C#/JavaScript)里定义的,比如直接操作ConversationState设置的变量,步骤如下:
- 第一步,在Builder代码中正确设置变量:
- C#示例:
// 获取ConversationState的属性访问器 var somethingProperty = _conversationState.CreateProperty<string>("something"); // 设置变量值 await somethingProperty.SetAsync(turnContext, "来自Builder的变量值"); // 保存状态 await _conversationState.SaveChangesAsync(turnContext); - JavaScript示例:
// 设置conversation作用域的变量 await turnContext.conversationState.set('something', '来自Builder的变量值'); // 保存状态 await turnContext.conversationState.saveChanges(turnContext);
- C#示例:
- 第二步,在PVA中引用:和访问Composer变量一样,直接用表达式
@{conversation.something}就能读取到代码里设置的变量值。 - 注意点:如果变量是复杂对象(比如自定义类),要确保对象能被正确序列化(比如用JSON序列化),PVA才能解析并读取其中的属性,比如
@{conversation.userInfo.name}。
内容的提问来源于stack exchange,提问作者Kam.B
相关产品推荐
相关产品推荐

