ChatBot не работает после развертывания в Azure - внутренняя ошибка сервера - PullRequest
0 голосов
/ 27 марта 2019

Я развернул чат-бота с LUIS и QnA Maker.Он отлично работает локально, когда я запускаю его на эмуляторе.Он загружает адаптивные карты в начале чата, и я получаю правильные ответы от LUIS.

Однако при развертывании бота в Azure и его тестировании в веб-чате выдается следующая ошибка:

Произошла ошибка при отправке этого сообщения вашему боту: код состояния HTTP InternalServerError

Вот так выглядит мой web.config:

 <configuration>
  <appSettings>
    <!-- update these with your BotId, Microsoft App Id and your Microsoft App Password-->
    <add key="BotId" value="BotLuis" />
    <add key="MicrosoftAppId" value="9f9564ef-d627-450f-b943-98b7338c0f31" />
    <add key="MicrosoftAppPassword" value="myapp-password" />
  </appSettings>

Я получаю значения для AppID и AppPassword из настроек Applications веб-бота, который я создал в Azure.Я знаю, что они верны, поскольку я использовал эти значения для локальной настройки с помощью эмулятора.

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

Приложение Insight показывает следующее исключение:

Сбой POST для BotLuis: сбой POST для конечной точки бота с состоянием HTTP 500 Идентификатор проблемы: System.Exception в Microsoft.Bot.ChannelConnector.BotAPI + d__31.MoveNext

Консоль инструментов разработчика показывает это, когда я взаимодействую с ботом:

https://webchat.botframework.com/v3/directline/conversations/3NgflndFbpzCRDtnMdZpjf-g/activities 502 (Bad Gateway)

, если вы вставите вышеуказанную ссылку в браузер, это то, что выполучит:

{
 "error": {
 "code": "BadArgument",
 "message": "Missing token or secret"
        }
}

Я потерян в этот момент.Я могу понять проблему, но я не знаю, как идти вперед.Должен ли я добавить в мой код конечную точку обмена сообщениями моего бота?

Ссылка на github-репо кода: здесь

1 Ответ

1 голос
/ 01 апреля 2019

Государственная служба бота вышла на пенсию 31 марта 2018 года. Поэтому в вашем образце отсутствует хранилище состояний при его запуске в Azure, в то время как он будет работать локально.

Чтобы ваш пример работал, просто добавьте следующие строки в файл Global.asax.cs.

protected void Application_Start()
{
    RegisterBotDependencies();

    GlobalConfiguration.Configure(WebApiConfig.Register);

    var store = new InMemoryDataStore();

    Conversation.UpdateContainer(
               builder =>
               {
                   builder.Register(c => store)
                             .Keyed<IBotDataStore<BotData>>(AzureModule.Key_DataStore)
                             .AsSelf()
                             .SingleInstance();

                   builder.Register(c => new CachingBotDataStore(store,
                              CachingBotDataStoreConsistencyPolicy
                              .ETagBasedConsistency))
                              .As<IBotDataStore<BotData>>()
                              .AsSelf()
                              .InstancePerLifetimeScope();


               });
}

Обратите внимание, что этот образец использует хранилище InMemory и поэтому не предназначен для производственного использования. После публикации блога вы можете легко переключиться на хранилище Azure Table или CosmosDB.

Я клонировал ваш репозиторий, добавил эти строки кода и развернул его на новом экземпляре бота в Azure. Тест чата прошел успешно.

Краткое описание

Взятый сверху пост в блоге.

Мы поощряем разработчиков ботов, использующих Bot Framework, использовать какое-то время свой собственный сервис состояний. Стандартная служба Bot Framework State была предназначена только для создания прототипов и не предназначена для рабочих ботов. Государственная служба устареет 31 марта 2018 года и больше не будет поддерживаться. Разработчики ботов в будущем смогут создавать прототипы своих ботов, используя временную локальную память, как описано в этой статье. Создание собственной службы состояний для вашего бота дает множество преимуществ, включая улучшенную задержку и прямой контроль состояния разговора вашего бота и контекстной информации о состоянии разговора пользователя, и мы предоставили несколько ресурсов, которые помогут вам сделать это. Мы ценим отзывы, которые мы получили от сообщества разработчиков ботов, что очень помогло нам в улучшении Bot Framework в целом. Мы также надеемся, что сможем и впредь помогать вам - сообществу разработчиков ботов, создавать более качественные и удобные боты для ваших пользователей.

...