为 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 API,Attachment
是您放置 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。
当我尝试在 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 API,Attachment
是您放置 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