等待 Even 在 waterfallstep 对话框中键入 Activity(机器人框架 4.0)

Wait for Even type Activity in a waterfallstep dialog (bot framework 4.0)

可以在瀑布步骤对话框中等待并接收事件类型 activity。我使用 directline 3.0 并在对话流中将事件从机器人发送到客户端。在我想从客户端向机器人发送一个事件作为对上一次发送的答复之后。如果我使用提示 await dc.Prompt("waitEvent",activity) ,其中 waitEvent 是一个文本提示,我用一条消息回答它工作正常但我想用一个事件来回答一个事件。我在想我可以写一个自定义提示,但我没有找到文档,显然我可以管理对话流程,但我更喜欢尽可能使用对话框

您可以使用 ActivityPrompt abstract class 构建一个 "EventActivityPrompt" class。

目前还没有这种用法的任何 BotFramework 示例,但 BotFramework 团队编写了 new tests 示例,您可以将其用作示例。

要创建您自己的 EventActivityPrompt,您只需像这样实现 ActivityPrompt:

public class EventActivityPrompt : ActivityPrompt
{
    public EventActivityPrompt(string dialogId, PromptValidator<Activity> validator)
        : base(dialogId, validator)
    {
    }
}

ActivityPrompt 与其他提示之间的核心区别(除了其 abstract 状态)是 ActivityPrompts 需要 PromptValidator<Activity>,以便验证用户输入。

下一步是创建验证器。这是示例:

async Task<bool> _validator(PromptValidatorContext<Activity> promptContext, CancellationToken cancellationToken)
    {
        var activity = promptContext.Recognized.Value;
        if (activity.Type == ActivityTypes.Event)
        {
            if ((int)activity.Value == 2)
            {
                promptContext.Recognized.Value = MessageFactory.Text(activity.Value.ToString());
                return true;
            }
        }
        else
        {
            await promptContext.Context.SendActivityAsync("Please send an 'event'-type Activity with a value of 2.");
        }
        return false;
    }