如何通过DocuSign eSignature API实现多现场签署人连续签署并返回应用
问题描述
当前我的应用已实现创建envelope、生成recipient view、获取链接并跳转至签署会话的功能。现有流程为:第一个签署人完成签署后返回我的应用,随后主持人会收到邮件以启动第二个签署人的托管会话。我期望实现的流程是:第一个签署人签署后,第二个签署人直接进行签署,全部完成后再返回我的应用,请问该需求是否可行?
当前创建Envelope的请求代码
{ 'emailSubject': emailSubject, 'emailBlurb': emailBlurb, 'status': 'sent', 'envelopeIdStamping': 'false', 'compositeTemplates': [{ 'document': { 'documentId': '1', 'name': fileName, 'documentBase64': base64File }, 'inlineTemplates': [{ 'sequence': '1', 'recipients': { 'inPersonSigners': [{ 'hostEmail': hostEmail, 'hostName': hostName, 'inPersonSigningType': 'inPersonSigner', 'recipientId': '2', 'requireIdLookup': 'false', 'routingOrder': '2', 'signerEmail': signer2Email, 'signerName': signer2Name, 'tabs': { 'signHereTabs': [{ 'documentId': '1', 'anchorString': signatureAnchorString }], 'initialHereTabs': [{ 'documentId': '1', 'anchorString': initialAnchorString }] } //Tabs }] //Signers } //Recipients }] //Inline Templates }, //Documents 'serverTemplates': [{ 'sequence': '1', 'templateId': templateId }], 'inlineTemplates': [{ 'sequence': '2', 'recipients': { 'inPersonSigners': [{ 'hostEmail': hostEmail, 'hostName': hostName, 'inPersonSigningType': 'inPersonSigner', 'signerEmail': signer1Email, 'signerName': signer1Name, 'recipientId': '1', 'requireIdLookup': 'false', 'routingOrder': '1', 'roleName': signer1Role }, { 'hostEmail': hostEmail, 'hostName': hostName, 'inPersonSigningType': 'inPersonSigner', 'signerEmail': signer2Email, 'signerName': signer2Name, 'recipientId': '2', 'requireIdLookup': 'false', 'routingOrder': '2', 'roleName': signer2Role }] //inPersonSigners } //Recipients }] //inlineTemplates } //Template Document
当前获取Recipient View的请求代码
let viewRequest = { 'returnUrl': myappsUrl, 'authenticationMethod': 'none', 'email': hostEmail, 'userName': hostName }
解答:需求完全可行
通过调整路由触发逻辑和Recipient View的生成时机,就能实现连续签署后再返回应用的流程,具体方案如下:
核心调整方向
- 取消邮件触发后续签署:当前流程中主持人收到邮件是因为Envelope默认在路由推进时发送通知,需要改为通过API主动生成下一个签署人的会话链接,而非依赖邮件。
- 监听签署完成事件:通过Webhook监听
recipient_completed事件,一旦第一个签署人完成,立即为第二个签署人生成签署会话链接。 - 统一返回时机:仅在所有签署人完成后,才跳转回你的应用,而非单个签署人完成就返回。
具体代码与流程优化
1. 修正Envelope创建代码(修复语法错误,保留路由顺序)
{ "emailSubject": emailSubject, "emailBlurb": emailBlurb, "status": "sent", "envelopeIdStamping": "false", "compositeTemplates": [ { "document": { "documentId": "1", "name": fileName, "documentBase64": base64File }, "inlineTemplates": [ { "sequence": "1", "recipients": { "inPersonSigners": [ { "hostEmail": hostEmail, "hostName": hostName, "inPersonSigningType": "inPersonSigner", "recipientId": "2", "requireIdLookup": "false", "routingOrder": "2", "signerEmail": signer2Email, "signerName": signer2Name, "tabs": { "signHereTabs": [ { "documentId": "1", "anchorString": signatureAnchorString } ], "initialHereTabs": [ { "documentId": "1", "anchorString": initialAnchorString } ] } } ] } } ] }, { "serverTemplates": [ { "sequence": "1", "templateId": templateId } ], "inlineTemplates": [ { "sequence": "2", "recipients": { "inPersonSigners": [ { "hostEmail": hostEmail, "hostName": hostName, "inPersonSigningType": "inPersonSigner", "signerEmail": signer1Email, "signerName": signer1Name, "recipientId": "1", "requireIdLookup": "false", "routingOrder": "1", "roleName": signer1Role }, { "hostEmail": hostEmail, "hostName": hostName, "inPersonSigningType": "inPersonSigner", "signerEmail": signer2Email, "signerName": signer2Name, "recipientId": "2", "requireIdLookup": "false", "routingOrder": "2", "roleName": signer2Role } ] } } ] } ] }
2. 调整Recipient View生成逻辑
第一个签署人完成后,调用API生成第二个签署人的会话链接:
// 第一个签署人完成后,生成第二个签署人的Recipient View let viewRequest = { "returnUrl": myappsUrl, // 仅所有签署完成后返回应用 "authenticationMethod": "none", "email": signer2Email, // 改为第二个签署人的邮箱 "userName": signer2Name // 改为第二个签署人的姓名 }
3. 完整流程执行步骤
- 应用创建Envelope并设置
status: "sent",Envelope进入路由顺序1(第一个签署人)。 - 生成第一个签署人的Recipient View,跳转至签署页面。
- 监听Webhook的
recipient_completed事件,确认签署人ID为1的签署完成。 - 立即调用Create Recipient View API,为签署人ID为2的用户生成链接并自动跳转。
- 第二个签署人完成签署后,Envelope状态变为
completed,此时跳转至returnUrl回到你的应用。
内容的提问来源于stack exchange,提问作者Nathan Allan
相关产品推荐
相关产品推荐

