团队之间的通信和通过 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
中结束。 (所以基本上是 Teams
和 Web Chat
之间的通信)
执行此操作的最佳方法是什么?
我正在考虑在 Azure 中使用后端,但我不知道可以使用什么以及是否可能。
我的想法是:
一条消息已发送 Web Chat
。在代码中,我会将 Web Chat Conversation
信息上传到 Azure
。同样在 Teams 中,现在有在 Web Chat
中编写的相同消息。 Teams
中的会话 ID 现在也需要上传,并且 Web Chat
发送到的会话 ID 需要更新(这是必需的,因此没有垃圾邮件发送新的 threads/messages来自一个对话的 Teams
和来自这个 Web Chat
对话的所有消息现在都在一个线程中。)现在通过 Teams
在 Web Chat
的对话中回答我会写和发送答案。在发送答案之前,我需要 Web Chat
中的对话 ID。因此 Bot 会从 Azure
下载信息,这样它就知道必须将答案发送到哪里。
这是一个很好的方法还是你知道更好的方法?另外,我可以使用 Azure 中的哪些资源来实现这一目标?
听起来您的思考方式是正确的。基本上,您希望将两个对话引用(一个在 Teams 中,另一个在 Web Chat 中)配对在一起,然后在两者之间转发消息。
BotFramework SDK v4 (C#)
我建议创建两个函数 - AddConversationReferenceAsync
和 GetConversationReferenceAsync
。在这些功能中,您应该管理存储、连接和检索对话引用的方式。您可以检查频道 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 中的对话,这可能会有帮助。
希望对您有所帮助!
我用 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
中结束。 (所以基本上是 Teams
和 Web Chat
之间的通信)
执行此操作的最佳方法是什么?
我正在考虑在 Azure 中使用后端,但我不知道可以使用什么以及是否可能。
我的想法是:
一条消息已发送 Web Chat
。在代码中,我会将 Web Chat Conversation
信息上传到 Azure
。同样在 Teams 中,现在有在 Web Chat
中编写的相同消息。 Teams
中的会话 ID 现在也需要上传,并且 Web Chat
发送到的会话 ID 需要更新(这是必需的,因此没有垃圾邮件发送新的 threads/messages来自一个对话的 Teams
和来自这个 Web Chat
对话的所有消息现在都在一个线程中。)现在通过 Teams
在 Web Chat
的对话中回答我会写和发送答案。在发送答案之前,我需要 Web Chat
中的对话 ID。因此 Bot 会从 Azure
下载信息,这样它就知道必须将答案发送到哪里。
这是一个很好的方法还是你知道更好的方法?另外,我可以使用 Azure 中的哪些资源来实现这一目标?
听起来您的思考方式是正确的。基本上,您希望将两个对话引用(一个在 Teams 中,另一个在 Web Chat 中)配对在一起,然后在两者之间转发消息。
BotFramework SDK v4 (C#)
我建议创建两个函数 - AddConversationReferenceAsync
和 GetConversationReferenceAsync
。在这些功能中,您应该管理存储、连接和检索对话引用的方式。您可以检查频道 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 中的对话,这可能会有帮助。
希望对您有所帮助!