Адаптивная карточка, отображаемая в виде изображения на FB, показывает текст / элемент «Title»

#botframework

#botframework

Вопрос:

Я понимаю, что адаптивные карты отображаются в виде изображения на каналах, которые их не поддерживают. Я просто хочу знать, как удалить или установить элемент «Title», как показано на канале fb:

введите описание изображения здесь

Адаптивная карточка.Элемент Title устарел, и я пытался установить это, это не дало никакого эффекта.

Вот мой пример json:

 {
"type": "AdaptiveCard",
"body": [
    {
        "type": "TextBlock",
        "id": "Title",
        "horizontalAlignment": "Center",
        "size": "Large",
        "weight": "Bolder",
        "text": "See results on our website!"
    },
    {
        "type": "Image",
        "horizontalAlignment": "Center",
        "url": "mylogo.png",
        "size": "Stretch"
    },
    {
        "type": "TextBlock",
        "id": "Subtitle",
        "horizontalAlignment": "Center",
        "size": "ExtraLarge",
        "text": "This channel does not allow us to display your results. Click the button to view it on our website.",
        "wrap": true
    }
],
"actions": [
  {
    "type": "Action.OpenUrl",
    "id": "OpenUrl",
    "title": "Take me there!"
  }
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.0"
}
  

Ответ №1:

К сожалению, когда BotFramewrok преобразует карточку в изображение для Facebook Messenger, он добавляет заголовок над действиями, что странно. Единственный способ избавиться от этого — удалить действие с карточки, которое в данном случае противоречит его цели. Альтернативой является отправка шаблона кнопки Facebook в данных канала активности вместо адаптивной карточки, когда пользователь находится в Facebook Messenger. Для получения более подробной информации ознакомьтесь с документацией Facebook по шаблонам кнопок и фрагментом кода ниже.

Скриншот

введите описание изображения здесь

Код бота — узел

 async onTurn(turnContext) {
    if (turnContext.activity.type === ActivityTypes.Message) {
        if (turnContext.activity.channelId === 'facebook') {
            await turnContext.sendActivity({
                channelData: {
                      "attachment": {
                          "type": "template",
                          "payload": {
                              "template_type":"button",
                              "text":"This channel does not allow us to display your results. Click the button to view it on our website.",
                              "buttons":[{
                                  "type":"web_url",
                                  "url":"https://www.microsoft.com",
                                  "title":"Take me there!"
                              }]
                          }
                      }
                  }
              });
        } else {
            await turnContext.sendActivity({
                attachments: [this.createAdaptiveCard()], 
            });
        }
    }
}
  

Надеюсь, это поможет!

Ответ №2:

У меня была та же проблема, но я нахожу альтернативу, используя HeroCard.

Если вы разрабатываете ее с помощью C #, вот и весь код:

 // first of all check if it is Facebook channel
// note that Channels is from Microsoft.Bot.Connector, the old one is deprecated.
if (turnContext.Activity.ChannelId == Channels.Facebook)
{
      Activity replyToConversation = _flowService.ConvertMarkdownUrlToFacebookUrl(turnContext.Activity, response.Answer);
      await turnContext.SendActivityAsync(replyToConversation, cancellationToken: cancellationToken);
}


public Activity ConvertMarkdownUrlToFacebookUrl(Activity message, string queryResponse)
{
    var buttons = getButtons(queryResponse, out string result);

    Activity replyToConversation = message.CreateReply();
    replyToConversation.Attachments = new List<Attachment>();

    List<CardAction> actions = new List<CardAction>();

    foreach (var button in buttons)
    {
        actions.Add(new CardAction()
        {
            Title = button.Key, // text hyperlink
            Type = ActionTypes.OpenUrl,
            Value = button.Value // url
        });
    }

    Attachment attachment = new HeroCard
    {
        Text = result, // your text
        Buttons = actions
    }.ToAttachment();
    replyToConversation.Attachments.Add(attachment);

    return replyToConversation;
}
  

Вы получите что-то вроде этого:

пример того, как это выглядит в Facebook

(извините, мне пришлось удалить текст)

Возможно, это не идеально (мой первый раз с карточками и вложениями), но я надеюсь, что это кому-то поможет 🙂