使用bot框架SDK中的RenderedAdaptiveCards自定义自适应卡外观

时间:2018-09-21 02:20:01

标签: botframework html-rendering adaptive-cards

我正在使用Microsoft Bot Framework开发Bot。我正在使用自适应卡向用户显示航班,但是它们在外观上有很多限制。我试图通过使用我自己的hostconfig.json创建一个自适应卡渲染器,然后将我的自适应卡的HTML附加回聊天窗口,来从bot框架中的一个对话框中渲染自适应卡。但它不起作用:(

    public static Attachment CreateFlight(Flight flight)
    {
        var renderedAdaptiveCard = AdaptiveCardRenderer
            .RenderCard(new AdaptiveCard
            {
                Body = new List<AdaptiveElement>
                {
                    new AdaptiveContainer {Items = CreateFlightAdaptiveElements(flight)}
                },
                Actions = new List<AdaptiveAction>
                {
                    new AdaptiveShowCardAction
                    {
                        Card = new AdaptiveCard
                        {
                            Body = new List<AdaptiveElement>
                            {   

                            },
                            Actions = new List<AdaptiveAction>
                            {
                                new AdaptiveSubmitAction
                                {
                                    Title = "Select",
                                    Data = flight.Segments.Select(x => $"{x.Airline} {x.FlightNo}")
                                        .Aggregate((i, j) => i + "/" + j),

                                }
                            },
                            BackgroundImage = new Uri($"{DomainUrl}/Images/ac_background.jpg")
                        },
                        Title = "Select"
                    },

                },
                BackgroundImage = new Uri($"{DomainUrl}/Images/ECEFF1.png")
            });

        var attachment = new Attachment
        {   
            ContentType = "application/html",
            Content = renderedAdaptiveCard.Html
        };

        return attachment;
    }

我在这里尝试一些不可能的事情吗?如何更改我的机器人的默认灰色外观?我的主要渠道是Skype,Slack等,因此我没有计划将其集成到网络聊天中。在这方面请帮助我。

1 个答案:

答案 0 :(得分:0)

Adaptive Cards背后的想法是允许每个通道以特定于该通道的方式渲染卡片。卡可以“适应”任何可能支持它的环境。尽管自适应卡提供了很大的灵活性,但该机器人只能做很多事情,因为它最终是负责渲染卡的渠道。

  

卡作者将其内容描述为一个简单的JSON对象。那   然后可以在主机应用程序内部本地呈现内容,   自动适应主机的外观。

     

例如,Contoso Bot可以通过Bot编写自适应卡   框架,当交付给Skype时,它的外观和感觉就像是   Skype卡。当相同的有效负载发送到Microsoft Teams时,它将   外观和感觉就像Microsoft Teams。随着越来越多的主机应用程序开始支持   自适应卡,相同的有效载荷将自动在内部点亮   这些应用程序,但仍然感觉完全是该应用程序的本机。

     

用户之所以胜利,是因为一切都变得熟悉。主机应用程序获胜是因为   它们控制用户体验。卡片作者获胜是因为他们的   内容无需任何其他工作即可获得更广泛的覆盖。

您可能已经知道,RenderedAdaptiveCard类型应在客户端代码中使用。这意味着,例如,如果您想创建自己的频道,它可以为您提供帮助,但并不是真正要在漫游器中使用。您的代码无法正常工作,因为没有HTML附件类型,并且大多数渠道根本不支持HTML。您可以在this questionthis GitHub issue中找到更多信息。

希望您可以使用可用的工具(例如图像和链接)来获得所需的外观。