2017-01-24 1 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 сообщений, чем раньше.

Проверьте announcement и related issue (аналогичный вашему, но в node.js).

Первый ConversationUpdate отправляется, когда бот добавляется в разговор. После этого каждый дополнительный ConversationUpdate отправляется, когда новый пользователь присоединяется к разговору.

Так что, я думаю, что решение здесь будет проверить члены добавил (activity.MembersAdded)

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

Вы правы! Я не сталкивался с этой проблемой неделю назад. Благодаря! Я уже делал это и собираюсь сообщить вам с activity.memeberAdded. – Sandy

+0

в моем случае Bot посылал два приветственных сообщения, этот дополнительный идентификатор проверял это – shabby

Смежные вопросы