Как исправить конфигурацию бота при переносе настроек из файла .bot в appsettings - PullRequest
1 голос
/ 04 июня 2019

Я столкнулся с проблемой при попытке развернуть моего бота в Azure.При попытке создать ресурсы Azure возникла следующая ошибка: error: InvalidBotData, message: Version: Bot Version has an invalid value. Я немного покопался и обнаружил, что мой бот версии 4.3, а теперь вам нужно 4.4 для развертывания…

Я обнаружил, что Mircosoftуже найдено решение проблемы, найденное здесь: https://docs.microsoft.com/bs-latn-ba/azure/bot-service/bot-file-basics?view=azure-bot-service-4.0&tabs=csharp Я следовал инструкциям, я также изменил способ вызова QnAmaker и Luis.Но когда я запускаю приложение, я получаю следующую ошибку: System.InvalidOperationException: Unable to resolve service for type 'VacancyBot.VacancyBot.Services.BotServices' while attempting to activate 'VacancyBot.VacancyBotBot'. Я понял, что бот больше нигде не добавлялся, поэтому я попытался добавить его с помощью services.AddSingleton<VacancyBotBot>(), но это не сработало.Добавление его в качестве временного также не работает.

Часть, которая обычно добавляет бота, такова:

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

var botConfig = BotConfiguration.Load(botFilePath ?? @".\nlp-with-luis.bot", secretKey);
services.AddSingleton(sp => botConfig ?? throw new InvalidOperationException($"The .bot config file could not be loaded. ({botConfig})"));

var connectedServices = new BotServices(botConfig);
services.AddSingleton(sp => connectedServices);

Но это больше не работает, потому что, как и было указано,. \ Nlp-with-luis.bot не может быть найден.(Я еще не удалил файл .bot по-настоящему, но теперь он им не пользуется, я думаю?).

Мне было интересно, знает ли кто-нибудь, как добавить бота или изменитьBotConfiguration таким образом, что это снова работает.Я очень надеюсь, что это возможно!Если кому-то нужно увидеть больше кода, пожалуйста, скажите об этом, и я постараюсь предоставить его (:

Я забыл добавить, что я пытался вернуть "botFilePath": "VacancyBot.bot", "botFileSecret": "", в файл appsettings, но в результате получаю ту же ошибку вСнова лазурь ...

1 Ответ

1 голос
/ 11 июня 2019

Файл .bot все еще можно использовать, но похоже, что вы пытаетесь использовать комбинацию файла .bot и appsettings.json.Давайте выпрямимся.

Начиная с appsettings.json: Вам больше не нужны botFilePath или botFileSecret.Вместо этого структурируйте ваш appsettings.json, как показано ниже:

{
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": "",
  "LuisAppId": "",
  "LuisAPIKey": "",
  "LuisAPIHostName": ""
}

MicrosoftAppId и MicrosoftAppPassword теперь извлекаются через файл ConfigurationCredentialProvider.cs, который позже будет добавлен как одиночный файл в Startup.cs.,ConfigurationCredentialProvider должен выглядеть следующим образом:

using Microsoft.Bot.Connector.Authentication;
using Microsoft.Extensions.Configuration;

namespace CoreBot1
{
    public class ConfigurationCredentialProvider : SimpleCredentialProvider
    {
        public ConfigurationCredentialProvider(IConfiguration configuration)
            : base(configuration["MicrosoftAppId"], configuration["MicrosoftAppPassword"])
        {
        }
    }
}

Коротко, мило и по существу.Наконец, структурируйте файл startup.cs, как показано ниже, чтобы добавить бота и ICredentialProvider:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Builder.Integration.AspNet.Core;
using Microsoft.Bot.Connector.Authentication;
using Microsoft.Extensions.DependencyInjection;

using CoreBot1.Bots;
using CoreBot1.Dialogs;

namespace CoreBot1
{
    public class Startup
    {
        public Startup()
        {
        }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            // Create the credential provider to be used with the Bot Framework Adapter.
            services.AddSingleton<ICredentialProvider, ConfigurationCredentialProvider>();

            // Create the Bot Framework Adapter with error handling enabled.
            services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();

            // Create the storage we'll be using for User and Conversation state. (Memory is great for testing purposes.)
            services.AddSingleton<IStorage, MemoryStorage>();

            // The Dialog that will be run by the bot.
            services.AddSingleton<MainDialog>();

            // Create the bot as a transient. In this case the ASP Controller is expecting an IBot.
            services.AddTransient<IBot, DialogAndWelcomeBot<MainDialog>>();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            app.UseDefaultFiles();
            app.UseStaticFiles();

            //app.UseHttpsRedirection();
            app.UseMvc();
        }
    }
}
...