为 Facebook 设置 ChannelData

Set ChannelData for Facebook

当我尝试在 facebook 上设置 ChannelData 时,我发现如果我不附加任何附件,Facebook 将不会显示我在 ChannelData 中附加的内容。例如:

如果我发送这个:

var channelData = new JObject();
var child = new JObject();

child.Add("content_type", "text");
child.Add("title", "Red");
child.Add("payload", "DEVELOPER_DEFINED_PAYLOAD_FOR_PICKING_RED");

channelData.Add("quick_replies", new JArray(child));

var replyOrder = context.MakeMessage();
var attachments = CardFactoryFacebook.GetMainContactThumbnailCard(); 

replyOrder.Attachments.Add(attachments);
replyOrder.ChannelData = channelData;

await context.PostAsync(replyOrder);

所以在这种情况下,我们将在消息中看到 ThumbnailCard 和我在 ChannelData 中制作的按钮正下方 "Red"。

但是如果我设置 ChannelData 而不添加任何附件,那么 Messenger 中不会显示任何内容,例如:

var replyOrder = context.MakeMessage();

replyOrder.ChannelData = channelData;

await context.PostAsync(replyOrder);

我错过了什么吗? 谢谢

根据 Facebook 消息的 Botframework APIAttachment 是您放置 Facebook 消息的位置。发消息没消息意义不大

我认为你不需要放一个 "activity" 附件,一切都应该在频道数据上定义,(当它是关于 facebook 和它的卡片时),在这种情况下有一个 "facebook" 附件,但它在 channelData 内部。我有这段代码在工作:

 Activity replyToConversation = activity.CreateReply("Quick Replies");

                dynamic messageData = new JObject();
                messageData.attachment = new JObject();
                messageData.attachment.type = "template";
                messageData.attachment.payload = new JObject();
                messageData.attachment.payload.template_type = "generic";


                messageData.attachment.payload.elements
                    = new JArray(
                        new JObject(
                            new JProperty("title", "hola"),
                            new JProperty("subtitle", "Mundo"),
                            new JProperty("buttons",
                                new JArray(
                                    new JObject(
                                        new JProperty("type", "element_share")
                                    )
                                )
                            )
                        )
                    );


                replyToConversation.ChannelData = messageData;
                ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
                await connector.Conversations.ReplyToActivityAsync(replyToConversation);

Quick Replies 正在作为消息的一部分发送。根据 Facebook 的文档,消息对象必须包含文本或附件才有效。

使用您创建的频道数据对象(格式正确),您只需发送消息的 "quick_replies" 部分。

尝试在消息中添加文本,例如:

replyOrder.Text = "What's your favorite color?";

请注意,在快速回复的特定情况下,BotBuilder 库已经提供了一种使用它们的方法,而无需通过使用 KeyboardCard. Check 以获取更多信息来手动创建 ChannelData。