Важная информация из ответа, который я связал
Поведение карты зависит от конкретного канала.
Это верно для всех сторон, независимо от типа карты, типа действия или канала. В то время как некоторые правила применимы, скажем, к свойствам действий с картой, вы действительно не можете зависеть от свойства, подобного displayText
, которое ведет себя так, как вы ожидаете. Вы должны проверить карту самостоятельно. Вот некоторый код, который поможет вам протестировать различные типы действий и свойства карт:
var actionTypes = new List<string>
{
ActionTypes.ImBack,
ActionTypes.PostBack,
ActionTypes.MessageBack,
};
var cardActions = actionTypes.Select(actionType => new CardAction(
actionType,
$"{actionType} title",
null,
$"{actionType} value",
$"{actionType} text",
$"{actionType} displayText"
)).ToList();
var reply = activity.CreateReply("Reply:");
reply.Attachments = new List<Attachment> { new Attachment(HeroCard.ContentType, content: new HeroCard("Hero title", "Hero subtitle", "Hero text", buttons: cardActions)) };
reply.SuggestedActions = new SuggestedActions(new List<string> { activity.From.Id }, cardActions);
await turnContext.SendActivityAsync(reply);
Эти три типа действий (ImBack, PostBack и MessageBack) имеют ожидаемое поведение, связанное с ними:
- ImBack предназначен для отображения сообщения в истории разговоров, как если бы пользователь его набрал
- PostBack предназначен для отправки боту невидимого сообщения со скрытыми метаданными
- MessageBack предназначен для отправки сообщения боту, которое отображается в истории разговоров и содержит скрытые метаданные, объединяющие два других типа
Опять же, вы не можете рассчитывать на то, что это поведение будет последовательно реализовано в разных каналах.
Дополнительная информация, относящаяся конкретно к вашему вопросу
Если вы поэкспериментируете с этим кодом C #, вы можете определить, что команды Microsoft рассматривают действия с картой следующим образом:
- ImBack использует
title
в качестве метки кнопки и использует value
в качестве текста действия и отображаемого сообщения.
- PostBack и MessageBack используйте
title
в качестве метки кнопки, text
в качестве текста действия и displayText
в качестве обработанного сообщения.
Это означает, что если вы хотите, чтобы карта героев в командах отправляла сообщение, содержащее данные, не показанные пользователю, вам необходимо использовать PostBack или MessageBack . Вы захотите создать карту по-разному, в зависимости от того, по какому каналу общается бот. Вы можете определить канал из свойства ChannelId
действия:
switch (turnContext.Activity.ChannelId)
{
case Channels.Msteams:
action = new CardAction()
{
Type = ActionTypes.PostBack,
Title = "Show me menu",
Text = "Action:IntentName",
DisplayText = "Show me menu",
};
break;
default:
action = new CardAction()
{
Type = ActionTypes.PostBack,
Title = "Show me menu",
Value = "Action:IntentName",
};
break;
}
К счастью для вас, во всех трех ваших каналах информация, которую вы хотите получить от кнопки, будет находиться в свойстве Text
действия, поэтому вам не понадобится другой оператор switch при ответе на действие, созданное картой. действие:
var result = turnContext.Activity.Text;