Я создал бота, в котором есть FormFlow. Теперь, если вы наберете «Я хочу запустить продукт», LUIS сообщит, к какому диалоговому окну он должен перейти:
internal static IDialog<AssesmentHelper> CreateProduct()
{
return Chain.From(() => FormDialog.FromForm(AssesmentHelper.BuildForm))
.Do(async (context, profileForm) =>
{
try
{
var completed = await profileForm;
}
catch (FormCanceledException<AssesmentHelper> e)
{
string reply;
if (e.InnerException == null)
{
reply = $"You quit on {e.Last}--maybe you can finish next time!";
}
else
{
reply = Responses.ShortCircuit;
}
await context.PostAsync(reply);
}
});
}
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
stLuis = await LuisHelper.ParseUserInput(activity.Text);
switch (stLuis.topScoringIntent.intent)
{
case "CreateProduct":
await Conversation.SendAsync(activity, CreateProduct);
break;
case "EditProduct":
await Conversation.SendAsync(activity, EditProduct);
break;
case "None":
break;
default:
break;
}
}
Теперь, когда он входит в диалог, он просит пользователя выбрать числа:
Пожалуйста, выберите номера:
- Лазурный
- Окна
Теперь, если я отвечу 1,2. Луис возвращает его как «Нет намерения», поэтому мое сообщение не переходит в соответствующий диалог. Он всегда переходит в None.
Код для диалога:
public static IForm<AssesmentHelper> BuildForm()
{
return new FormBuilder<AssesmentHelper>()
.Message(Responses.NumberSelection)
.Field(nameof(Program))
.Field(nameof(Product))
.Build();
}
Enum для программы и продукта:
[Serializable]
public enum Program
{
None = 0,
A = 1,
};
[Serializable]
public enum Product
{
None = 0,
Azure = 1,
Windows = 2
};
Как только я вхожу в этот диалог, он просит меня выбрать номер для выбора программы. Теперь, если я выберу 1,2. Луис возвращает его как «Нет намерения». Итак, случай «Нет» выполняется.
Я хочу перенаправить элемент управления в тот же диалог. У меня есть аналогичный диалог для редактирования продукта. Вот почему я не могу научить свое приложение luis понимать числа как намерение продукта. В противном случае всякий раз, когда я выбираю номер для редактирования продукта, он будет переходить в другой регистр.
Раньше он каким-то образом определял правильные намерения, но сегодня я переиздал свое приложение luis, и оно перестало идентифицироваться.
activity.Text
, чтобы увидеть, является ли сообщение числом, и, если да, обработать его соответствующим образом. - person stuartd   schedule 15.11.2016