O Bot Framework falha ao enviar o FacebookQuickReply usando AddKeyboardCard ou ChannelData

Estou usando o Bot Framework 3.3.0, que eu entendo que suporta respostas rápidas do Facebook implementadas corretamente (em vez de criar umdynamic objeto e enviá-lo viaChannelData) O nome da classe éMicrosoft.Bot.Builder.ConnectorEx.FacebookQuickReply.

Aqui está como eu crio as respostas rápidas de dentro de um 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")
};

E aqui estão as duas maneiras de como estou tentando enviá-las para o bate-papo:

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

await context.PostAsync(reply);

A primeira maneira que eu conseguiArtigo de Ezequiel Jadib (oi, eu sei que você está lendo isso!) não funcionou para mim no facebook messenger. Em parte, a razão é que parece na v3.3 oFacebookQuickReply agora a classe está selada e não pode ser derivada.

ATUALIZAR: Eu consegui trabalhar usando isso:

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;

Onde a classe FacebookChannelData é simplesmente esta:

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

Mesmo que funcione, não parece ser uma maneira adequada, porque a estrutura do bot agora fornece classes prontas para uso para isso.

FIM DE ATUALIZAÇÃO

A segunda maneira (AddKeyboardCard) funciona no emulador (mas não funciona no facebook real), mas produz JSON totalmente errado que eu posso ver no emulador. O JSON resultante usa o nome da classe (por quê?) Em vez do texto que forneci:

"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"
          }
        ]
      }
    }
  ],

O que estou fazendo de errado e como você usaFacebookQuickReply eAddKeyboardCard()?

questionAnswers(2)

yourAnswerToTheQuestion