如何在 Microsoft Bot Framework 中提供延迟响应
How do I give a delayed response in 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
中,我希望机器人告诉用户它正在获取报价,这可能需要几秒钟。然后完成执行报价的异步调用,然后 return 我希望机器人显示另一条消息,其中包含报价的值:
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
错误。
一旦您的异步任务获得结果,您应该能够使用 ConnectorClient 发送对传入消息的响应
Here's link 文档
尝试通过以下方式实例化客户端
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
{
var client = scope.Resolve<IConnectorClient>();
client.Messages.SendMessage(message);
}
我正在使用 Microsoft Bot Framework FormFlow 让用户填写表单。完成后,对话框结束并执行为 ResumeWith
参数指定的方法(在本例中为 quoteComplete
):
var quoteForm = new FormDialog<Quote>(new Quote(),
quoteFormBuilder.BuildForm, FormOptions.PromptInStart);
context.Call<Quote>(quoteForm, quoteComplete);
在 quoteComplete
中,我希望机器人告诉用户它正在获取报价,这可能需要几秒钟。然后完成执行报价的异步调用,然后 return 我希望机器人显示另一条消息,其中包含报价的值:
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
错误。
一旦您的异步任务获得结果,您应该能够使用 ConnectorClient 发送对传入消息的响应
Here's link 文档
尝试通过以下方式实例化客户端
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
{
var client = scope.Resolve<IConnectorClient>();
client.Messages.SendMessage(message);
}