Skip to main content
现在核心:一个逻辑函数 加载模板和记录,填充占位符,并保存一个新的 文档。 我们将把业务逻辑写成一个处理器,然后透露它通过 几个触发器。 本章将其中的两个线路连接起来——一个 AI 工具Workflow 操作

渲染帮助器

将纯逻辑保留在它自己的文件中,这样便于拆除测试。 这会将一条记录 展平成 {{dot.path}} 占位符并进行替换。
由于此文件没有副作用,你可以使用快速单元测试对其进行覆盖 (yarn test:unit)。 见 Testing

处理程序

处理程序使用生成的 CoreApiClient 读写CRM 数据。 它加载模板,加载目标记录,填充 物体,并创建一个“文档”。
loadRecordValues 会针对 Person 与 Company 运行不同的查询,并将结果展平 — 参见 load-record-values.ts

显示为一个工具和工作流操作

单个的 defineeLogicFunction 可以带几个触发器。 在这里,toolTriggerSettings 让它可以被AI 代理人调用,workflowActionTriggerSettings 将它变成可视工作流生成器中的 步骤。 两者都用JSON方案描述他们的输入情况。
输入schema是一个普通的 JSON schema 描述了 templateIdrecordId - 查看 generate-document-input.schema.ts

授予访问权限

逻辑函数作为应用程序的角色运行。 它需要阅读模板和记录 并创建文档,以便允许在 “src/roles/default-role.ts” 中:
UPLOAD_FILE 让函数在下一节上传生成的 PDF。 请参阅 Roles 以获取更精细的权限。

附加一个真实的 PDF 文件

渲染文本字段是有用的,但用户需要一个真正的文档。 让我们生成一个 PDF 并将其作为可下载的文件存储在记录上。 首先,给文档对象一个FILES字段来持有PDF。 应用将 上传到他们拥有 的文件字段,所以此字段是上传的路线:
现在渲染那个PDF。 一个应用是一个真正的节点项目,所以您可以添加任何您需要的npm 包,并且像其他任何地方一样导入它。 我们使用 pdf-lib 绘制PDF 和 marked 解析Markdown 正文—CLI 将它们安装到函数中供您使用的运行时间:
完整的助手是 generate-document-pdf.ts。 它将Markdown解析为代币,标记为“标记”。 `运行,然后使用 pdf-lib:真实标题,bold/italic 运行,子弹和编号列表 blockquotes and rules — — 一个经过筛选、多页的 A4 渲染模板 本身,而不是一个文本墙。
一个打造的可营销的 PDF

生成的 PDF:真实的排版和Markdown 格式化,呈现模板正文。

pdf-lib的内置字体使用WinAnsi编码,所以西欧语音会将 渲染到盒子之外; 助手地图的智能引用和破折号并掉落它 无法编码。 渲染非拉丁脚本(中文、 阿拉伯语、 西里尔语) 将意味着 嵌入一个 Unicode 字体。
然后上传它并在记录中存储参考。 uploadFile 路由字节 到你的应用拥有的文件字段。返回的 id 是你保存的:
生成的文档现在带有可下载的 PDF:
生成一个 PDF 文件的文档记录

已生成的 PDF 存储在文档文件字段中。

uploadFile 仅针对app-owned 文件字段。(所以上传文件总需要一个拥有字段的 应用,加上UPLOAD_FILE 角色标志)。 这就是为什么PDF 会降落在记录自己的“file”字段上——相同的样式 call-recorder app 用于录制的原因。
在这一步之后: 每个生成的文档都有一个真实的、可下载的 PDF。 但 没有任何东西能够*调用UI 的生成器 — — 因为我们需要一个 HTTP 路由。

下一步:HTTP路由 →

通过 HTTP 提供函数并将文档渲染为 web 页面。