【问题标题】:How do I give a delayed response in Microsoft Bot Framework如何在 Microsoft Bot Framework 中给出延迟响应
【发布时间】:2023-03-05 20:14:02
【问题描述】:

我正在使用 Microsoft Bot Framework FormFlow 让用户填写表单。完成后,Dialog 结束并执行为 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 错误。

【问题讨论】:

  • 你解决过这个问题吗?
  • 恐怕不会 - 仍然希望有答案的人能参与进来! :(

标签: c# botframework


【解决方案1】:

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

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

【讨论】:

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

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

Here's文档链接

【讨论】:

  • 这就是我在我的 OP 中第二次尝试的尝试,但被拒绝访问。有没有一种简单的方法来构建消息 - 在启动消息时我将如何使用 CreateReplyMessage 并不明显。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 2018-10-16
相关资源
最近更新 更多