Botframework Bot通道注册-向您的Bot发送此消息时出错:HTTP状态代码未经授权

Botframework Bot通道注册-向您的Bot发送此消息时出错:HTTP状态代码未经授权,botframework,asp.net-core-webapi,azure-service-fabric,Botframework,Asp.net Core Webapi,Azure Service Fabric,我正在构建一个聊天机器人,它将与团队或Slack进行集成。首先,我使用echo bot模板,但我将它添加到我的服务结构集群中现有的API中 当在本地运行应用程序时,我可以从Bot Emulator很好地连接到它,但当我将它部署到我的Azure频道注册中,并在web聊天中测试它时,我得到: 将此消息发送到您的bot时出错:HTTP状态代码未经授权 我正在设置AppID和密码,它们将被保存并从KeyVault检索,如果其中任何一个值为空(事实并非如此),我将在启动时引发异常 我设定如下: servi

我正在构建一个聊天机器人,它将与团队或Slack进行集成。首先,我使用echo bot模板,但我将它添加到我的服务结构集群中现有的API中

当在本地运行应用程序时,我可以从Bot Emulator很好地连接到它,但当我将它部署到我的Azure频道注册中,并在web聊天中测试它时,我得到:

将此消息发送到您的bot时出错:HTTP状态代码未经授权

我正在设置AppID和密码,它们将被保存并从KeyVault检索,如果其中任何一个值为空(事实并非如此),我将在启动时引发异常

我设定如下:

services.AddBot<EchoBot>(options =>
            {
                options.CredentialProvider = new SimpleCredentialProvider(Configuration["MicrosoftAppId"], Configuration["MicrosoftAppPassword"]);
                options.OnTurnError = async (context, exception) =>
                {
                    ServiceEventSource.Current.Message(exception.Message);
                    await context.SendActivityAsync("Sorry, it looks like something went wrong.");
                };
            });
services.AddBot(选项=>
{
options.CredentialProvider=新的SimpleCredentialProvider(配置[“MicrosoftAppId”]、配置[“MicrosoftAppPassword”]);
options.OnTurnError=异步(上下文,异常)=>
{
ServiceEventSource.Current.Message(exception.Message);
wait context.SendActivityAsync(“抱歉,看起来好像出了问题。”);
};
});
我添加了一个teams频道,在那里不会发生错误,但是消息永远不会到达服务器

服务是可访问的,并且在测试过程中,控制器允许未经授权的凭据。

解决了我自己的问题。 事实证明,如果您使用的是自签名证书,那么根据找到的Microsofts文档,可能会发生这种情况-

如果聊天窗口中显示一个或多个错误,请单击该错误以了解详细信息。共同问题包括:

  • 仿真程序设置为bot指定了不正确的端点。确保在URL中包含正确的端口号,并在URL末尾包含正确的路径(例如,/api/messages)
  • emulator设置指定以https开头的bot端点。在localhost上,端点应该以http开头
  • 在emulator设置中,Microsoft App ID字段和/或Microsoft App密码不包含有效值。应填充这两个字段,并且每个字段应包含在步骤2中验证的相应值
  • 尚未为bot启用安全性。验证bot配置设置是否同时指定应用程序ID和密码的值
吸取的教训

  • 读医生的

  • 当你感到沮丧时,冷静下来读医生的报告


请查看此示例:此处共享的代码中的services.AddBot是一个不同的di配置。我首先尝试了这种方式,但没有成功。