
AI 应用后端【免费下载链接】botpressThe open-source hub to build deploy GPT/LLM Agents ⚡️项目地址https://gitcode.com/gh_mirrors/bo/botpress点击查看免费下载导读本文聚焦 Botpress 开源仓库中 Confluence 集成integrations/confluence的测试文档integrations/confluence/src/parser/testFiles/jsonExample.md深入拆解这份 Confluence 项目计划模板的内容结构、它与同目录jsonExample.jsonConfluence 存储格式 JSON的对应关系以及 Botpress 集成中真正消费这类 Markdown 内容的转换管线markdownToHtml.ts。读完本文你将掌握这类模板在集成测试中扮演什么角色、其背后的 Markdown→HTML 转换原理以及该转换结果如何被createPage/updatePage动作写入 Confluence 页面。文档定位一份为集成测试而生的 Confluence 项目计划模板jsonExample.md位于 integrations/confluence/src/parser/testFiles/ 目录与jsonExample.json、jsonExample2.md/.json、jsonExample3.md/.json以及GDD_Legends_of_Eldoria_Confluence_StorageFormat.md/.json同处一地构成该目录下 parser 功能的测试样例集合。从内容看这份文档本身是一份典型的 Confluence 项目计划模板Project Plan Template法语版本用于承载项目的背景、范围、时间线、里程碑等信息——这正是 Confluence 作为团队协作与文档中心最常见的页面形态之一。文档开头有一句法文提示说明其用途Nous avons ajouté un exemple de contenu pour vous aider à démarrer les tests de votre plan de projet. Explorez ce contenu et modifiez-le pour vous lapproprier.大意我们添加了示例内容帮助你启动项目计划的测试。请探索这些内容并修改以使其适合自己。这句话揭示了它的真实角色它不是生产文档而是用来测试的示例内容——验证 Botpress Confluence 集成能否正确解析、转换这类包含复杂格式表格、提及、状态、日期、路线图宏等的页面内容。结合 markdownToHtml.ts 的存在可以推断该模板用于验证Confluence 富内容 → Markdown → HTMLstorage 格式这一转换链路。模板内容逐段解析模板结构完整覆盖了项目计划的核心要素以下按原文顺序展开。1. 项目元信息表文档顶部是一张两列信息表用 Markdown 表格语法表达 Confluence 的字段定义表label/value 对 Meneur负责人Michael Masson⚡️ Équipe团队Mentionnez les contributeurs (p. ex., xavier)提及贡献者如 xavier Date déchéance截止日期03/04/2025État状态[en cours]进行中这段内容在 jsonExample.json 中有对应的富文本结构左侧单元格为strong加粗文本右侧分别使用mention提及 Michael Masson、placeholder占位符、date时间戳1743724800000即 2025-04-04和status颜色 yellow、样式 bold、文本 en cours节点类型。也就是说表格中的Michael Masson对应 Confluence 的 mention 节点、[en cours]对应 status 节点、日期对应 date 节点——模板在 Markdown 层的降级表示还原了 Confluence 编辑器中的交互式元素。2. 问题陈述Énoncé du problème## Énoncé du problème _Décrivez le problème et son impact. Incluez lhypothèse qui sous-tend votre travail« Nous pensons que X fera Y, et nous saurons que nous avons réussi si Z »._ Daprès une récente étude menée auprès de clients, nous souhaitons augmenter le chiffre daffaires de nos secteurs dactivité.该小节给出问题背景并内置了撰写假设的提示我们相信 X 将带来 Y若 Z 发生则说明成功。斜体部分是 Confluence placeholder占位提示文本的 Markdown 呈现在 JSON 中对应placeholder节点正文段落则是实际写入的真实内容。3. 范围Portée范围以三栏语义表格组织区分必做Requis、期望Souhaitable、超出范围Hors périmètreRequis通过创新识别并捕获新细分市场重振客户增长与收入Souhaitable重振客户多个细分市场Hors périmètre与主营业务无关的一切工作。在 JSON 源中这三行分别是tableHeader背景#e3fcef、普通tableCell背景#fffae6和tableCell背景#ffebe6内容为bulletList列表项其中既有placeholder提示也有实际文本。这展示了 Confluence 存储格式如何用节点嵌套table → tableRow → tableCell → bulletList → listItem → paragraph → text表达复杂排版。4. 时间线Chronologie与路线图宏这是模板中结构最复杂、最能体现 Confluence 特色的部分。正文提示用户可输入/planificateur创建可视化路线图随后以 Markdown 形式平铺了一个名为Planificateur de feuille de route路线图规划器的 Roadmap Planner 宏Timeline2024-03-01 00:00:00 至 2024-11-30 00:00:00Phase 1identification du problème问题识别颜色 #654982含 6 条 barNouvelle barre2020-01-011 个月、Lancement de projet2024-03-011 个月、Analyse des entreprises concurrentes2024-03-313 个月、Analyser les données produit2024-04-013 个月、Réfléchir à des solutions2024-06-122 个月、Nouvelle barre2020-01-011 个月Phase 2élaboration de la solution方案制定颜色 #3b7fc4含 5 条 barNouvelle barre、Recherches sur les clients de type entreprise2024-07-242 个月、Peaufiner les solutions2024-08-172 个月、Lancement de produit2024-10-152 个月、Nouvelle barreMilestones里程碑Atelier avec des parties prenantes2024-07-30、Revue du leadership nº 12024-10-16。对照 JSON 可以发现这个宏在 Confluence 存储格式中是extension节点extensionType: com.atlassian.confluence.macro.core、extensionKey: roadmap所有路线图数据lane 颜色、bar 起始日期与时长、marker 日期与标题都被 URL 编码后塞进parameters.macroParams.source.value字段并附带hash与macroMetadata。换句话说Markdown 中的平铺列表正是该宏 JSON 数据的人类可读投影——这也是为什么这份模板对解析器测试极具价值它必须处理extension、panel、mention、status、date、inlineCard等十余种节点类型。5. 重要里程碑与截止日期表## Étapes importantes et échéances | Étape importante | Propriétaire | Échéance | État | | --- | --- | --- | --- | | p. ex., Finaliser les conceptions pour la v1 | propriétaires | Saisissez // pour ajouter une date | | | ➕ Invitez des membres de léquipe à rejoindre votre projet | | 03/04/2025 | **[À faire]** | | Terminez le plan du projet et assignez des tâches | | 03/04/2025 | **[À faire]** |该表四列里程碑 / 负责人 / 截止日期 / 状态首行是占位示例后两行是真实待办状态列使用[À faire]待办标记——对应 JSON 中status节点颜色 red、样式 bold。6. 相关支持Supports connexes文档末尾只有一个内联卡片链接inlineCard节点指向 Atlassian 草稿页 URLhttps://botpress.atlassian.net/wiki/pages/resumedraft.action?draftId131178注意这是模板自身携带的示例链接仅存在于测试样例中并非本文可引用的外部资源。测试文件的孪生结构Markdown 与 JSON 一一对应jsonExample.md并非孤立存在它与 jsonExample.json 是同一份文档的两种表示.json是 Confluence 新编辑器Atlas/ProseMirror 系的atlas_doc_format 存储格式.md是其渲染后的 Markdown 视图。二者的对应关系整理如下Markdown 元素JSON 节点类型说明info ... panelpanelType: info提示面板表格table→tableRow→tableCell/tableHeader含背景色、colwidth 等 attrsMichael Massonmention人员提及带 account id斜体提示语placeholder编辑器占位文本03/04/2025datetimestamp日期选择器[en cours]/[À faire]statuscolor/style/text状态徽章# Planificateur de feuille de routeextensionroadmap 宏路线图宏数据在 URL 编码的 source 中末尾链接inlineCard智能链接卡片这份孪生结构正是 parser 测试的抓手给定 JSON 存储格式能否无损渲染出对应的 Markdown给定 Markdown能否还原为可在 Confluence 落地的 HTML。源码纵深Markdown→HTML 转换管线是如何工作的真正消费这类 Markdown 的代码是 integrations/confluence/src/parser/markdownToHtml.ts全文仅 13 行却串联起完整的 unified 处理管线import rehypeStringify from rehype-stringify import remarkGfm from remark-gfm import remarkParse from remark-parse import remarkRehype from remark-rehype import { unified } from unified export const convertMarkdownToHtml (gfm: string): Promisestring unified() .use(remarkParse) .use(remarkGfm) .use(remarkRehype) .use(rehypeStringify) .process(gfm) .then((htmlFile) htmlFile.toString())各环节职责remarkParse把 Markdown 文本解析为 mdast 语法树remarkGfm启用 GitHub Flavored Markdown 扩展——这是模板中表格、任务列表等元素能被正确解析的关键例如上文所有元信息表、里程碑表都依赖 GFM 表格语法remarkRehype将 mdast 转换为 hastHTML 抽象语法树rehypeStringify将 hast 序列化为 HTML 字符串。该函数在 client.ts 中被引用createPage与updatePage两个动作都会先调用convertMarkdownToHtml(input.item.body.atlas_doc_format.value)把页面正文的 atlas_doc_format 值转成 HTML再以representation: storage即 HTML 存储格式随页面数据提交给 Confluence REST API v2POST /wiki/api/v2/pages与POST /wiki/api/v2/page/{id}。在 create-page.ts 中动作从输入item中取出id创建ConfluenceClient基于配置的user、host、apiToken构造 Basic Auth 头然后调用client.createPage(input)。由此形成完整链路Confluence 页面 (atlas_doc_format) → 集成读取 body 值如模板 Markdown → convertMarkdownToHtml()Markdown → GFM → HTML → 以 storage 格式写回 Confluence 页面创建/更新jsonExample.md这类测试文件正是为了验证该链路对复杂模板的兼容性表格、提及、状态、日期、路线图宏平铺文本、内联卡片等全部出现于同一份文档中任何解析环节的遗漏都会在转换结果中暴露。测试样例家族的横向对比testFiles目录下的其他样例共同勾勒出 parser 的测试覆盖面jsonExample2.md另一份法文项目模板Mural 提供结构更偏空白问卷——非满足需求、目标、用户画像、待完成工作、历史背景、约束、探索与决策、版本、后续步骤、影响、其他文档等 11 个章节大量使用斜体占位提示用于测试占位符密集内容的解析jsonExample3.md/.json第三组样例进一步覆盖不同模板变体GDD_Legends_of_Eldoria_Confluence_StorageFormat.md/.json以游戏设计文档GDD为内容的更大型样例标题为# Game Design Document - Legends of Eldoria覆盖较长篇幅的富格式文档解析。可以推断这组样例的设计意图是覆盖从简短模板到长篇文档、从稀疏占位到密集宏内容的各种真实 Confluence 页面形态为convertMarkdownToHtml提供回归测试语料。小结jsonExample.md看似只是一份法语项目计划模板实则是 Botpress Confluence 集成中具有双重身份的测试资产一方面它完整呈现了 Confluence 项目计划页面的标准信息架构元信息表、问题陈述、范围、时间线、里程碑、相关支持另一方面它与jsonExample.json构成同一内容的两视图是验证 markdownToHtml.ts 转换管线的理想语料——该管线通过 unified remarkGfm 解析模板中复杂的 GFM 表格与富文本语法并将结果以storage格式经createPage/updatePage动作写回 Confluence。理解这份模板等于同时理解了 Botpress 集成在读取 Confluence 富内容 → 转换为 Markdown → 再以 HTML 落回 Confluence这条闭环中的核心数据流。赞分享AI 应用后端【免费下载链接】botpressThe open-source hub to build deploy GPT/LLM Agents ⚡️项目地址https://gitcode.com/gh_mirrors/bo/botpress点击查看免费下载相关推荐微信公众号为什么没法直接订阅用 wewe-rss 十分钟把第一篇公众号文章推进阅读器微信公众号为什么没法直接订阅用 wewe rss 十分钟把第一篇公众号文章推进阅读器 wewe rss 是一个私有化部署的微信公众号转 RSS 订阅源工具它后端前端NoneBot 轻量化 HTML 绘图实战用 nonebot-plugin-htmlkit 把 HTML、Markdown 与模板渲染成图片NoneBot 轻量化 HTML 绘图实战用 nonebot plugin htmlkit 把 HTML、Markdown 与模板渲染成图片 图片是聊天机器人后端即时通讯Markwon HTML 解析与渲染实战指南从 CommonMark 的 HtmlBlock/HtmlInline 到自研渲染管线Markwon HTML 解析与渲染实战指南从 CommonMark 的 HtmlBlock/HtmlInline 到自研渲染管线 导读 本文基于 MarkwUI组件移动开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考