【问题标题】:Directline/Web chat channel error: HTTP status code ForbiddenDirectline/Web 聊天频道错误:HTTP 状态码 Forbidden
【发布时间】:2019-02-13 12:47:15
【问题描述】:

我在聊天机器人中发送消息时遇到问题。我已采取以下步骤来创建聊天机器人。

  • 使用 Bot 框架 SDK v-4 创建机器人并发布到 Azure
  • 创建了 Bot Channels Registrations 并注册了 App ID
  • 在 Azure 中我的机器人服务 API 的应用设置中包含机器人通道的 AppID 和密码
  • 使用 botchat-es5.js(es-5 版本)创建了一个 Web 客户端

当我键入并发送消息(使用 Web 客户端)时,我的浏览器控制台上出现以下错误(代码错误 502)。

发布https://directline.botframework.com/v3/directline/conversations/7IqYgcAzBp4EObQvFzK2fF/activities 502(错误网关)

Directline 和 Web 聊天频道日志将错误消息显示为

向您的机器人发送此消息时出错:HTTP 状态代码 禁止

下面是请求头的详细信息。

以下是 Bot 配置 (.bot) 文件的详细信息。请注意,App ID 和 Password 为空,如果这是问题所在?

{
  "name": "Chatbot",
  "services": [
    {
      "type": "endpoint",
      "name": "development",
      "endpoint": "http://localhost:3978/api/messages",
      "appId": "",
      "appPassword": "",
      "id": "1"
    },
    {
      "type": "endpoint",
      "name": "production",
      "endpoint": "https://<my_app_name>.azurewebsites.net/api/messages",
      "appId": "<YOUR APP ID>",
      "appPassword": "<YOUR APP PASSWORD>",
      "id": "2"
    }
  ],
  "padlock": "",
  "version": "2.0"
}

我尝试在不同的订阅上重新创建所有这些,但我得到了同样的错误。我有另一个正在运行的机器人,如果我在同一个 Web 客户端中使用该机器人的 Directline 通道密钥,它可以正常工作。

我查找了一些在线参考资料,但没有帮助。如果我遗漏了什么,有人可以帮我吗?如果我可以提供更多详细信息,请告诉我。

【问题讨论】:

  • 在您的.bot 文件中,您需要为您的生产端点设置appIdappPassword。 403 Forbidden 错误几乎总是与 appId/password 相关。您使用什么方法来部署/发布您的机器人?我可以帮助您完成部署步骤。

标签: botframework azure-bot-service direct-line-botframework


【解决方案1】:

如果您的 bot 使用 integration 库,则使用 .bot 文件的启动代码通常具有以下内容(除其他外):

var secretKey = Configuration.GetSection("botFileSecret")?.Value;
var botFilePath = Configuration.GetSection("botFilePath")?.Value;

BotConfiguration botConfig = BotConfiguration.Load(botFilePath, secretKey);

var environment = _isProduction ? "production" : "development";
var service = botConfig.Services.FirstOrDefault(s => s.Type == "endpoint" && s.Name == environment);

services.AddBot<BasicBot>(options =>
{
    options.CredentialProvider = new SimpleCredentialProvider(endpointService.AppId, endpointService.AppPassword);

    //other code
}

请注意从机器人文件 AppId 和 AppPassword 创建的凭据提供程序。这个 appid 和 apppassword 可以改为从应用设置中检索,例如:

options.CredentialProvider =  new SimpleCredentialProvider(Configuration[MicrosoftAppCredentials.MicrosoftAppIdKey],
                                                      Configuration[MicrosoftAppCredentials.MicrosoftAppPasswordKey]);

注意:你的端点也应该是正确的:

"endpoint": "https://<my_app_name>.azurewebsites.net/api/messages",

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2016-02-23
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    相关资源
    最近更新 更多