Botframework 允许聊天机器人使用多个Microsoft应用程序ID
我有一个在localhost上工作的聊天机器人,它工作得很好。然后,我在Azure上添加了一个新的Bot通道注册以进行测试,而且效果也不错。我通过获取它的Microsoft应用程序ID和密码并将其放入我的appsettings.json文件中实现了这一点 但是,我需要添加另一个Bot通道注册。当我在该注册上测试它时,我的bot返回一个错误。这是因为它有一个新的应用程序ID和密码。但是我已经在我的第一个注册频道中输入了应用程序ID和密码。我需要他们两个一起工作Botframework 允许聊天机器人使用多个Microsoft应用程序ID,botframework,azure-bot-service,Botframework,Azure Bot Service,我有一个在localhost上工作的聊天机器人,它工作得很好。然后,我在Azure上添加了一个新的Bot通道注册以进行测试,而且效果也不错。我通过获取它的Microsoft应用程序ID和密码并将其放入我的appsettings.json文件中实现了这一点 但是,我需要添加另一个Bot通道注册。当我在该注册上测试它时,我的bot返回一个错误。这是因为它有一个新的应用程序ID和密码。但是我已经在我的第一个注册频道中输入了应用程序ID和密码。我需要他们两个一起工作 如何允许我的聊天机器人接受多个应用I
如何允许我的聊天机器人接受多个应用ID和密码?或者,我如何完全摆脱这种安全级别(即允许所有应用程序ID和密码)?正如@Mick所建议的,答案是为每个频道创建一个机器人适配器。如果您希望它真正具有动态性,可以执行以下操作: BotController.cs
[HttpPost,HttpGet]
公共异步任务PostAsync()
{
var credentialProvider=new simpleredentialprovider(YourAppId,YourAppPassword);//对于每个适配器
适配器=新的BotFrameworkHttpAdapter(credentialProvider);//对于每个适配器
wait Adapter.ProcessAsync(请求、响应、Bot);
}
使用自定义ICredentialProvider
可以从任何位置检索appid和密码:
public class MultiCredentialProvider : ICredentialProvider
{
public Dictionary<string, string> Credentials = new Dictionary<string, string>
{
{ "YOUR_MSAPP_ID_1", "YOUR_MSAPP_PASSWORD_1" },
{ "YOUR_MSAPP_ID_2", "YOUR_MSAPP_PASSWORD_2" }
};
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());
}
}
公共类MultiCredentialProvider:ICredentialProvider
{
公共字典凭据=新字典
{
{“您的{MSAPP_ID_1”,“您的{MSAPP_密码{u 1}”,
{“您的_MSAPP_ID_2”,“您的_MSAPP_密码_2”}
};
公共任务IsValidAppIsync(字符串appId)
{
返回Task.FromResult(this.Credentials.ContainsKey(appId));
}
公共任务GetAppPasswordAsync(字符串appId)
{
返回Task.FromResult(this.Credentials.ContainsKey(appId)?this.Credentials[appId]:null);
}
公共任务IsAuthenticationDisabledAsync()
{
返回Task.FromResult(!this.Credentials.Any());
}
}
然后,在Startup.cs中:
services.AddSingleton<ICredentialProvider, MultiCredentialProvider>();
services.AddSingleton();
您使用的是C、JavaScript还是Python?您是否尝试过基于不同的应用程序ID创建多个适配器?例如,可以使用动态端点动态加载正确的端点<代码>/api/messages/{app_id}我正在使用dot-net。你能告诉我如何创建多个适配器吗?我可以为每个适配器分配自己的应用程序id和应用程序机密?你怎么说它可以从任何地方检索?如果您想从数据库加载它并注入一个作用域数据库存储库,您将得到一个错误,因为ICredentialProvider是一个单例类。有什么想法吗?依赖项注入库通常允许在单例中创建临时范围的依赖项。