BotFramework - определение формы с использованием схемы Json - как получить доступ к полям формы в методе OnCompletion?
Я слежу за документацией BotFramework, чтобы создать форму с помощью JSON Schema Link, но всякий раз, когда я пытаюсь получить доступ к полям формы в методе OnCompletion и получить доступ к боту с помощью бот-эмулятора, я получаю сообщение "Извините, у моего кода бота возникают проблемы". Я не знаю, как отлаживать этот код, любая помощь приветствуется.
вот мое содержание схемы 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
1 ответ
Помни что FirstName
вернет JToken. Вам нужно преобразовать его в строку с state[\"FirstName\"].ToString()
или возможно $\"{state[\"FirstName\"]}\"
поскольку интерполированные строки выполняют преобразование строк автоматически.
У вас также есть возможность просто поместить этот метод в ваш код C#. Это может помочь вам избежать подобных ошибок.
return new FormBuilderJson(schema)
.AddRemainingFields()
.OnCompletion(async (context, state) => await context.PostAsync($"Hi {state["FirstName"]}"))
.Build();