MsTeam herocard ActionTypes.ImBack ведет себя по-разному - PullRequest
0 голосов
/ 06 июня 2019

Мы создали карту героев с помощью ActionTypes.ImBack

, пока я использую webchat и facebook, нажмите на кнопку, чтобы отобразить card.title в окнах чата

например, Показать меню "

Но в команде отображается card.valus, который я не хочу показывать конечному пользователю

например, "Action: IntentName"

У меня есть попытка postback, messageback & invoke в MsTeams, но оба не работают вообще

plButton1 = new CardAction()
{
Value ="Action:IntentName",
Type = ActionTypes.ImBack,
Title = "Show me menu"
};

Ожидаемый вывод: «Показать меню»

Фактический вывод: «Действие: IntentName "

1 Ответ

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

Важная информация из ответа, который я связал

Поведение карты зависит от конкретного канала.

Это верно для всех сторон, независимо от типа карты, типа действия или канала. В то время как некоторые правила применимы, скажем, к свойствам действий с картой, вы действительно не можете зависеть от свойства, подобного 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;
...