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.