Bot Framework не может отправить FacebookQuickReply, используя AddKeyboardCard или ChannelData

Я использую Bot Framework 3.3.0, который, как я понимаю, поддерживает быстрые ответы Facebook, реализованные должным образом (в отличие от созданияdynamic объект и отправив его черезChannelData). Имя классаMicrosoft.Bot.Builder.ConnectorEx.FacebookQuickReply.

Вот как я создаю быстрые ответы из IDialog:

var reply = context.MakeMessage();
reply.Text = msg;
var quickReplies = new List<FacebookQuickReply>()
{
    new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, "Cathay", "Cathay"),
    new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, "HK Airlines", "Hong Kong Airlines"),
    new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, "HK Express", "HK Express")
};

И вот два способа, как я пытаюсь отправить их в чат:

//I tried both of the lines below
//reply.ChannelData = quickReplies.ToArray();
reply.AddKeyboardCard<FacebookQuickReply>("quick_replies", quickReplies);

await context.PostAsync(reply);

Первый способ, который я получил отСтатья Эзекиеля Джадиба (привет, я знаю, что ты читаешь это!) не работал для меня на Facebook Messenger. Отчасти причина в том, что в версии 3.3FacebookQuickReply класс теперь запечатан и не может быть получен из.

ОБНОВИТЬЯ получил его на работу с помощью этого:

var channelData = new FacebookChannelData();

channelData.QuickReplies = new[]
{
    new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, "Cathay", "Cathay"),
    new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, "HK Airlines", "Hong Kong Airlines"),
    new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, "HK Express", "HK Express")
};

reply.ChannelData = channelData;

Где класс FacebookChannelData просто так:

public class FacebookChannelData
{
    [JsonProperty("quick_replies")]
    public FacebookQuickReply[] QuickReplies { get; set; }
}

Несмотря на то, что это работает, кажется, что это не совсем правильный путь, потому что теперь платформа для ботов предоставляет готовые классы для этого.

КОНЕЦ ОБНОВЛЕНИЯ

Второй способ (AddKeyboardCard) работает в эмуляторе (но не работает на реальном Facebook), но выдает совершенно неправильный JSON, который я вижу в эмуляторе. Результирующий JSON использует имя класса (почему?) Вместо предоставленного мною текста:

"attachments": [
    {
      "contentType": "application/vnd.microsoft.card.hero",
      "content": {
        "text": "quick_replies",
        "buttons": [
          {
            "type": "imBack",
            "title": "Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply",
            "value": "Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply"
          },
          {
            "type": "imBack",
            "title": "Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply",
            "value": "Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply"
          },
          {
            "type": "imBack",
            "title": "Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply",
            "value": "Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply"
          }
        ]
      }
    }
  ],

Что я делаю не так и как вы используетеFacebookQuickReply а такжеAddKeyboardCard()?

Ответы на вопрос(2)

Ваш ответ на вопрос