【问题标题】:When user sends message to my bot, he receives Welcome message. But when user respond to that, bot sends Welcome message again. How can I fix this?当用户向我的机器人发送消息时,他会收到欢迎消息。但是当用户对此做出回应时,机器人会再次发送欢迎消息。我怎样才能解决这个问题?
【发布时间】:2019-01-29 22:25:04
【问题描述】:

我正在使用 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;
        }

但是在本地模拟器中它工作正常,而只发布这种情况。 请帮忙。

【问题讨论】:

  • 您在哪个渠道看到问题?
  • 这是我发布的网络聊天链接。
  • @Sandy 每当用户重新加载页面时,在机器人框架中,尤其是对于 Webchat,它将触发活动ConversationUpdate。因此,每次他都会收到相同的欢迎信息。您可以使用 Channel Idactivity.ChannelId 和 UserID activity.From.Id 根据用户状态值来处理它。

标签: c# botframework


【解决方案1】:

我认为这可能与几天前推出的更改有关; Direct Line 将发送比以往更多的ConversationUpdate 消息。

检查announcementrelated issue(与您的类似,但在node.js 中)。

第一个 ConversationUpdate 在机器人添加到对话时发送。 之后,当有新用户加入对话时,每增加一个ConversationUpdate 就会发送一次。

所以,我认为这里的解决方案是检查添加的成员 (activity.MembersAdded)

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

【讨论】:

  • 你是对的!一周前我没有遇到这个问题。谢谢!我已经完成了,并且即将通过 activity.memeberAdded 通知您。
  • 在我的例子中,Bot 发送了两条问候消息,这个额外的 id 检查解决了这个问题
  • 这在我发送 IForm 时不起作用,而且我总是得到“不是首选语言选项。”,有什么想法吗?
  • 我正在使用相同的方法,但除非用户发起对话,否则不会发送欢迎消息。我正在使用与网络机器人聊天应用程序的直接线路。有什么想法吗?
【解决方案2】:

您需要使用基于意图的切换操作在主对话框中处理该问题,并为相关意图添加对话框。

介绍和问候是有区别的。

【讨论】:

    猜你喜欢
    • 2021-02-22
    • 2022-01-23
    • 2020-01-22
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2021-11-12
    • 2021-10-05
    相关资源
    最近更新 更多