【发布时间】:2017-11-03 18:17:26
【问题描述】:
我正在使用 Microsoft.Bot.Builder.Dialog.Promptoptions 类,它接受一个 ResumeAfter,它是委托并需要(IDialogContext 上下文,IAwaitable 结果)
但是,我想调用的代表不是 私有异步任务测试(IDialogContext 上下文,IAwaitable 结果)
而是具有以下内容的 LUIS 委托
[LuisIntent("测试") 私有异步任务测试(IDialogContext 上下文,LuisResult 结果)
非常感谢听到一些关于如何调用 LUIS 属性方法的想法
private async Task ProductChoice(IDialogContext context, IAwaitable<string> result)
{
PromptDialog.Choice<string>(
context,
ProductOverview,
this.productOptions,
"Which plaform are you interested in?",
"Ooops, what you wrote is not a valid option, please try again",
3,
PromptStyle.PerLine);
await context.PostAsync(context.MakeMessage());
}
[LuisIntent ("Products")]
public async Task ProductOverview(IDialogContext context, LuisResult result)
{
string product = "";
EntityRecommendation rec;
Activity activity = (Activity)context.MakeMessage();
Attachment attachment;
if (result.TryFindEntity("ProductName", out rec))
{
//Here you could include other rich cards
attachment = CreateNewHeroCard(product = rec.Entity);
activity.Attachments.Add(attachment);
await context.PostAsync(activity);
}
else
{
await context.PostAsync("Sorry, their is no product by that name");
}
}
【问题讨论】:
-
您需要显示更多代码。你是如何使用那个 PromptOptions 的,你为什么期望
LuisResult被返回到你的回调中? -
您可能需要一些代码重构并将您的测试方法中所做的内容提取为 Luis 结果和 ResumeAfter 使用的常用方法
-
你不能这样做。但是重构代码会更容易,使用通用的方法。
-
但是
PromptDialog.Choice<string>会回调string结果,而不是LuisResult,所以不确定你希望它如何工作。 -
问题是我想在我的 LUISIntend 方法 (ProductOverview) 上使用一个,不仅可以处理 LUIS 调用,还可以处理一些 ResumeAfter 调用,因为有时该方法会直接从 Bot 调用,有时也可以我希望该方法成为逻辑流程的一部分。在这里,您可以看到我尝试从上面启动的 PromptDialog 调用 ProductOverview。这自然会失败,但如何从 ResumeAfter 调用我的 ProductOverview 方法?
标签: c# botframework azure-language-understanding