2017-01-24 12 views
1

私はMicrosoft Bot Frameworkを使用してチャットボットを開発しており、最近フレームワーク3.0を3.5にアップグレードしました。アップグレードする前にうまくいきましたが、今すぐユーザーがボットにメッセージを送信すると、ようこそメッセージが表示されます。しかし、ユーザーがそれに応答すると、ボットはウェルカムメッセージを再度送信します。これをどうすれば解決できますか?

ユーザーがボットにメッセージを送信すると、ウェルカムメッセージが届きます。しかし、ユーザーがそれに応答すると、ボットはウェルカムメッセージを再度送信します。 これを修正するにはどうすればよいですか?ここにコードがあります。

private Activity HandleSystemMessage(Activity message) 
     { 
      if (message.Type == ActivityTypes.DeleteUserData) 
      { 
       // Implement user deletion here 
       // If we handle user deletion, return a real message 
      } 
      else if (message.Type == ActivityTypes.ContactRelationUpdate) 
      { 
       // Handle conversation state changes, like members being added and removed 
       // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info 
       // Not available in all channels    
      } 
      else if (message.Type == ActivityTypes.ConversationUpdate) 
      { 
       // Handle conversation state changes, like members being added and removed 
       // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info 
       // Not available in all channels 
       logger.Debug("Activity Type " + message.Type); 
       logger.Debug("Inside conversation update and activity Id is :-"+ message.Id); 
       ConnectorClient connector = new ConnectorClient(new System.Uri(message.ServiceUrl)); 
       Activity reply = message.CreateReply(ConstantsTable.WelcomeMessage);         
       connector.Conversations.ReplyToActivityAsync(reply); 
       message.Type = ActivityTypes.Message;      
      } 
      else if (message.Type == ActivityTypes.ContactRelationUpdate) 
      { 
       // Handle add/remove from contact lists 
       // Activity.From + Activity.Action represent what happened 
      } 
      else if (message.Type == ActivityTypes.Typing) 
      { 
       // Handle knowing tha the user is typing 
       ConnectorClient connector = new ConnectorClient(new System.Uri(message.ServiceUrl)); 
       Activity reply = message.CreateReply("You are typing"); 
       connector.Conversations.ReplyToActivityAsync(reply); 
      } 
      else if (message.Type == ActivityTypes.Ping) 
      { 
       ConnectorClient connector = new ConnectorClient(new Uri(message.ServiceUrl)); 
       Activity reply = message.CreateReply("Hello PING. Please reply"); 
       connector.Conversations.ReplyToActivityAsync(reply); 
      } 

      return message; 
     } 

しかしローカルエミュレータでは、これだけが公開されている間は問題ありません。 助けてください。

+1

? –

+0

私はそれを公開したウェブチャットのリンクです。 – Sandy

+0

@ Sandyユーザーがページを再読み込みするたびに、特にWebchatのボットフレームワークでは、 'ConversationUpdate'アクティビティを起動します。だから毎回、彼は同じような歓迎メッセージを得るでしょう。 Channel Id'activity.ChannelId'とUserID 'activity.From.Id'を使用して、ユーザーの状態値に基づいて処理できます。 –

答えて

3

これは、数日前に公開された変更に関連する可能性があると私は信じています。 Direct Lineはこれまでより多くのメッセージをConversationUpdateに送信します。

announcementrelated issue(あなたと似ていますが、node.js)を確認してください。

最初のConversationUpdateは、ボットが会話に追加されたときに送信されます。 その後、新しいユーザーが会話に参加すると、それぞれ追加のConversationUpdateが送信されます。 uは、問題を見ているどのチャンネルで

だから、私はここでの解決策は、メンバーが(activity.MembersAdded)追加チェックするためになると思う

else if (message.Type == ActivityTypes.ConversationUpdate) 
    { 
     if (message.MembersAdded.Any(o => o.Id == message.Recipient.Id)) 
     { 
      // logic 
     } 
    } 
+1

あなたは正しいです!私は週にこの問題に直面していませんでした。ありがとう!私はすでにそれを行い、activity.memeberAddedであなたに知らせようとしています。私のケースでは – Sandy

+0

ボットは2つの挨拶メッセージを送信していました。 – shabby

関連する問題