2016-09-24 7 views
3

ボットからエミュレータ上の同じ会話でメッセージを送信しようとしていますが、ドキュメント内のコードを使用して新しい会話を作成します同じ会話IDを使用したときにも新しい会話IDが作成され、同じ会話には返答しませんでした。このコードは、新しい会話ボットフレームワークでエミュレータ上の同じ会話にメッセージを送信

   var userAccount = new ChannelAccount(name: "User1", id: "@2c1c7fa3"); 
      var botAccount = new ChannelAccount(name: "Conv1", id: "8a684db8"); 
      var connector = new ConnectorClient(new Uri("http://localhost:9000/")); 
      var conversationId = await connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount); 
      IMessageActivity message = Activity.CreateMessageActivity(); 
      message.From = botAccount; 
      message.Recipient = userAccount; 
      message.Conversation = new ConversationAccount(id: conversationId.Id); 
      message.Text = "Hello"; 
      message.Locale = "en-Us"; 
      await connector.Conversations.SendToConversationAsync((Activity)message); 

を作成し、私はそれがまた新しい会話を作成したユーザーから送信されたメッセージから同じ対話idを使用している場合。あなたがコントローラであり、あなただけの使用、ユーザーに返信したい場合は、この

IMessageActivity message = Activity.CreateMessageActivity(); 
      message.From = botAccount; 
      message.Recipient = userAccount; 
      message.Conversation = new ConversationAccount(id: "Conv1"); 
      message.Text = "Hello"; 
      message.Locale = "en-Us"; 
      await connector.Conversations.SendToConversationAsync((Activity)message); 

答えて

1

のように:あなたはダイアログ内であれば

var reply = activity.CreateReply(); 
reply.Text = "Hello"; 
await connector.Conversations.SendToConversationAsync(reply); 

、あなたはまだactivity.CreateReplyを使用することができます()しかし、私はcontext.PostAsync(返信)の代わりにコネクタを使用します。

ユーザーが送信したメッセージに返信する会話を作成する必要はありません。例えば

0

、あなたが

{ 
    "type": "message", 
    "timestamp": "2016-12-02T07:39:33.8503472Z", 
    "from": { 
    "id": "56800324", 
    "name": "Bot1" 
    }, 
    "conversation": { 
    "id": "8a684db8", 
    "name": "Conv1" 
    }, 
    "recipient": { 
    "id": "2c1c7fa3", 
    "name": "User1" 
    }, 
    "text": "Sorry. I don't know what you are talking about...", 
    "replyToId": "7cc6478627584aa497a209b4f284937e" 
} 

あなたのエミュレータでこのJSONデータを見ることができる会話IDは "8a684db8" ではなく、 "CONV1" でなければなりません。あなたは、以下のようにメッセージ(広告、イベント、窒化など)を送信するために、POSTメソッドの外にSendMessage()メソッドを作成することができます。

private void SendMeesge(string msg) 
{ 
    var userAccount = new ChannelAccount(name: "User1", id: "2c1c7fa3"); 
    var botAccount = new ChannelAccount(name: "Bot1", id: 56800324); 
    var connector = new ConnectorClient(new Uri("http://localhost:9000/")); 

    // conversationId for Real Bot 
    //var conversationId = connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount).Result; 

    // conversationId for Bot Emulator 
    var conversationId = _activityHistory.Conversation; 

    IMessageActivity message = Activity.CreateMessageActivity(); 
    message.From = botAccount; 
    message.Recipient = userAccount; 
    message.Conversation = new ConversationAccount(id: "8a684db8"); 
    message.Text = msg; 
    message.Locale = "en-Us"; 
    connector.Conversations.SendToConversationAsync((Activity)message); 
} 

あなたがエミュレータのための "8a684db8" を使用する必要がなく、紺碧に公開REAL BOTに "CreateDirectConversationAsync" を使用します。

Ezequielによると、POSTメソッドを使用していて、ボットがメッセージを受け取った後にユーザーに返信すると、この複雑な方法をとる必要はありません〜

関連する問題