Проблема веб-чата/прямой линии MS Bot Framework V3 — внутренняя ошибка сервера 500

Я новичок в C# и Bot Framework (V3), и меня попросили начать тестирование существующего бота в проекте, к которому я присоединился. Сам бот отлично работает на эмуляторе бота и при размещении в скайпе, но веб-чат на азуре почему-то не работает. Поскольку веб-чат использует прямую линию, это как бы приостанавливает выполнение тестов на данный момент. Я потратил много времени на изучение страницы V3 Github и здесь, на SO, но не смог найти решения.

Разговор, кажется, инициирует OK для начала, поскольку бот отправляет пользователю сообщение, но все ответы пользователя не отправляются, и бот отвечает сообщением об ошибке «Извините, у моего кода бота возникла проблема». Видеть -

Сообщение об ошибке бота

Azure перечисляет это как ошибку 500 — внутренняя ошибка сервера. видеть

Сообщения об ошибках в Azure

Сообщения об ошибках в Azure

Затем я просмотрел сообщения на вкладке Chrome Dev Tools и получил ту же ошибку, а также ошибку 502 и, совсем недавно (или я никогда не замечал этого раньше), также ошибку CORS. Видеть

Консоль Chrome Dev Tools

Консоль Chrome Dev Tools

После этого я использовал Application Insights в Azure, и для каждого экземпляра, когда я пытался использовать веб-чат, было три элемента;

  • CustomEvent (StatusCode: 200), предположительно для сообщения, которое бот отправляет в начале разговора.
  • Исключение с идентификатором задачи "System.Exception at Microsoft.Bot.ChannelConnector.BotAPI+d__31.MoveNext"
  • Другое пользовательское событие (StatusCode: 500)

Поскольку я не очень хорошо знаком со всей настройкой между C # и Bot Framework, я не совсем уверен, в чем проблема. Вот скриншот того, как выглядит сообщение об исключении:

Сообщения с одним идентификатором операции

Сообщения для одного идентификатора операции

Сведения об исключении (1)

Сведения об исключении (1)

Сведения об исключении (2)

Сведения об исключении (2)

Сведения об исключении (3)

Сведения об исключении (3)

Сведения об исключении (4)

Сведения об исключении (4)

У меня были некоторые мысли по поводу этих сообщений:

  1. «Внешняя сборка» описывается как «Microsoft.Bot.ChannelConnector, версия = 3.2.2.5, культура = нейтральная, PublicKeyToken = null» — означает ли отсутствие PublicKeyToken, что пользователю не назначается маркер из-за ошибка? Или это должно происходить сначала, а ошибка возникает из-за того, что у пользователя нет токена?
  2. Трассировка стека указывает на строку в одном из диалоговых файлов, но, глядя на код, я не могу понять, в чем проблема? На самом деле я удалил помеченный раздел, но он просто изменил строку в коде, где была проблема, на предыдущий раздел, поэтому я не совсем уверен, что с этим файлом вообще есть проблема?

Если у кого-то есть какие-либо мысли по этому поводу и в чем может быть причина проблемы, я был бы очень признателен.

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

  • Убедитесь, что при публикации профиля в Azure установлен флажок «Удалить все».
  • Убедитесь, что все пакеты обновлены (включая установку пакета bot.connector.directline, которого по какой-то причине еще не было)

person Conor Lawlor    schedule 20.03.2019    source источник
comment
Используете ли вы слот развертывания для тестирования? Кроме того, что бот использует для управления состоянием (хранилище таблиц, CosmosDb и т. д.)?   -  person Steven Kanberg    schedule 20.03.2019
comment
Эй, да, мы используем слот развертывания для тестирования. По сути, у нас есть два бота — тот, над которым я работаю, является тестовым ботом, — и каждый бот находится в слоте развертывания в другой службе приложений. Что касается вашего второго вопроса, я думаю, что он использует настройки по умолчанию для управления состоянием, но я не уверен, что это может быть. Я знаю, что мы используем CosmosDB для сохранения некоторых данных пользовательских разговоров, но я не знаю, то же самое для управления состоянием? Извините, если это бесполезно, я постараюсь попросить подтверждения у одного из людей, которые изначально создавали проект.   -  person Conor Lawlor    schedule 21.03.2019
comment
Хорошо, спасибо за эту информацию. Это все части головоломки. Новый вопрос: я вижу ошибки WebChat (включая ошибку CORS), ссылающиеся на ресурс «testboteurope». Однако данные Application Insights ссылаются на ресурс TestSlotNetHope. Вы пытаетесь получить доступ к одному ресурсу из другого?   -  person Steven Kanberg    schedule 21.03.2019
comment
Хорошо, насколько я понимаю, TestBotEurope — это наша служба приложений (AS), а затем TestSlotNetHope — это регистрация каналов ботов (BCR) со связанными Applications Insight. Я думал, что BCR был частью AS, учитывая, что все это для одного и того же бота, может ли это быть так? Учитывая, что я не очень хорошо знаком со всей настройкой проекта (включая Azure), это может быть неверным предположением.   -  person Conor Lawlor    schedule 21.03.2019
comment
Хорошо, есть несколько вещей, на которые я бы также посоветовал вам обратить внимание. Во-первых, убедитесь, что ваши боты не используют службу состояний для управления состоянием. Я вижу вызовы State Store к этой службе, однако несколько месяцев назад она устарела. Подробнее о State Service и альтернативных вариантах можно прочитать здесь: blog.botframework.com/2018/04/02/   -  person Steven Kanberg    schedule 24.03.2019
comment
Кроме того, вы упоминаете, что боты находятся в отдельных слотах развертывания, используя разные службы приложений. Есть большая вероятность, что это является причиной проблемы CORS. URI хост-веб-чата должен быть добавлен в качестве доверенного источника в канал прямой линии для рассматриваемого бота. Перейдите к боту, щелкните колонку «Каналы» и выберите «Прямая линия». Прокрутите страницу вниз и в разделе «Параметры расширенной проверки подлинности» добавьте URI и нажмите «Готово».   -  person Steven Kanberg    schedule 24.03.2019
comment
Наконец, возникли некоторые проблемы с Direct Line в центре обработки данных в Северной Европе. Ошибки длились несколько часов и совпадают с проблемами подключения вашего бота.   -  person Steven Kanberg    schedule 24.03.2019
comment
Привет Стивен, большое спасибо за эти предложения. Второй (CORS), кажется, сработал, но я проверю на обоих ботах, чтобы быть уверенным. Я также посмотрю, использует ли управление состоянием устаревшую службу, и внесу это изменение. Я сообщу вам через день или два, но я думаю, что вы решили мою проблему, поэтому большое спасибо, что нашли время, чтобы помочь мне.   -  person Conor Lawlor    schedule 25.03.2019


Ответы (1)


Таким образом, решение моей проблемы соответствовало предложениям Стивена Канберга в комментариях выше. Хотя наше управление состоянием использовало устаревшую версию (которая теперь обновлена), это была проблема CORS, вызванная тем, что боты находились в разных слотах развертывания для служб приложений. Как только URI сервисов приложений были добавлены в качестве Trusted Origins, проблема была решена. Спасибо Стивену Канбергу за всю помощь.

person Conor Lawlor    schedule 27.03.2019