Bot框架对话框链返回值两次?

时间:2016-10-31 22:38:03

标签: c# botframework

我试图理解Microsoft Bot Framework for C#中的Dialog Chaining

当我说“1”时它会返回“说1”两次,当我说“2”时它会返回“说2”两次等等。我不明白为什么这会返回两次值。我还注意到,如果在Test中设置了断点,它将永远不会被击中。什么是我不了解Dialog链?我已经查看了SimpleFacebookAuth example

我有一个简单的类TestDialog。 在MessagesController.cs中,我将其实例化为:

    public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
    {
        if (activity.Type == ActivityTypes.Message)
        {

            await Conversation.SendAsync(activity, () => TestDialog.dialog);

        }
    }

这是TestDialog.cs

public class TestDialog : IDialog<string>
    {

        public static readonly IDialog<string> dialog = Chain
            .PostToChain()
            .Switch(

                new Case<IMessageActivity, IDialog<string>>((msg) =>
                {
                    var regex = new Regex("^1", RegexOptions.IgnoreCase);
                    return regex.IsMatch(msg.Text);
                }, (ctx, msg) =>
                {
                    return Chain.Return("said 1");
                }),


                 new Case<IMessageActivity, IDialog<string>>((msg) =>
                 {
                     var regex = new Regex("^2", RegexOptions.IgnoreCase);
                     return regex.IsMatch(msg.Text);
                 }, (ctx, msg) =>
                 {
                     return Chain.Return("said 2");
                 }),



                new DefaultCase<IMessageActivity, IDialog<string>>((ctx, msg) =>
                {
                        return Chain.Return("default");
                })
            ).Unwrap().PostToUser();


        public async Task StartAsync(IDialogContext context)
        {
            await Test(context);
        }

        private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
        {

                await Test(context);
        }


        private async Task Test(IDialogContext context)
        {

            if (true)
            {
                context.Wait(MessageReceivedAsync);
            }
            else
            {
                context.Done("done");
            }
        }

    }

有没有人经历过这个?

0 个答案:

没有答案