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

如何在BotFramework-WebChat中完全不渲染指定附件及外层气泡

解决BotFramework WebChat隐藏特定附件外层气泡的问题

你遇到的问题根源是:attachmentMiddleware仅控制附件内容是否渲染,但包含该附件的消息(activity)本身仍会被WebChat渲染,所以外层气泡会显示空框。要彻底去掉气泡,需要从消息层面拦截过滤,具体实现如下:

推荐方案:拦截并过滤目标消息

通过activityMiddleware检查消息中的附件类型,若包含需要隐藏的附件,直接返回null让WebChat不渲染整个消息(包括气泡),同时还能在拦截时执行你的业务逻辑:

// 定义activity中间件
const activityMiddleware = () => next => activity => {
  // 查找是否存在需要隐藏的附件
  const targetAttachment = activity.attachments?.find(
    att => att.contentType === 'application/vnd.microsoft.card.adaptive.addUserDetails'
  );

  if (targetAttachment) {
    // 在这里执行你需要的代码逻辑,比如处理用户详情数据
    console.log('执行添加用户详情逻辑:', targetAttachment.content);
    // 返回null,WebChat将不渲染这条消息,气泡完全消失
    return null;
  }

  // 其他消息正常传递处理
  return next(activity);
};

然后在WebChat组件中配置该中间件:

<WebChat
  activityMiddleware={activityMiddleware}
  attachmentMiddleware={attachmentMiddleware}
  // 你的其他配置(如directLine连接信息等)
/>

备选方案:保留消息但隐藏气泡(不推荐)

如果不想过滤整个消息,只是隐藏气泡,可以通过自定义气泡样式配合attachmentMiddleware返回空组件,但这种方式仍会保留消息的DOM结构,兼容性依赖CSS选择器:

  1. 修改attachmentMiddleware返回空组件:
const attachmentMiddleware = (properties) => () => next => card => {
  switch(card.attachment.contentType) {
    case 'application/vnd.microsoft.card.adaptive.addUserDetails':  
      return <></>;
    case 'application/vnd.microsoft.card.adaptive.locationpicker':  
      return <LocationPicker/>;
    default: return next(card);
  }
};
  1. 添加CSS隐藏空气泡:
.webchat__bubble:has(.webchat__attachment:empty) {
  display: none;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:05:29