团队之间的通信和通过 Bot 进行的网络聊天

Communication between Teams and Web Chat via Bot

我用 https://portal.azure.com 创建了一个 QnA Bot

我还设法将消息从 Bot Framework Emulator 发送到 MS Teams 和机器人的 Test Web Chat。 (尽管目前它是非常静态的并且是手动完成的)

我的 Token 来自 https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token。有了 Token,我可以向 https://smba.trafficmanager.net/emea/v3/conversations/ConversationID/activities(即 Teams)发送消息,并且可以向 https://webchat.botframework.com/v3/conversations/ConversationID/activities(即 Test Web Chat)发送消息。

有点跑题:因为我是 Azure 的新手,所以我想知道到目前为止所做的一切是好的还是完全错误的?

总之...

到目前为止,我的目标是在 Test Web Chat 中写消息时,消息也应该在 MS Teams 中结束。然后从 Teams 我想回复 @Bot This is my Answer 这样的消息。 Teams 中的这个答案也应该在 Test Web Chat 中结束。 (所以基本上是 TeamsWeb Chat 之间的通信)

执行此操作的最佳方法是什么?

我正在考虑在 Azure 中使用后端,但我不知道可以使用什么以及是否可能。

我的想法是:

一条消息已发送 Web Chat。在代码中,我会将 Web Chat Conversation 信息上传到 Azure。同样在 Teams 中,现在有在 Web Chat 中编写的相同消息。 Teams 中的会话 ID 现在也需要上传,并且 Web Chat 发送到的会话 ID 需要更新(这是必需的,因此没有垃圾邮件发送新的 threads/messages来自一个对话的 Teams 和来自这个 Web Chat 对话的所有消息现在都在一个线程中。)现在通过 TeamsWeb Chat 的对话中回答我会写和发送答案。在发送答案之前,我需要 Web Chat 中的对话 ID。因此 Bot 会从 Azure 下载信息,这样它就知道必须将答案发送到哪里。

这是一个很好的方法还是你知道更好的方法?另外,我可以使用 Azure 中的哪些资源来实现这一目标?

听起来您的思考方式是正确的。基本上,您希望将两个对话引用(一个在 Teams 中,另一个在 Web Chat 中)配对在一起,然后在两者之间转发消息。

BotFramework SDK v4 (C#)

我建议创建两个函数 - AddConversationReferenceAsyncGetConversationReferenceAsync。在这些功能中,您应该管理存储、连接和检索对话引用的方式。您可以检查频道 ID - activity.ChannelId - 以确定您希望如何处理引用。然后在 OnMessageActivityAsync 中您可以添加和检索相应的对话引用以向其他频道发送主动消息。

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    AddConversationReferenceAsync(turnContext.Activity as Activity);
    var conversationReference = GetConversationReferenceAsync(turnContext.Activity as Activity);

    if (conversationReference != null) {
      await turnContext.Adapter.ContinueConversationAsync(_appId, conversationReference, (ITurnContext context, CancellationToken cancellationToken) => {
        await context.SendActivityAsync(turnContext.Activity);
      }, cancellationToken);
    } else {
      await turnContext.SendActivityAsync("You are not connected to anyone at the moment");
    }
}

屏幕截图

我建议查看 BotBuilder Proactive Messaging sample, and @tompaana built a Hunan Handoff Bot 示例,该示例连接 Teams 和 Slack 中的对话,这可能会有帮助。

希望对您有所帮助!