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())); 
     } 

如何开始的回复无需等待用户请求? 谢谢!

+0

如果在第二次调用中使用SendToConversationAsync而不是使用ReplyToActivityAsync,会发生什么情况? –

+0

完全一样。 – Jonathan

+0

是的,我想象。如果不是发送MyAPI.GetCode(),而是发送其他类似“hello”的东西,它只是正常工作?我怀疑问题出在你的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为例)。