【问题标题】:How to send message after inactivity time with Bot Framework C# SDK?如何使用 Bot Framework C# SDK 在不活动时间后发送消息?
【发布时间】:2017-03-23 14:56:29
【问题描述】:

我正在使用 C# SDK for Bot Framework 开发一个机器人,我希望我的机器人在客户端没有活动一段时间后发送一条满意消息。

我尝试使用 Task,但起初 Task 不可序列化,因此如果我收到新消息,我无法存储任务以处理它,第二个 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);

            }

这在我的静态消息控制器中:

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

但 HttpContext.Current 在尝试从范围解析 IBotData 时为空

【问题讨论】:

  • 计时器有用吗?
  • nop ,上下文可以在等待更多或在呼叫模式下,在等待模式下它正在等待来自客户端的消息,在呼叫模式下他能够将消息发送给客户端。但是在这里我需要在计时器期间等待消息,然后才能发送满意诊断日志...

标签: c# botframework


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多