如何在Microsoft Bot Framework中给出延迟响应



我正在使用Microsoft Bot Framework FormFlow让用户完成一个表单。完成后,对话框结束,并执行为ResumeWith参数(在本例中为quoteComplete)指定的方法:

var quoteForm = new FormDialog<Quote>(new Quote(), 
    quoteFormBuilder.BuildForm, FormOptions.PromptInStart);
context.Call<Quote>(quoteForm, quoteComplete);

quoteComplete中,我希望机器人告诉用户它正在获得报价,这可能需要几秒钟的时间。然后执行一个异步调用来执行报价,在返回时,我希望机器人显示另一条带有报价值的消息:

await context.PostAsync("I will now calculate your quote. I won't be long...");
context.Wait(MessageReceived);
//Simulate getting the quote
Task.Delay(5000).ContinueWith(t =>
{
    context.PostAsync("Your quote is £133.54");
});

我还在文档中尝试了以下建议,通过将其放入Delay().ContinueWith:来发送多个回复

var message = context.MakeMessage();
message.Text = "Your quote is for £133.54";
var connector = new ConnectorClient();
connector.Messages.SendMessage(message);

然而,我得到了一个Access Denied错误。

尝试以以下方式实例化客户端

using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
{
     var client = scope.Resolve<IConnectorClient>();
     client.Messages.SendMessage(message);
}

一旦异步任务得到结果,您应该能够使用ConnectorClient向传入消息发送响应

这是文档的链接

最新更新