操作返回了一个无效的状态码“Forbidden”。Botframework v4。

3
我在Azure中创建了一个机器人并将其下载下来。LUIS的免费1000次调用已经达到了限制。我在Azure门户中创建了一个订阅(我确实做了Docker容器之类的东西)。按照此指南执行步骤6时,当我在浏览器中单击终结点URL并直接查询时,它可以正常工作。
我通过Bot Emulator将其添加到机器人中,方法是在服务中点击+号并添加机器人模型。但是当我运行机器人时,出现标题错误。我注意到在.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 供参考: Azure门户 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天了。谢谢!


你能分享一下初始化 LuisApplication 的代码吗?你可以在这里找到一个例子。 - Mick
谢谢您的回复。我已经更新了问题,加入了Luis应用程序的机器人服务。 - user10860402
你能验证一下吗?从你的机器人文件中删除那些Luis条目。添加一个新的,确保你使用以12cccb575开头的终端点密钥。根本不要使用以ad9c开头的创作密钥。你还是遇到了403错误吗? - mdrichardson
我认为值得一提的是,我创建了一个新的luis.ai帐户,使用免费的入门密钥和无订阅密钥,它可以正常工作。 - user10860402
我忘记了你是通过模拟器添加LUIS端点的,这种方式不会询问你要使用哪个密钥。如果那些图片是准确的,你需要在.bot文件中更新密钥。在LUIS条目中,它正在使用你的authoringKey(ad9c...),而应该使用你的一个endpointKey(12ccc...b575...)。请在你的.bot文件中替换它们,然后告诉我结果如何。 - mdrichardson
显示剩余4条评论
1个回答

3
感谢您提供的所有图片,这非常有帮助!但存在一个问题:
默认情况下,您的代码会在此部分(第二行)查找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文件中,用其中一个endpointKey(它们以12ccc...b575...开头)替换那个authoringKey
我理解你对此感到困惑,特别是这需要你将一个endpointKey放入authoringKey属性中。我知道LUIS机器人如何使用密钥方面可能会有一些变化,但这可能还需要一个月或更长时间。
或者,你可以进行更改:
var app = new LuisApplication(luis.AppId, luis.AuthoringKey, endpoint);

到:

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

注意:如果您进行了这些更改之一,LUIS 只能查询(通常没问题),因为作者密钥可以完成其他所有操作(请参见下面的参考资料)。
参考资料:
这些不是给您而是给可能遇到此类情况的其他人。 编写与终结点密钥 密钥限制 故障排除 LUIS 403 错误

1
顺便问一下,先生能否检查一下聊天记录。在机器人模拟器中的每条消息前面都会出现一些东西。 - user10860402
我的感谢评论不见了。再次感谢您,先生。 - user10860402
已在聊天中回复。 - mdrichardson
先生,您能否看一下这个Messenger位置快速回复的问题?谢谢!https://stackoverflow.com/questions/55356005/luis-conflict-with-messengers-location-quick-reply - user10860402

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接