使用 Bot Framework 通过 NodeJS 发布到 Microsoft Teams 频道

Posted

技术标签:

【中文标题】使用 Bot Framework 通过 NodeJS 发布到 Microsoft Teams 频道【英文标题】:Using the Bot Framework to post to a Microsoft Teams channel with NodeJS 【发布时间】:2020-09-14 00:11:15 【问题描述】:

有没有办法将主动卡片从机器人发送到团队频道?用例是服务票证的渠道。发布后,用户将能够通过一些操作与他们互动。

我正在查看 documentation here 以发送主动消息。在底部,有一个“创建频道对话”部分,并有一个小参考 startReplyChain()。但是,GitHub 上的实际代码和示例似乎仍然引用了与成员的对话,而不是主动向频道发送内容。

似乎确实有关于传入和传出 webhook 的文档,这就是我最终可能会做的事情。我唯一真正担心的是它需要使用可操作卡片,它在任何地方都将其引用为遗产。尽管说你不能和他们一起发送自适应卡片。也许他们打算让这些连接器发送自适应卡片,但我并不清楚这是否是我应该关注的长期解决方案。

【问题讨论】:

【参考方案1】:

这绝对是可能的,重要的是要注意,您甚至可以从另一个进程/应用程序发送(例如,按照来自 AWS Lamba 的计划)。您可以查看示例here。

发送消息的过程只是故事的一部分 - 您需要已经保存某些信息(例如在您的数据库中)才能知道如何联系正确的用户、群聊、或频道对话,但有几种方法可以获取该信息。最常见的是,当您将机器人添加到对话中时,从对话更新事件中获取它。你将需要对话 ID、服务 url、租户 ID 和你的机器人的应用 ID(你在 Azure 门户中为你的机器人获得的内容,以及你已经在应用配置、团队清单等中使用的内容)。您可以阅读有关主题here 和here 的更多信息。

如果您无权访问 conversationUpdate(例如,用户尚未安装您的应用),另一种选择是调用 Graph API 来安装您的应用。只能对频道(在 v1 或 beta api 上)(参见 here)或用户(参见 here)执行此操作,但仅在 beta api 上,而不是(还?)组聊天。

【讨论】:

如果我有这个权利,请告诉我。在proactiveBot.js 中,我们有this.onConversationUpdate() 方法,当将机器人添加到频道而不只是群聊时会调用该方法?然后,大概有某种方法可以判断它是一个频道,而不是一个聊天/用户。 是的,非常准确。对话更新在有效负载中有这样的部分(示例):“conversation”:“isGroup”:true,“conversationType”:“channel”,“tenantId”:“[tenant id]”,“id”:“[对话 id - 请注意,它的末尾可能有一个 ';messageid=',这可能是/可能不是你想要的]" ,你会查看 "conversationType" 以查看它是频道、群聊还是 1 -1 直接与机器人(应用)聊天。 另请注意,“proactiveBot.js”示例只是将所有内容存储在内存中 - 您可以将其放入现实世界中更具弹性的东西(数据库、blob 存储等) 太棒了。我认为我最大的困惑是“对话”这个术语,而 Bot Framework 不仅与 Teams 兼容。谢谢! 很高兴为您提供帮助。确实可能有点令人困惑,有些东西带有多个名称。不要忘记在 Azure 机器人服务中为团队“频道”设置你的机器人,以便你可以将其添加到团队中的频道:-)

以上是关于使用 Bot Framework 通过 NodeJS 发布到 Microsoft Teams 频道的主要内容,如果未能解决你的问题,请参考以下文章

使用 Bot Framework V4 在 Teams 中发送主动式 1:1 消息

在使用 Bot Framework 时,如何将 Skype 音频附件与 Bing Speech API 一起使用?

Microsoft Bot Framework 退出对话框

在公共领域托管 Bot(Microsoft Bot Framework)[重复]

Bot Framework:如何退出对话?

从 Web 客户端调用 Microsoft Bot Framework 机器人,无需在 Azure 上托管