首页 > 解决方案 > 操作返回了无效的状态代码“禁止”。机器人框架 v4

问题描述

所以我在 azure 中创建了一个机器人并下载了它。来自 LUIS 的 1000 次免费通话已达到上限。我在 azure 门户中创建了一个订阅(我确实做了 docker 容器)。遵循本指南直到第 6 步。当我单击端点 url 并直接在浏览器中查询时,它工作正常。

我通过 Bot Emulator 将其添加到机器人中,方法是单击 + 登录服务并在那里添加机器人模型。但是当我运行机器人时,我得到了标题错误。我注意到在 .bot 文件中,机器人模拟器添加的创作密钥和订阅密钥是相同的。

所以我将订阅密钥更改为 azure 生成的密钥之一,但仍然是同样的错误。我尝试重置创作密钥仍然相同并删除我的 luis.ai 帐户并创建一个新帐户。(仍然是相同的电子邮件,因为那是登录 azure 门户的电子邮件。)并且仍然相同。

这里有一些图片供参考和错误。

我还尝试在 luis.ai 中对其进行测试并得到了这个结果。 在此处输入图像描述

但是当我检查它设置为新资源时。 在此处输入图像描述

这是通过 Bot 模拟器添加 luis 后的 bot 文件图片。它具有相同的创作密钥和订阅密钥(仍然被禁止) 在此处输入图像描述

所以我现在用订阅密钥改变了它(仍然被禁止)。 在此处输入图像描述

直接在 URL 中测试时,它可以正常工作。 在此处输入图像描述

以供参考:

天蓝色门户 在此处输入图像描述

路易斯.ai 在此处输入图像描述

和错误 在此处输入图像描述

我如何在机器人中添加 luis。 在此处输入图像描述

这是机器人服务的代码。

using System;
using System.Collections.Generic;
using Microsoft.Bot.Builder.AI.Luis;
using Microsoft.Bot.Configuration;

namespace Microsoft.BotBuilderSamples
{
    public class BotServices
    {
        public BotServices(BotConfiguration botConfiguration)
        {
            foreach (var service in botConfiguration.Services)
            {
                switch (service.Type)
                {
                    case ServiceTypes.Luis:
                        {
                            var luis = (LuisService)service;
                            if (luis == null)
                            {
                                throw new InvalidOperationException("The LUIS service is not configured correctly in your '.bot' file.");
                            }

                            var endpoint = (luis.Region?.StartsWith("https://") ?? false) ? luis.Region : luis.GetEndpoint();
                            var app = new LuisApplication(luis.AppId, luis.AuthoringKey, endpoint);
                            var recognizer = new LuisRecognizer(app);
                            this.LuisServices.Add(luis.Name, recognizer);
                            break;
                        }
                }
            }
        }

        public Dictionary<string, LuisRecognizer> LuisServices { get; } = new Dictionary<string, LuisRecognizer>();
    }
}

我已经尝试解决这个问题 4 天了。谢谢!

标签: c#azurebotframeworkazure-language-understanding

解决方案


谢谢你所有的图片。这是一个巨大的帮助!这是问题所在:

默认情况下,您的代码会AuthoringKey在本节(第二行)中查找:

var endpoint = (luis.Region?.StartsWith("https://") ?? false) ? luis.Region : luis.GetEndpoint();
var app = new LuisApplication(luis.AppId, luis.AuthoringKey, endpoint);
var recognizer = new LuisRecognizer(app);
this.LuisServices.Add(luis.Name, recognizer);

由于您的.bot文件仍然authoringKey设置为以 开头的文件ad9c...,该文件已达到其限制,因此您的机器人不断遇到 403 错误。

因此,在您的.bot文件中,将其替换authoringKey为您endpointKey的 s 之一(它们以12ccc...or开头b575...)。

我理解您对此的困惑,特别是因为这需要您endpointKey在您的authoringKey财产中放置一个。我知道 LUIS 机器人使用密钥的方式即将发生一些变化,但这些变化可能需要一个月或更长时间。

或者,您可以更改:

var app = new LuisApplication(luis.AppId, luis.AuthoringKey, endpoint);

至:

var app = new LuisApplication(luis.AppId, luis.SubscriptionKey, endpoint);

注意:如果您进行这些更改中的任何一个,LUIS只能查询(这通常很好),因为创作密钥会执行其他所有操作(请参阅下面的参考)

参考

这些对你来说并不像其他可能遇到的那样多。

创作与端点密钥

关键限制

排除 LUIS 403 错误


推荐阅读