c# botframework

c# - Cuando el usuario envía un mensaje a mi bot, recibe un mensaje de bienvenida. Pero cuando el usuario responde a eso, el bot envía nuevamente el mensaje de bienvenida. ¿Cómo puedo arreglar esto?



botframework (2)

Estoy desarrollando un chatbot usando Microsoft Bot Framework y recientemente actualicé el framework 3.0 a 3.5. antes de actualizar funcionaba bien pero ahora

Cuando el usuario envía un mensaje a mi bot, recibe un mensaje de bienvenida. Pero cuando el usuario responde a eso, el bot envía nuevamente el mensaje de bienvenida. ¿Cómo puedo arreglar esto? Aquí está el código.

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

Pero en el emulador local funciona bien mientras se publica solo esto está sucediendo. Por favor ayuda.


Creo que esto podría estar relacionado con un cambio que se implementó hace unos días; donde Direct Line enviará más mensajes ConversationUpdate de lo que solía.

Verifique el announcement y un problema relacionado (similar al suyo, pero en node.js ).

La primera ConversationUpdate se envía cuando se agrega el bot a la conversación. Después de eso, cada Actualización de ConversationUpdate adicional se envía cuando un nuevo usuario se une a la conversación.

Entonces, creo que la solución aquí será verificar los miembros agregados ( activity.MembersAdded )

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


Debe manejar eso dentro del diálogo principal utilizando operaciones de cambio basadas en la intención y también agregando diálogos para la intención relevante.

Hay una diferencia entre introducción y saludo.