Скорее всего, это связано с этой проблемой , в частности тем, что ваш тип действия - 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);
});
Недавно было обновление, которое сделало его таким, что вам больше не нужно промежуточное программное обеспечение.Вместо этого выполните следующие действия:
- Загрузите новейший образец
- Создайте своего бота с командами в редакторе манифестов App Studio
- В разделе «Домены и разрешения» убедитесь, что
token.botframework.com
был добавлен как действительный домен. - Нажмите «Установить» и начните общаться с вашим ботом
Если вы проделали значительную работу со своим ботом и не хотите использовать новый образец, обновите все ваши пакеты до 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 вам также может потребоваться обновить ваши пакеты, как обсуждалось в этой проблеме