Botframework 当我';我调用了上下文。是否在LuisDialog意向处理程序中等待?

Botframework 当我';我调用了上下文。是否在LuisDialog意向处理程序中等待?,botframework,azure-language-understanding,Botframework,Azure Language Understanding,我正在构建一个小机器人,它运行得很好,但我面临一个似乎无法摆脱的流量问题。我使用LuisDialog来解释用户的消息。在特定的意图处理程序方法中,我在面板中显示一个带有“Unsubscribe”按钮的旋转木马,并调用context.Wait(Uitschrijven)来处理用户从旋转木马中的选择 这意味着下一条传入消息将点击此方法: private async Task Uitschrijven(IDialogContext context,IAwaitable<IMessageActiv

我正在构建一个小机器人,它运行得很好,但我面临一个似乎无法摆脱的流量问题。我使用LuisDialog来解释用户的消息。在特定的意图处理程序方法中,我在面板中显示一个带有“Unsubscribe”按钮的旋转木马,并调用
context.Wait(Uitschrijven)
来处理用户从旋转木马中的选择

这意味着下一条传入消息将点击此方法:

private async Task Uitschrijven(IDialogContext context,IAwaitable<IMessageActivity> result)
{
    ...
}
专用异步任务Uitschrijven(IDialogContext上下文,IAwaitable结果)
{
...
}
在这种方法中,我希望用户已经单击了旋转木马中的一个按钮,它将发送一条类似于
“id:3”
格式的消息。当然,用户只需键入一些其他新消息,而不必继续此流程。问题是,如果他们这样做了,我就知道下一条消息是由我的“Uitschrijven”方法接收的,在那里它将无法正确处理。我如何将其发送回路易斯Dialog重新解释,以便符合正确的意图

理想情况下,我希望再次将消息转发到我的LuisDialog的
MessageReceived
函数

但是,Forward()方法需要resumeafter方法,我不需要它。 也有结束对话,但它只是结束了对话,没有口译


是否有人知道如何确保这些新消息将由
MessageReceived
方法处理,以便用户能够继续此场景?

这可能是一个很好的应用案例。不过会有一些权衡

您的用户只需在任何时候键入“unsubscribe”,或单击postback/imback值为“unsubscribe”的按钮。您可以选择所需的任何文本作为识别值。这样,您的取消订阅逻辑将独立于任何其他逻辑运行,您将不会像现在这样被困在流程中。由于“取消订阅”事件将由全局处理程序(Scorable)处理,因此您可以像平常一样处理用户发送的任何其他消息(在LuisDialog中)

如果您不希望您的用户能够在任何时候取消订阅,此解决方案可能不适用于您。在这种情况下,请按照@Ezequiel的要求发布您的代码,以便我们更好地了解您的流程。这不是处理流程的唯一方法

以下是一些需要查看的信息:


我的理解是,您正在以类似于
私有异步任务Uitschrijven(IDialogContext context,IAwaitable result)
的方法接收用户的响应,该方法存在于您的Luis对话框中,如果传入消息来自您的按钮,您希望处理它,但如果消息是其他内容,您希望它返回到同一对话框的MessageReceived方法。如果这是正确的,您可以简单地执行以下操作:

private async Task Uitschrijven(IDialogContext context,IAwaitable result) 
{
    var message = await result;
    if( /* message matches what you're expecting from button */) 
    {
        // process message from button
    }
    else
    {
        // simply pass the IAwaitable to MessageReceived
        await MessageReceived(context, result);
    }
}
如果我正确理解了这个场景,那么这可能比使用Scorable的其他建议要好,因为使用Scorable,每一条消息都会通过Unsubscribe Scorable运行,并且这个逻辑可能会在不合适的地方触发


如果您觉得这不是对您的需求的准确理解,请随意编辑您的问题,并提供更清晰的细节

请发布代码,以便我们更好地理解流程。感谢反馈。Sam提供的解决方案最符合我的需要。但我将使用Scorable用于我面临的另一个场景,这非常适合!