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()
?