背景 - 我们有一个 SaaS 应用程序,托管许多客户,对我们来说,客户环境隔离是我们的首要任务(出于明显的安全原因)。
对于这个 SaaS 应用程序,我们目前正在构建一个 MS 团队机器人/集成。计划是客户将在 ms 团队市场上找到此应用程序,他们将安装它并将其帐户与机器人连接以在其团队渠道/dms 上接收警报等。
问题-
机器人注册需要我们提供一个 URL,Azure 机器人将在其中转发从 MS 团队收到的事件。 (用户将机器人添加到团队或个人范围,用户尝试一些命令等事件)
因此,我们需要以某种方式跟踪请求来自哪个客户团队实例,以及我们必须将其转发给哪个客户。
我认为实现这一目标的唯一方法是使用 lambda + postgres 来跟踪 to 之间的映射。
我们有办法摆脱数据库吗?也许我们可以在团队中安装应用程序时存储一些额外的上下文,并且每个请求都可以携带该数据,lambda 可以使用这些数据来路由事件。
MS Teams 的团队 ID 是唯一的吗?
提前谢谢各位!
绝对有可能在机器人中获取您正在寻找的信息。作为接收用户消息的一部分,基于 Bot Framework SDK 的应用程序会接收一个
turnContext
对象,该对象又包含 activity
属性。在活动之外,您可以找到用户的唯一 Azure AD 用户 ID、电子邮件地址和显示名称等信息。它还包含租户 ID,因此您可以使用它来区分来自不同租户的消息。最后,它存储频道信息,以便您可以确定当时可以在哪个团队和哪个频道中使用机器人(显然,如果机器人在群聊或 1-1 对话中使用,则这不适用)。
除此之外,还可以使用 SDK 请求其他数据,例如团队中其他频道的列表等 - 请参阅 https://learn.microsoft.com/en-us/microsoftteams/ platform/bots/how-to/get-teams-context?tabs=dotnet 了解更多。
关于在数据库中存储数据,这完全取决于您和您的应用程序 - 您可以选择存储(或不存储)您想要的任何内容,无论您想要什么后端,例如blob 或文件存储 - 本身没有特定的要求 拥有数据库。