QnA Maker Bot 在 Teams 私人聊天中工作,但在团队中提到时没有答案

QnA Maker Bot working in Teams private chats, but no answers when mentioned in team

我在 qnamaker.ai 配置了一个知识库,发布了它,并使用 Azure 机器人服务创建了一个机器人。

在 Teams 中,我创建了一个新的机器人应用程序并将其与已部署的机器人相关联。该机器人可用于私人聊天、群聊和团队。

但要与机器人对话,必须提到它,那么这里的问题在哪里?

更新:

感谢 Hilton 在下面的回答,我注意到当您下载 bot 源代码(在我的例子中,它是一个 dotnet 核心项目)时,README.MD 文件说明了这个问题 以及如何修复它:

Microsoft Teams channel group chat fix

  • Goto Bot/QnABot.cs
  • Add References
    using Microsoft.Bot.Connector;
    using System.Text.RegularExpressions;
    
  • Modify OnTurnAsync function as:
    public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default)
        {
            // Teams group chat
            if (turnContext.Activity.ChannelId.Equals(Channels.Msteams))
            {
                turnContext.Activity.Text = turnContext.Activity.RemoveRecipientMention();
            }
    
            await base.OnTurnAsync(turnContext, cancellationToken);
    
            // Save any state changes that might have occurred during the turn.
            await ConversationState.SaveChangesAsync(turnContext, false, cancellationToken);
            await UserState.SaveChangesAsync(turnContext, false, cancellationToken);
        }
    

如果您检查第一条消息中返回的文本,它将是“部署 cosmosdb”。但在第二条消息中,它将是 QnAMaker 正在努力解析的“CS Bot deploy cosmosdb”。在将查询文本传递给 QnAMaker 之前,您要做的是从文本中完全删除提及的“@”。

这是一个常见的问题,所以Bot Framework已经有方法来处理这个问题。您没有提到您正在开发的平台,但这里有一个 link for dotnet 到 RemoveRecipientMention 方法。我很确定在 Node 等上有一个等价物

最终效果是将您的 Activity 的文本转换为在两种情况下相同,这将导致 QnAMaker 的响应相同。