繁体   English   中英

如何使用Bot Framework C#SDK在不活动时间后发送消息?

[英]How to send message after inactivity time with Bot Framework C# SDK?

我正在使用B#Framework的C#SDK开发机器人,我希望我的机器人在没有客户活动的情况下发送满意的消息。

我尝试使用Task,但首先Task不可序列化,所以如果我收到一条新消息,我就无法将任务存储到Dispose它,而第二个PrompChoice会抛出一条带有消息的'Microsoft.Bot.Builder.Internals.Fibers.InvalidNeedException' :“无效需要:预期通话,等待”

我试图用一个context.sendAsync(“Hi”)替换我的PromptChoice,这里没有异常,但消息永远不会被发送到模拟器。

如果有人知道如何做到这一点,我将不胜感激。

编辑:

我用这个样本来完成这项工作:

            using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
            {
                var botData = scope.Resolve<IBotData>();
                await botData.LoadAsync(CancellationToken.None);
                IDialogTask task = scope.Resolve<IDialogTask>();

                //interrupt the stack
                var dialog = new InactivityDialog();
                task.Call(dialog.Void<object, IMessageActivity>(), null);
                //stack.Post<InactivityDialog>(dialog, (c, item) => { return Task.CompletedTask; });
                await task.PollAsync(CancellationToken.None);

                //flush dialog stack
                await botData.FlushAsync(CancellationToken.None);

            }

这在我的静态messageController中:

    var builder = new ContainerBuilder();
builder.Register(c => ((ClaimsIdentity)HttpContext.Current.User.Identity).GetCredentialsFromClaims())
           .AsSelf()
           .InstancePerLifetimeScope();
builder.Update(Conversation.Container);

但是当HttpContext.Current尝试从作用域解析IBotData时,它是null

该功能目前不在机器人框架中。 您必须创建自己的自定义代码,以保存对话信息并更新您自己的计时器(如果有活动)。

https://github.com/Microsoft/BotBuilder/issues/837

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM