Bot Framework无法使用AddKeyboardCard或使用ChannelData发送FacebookQuickReply

我正在使用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() { 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("quick_replies", quickReplies); await context.PostAsync(reply); 

我从Ezequiel Jadib的文章中获得的第一种方式(嗨,我知道你正在读这篇文章!)在facebook messenger上对我不起作用。 部分原因是它似乎在v3.3中, FacebookQuickReply类现在已经密封,无法从中派生出来。

更新 :我通过使用它来实现它:

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

我做错了什么,你如何使用FacebookQuickReplyAddKeyboardCard()

最近添加的FacebookQuickReplyfunction的关键在于此提交 。

似乎要做的就是创建一个KeyboardCard并使用ToFacebookMes​​sage扩展方法来获取ChannelData值( 这里使用)

如果您使用的是PromptDialog ,则可以使用以下代码段在Messenger中创建快速回复:

 PromptDialog.Choice( context, resume, list of options as strings, "What do you want to choose?", retry: "I didn't understand, let's try that again", attempts: 2, promptStyle: PromptStyle.Keyboard );