You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

BotFramework开发:HeroCard的CardAction能否设置messenger_extensions参数?

BotFramework HeroCard 如何设置 Messenger Extensions?

我来帮你理清这个问题——用BotFramework通用方式创建的HeroCard,没办法直接给OpenUrl类型的CardAction加上messenger_extensions: true。原因很简单:BotFramework的通用卡片(比如HeroCard、CardAction)是为跨渠道设计的,本身并不包含Facebook Messenger专属的这类属性,自然没法直接设置。

不过你有两种靠谱的办法实现需求:

1. 用ChannelData直接发Messenger原生按钮模板

这是最直接、也是官方推荐的方式,能完全掌控Messenger的专属字段。你只需要按照Messenger平台的规范构造JSON,然后通过消息的ChannelData属性发送就行。给你个C#的示例代码参考:

var message = Activity.CreateMessageActivity();
message.ChannelData = new JObject(
    new JProperty("attachment", new JObject(
        new JProperty("type", "template"),
        new JProperty("payload", new JObject(
            new JProperty("template_type", "button"),
            new JProperty("text", "Title here\nand more"),
            new JProperty("buttons", new JArray(
                new JObject(
                    new JProperty("type", "web_url"),
                    new JProperty("url", "https://example.com/webviews/1"),
                    new JProperty("title", "Open in webview"),
                    new JProperty("messenger_extensions", true),
                    new JProperty("webview_height_ratio", "tall") // 可选,用来设置网页视图的高度
                )
            ))
        ))
    ))
);
await turnContext.SendActivityAsync(message);

这种方式跳过了BotFramework的通用卡片转换逻辑,直接用Messenger原生模板,所以所有专属属性(包括messenger_extensions)都能自由设置,功能最完整。

2. 尝试BotFramework的Facebook特定扩展(仅部分SDK版本支持)

如果你想尽量复用通用卡片的逻辑,在BotFramework SDK v4的Facebook适配器里,有没有变通方法?其实可以尝试手动给AttachmentChannelData添加专属属性,但HeroCard本身不会自动映射这些属性,需要你自己处理转换后的结构——不过这种方式依赖BotFramework的内部转换逻辑,稳定性不如第一种,不太推荐。

总结

要是你的核心需求就是启用带Messenger Extensions的网页视图,优先选第一种用ChannelData发原生模板的方式,这是最稳定、功能最全面的方案。通用HeroCard因为跨渠道设计的限制,确实没法直接设置messenger_extensions,只能通过原生渠道特定的实现方式来达成目标。

内容的提问来源于stack exchange,提问作者oflahero

火山引擎 最新活动