为每个客户提供独特渠道的多租户机器人

Multi-Tenant Bot with Unique Channel for every customer

我们正在构建一个机器人,它要求我们的每个客户都有自己的 SMS 渠道(他们唯一的 phone 号码)。从机器人框架的文档中我们可以看出,没有办法做到这一点。我们希望我们的每个客户都能够通过 twilio 将机器人添加到他们自己的短信号码。这可能吗?

From everything we can tell with the documentation of the bot framework is there is no way to do that.

是的,你是对的。

We want each of our customers to be able to add the bot to their own SMS number through twilio. Is this possible?

不,实际上这是不可能的:)

简而言之,BotFramework 由三部分组成:

  • 您的机器人逻辑是一个公开端点的 Web API 服务
  • 渠道(Skype、Facebook Messenger、SMS 等)
  • bot 连接器,您可以在其中通过指定端点和 bot 可用于对话的一个或多个不同通道来创建 bot。

因为每个通道只能与每个端点关联一次,因此每个机器人都不能通过机器人连接器进行多租户。

一种解决方案是通过 Web API 服务端通过为每个客户创建端点来创建多租户。可维护性将很困难,因为有多个端点,您最终会在 bot director 中管理相同数量的 bot。每个机器人都会关联到您的客户编号。

更新:(我没有测试,但我很确定它可以工作)

另一种解决方案是使用 DirectLine 通道及其公开的 Rest API。如果您选择此解决方案,则意味着您需要做很多事情才能在创建 Direct Line 渠道后使其正常工作:

  • 您必须创建一个客户端应用程序以通过其 REST API.
  • 与 Direct Line 通道通信
  • 每个客户都可以拥有自己的号码,您可以通过 Twilio 管理这些号码
  • 客户使用其短信号码发送并通过 Twilio 接收的每条消息都应触发对您的客户端应用程序服务的调用
  • 收到 SMS 后,您的客户端应用程序将开始与 Direct Line 频道的新对话。
  • 您的客户端应用程序启动的每个对话都必须通过保存状态来关注启动对话的 SMS 号码。每个对话和每个用户的机器人数据可以提供很大帮助。
  • 当您从 Direct Line Channel 收到回复时,您的客户端应用程序会读取存储在机器人数据中的 SMS 号码,并使用此号码回复相关客户。

希望对您有所帮助。

你绝对可以做到。

您实现了 ICredentialProvider,它负责通过 AppId 查找 appPassword 并验​​证密码是否正确。这意味着您可以拥有一个端点服务的机器人 AppId/Passwords 数据库,然后您查找 appid/secret 并验证调用。

[BotAuthentication(CredentialProviderType=typeof(SimpleCredentialProvider))]

这是一个简单的示例实现 https://docs.botframework.com/en-us/csharp/builder/sdkreference/d3/dde/_credential_provider_8cs_source.html