首页 > 解决方案 > 如何在 Azure 中为多个机器人创建单个机器人框架 V4 C# 项目

问题描述

我们已经使用 Azure Bot Service(Bot Channels Registration)在 Teams 中实现了一个 bot。我们正在使用 MS Bot 框架 V4。目前,我们需要在 Azure 中为我们组织中的不同团队创建多个机器人。我们可以在 azure 门户中创建多个机器人,但是我们是否应该为 azure 中的多个机器人使用相同的现有机器人框架 V4 C# 项目(端点)。我参考了一个博客,他们提到我们可以实现 ICredentialProvider 来管理不同的应用程序 ID 和密码验证。但我找不到 C# bot 框架 V4 的任何文档或示例。能否请您帮忙,如果我采用错误的技术,是否还有其他方法可以实现这一目标。

以下是我到目前为止尝试过的步骤。首先创建了一个名为 MultiCredentialProvider 的 ICredentialProvider 实现,如下所示。

public class MultiCredentialProvider : ICredentialProvider
    {
        public Dictionary<string, string> Credentials = new Dictionary<string, string>
        {
            {"AppId1","Password1" },
            {"AppId2","Password2" }
        };

        public Task<bool> IsValidAppIdAsync(string appId)
        {
            return Task.FromResult(this.Credentials.ContainsKey(appId));
        }

        public Task<string> GetAppPasswordAsync(string appId)
        {
            return Task.FromResult(this.Credentials.ContainsKey(appId) ? this.Credentials[appId] : null);
        }

        public Task<bool> IsAuthenticationDisabledAsync()
        {
            return Task.FromResult(!this.Credentials.Any());
        }
    }

然后将以下行添加到 Startup.cs 类的 ConfigureServices 方法中。

services.AddSingleton<ICredentialProvider, MultiCredentialProvider>();

但它在执行时不起作用。请让我知道我们是否需要像下面那样在 BotController 中提供端点,并在 Azure 中更新相应所需的 Bot Channels Registration 中的端点?

[Route("api/messages/{appId}")]
[ApiController]

另外请告诉我,我们需要如何在身份验证后处理各个机器人的对话框?我在 Azure Bot 服务中注册了三个机器人,需要为不同的机器人调用不同的 LUIS 应用程序。有没有办法在执行期间获取 MainDialog.cs 类中的 appId 并基于 appId 编写路由逻辑,或者请告诉我处理这些不同机器人的对话框的最佳方法。另外请让我知道如何使用自适应对话框来处理它。在此先感谢您的帮助。

标签: c#asp.net-corebotframeworkazure-bot-service

解决方案


推荐阅读