我有一个用C#编写的机器人,该机器人正在使用LUIS来确定意图。我有一个方法来调用LUIS服务,然后寻找一个“ Open_Case”意图。该模型定义了一个CaseNumber实体,该实体可以或可以不包括在LUIS服务的响应中。 如果响应中没有案例编号实体,那么我将启动一个对话框,要求用户输入案例编号。 有了案件号后,我想退还一张包含案件信息的卡。
这是我的代码:-
/// <summary>
/// Dispatches the turn to the requested LUIS model.
/// </summary>
private async Task DispatchToLuisModelAsync(ITurnContext context, string appName, DialogContext dc, CancellationToken cancellationToken =
default (CancellationToken)) {
var result = await botServices.LuisServices[appName].RecognizeAsync(context, cancellationToken);
var intent = result.Intents ? .FirstOrDefault();
string caseNumber = null;
if (intent ? .Key == "Open_Case") {
if (!result.Entities.ContainsKey("Case_CaseNumber")) {
var dialogResult = await dc.BeginDialogAsync(CaseNumberDialogId, null, cancellationToken);
} else {
caseNumber = (string)((Newtonsoft.Json.Linq.JValue) result.Entities["Case_CaseNumber"].First).Value;
var cardAttachment = botServices.CaseInfoServices.LookupCase(caseNumber);
var reply = context.Activity.CreateReply();
reply.Attachments = new List < Attachment > () {
cardAttachment
};
await context.SendActivityAsync(reply, cancellationToken);
}
}
}
我正在努力的是代码发送卡响应的位置。 在当前代码中,如果LUIS响应中返回了数字,则我将卡片发送给我,但是如果没有数字,并且启动了对话框,则只能在对话框的最后一步或在对话框中访问该数字。对话结果在根转弯处理程序中。我目前已在对话框的最后一步中复制了答复,但感觉不对且不雅。 我确信必须有一种方法可以从LUIS或对话框中收集号码,然后从一个地方发送响应,而不是重复代码。
任何收到建议的人...
答案 0 :(得分:0)
我得出的结论是,我需要将显示卡的代码放入bot类的方法中,然后在dialogTurnStatus等于Complete时从代码片段中的else以及转弯处理程序中调用它/ p>