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