如何在Microsoft Bot Framework中提供延迟响应

Jas*_*ele 6 c# botframework

我正在使用Microsoft Bot Framework FormFlow来让用户填写表单.完成后,Dialog结束并执行为ResumeWith参数指定的方法(在本例中quoteComplete):

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

context.Call<Quote>(quoteForm, quoteComplete);
Run Code Online (Sandbox Code Playgroud)

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");
});
Run Code Online (Sandbox Code Playgroud)

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

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

但是我得到了一个Access Denied错误.

Eze*_*dib 2

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

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

  • 非常感谢,但我想知道您是否可以更新您的答案并解释为什么这是必要的?否则我只是剪切和粘贴更多的魔法!:) (2认同)