如何通过DocuSign Rest API的composite templates替换单个模板文档
解决Composite Templates替换指定文档并保留其余文档的问题
咱们先来拆解你遇到的这两个典型问题——本质上是没摸透DocuSign Composite Templates里模板关联和sequence优先级的配合逻辑,尤其是如何精准替换单份文档同时保留模板里的其他内容。
先分析你遇到的两种情况
情况1:inlineTemplates序列号1,serverTemplates序列号2 → 替换成功但其余文档消失
这种情况的问题在于:你把inline模板的执行顺序设成了先于server模板(sequence数字越小越先执行),但大概率没给inline模板指定serverTemplateId关联到你的原始模板。这就导致inline模板是作为独立模板加载的,之后sequence更高的server模板本该覆盖它,但可能因为你在inline里定义了签名者信息,和server模板的配置冲突,最终系统只保留了inline里的那一份文档,把server模板的另外两份给覆盖掉了。
情况2:序列号互换 → 保留三份文档但替换未生效
这时候server模板先加载(sequence=1),inline后执行(sequence=2),但你要么没给inline里的文档设置和原模板第一份文档完全匹配的documentId,要么没关联serverTemplateId。DocuSign找不到要替换的目标文档,自然就用回了原模板的内容,替换操作相当于没执行。
正确的配置方案
要实现“替换第一份文档,保留另外两份+原有签名者信息”,你需要让inline模板和server模板关联起来,并且控制好sequence的优先级。下面是具体的配置逻辑和示例:
核心步骤
- 确认原模板的文档ID:先通过DocuSign控制台或者API获取原始模板中三份文档的
documentId(比如第一份是1,第二份2,第三份3),这个ID必须和你inline里的文档ID完全匹配(大小写敏感)。 - 关联模板并设置sequence:
- 把server模板的sequence设为
1(先加载原始模板的所有文档和签名者) - 把inline模板的sequence设为
2(后执行,优先级更高),并且指定serverTemplateId和原始模板ID一致,让DocuSign知道这是要替换原模板里的特定文档
- 把server模板的sequence设为
- 仅定义要替换的文档:inline模板的
documents数组里只放你要替换的第一份文档,不要包含其他文档,DocuSign会自动保留原模板里未被替换的文档。
示例配置(JSON)
{ "compositeTemplates": [ { "serverTemplates": [ { "sequence": "1", "templateId": "你的原始模板ID" // 包含3份文档+签名者的模板 } ], "inlineTemplates": [ { "sequence": "2", "serverTemplateId": "你的原始模板ID", // 关联到同一个原始模板 "documents": [ { "documentId": "1", // 和原模板第一份文档的ID完全匹配 "name": "替换后的第一份文档.pdf", "documentBase64": "你的文档Base64编码内容" } ], "recipients": { // 这里可以修改签名者信息,如果不需要修改,直接省略,会用原模板的配置 "signers": [ { "email": "signer1@example.com", "name": "签名者1", "recipientId": "1", "roleName": "原模板中的签名者角色名" // 如果用角色关联,必须和原模板一致 } ] } } ] } ] }
额外注意事项
- 不要把server模板和inline模板放在不同的
compositeTemplates元素里,否则会导致文档叠加或者替换失效 - 如果原模板的签名者是用角色定义的,inline里的签名者必须指定对应的
roleName,否则会出现签名者不匹配的问题 - 确保
documentBase64编码正确,否则替换后的文档会无法加载
内容的提问来源于stack exchange,提问作者Tsano
相关产品推荐
相关产品推荐

