Платформа Bot не может пройти аутентификацию с помощью Enterprise Bot

#c# #botframework

#c# #botframework

Вопрос:

В настоящее время я использую шаблон Enterprise Bot и не могу завершить диалоговое окно аутентификации. Каждый раз, когда я пытаюсь его вызвать, он возвращает сообщение токена и затем останавливает выполнение. Далее в водопаде не используются методы getToken (т. Е. я могу войти в систему и получить волшебный код, но когда я вставляю его в эмулятор для продолжения аутентификации, диалоговое окно останавливается).

Я попробовал образец AuthenticationBot с github, и он отлично работает. Я думаю, что это как-то связано с routerDialog и / или моим методом OnTurnAsync, но я понятия не имею, что это может быть. Редактировать:

 AddDialog(new WaterfallDialog(InitialDialogId, authenticate));
AddDialog(new OAuthPrompt(DialogIds.LoginPrompt, new OAuthPromptSettings()
            {
                ConnectionName = ConnectionName,
                Title = AuthenticationStrings.TITLE,
                Text = AuthenticationStrings.PROMPT,
            }));
private async Task<DialogTurnResult> PromptToLogin(WaterfallStepContext sc, CancellationToken cancellationToken)
        {
            return await sc.PromptAsync(AuthenticationResponses.ResponseIds.LoginPrompt, new PromptOptions());
        }
  
 var dc = await _dialogs.CreateContextAsync(turnContext);

    if (dc.ActiveDialog != null)
    {
        var result = await dc.ContinueDialogAsync();
        if (!turnContext.Responded)
        {
             // Start the Login process.
             await dc.ContinueDialogAsync();
        }
    }
    else
    {
        await dc.BeginDialogAsync(nameof(MainDialog));
    }
  

Это два блока кода, касающиеся аутентификации, куда будет отправлено действие.

Редактировать 2 / Решение: Просто хотел продолжить, я только что понял, чего мне не хватало. В основной файл bot.cs в OnTurnAsync мне нужно было добавить этот фрагмент кода и часть в конструкторе. Конструктор

 _dialogs.Add(new AuthenticationDialog(_services.AuthConnectionName));
  

OnTurnAsync

 if (!turnContext.Responded)
{
    await dc.BeginDialogAsync(nameof(AuthenticationDialog));
}
  

Комментарии:

1. Что произойдет после публикации волшебного кода, если вы отправите другое сообщение? Бот продолжает работу на этом этапе или он вообще остановился? Кроме того, можете ли вы опубликовать какой-либо соответствующий код, чтобы мы могли помочь в диагностике?

2. Стивен, да, после того, как я отправлю обратно волшебный код, он показывает значок ввода, а затем просто исчезает. Если я попытаюсь ввести больше после этого, ничего не произойдет.

3. Вы тестировали на каких-либо других каналах?

4. Нет, только эмулятор