Bot Framework - 多个延迟的答案
问题描述:
我正在使用Microsft BotFramework。Bot Framework - 多个延迟的答案
进程: 客户要求我的机器人生成一个特定的代码 1.机器人对客户端的答案是他正在生成代码。 2.大约10秒钟后,机器人将代码发送给客户端,没有任何其他请求。
问题: 我使用
ReplyToActivityAsync(...)
方法return语句之前发送两个答案。 在这种情况下,2个答案之间有一个发布超时错误。
这是我的代码:
if (activity.Type == ActivityTypes.Message)
{
ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
// return our reply to the user
string welcomeMessage = "[...] Reply 1 [...]"
await connector.Conversations.ReplyToActivityAsync(activity.CreateReply(welcomeMessage));
// MyApi.GetCode() takes about 10 secs
await connector.Conversations.ReplyToActivityAsync(activity.CreateReply(MyAPI.GetCode()));
}
如何开始的回复无需等待用户请求? 谢谢!
答
您可以使用收件人的ID发送邮件,而不需要用户的请求,如下所示。因此,您可以在通过api调用成功响应并延迟发送消息给用户之后,也可以在另一个函数中发送消息。
string userId ="123456789"; // For Example
string serviceUrl = "https://telegram.botframework.com"; // For Example
var connector = new ConnectorClient(new Uri(serviceUrl));
IMessageActivity newMessage = Activity.CreateMessageActivity();
newMessage.Type = ActivityTypes.Message;
newMessage.From = new ChannelAccount("<BotId>", "<BotName>");
newMessage.Conversation = new ConversationAccount(false, userId);
newMessage.Recipient = new ChannelAccount(userId);
newMessage.Text = "<MessageText>";
await connector.Conversations.SendToConversationAsync((Activity)newMessage);
在上面,你可以用他的身份证在相关通道将消息发送给用户。另外,serviceUrl
是基于相关通道定义的(这里以Telegram为例)。
如果在第二次调用中使用SendToConversationAsync而不是使用ReplyToActivityAsync,会发生什么情况? –
完全一样。 – Jonathan
是的,我想象。如果不是发送MyAPI.GetCode(),而是发送其他类似“hello”的东西,它只是正常工作?我怀疑问题出在你的GetCode方法中...是否有任何改变来使该方法异步? –