
DocuSign 的 SenderEnvelopeComplete_HtmlBody 模板不支持 [[Data:SignerName]] 等签署人上下文变量,因其面向发送方且可能涉及多签署人场景;如需在完成通知中展示签署人信息,需通过 API 动态注入自定义数据(如 signerName)并使用 [[Data:CustomFieldName]] 引用。
docusign 的 `senderenvelopecomplete_htmlbody` 模板不支持 `[[data:signername]]` 等签署人上下文变量,因其面向发送方且可能涉及多签署人场景;如需在完成通知中展示签署人信息,需通过 api 动态注入自定义数据(如 signername)并使用 `[[data:customfieldname]]` 引用。
在使用 DocuSign Java SDK 构建“嵌入式签署(captive signing)”流程时,开发者常希望在信封完成后的发送方通知邮件中显示签署人姓名(例如:“张三已签署您的文件”)。但直接在 SenderEnvelopeComplete_HtmlBody 模板中使用 [[Data:SignerName]] 或 [[Data:SignerEmail]] 会始终渲染为空字符串——这不是配置错误,而是设计限制。
根本原因在于:
✅ RecipientEnvelopeComplete_HtmlBody 面向签署人/收件人,其模板上下文包含当前 recipient 的 SignerName、SignerEmail 等字段;
❌ SenderEnvelopeComplete_HtmlBody 面向信封发起者(sender),其上下文不自动包含任何特定签署人的数据,因为一个信封可含多个签署人(如顺序签署、并行签署),系统无法默认判定“该用哪一位的姓名”。
✅ 正确解决方案:使用自定义字段(Custom Fields)注入签署人信息
您需在创建信封时,显式将签署人姓名作为自定义字段传入,并在模板中引用该字段:
1. 创建信封时注入自定义字段(Java SDK 示例)
// 假设 signerName 已知(例如从您的业务系统获取)
String signerName = "李四";
EnvelopeDefinition envelope = new EnvelopeDefinition()
.emailSubject("请签署:合同协议")
.documents(Arrays.asList(document))
.recipients(new Recipients()
.signers(Arrays.asList(
new Signer()
.email("signer@example.com")
.name(signerName) // 设置签署人姓名(用于UI和签名过程)
.recipientId("1")
.routingOrder("1")
))
)
.status("sent");
// ? 关键:添加自定义字段(type="text"),供邮件模板使用
envelope.setCustomFields(
new CustomFields()
.textCustomFields(Arrays.asList(
new TextCustomField()
.name("SignerName") // 字段名,将在模板中引用为 [[Data:SignerName]]
.value(signerName) // 实际值
.show(true) // 可选:是否在 DocuSign UI 中显示
))
);2. 在 DocuSign 账户中配置邮件模板
进入 Settings → Email Preferences → Envelope Complete Emails,编辑 SenderEnvelopeComplete_HtmlBody 模板,替换为:
<p>您好,</p> <p>您的信封 <strong>[[Data:EnvelopeName]]</strong> 已完成签署。</p> <p>签署人:<strong>[[Data:SignerName]]</strong></p> <p>完成时间:<strong>[[Data:CompletedDate]]</strong></p>
⚠️ 注意:
[[Data:SignerName]]此处引用的是您通过TextCustomField注入的自定义字段,不是内置的签署人上下文变量。
3. 验证与注意事项
- 自定义字段名称(
name)必须严格匹配模板中的[[Data:xxx]],区分大小写; - 若信封含多位签署人,您需自行决定注入哪一位的姓名(例如取第一个 signer),或注入 JSON 格式字符串后由前端解析;
-
CustomFields不影响签署流程,仅用于通知、报告或集成回调; - 此方案兼容 captive signing 和所有 SDK 版本(v3.0+ 推荐使用
envelopes.create()+customFields)。
通过该方式,您即可在发送方收到的完成通知中精准、可靠地呈现签署人姓名,既符合 DocuSign 的数据模型约束,又满足业务可读性需求。

















