我们开发了一个基于Virtual Assistant Solution Accelerator beta 0.3的机器人。 机器人是通过Teams消耗的,而且都是天蓝色的。 我们正在通过该机器人使用其他服务:office365和Yammer。用户根据虚拟助手代码通过OAuthPrompt进行身份验证。 直到最近,一切都还不错。但是我们在星期二早上发现,对于尚未登录的用户来说存在一个问题。
在身份验证过程中,单击oauthprompt卡中的登录按钮时,它将打开一个新选项卡,连接用户并显示魔术代码。但是现在,此选项卡在显示代码后立即关闭,从而防止用户将其复制到团队中。
如果我们紧接着重新打开选项卡,则代码在这里并且可以正常工作。 我们使用chrome,Firefox和edge进行了测试,结果相同。但是在移动设备上,该选项卡保持打开状态。我们通过Team App和Team Web App进行了测试。
我现在的问题是:当通过团队中的卡片打开动作时,我是否可以保持选项卡打开(动作类型为openUrl)。
答案 0 :(得分:0)
这可能与this issue有关,特别是您的操作类型现在为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);
});
最近进行了更新,因此您不再需要中间件。而是,请按照下列步骤操作:
token.botframework.com
添加为有效域。
https://token.botframework.com/.auth/web/redirect
启用Web应用程序单点登录如果您已经对机器人进行了大量工作,并且不想使用新的示例,请将所有软件包更新为4.4.4,我相信您可以将其添加到{{1} }:
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);
中间件做到了这一点,因此Teams中的牌使用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
(其他渠道使用)。
对于每个@SylvainBarbot,您可能还需要更新软件包,如this issue
中所述