проблема с аутентификацией в командах бота: как сохранить вкладку принудительно открытой? - PullRequest
0 голосов
/ 06 июня 2019

Мы разработали бота на основе Virtual Assistant Solution Accelerator beta 0.3.Бот потребляется через Команды, и все в лазури.Через бота мы используем другие сервисы: office365 и Yammer.Пользователь проходит аутентификацию через OAuthPrompt в соответствии с кодом виртуального помощника.До недавнего времени все было хорошо.Но мы обнаружили во вторник утром, что у нас есть проблема для пользователей, которые еще не вошли в систему.

В процессе аутентификации при нажатии на кнопку входа в карточке oauthprompt открывается новая вкладка, подключаем пользователяи покажи магический код.Но теперь эта вкладка закрывается сразу после отображения кода, не позволяя пользователю копировать его в команды.

Если мы сразу откроем вкладку, код здесь и работает.Мы протестировали с Chrome, Firefox и Edge, тот же результат.Но на мобильном телефоне вкладка остается открытой.Мы тестировали оба через веб-приложение team app и groups.

Мой вопрос сейчас: есть ли способ сохранить открытую вкладку, когда она открыта в карточке в командах (тип действия openUrl).

1 Ответ

0 голосов
/ 07 июня 2019

Скорее всего, это связано с этой проблемой , в частности тем, что ваш тип действия - openUrl, когда он должен быть Signin, сейчас.

Использовали ли вы промежуточное ПО длязаставить его работать изначально?Промежуточное программное обеспечение будет выглядеть примерно так:

// hook up onSend pipeline
turnContext.OnSendActivities(async (ctx, activities, nextSend) =>
{
    foreach (var activity in activities)
    {
        if (activity.ChannelId != "msteams") continue;
        if (activity.Attachments == null) continue;
        if (!activity.Attachments.Any()) continue;
        if (activity.Attachments[0].ContentType != "application/vnd.microsoft.card.signin") continue;
        if (!(activity.Attachments[0].Content is SigninCard card)) continue;
        if (!(card.Buttons is CardAction[] buttons)) continue;
        if (!buttons.Any()) continue;

        // Modify button type to openUrl as signIn is not working in teams
        buttons[0].Type = ActionTypes.OpenUrl;
    }

    // run full pipeline
    return await nextSend().ConfigureAwait(false);
});

Недавно было обновление, которое сделало его таким, что вам больше не нужно промежуточное программное обеспечение.Вместо этого выполните следующие действия:

  1. Загрузите новейший образец
  2. Создайте своего бота с командами в редакторе манифестов App Studio
  3. В разделе «Домены и разрешения» убедитесь, что token.botframework.com был добавлен как действительный домен.
  4. Нажмите «Установить» и начните общаться с вашим ботом

Если вы проделали значительную работу со своим ботом и не хотите использовать новый образец, обновите все ваши пакеты до 4.4.4, и я считаю, что вы можете просто добавить это в начало вашего OnTurnAsync():

if (turnContext?.Activity?.Type == ActivityTypes.Invoke && turnContext.Activity.ChannelId == "msteams")
    await Dialog.Run(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
else
    await base.OnTurnAsync(turnContext, cancellationToken);

Если это не сработает, вы можете попробовать использовать это:

protected override async Task OnUnrecognizedActivityTypeAsync(ITurnContext turnContext, CancellationToken cancellationToken)
{
    if (turnContext?.Activity.Type == ActivityTypes.Invoke)
    {
        await turnContext.SendActivityAsync(
        new Activity()
        {
            Type = ActivityTypesEx.InvokeResponse,
            Value = null
        });
        await Dialog.Run(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
    }
}

Промежуточное программное обеспечение сделало так, чтобы карты в командах использовали Action.OpenUrl (который больше не работает) вместоAction.Signin (это то, что использует любой другой канал).


Для @SylvainBarbot вам также может потребоваться обновить ваши пакеты, как обсуждалось в этой проблеме

...