You need to enable JavaScript to run this app. 如何在Node.js中使用docusign-esign设置signInEachLocation属性
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中使用docusign-esign设置signInEachLocation属性

问题根因

你现在配置完全不生效、还不报错的原因很简单:signInEachLocation根本就不是TemplateRole类的合法字段。docusign-esign SDK在序列化请求的时候,会把不在类定义里的所有字段直接丢弃,所以你往TemplateRole构造参数里塞这个属性,等于给接口传了个没被识别的无效字段,服务端压根收不到,自然不会触发效果。

正确的配置位置

signInEachLocation是Signer类的专属属性,用来控制签署人是否需要在每一个签名节点手动绘制签名、不能复用之前保存的签名样式。
当你用模板发起信封的时候,TemplateRole的作用非常单一:只是替换模板里预先写死的角色占位(比如把模板里的“[签署人1]”替换成你传的姓名、邮箱),根本没法承载签署行为类的控制配置。这类配置必须通过单独的签署人覆写对象传递,才能被SDK识别、随请求发到服务端:

  • 先把你之前写在TemplateRole里的signInEachLocation删掉,保持TemplateRole只留邮箱、姓名、角色名、自定义tabs这些匹配类字段
  • 单独构建一个Signer对象,确保这个对象里的roleName和TemplateRole里的角色名完全一致,把signInEachLocation: true挂在这个Signer对象上
  • 组装EnvelopeDefinition的时候,补充recipients字段,把这个Signer对象塞进去做属性覆写
正确代码示例
// 原有的TemplateRole,仅保留模板匹配需要的字段
let signerRole = docusign.TemplateRole.constructFromObject({
   email: 'test@email.com',
   name: 'Signer Name',
   roleName: 'signer',
   tabs: tabs
});

// 签署人覆写对象,专门承载行为控制类配置
let signerOverride = docusign.Signer.constructFromObject({
   email: 'test@email.com',
   name: 'Signer Name',
   roleName: 'signer',
   recipientId: '1', // 填模板里对应签署人的ID即可
   signInEachLocation: true
});

// 完整的信封定义
let envelopeDefinition = docusign.EnvelopeDefinition.constructFromObject({
   templateId: '你的模板ID',
   templateRoles: [signerRole],
   recipients: docusign.Recipients.constructFromObject({
      signers: [signerOverride]
   }),
   status: 'sent'
});
容易踩的坑
  • 先核对本地docusign-esign的版本,v5.0.0之前的版本存在签署人覆写逻辑的已知问题,就算属性挂载位置正确,也可能不会被序列化到最终请求里,建议升级到当前稳定版本再做测试
  • 不要忽略账户级配置的优先级:如果你的DocuSign账户后台开启了“允许签署者自动填充已保存签名”的全局规则,全局设置的优先级会高于单个信封的自定义配置,会直接覆盖你传的signInEachLocation参数,需要在账户管理后台同步调整对应权限
  • 对单签名节点的信封别抱太高期待:signInEachLocation: true的核心效果是约束签署者在每一个独立的签名位置都完成手动绘制、不能复用之前的签名样式,如果信封里只放了1个签名tab,就算开了这个属性,签署端的操作流程也不会有明显变化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 14:06:08