操作返回了无效的状态代码“禁止”。 Botframework v4

时间:2019-03-05 21:42:32

标签: c# azure botframework luis

所以我用azure创建了一个机器人并下载了它。 LUIS的免费1000个呼叫已达到其限制。我在azure门户中创建了一个订阅(我确实做了docker容器)。跟随this guide直到第6步。当我单击端点URL并直接在浏览器中查询时,它运行正常。

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

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

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

我也尝试在luis.ai中对其进行测试,并获得了此结果。 enter image description here

但是当我检查它设置为新资源时。 enter image description here

这是通过Bot模拟器添加luis之后的bot文件的图片。它具有相同的创作密钥和订阅密钥(仍被禁止) enter image description here

所以我现在用订阅密钥更改了它(仍然禁止)。 enter image description here

在URL中直接测试时,它在这里正常工作。 enter image description here

供参考:

蓝色门户 enter image description here

luis.ai enter image description here

和错误 enter image description here

我如何在机器人中添加luis。 enter image description here

这是机器人服务的代码。

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天了。谢谢!

1 个答案:

答案 0 :(得分:2)

感谢您提供所有图片。那是巨大的帮助!问题出在这里:

默认情况下,您的代码在此部分(第二行)中查找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之一(它们以12ccc...b575...开头)。

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

或者,您可以更改:

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

收件人:

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

注意:如果您进行了这两项更改,LUIS只能 进行查询(通常很好),因为创作密钥会执行其他所有操作(请参见下面的参考资料)

参考文献

这些对您来说并不像其他可能遇到的那样重要。

Authoring vs. Endpoint Keys

Key Limits

Troubleshooting LUIS 403 Errors