【发布时间】: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