You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

DocuSign更新信封后Signer Tabs丢失问题技术咨询

DocuSign API更新文档后签名标签丢失的问题分析与解决

咱们先拆解一下你遇到的问题根源:

为什么签名标签丢失,但收件人仍能收到邮件?

  • UpdateDocuments方法的默认行为:当你调用apiClient.UpdateDocuments()替换信封里的文档时,DocuSign API会默认清除原有的收件人标签(SignerTabs)。这是因为API假设新文档的布局可能和旧文档完全不同,不会自动继承旧标签,需要你重新定义。
  • 锚点文本缺失:你最初用anchorString="/sn1/"来定位签名位置,但如果更新后的新文档里没有/sn1/这段锚点文本,就算你重新设置了SignerTabs,标签也找不到对应的位置,自然不会显示在文档上。
  • 收件人路由逻辑独立:信封能正确发给对应签署人,是因为DocuSign的路由只依赖收件人的核心标识(RecipientId、邮箱、姓名),这些信息你在更新时保留了,所以路由不受标签缺失的影响。

解决方案

方案一:确保新文档包含锚点文本,同时完整更新收件人及标签

你需要在更新信封时,把带标签的收件人信息和新文档一起提交,而不是分开调用UpdateDocumentsUpdate。这样能确保标签和新文档绑定生效:

// 1. 可选:获取原信封的收件人基础信息,避免重复定义
var existingRecipients = apiClient.ListRecipients(_accountId, envelopeId);
Signer targetSigner = existingRecipients.Signers.First(s => s.RecipientId == "1");

// 2. 为新文档重新定义标签(必须确保新文档里有对应的anchorString)
SignHere signHereTab = new SignHere { 
    AnchorString = "/sn1/",
    AnchorUnits = "pixels",
    AnchorYOffset = "10" // 可选:调整锚点的垂直偏移
};
DateSigned dateSignedTab = new DateSigned { AnchorString = "/date1/" };
FullName fullNameTab = new FullName { AnchorString = "/name1/" };

// 3. 组装标签集合
Tabs signerTabs = new Tabs {
    SignHereTabs = new List<SignHere> { signHereTab },
    DateSignedTabs = new List<DateSigned> { dateSignedTab },
    FullNameTabs = new List<FullName> { fullNameTab }
};

// 4. 给收件人绑定新标签
targetSigner.Tabs = signerTabs;
Recipients updatedRecipients = new Recipients { Signers = new List<Signer> { targetSigner } };

// 5. 准备完整的信封更新定义
EnvelopeDefinition updateEnvDef = new EnvelopeDefinition {
    EmailSubject = "Updated documents",
    EmailBlurb = "Changes were made to the document(s)",
    Status = EnumHelper.GetDescription(DSStatus.Sent),
    Documents = new List<Document> { doc }, // 你的新文档
    Recipients = updatedRecipients // 必须包含带标签的收件人
};

// 6. 一次性完成更新+重发
var updateOptions = new EnvelopesApi.UpdateOptions { resendEnvelope = "true" };
apiClient.Update(_accountId, envelopeId, updateEnvDef, updateOptions);

方案二:用固定坐标定位标签(无需锚点文本)

如果新文档不方便添加锚点文本,你可以直接指定标签在文档上的固定坐标位置:

SignHere signHereTab = new SignHere {
    DocumentId = "1", // 对应新文档的ID,确保和你传入的doc.DocumentId一致
    PageNumber = "1",
    XPosition = "150", // 水平坐标(像素)
    YPosition = "300"  // 垂直坐标(像素)
};

// 后续步骤和方案一一致:组装标签、绑定给收件人、提交更新

注意事项

  • 避免分开调用UpdateDocumentsUpdate:前者会清空原有标签,后者如果只更新邮件内容而不重新设置标签,就会导致标签丢失。
  • 确认新文档的DocumentId和标签中指定的DocumentId一致,否则标签会绑定到错误的文档上。
  • 重发时resendEnvelope="true"会触发DocuSign给所有未完成的收件人发送最新的邮件,确保他们看到的是带标签的新文档。

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

火山引擎 最新活动