Реализация OAuth в командах MS и чат-ботах MSBotframeworkV4, вызывающих сбой адаптивной карты - PullRequest
1 голос
/ 10 января 2020

Связано с

Эта проблема связана с моей предыдущей публикацией, связанной с проблемой с MS Bot framework oAuth Authentication в MS Teams Chanel. Проверка подлинности OAuth начала работать, но я столкнулся с этой проблемой в результате предлагаемых изменений кода для включения проверки подлинности OAuth.

URL-адрес связанного сообщения: Кнопка входа запрашивает Учетные данные и успешно проходит проверку подлинности, но не входит в систему пользователя

Использовал следующий Git Пример кода концентратора в качестве основы для кода OAuth и был адаптирован к моему существующему ChatBot: https://github.com/microsoft/BotBuilder-Samples/tree/master/samples/csharp_dotnetcore/46.teams-auth

  • Упомянутая в вопросе иерархия классов похожа на приведенный выше пример кода.

Issue

Класс MainDialog в моем случае использует карты LUIS и Adaptive для управления диалоговым потоком.

В связи со следующим изменением в Класс DialogBot, параметр "options" в MainDialog .BeginDialogAsyn c переопределенный метод теперь получает NULL вместо правильного значения Раньше раньше, чем до он меняет.

Как метод MainDialog .BeginDialogAsyn c переопределен имеет весь код для определения возвращаемого значения адаптивной картой в параметрах " « paramater, теперь, когда он возвращается как null , адаптивные карты не работают.

Однако диалоговый лог LUIS c работает после успешной аутентификации OAuth из MS Team.

MainDialog.BeginDialogAsyn c (DialogContext outerD c, параметры объекта = null, CancellationToken cancellationToken = default (CancellationToken)) {....}

В соответствии с образцом oAuth Пример кода предоставлен на https://github.com/microsoft/BotBuilder-Samples/tree/master/samples/csharp_dotnetcore/46.teams-auth

  1. Я унаследовал DialogBot от TeamsActivityHandler .
  2. Реализация предложенного кода в методе TeamsBot.OnTeamsSigninVerifyStateAsyn c (ITurnContext turnContext, CancellationToken cancellationToken)

  3. внутри ов метод erridden DialogBot.OnMessageActivityAsyn c (ITurnContext turnContext, CancellationToken cancellationToken), Я заменил «a» на «b»

    а. await _dialog.Run (turnContext, _botStateService.DialogStateAccessor, cancellationToken);

    b. await _dialog.RunAsyn c (turnContext, ConversationState.CreateProperty (nameof (DialogState)), cancellationToken);

Простое изменение .Run (.. ..) to .RunAsyn c (....), вероятно, пропускает значение и делает код Adaptive Card неработоспособным из-за значения параметра "Опции" в MainDialog.BeginDialogAsyn c (..) метод

Когда это работает

В DialogBot.OnMessageActivityAsyn c (...) , когда я заменяю b с c затем параметр "опции" в MainDialog .BeginDialogAsyn c (...) начинает получать необходимое значение для работы кода адаптивной карты, но, , только если пользователь уже прошел проверку подлинности OAuth, т. е. при нажатии кнопки входа не требуется (но возникает другая проблема, упомянутая в «Когда это не работает» Рабочий раздел ")

b. await _dialog.RunAsyn c (turnContext, ConversationState.CreateProperty (nameof (DialogState)), cancellationToken);

c. await _dialog.Run (turnContext, ConversationState.CreateProperty (nameof (DialogState)), cancellationToken);

когда это не работает

После внесения изменений, упомянутых в разделе «Когда это работает» , если пользователь вводит любое высказывание, например «Привет», это вызывает исключение в DialogBot.OnTurnAsyn c (... .) метод. Эта ошибка продолжает появляться каждый раз, и я не могу продолжить разговор с ботом.

  • Исключение, когда пользователь вводит любое высказывание, т.е. когда пользователь еще не подписал его

enter image description here

  • Снимок экрана эмулятора бота при появлении вышеуказанного исключения

enter image description here

Как выглядит проблема

В этом сценарии аутентификации OAuth в командах MS определенно, что я путаюсь в управлении состоянием в координации с тем, как должен обрабатываться щелчок Adaptive Card Submit, т. Е. Чтобы получить предоставленные значения.

Потребуются входные данные для обработки этого сценария, когда MS-команда OAuth-аутентификация связана с чат-ботом, обслуживающим как LUIS NLP-основанный диалог, так и Adaptive Карты поток диалогов на основе

Дополнительная информация

  • Поток диалогов на основе адаптивных карт и LUIS работал до тех пор, пока не вышло изменение для исправления OAuth-аутентификации в MS-командах.
  • Использую HotSpot моего телефона для inte rnet без прокси.

1 Ответ

0 голосов
/ 30 января 2020

Выяснилось, что, когда мы вызываем await dialog.RunAsyn c (....) _ в классе DiallogBot , тогда значение Adaptive Card Submit Json равно доступно из externalD c .Context.Activity.Value вместо options параметр в publi c override Task BeginDialogAsyn c (....) событие MainDialog

Поэтому единственное изменение кода I сделал так, чтобы адаптивная функция отправки карты работала, т.е. после реализации аутентификации OAuth в ChatBot было следующее:

enter image description here

...