2

我正在按照 BotFramework 文档使用 JSON Schema Link创建表单,但是每当我尝试访问 OnCompletion 方法中的表单字段并使用 bot-emulator 访问机器人时,我都会收到“抱歉,我的机器人代码有问题。”。我不知道如何调试此代码,感谢任何帮助。

这是我的 JSON 架构内容:

测试流.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

4

1 回答 1

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();
于 2018-10-11T23:34:52.123 回答