Связано с
Эта проблема связана с моей предыдущей публикацией, связанной с проблемой с 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
- Я унаследовал DialogBot от TeamsActivityHandler .
Реализация предложенного кода в методе TeamsBot.OnTeamsSigninVerifyStateAsyn c (ITurnContext turnContext, CancellationToken cancellationToken)
внутри ов метод 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 (... .) метод. Эта ошибка продолжает появляться каждый раз, и я не могу продолжить разговор с ботом.
- Исключение, когда пользователь вводит любое высказывание, т.е. когда пользователь еще не подписал его
- Снимок экрана эмулятора бота при появлении вышеуказанного исключения
Как выглядит проблема
В этом сценарии аутентификации OAuth в командах MS определенно, что я путаюсь в управлении состоянием в координации с тем, как должен обрабатываться щелчок Adaptive Card Submit, т. Е. Чтобы получить предоставленные значения.
Потребуются входные данные для обработки этого сценария, когда MS-команда OAuth-аутентификация связана с чат-ботом, обслуживающим как LUIS NLP-основанный диалог, так и Adaptive Карты поток диалогов на основе
Дополнительная информация
- Поток диалогов на основе адаптивных карт и LUIS работал до тех пор, пока не вышло изменение для исправления OAuth-аутентификации в MS-командах.
- Использую HotSpot моего телефона для inte rnet без прокси.