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" } ] } } ],
我做错了什么,你如何使用FacebookQuickReply
和AddKeyboardCard()
?
最近添加的FacebookQuickReplyfunction的关键在于此提交 。
似乎要做的就是创建一个KeyboardCard并使用ToFacebookMessage扩展方法来获取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 );