Это, вероятно, связано с этой проблемой .
Использовали ли вы промежуточное программное обеспечение для того, чтобы оно работало изначально?Промежуточное программное обеспечение будет выглядеть примерно так:
// 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 и добавить это в начало вашей 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
(это то, что использует любой другой канал).