BotFramework - определение формы с использованием схемы Json - как получить доступ к полям формы в методе OnCompletion? - PullRequest
0 голосов
/ 10 октября 2018

Я слежу за документацией BotFramework для создания формы с использованием схемы JSON Ссылка , но всякий раз, когда я пытаюсь получить доступ к полям формы в методе 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\"] );"
}

Я такжепроверенное состояние. 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 Ответ

0 голосов
/ 12 октября 2018

Помните, что FirstName вернет JToken.Вам необходимо преобразовать его в строку с state[\"FirstName\"].ToString() или, возможно, $\"{state[\"FirstName\"]}\", поскольку интерполированные строки автоматически преобразуют строки.

У вас также есть возможность просто вставить этот метод в код C #.Это поможет вам избежать подобных ошибок.

return new FormBuilderJson(schema)
    .AddRemainingFields()
    .OnCompletion(async (context, state) => await context.PostAsync($"Hi {state["FirstName"]}"))
    .Build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...