2017-01-23 29 views
1

私はMicrosft BotFrameworkを使用しています。Botフレームワーク - 複数の遅延応答

プロセス: クライアントは特定のコードを生成するようにボットに依頼します 1.ボットはクライアントにコードを生成していると答えます。 2.約10秒後、ボットは他の要求なしにクライアントにコードを送信します。

問題: 私はreturn文の前に、両方の答えを送信するために

ReplyToActivityAsync(...) 

方法を使用しています。 この場合、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

2番目の呼び出しでReplyToActivityAsyncを使用する代わりにSendToConversationAsyncを使用するとどうなりますか? –

+0

まったく同じです。 – Jonathan

+0

はい。私はそれを想像します。 MyAPI.GetCode()を送信する代わりに、「hello」のような何かを送信すると、正しく動作しますか?あなたのGetCodeメソッドに問題があると思われます...そのメソッドを非同期にするための変更はありますか? –

答えて

0

受信者の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); 

は、上記では、関連するチャンネルで彼のIDを使用して、ユーザーにメッセージを送ることができます。また、serviceUrlは、関連するチャネル(ここではテレグラムが一例である)に基づいて定義される。

関連する問題