添加一些上下文Ezequiel Jadib答案。我遇到了类似于下面链接中提到的问题的要求。另外,使用提供给相同问题的answer之一。
Calling back Luis from a forward dialog
虽然上述问题被标记为复制到目前,我觉得路易斯上下文从这个问题缺少。
如果Activity
而不Channel
,From
和Recipient
信息创建的,你可以在创建回复一些例外结束。所以,下面的代码将帮助您创建正确的活动,并移交到路易斯
路易斯意向方法
[LuisIntent("PerformSearch")]
public async Task Search(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result)
{
var msg = await activity;
msg.Value = result;
await context.Forward(new SearchDialog(), ResumeAfterSearchPerformed, msg, CancellationToken.None);
}
恢复方法后转发的对话框
private async Task ResumeAfterSearchPerformed(IDialogContext context, IAwaitable<object> result)
{
var msg = await result;
var userSearchString = msg.ToString();
if (userSearchString.Equals("searchCompleted", StringComparison.InvariantCultureIgnoreCase))
{
context.Wait(MessageReceived);
}
else
{
// At this point send the message back to LUIS MessageReceived
// method to re-identify the intent and trigger the method
Activity myActivity = (Activity)context.Activity;
myActivity.Text = userSearchString;
await MessageReceived(context, Awaitable.FromItem(myActivity));
}
}
之前设置正确的消息
通过以上操作,您可以轻松地创建正确水合的回复Activity
Activity reply = ((Activity)message).CreateReply();
reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
看起来像......每当我检查出NodeJS的例子,它们似乎提供了更多的关于堆栈管理的灵活性......这里也可以用NodeJS来实现它:https://stackoverflow.com/questions/45334339 /如何到流行到根对话与 - BOT框架 – Krumelur