BotFramework - 使用 Json 架构定义表单 - 如何访问 OnCompletion 方法中的表单字段?
BotFramework - Define a form using Json schema - How to access form fields in OnCompletion method?
我正在按照 BotFramework 文档使用 JSON 架构 Link 创建表单,但是每当我尝试访问 OnCompletion 方法中的表单字段并使用 bot-emulator 访问机器人时,我得到"Sorry, my bot code is having issues."。我不知道如何调试此代码,感谢任何帮助。
这是我的 JSON 架构内容:
TestFlow.json :
{
"References": [ "EmpoxxxxBot.dll" ],
"Imports": [ "EmpoxxxxBot.Helpers" ],
"type": "object",
"required": [
"FirstName"
],
"Templates": {
"NotUnderstood": {
"Patterns": [ "I do not understand \"{0}\".", "Try again, I don't get \"{0}\"." ]
}
},
"properties": {
"FirstName": {
"Prompt": { "Patterns": [ "Enter First Name {||}" ] },
"Before": [ { "Message": [ "test flow starting..." ] } ],
"Describe": "First name",
"type": [
"string",
"null"
]
}
},
"OnCompletion": "await context.PostAsync(state[\"FirstName\"] );"
}
我也试过了state.FirstName
public static IForm<JObject> BuildForm()
{
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("EmpowerIDBot.TestFlow.json"))
{
var schema = JObject.Parse(new StreamReader(stream).ReadToEnd());
return new FormBuilderJson(schema)
.AddRemainingFields()
.Build();
}
}
我的 BotBuilder 版本:3.15.2.2
请记住,FirstName
将 return 一个 JToken。您需要使用 state[\"FirstName\"].ToString()
或 $\"{state[\"FirstName\"]}\"
将其转换为字符串,因为内插字符串会自动进行字符串转换。
您还可以选择将该方法放入您的 C# 代码中。这可以帮助您避免此类错误。
return new FormBuilderJson(schema)
.AddRemainingFields()
.OnCompletion(async (context, state) => await context.PostAsync($"Hi {state["FirstName"]}"))
.Build();
我正在按照 BotFramework 文档使用 JSON 架构 Link 创建表单,但是每当我尝试访问 OnCompletion 方法中的表单字段并使用 bot-emulator 访问机器人时,我得到"Sorry, my bot code is having issues."。我不知道如何调试此代码,感谢任何帮助。
这是我的 JSON 架构内容:
TestFlow.json :
{
"References": [ "EmpoxxxxBot.dll" ],
"Imports": [ "EmpoxxxxBot.Helpers" ],
"type": "object",
"required": [
"FirstName"
],
"Templates": {
"NotUnderstood": {
"Patterns": [ "I do not understand \"{0}\".", "Try again, I don't get \"{0}\"." ]
}
},
"properties": {
"FirstName": {
"Prompt": { "Patterns": [ "Enter First Name {||}" ] },
"Before": [ { "Message": [ "test flow starting..." ] } ],
"Describe": "First name",
"type": [
"string",
"null"
]
}
},
"OnCompletion": "await context.PostAsync(state[\"FirstName\"] );"
}
我也试过了state.FirstName
public static IForm<JObject> BuildForm()
{
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("EmpowerIDBot.TestFlow.json"))
{
var schema = JObject.Parse(new StreamReader(stream).ReadToEnd());
return new FormBuilderJson(schema)
.AddRemainingFields()
.Build();
}
}
我的 BotBuilder 版本:3.15.2.2
请记住,FirstName
将 return 一个 JToken。您需要使用 state[\"FirstName\"].ToString()
或 $\"{state[\"FirstName\"]}\"
将其转换为字符串,因为内插字符串会自动进行字符串转换。
您还可以选择将该方法放入您的 C# 代码中。这可以帮助您避免此类错误。
return new FormBuilderJson(schema)
.AddRemainingFields()
.OnCompletion(async (context, state) => await context.PostAsync($"Hi {state["FirstName"]}"))
.Build();