You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用adaptivecards npm包创建自适应卡片、自定义CSS并发送至Bot Framework模拟器?

创建自定义CSS的Adaptive Card并发送到Bot Framework模拟器

嘿,刚好我之前也折腾过Adaptive Cards和Bot Framework的组合,一步步来帮你搞定这三个问题:创建卡片、自定义样式、发送到模拟器。

1. 先搞定Adaptive Card的创建

Adaptive Card的核心是JSON配置文件,你用AdaptiveCard.parse()解析的就是这个JSON。先写一个基础的卡片示例,你可以根据需求修改:

const customCard = {
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "text": "我的自定义卡片",
      "size": "large",
      "id": "cardTitle" // 加ID方便后续精准样式控制
    },
    {
      "type": "TextBlock",
      "text": "这是一张带自定义CSS的测试卡片",
      "id": "cardDesc"
    }
  ],
  "actions": [
    {
      "type": "Action.Submit",
      "title": "点击我"
    }
  ]
};

然后结合你已有的代码实例化并解析:

var adaptiveCard = new AdaptiveCards.AdaptiveCard();
adaptiveCard.parse(customCard);

2. 应用自定义CSS的两种实用方法

Adaptive Cards渲染后会生成带有固定类名的DOM元素,你可以通过以下两种方式自定义样式:

方法一:覆盖全局默认类

Adaptive Cards自带一套默认CSS类,比如.ac-adaptiveCard是卡片容器,.ac-textBlock是文本块。你可以直接在你的样式文件里覆盖这些类:

/* 自定义整个卡片的容器样式 */
.ac-adaptiveCard {
  background-color: #f8f9fa;
  border-radius: 16px;
  padding: 20px;
  box-shadow: 0 2px 10px rgba(0,0,0,0.08);
}

/* 通过ID精准修改标题样式 */
.ac-textBlock[id="cardTitle"] {
  color: #2d3748;
  font-weight: 700;
  margin-bottom: 12px;
}

/* 修改描述文本样式 */
.ac-textBlock[id="cardDesc"] {
  color: #4a5568;
  font-size: 14px;
}

方法二:给卡片添加自定义类名

如果你不想影响全局的Adaptive Card样式,可以给当前卡片的DOM元素单独加自定义类:

// 解析卡片后生成DOM元素
const cardDom = adaptiveCard.render();
// 添加自定义类
cardDom.classList.add("my-special-card");

然后在CSS里针对这个类写样式:

.my-special-card {
  border: 2px solid #3182ce;
}
.my-special-card .ac-action {
  background-color: #3182ce;
  color: white;
  border-radius: 8px;
}

3. 发送到Bot Framework模拟器

要把卡片发送到模拟器,你需要构造符合Bot Framework格式的消息,把Adaptive Card作为附件嵌入。这里用Node.js的Bot Framework SDK举个例子:

首先确保你已经搭建好Bot的基础结构,然后在处理用户消息的逻辑里,构造回复:

const { ActivityFactory } = require('botbuilder');

// 把卡片JSON转成Bot Framework认可的附件格式
const cardAttachment = ActivityFactory.adaptiveCard(customCard);

// 构造回复消息
const replyMessage = {
  type: 'message',
  text: "这是一张自定义样式的Adaptive Card:",
  attachments: [cardAttachment]
};

// 发送到模拟器
await context.sendActivity(replyMessage);

如果是用C#,逻辑类似:创建Attachment对象,设置ContentType为"application/vnd.microsoft.card.adaptive",Content为卡片JSON,然后添加到回复消息的Attachments集合中即可。

小提示

  • 要确保你的Bot Framework SDK版本支持你使用的Adaptive Card版本(比如v1.5需要SDK的对应版本支持)
  • 模拟器里会自带Bot Framework的默认样式,如果要完全自定义,可能需要在Web Chat前端或者Bot端进一步覆盖样式类

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:53:55