如何将服务器模板应用于 DocuSign API 中的信封文档?

How do I apply a server template to envelope document in DocuSign API?

我有一个客户登录他们的 DS 帐户,上传一个 17 页的 PDF,单击旁边的操作 link 并选择 "Apply Template"。该模板包含选项卡和角色。他们在 DS UI 中填写角色,然后单击发送。我正在尝试通过 API.

重建该过程

我发现这看起来应该适合我的场景:How do I apply a template to a document using Docusign REST API

我收到的是一个 34 页的信封:原始的 17 页上传 PDF 和模板中的 17 页。正在添加与应用模板。

该模板确实将其文档拆分出来(例如,一个 4 页的文档有两个选项卡,一个 1 页的文档有 1 个选项卡,等等。总共 17 页)。它在 UI 中运行良好,所以不确定这是否会影响任何内容。

如何上传 PDF 并将模板应用到文档中?

这是我的请求负载:

POST https://demo.docusign.net/restapi/v2/accounts/ACCTNMBR/envelopes HTTP/1.1
Accept: application/json
Content-Type: multipart/form-data; boundary=myboundary


--myboundary
Content-Type: application/json
Content-Disposition: form-data

{
  "emailBlurb": "Test Envelope Blurb",
  "emailSubject": "Test Envelope Subject",
  "status": "created",
  "signingLocation": "Online",
  "compositeTemplates": [
  {
    "document": {
      "documentId": 1,
      "name": "UPLOADED.pdf"
    },
    "inlineTemplates": [{
      "sequence": "1",
      "recipients": {
        "signers": [{
          "email": "jane.doe@example.com",
          "name": "Jane Doe",
          "recipientId": "1",
          "roleName": "Signer1",
          "clientUserId": "123"
        }]
      }
    }]
  },
  {
    "serverTemplates": [{
      "sequence": "1",
      "templateId": "TEMPLATE_ID"
    }]
  }]
}

--myboundary

Content-Type: application/pdf
Content-Disposition: file; filename="UPLOADED.pdf"; documentid=1

PDF_BYTES_HERE

--myboundary--

您发布的请求正在创建两个复合模板。第一个包含您上传的 PDF 并定义您的签名者,而第二个提取您的服务器端模板的内容。解决方案是只定义一个复合模板。这将导致您上传的 PDF、内联模板和服务器端模板全部合并。例如:

POST https://demo.docusign.net/restapi/v2/accounts/ACCTNMBR/envelopes HTTP/1.1
Accept: application/json
Content-Type: multipart/form-data; boundary=myboundary


--myboundary
Content-Type: application/json
Content-Disposition: form-data

{
  "emailBlurb": "Test Envelope Blurb",
  "emailSubject": "Test Envelope Subject",
  "status": "created",
  "signingLocation": "Online",
  "compositeTemplates": [
  {
    "document": {
      "documentId": 1,
      "name": "UPLOADED.pdf"
    },
    "inlineTemplates": [{
      "sequence": "1",
      "recipients": {
        "signers": [{
          "email": "jane.doe@example.com",
          "name": "Jane Doe",
          "recipientId": "1",
          "roleName": "Signer1",
          "clientUserId": "123"
        }]
      }
    }],
    "serverTemplates": [{
      "sequence": "2",
      "templateId": "TEMPLATE_ID"
    }]
  }]
}

--myboundary

Content-Type: application/pdf
Content-Disposition: file; filename="UPLOADED.pdf"; documentid=1

PDF_BYTES_HERE

--myboundary--

不过有几点需要注意:

  • 第一个文档获胜 - 较低序列模板提供文档。
  • 最后 recipients/tabs 获胜 - 更高序列模板覆盖 recipients/tabs。
  • 如果您的服务器端模板有多个文档,那么您可能需要上传多个文档。如果您打算上传一个 PDF,那么您的服务器端模板也应该有一个文档。

最终的答案是用草稿形式的上传文档创建一个信封。然后将模板应用于信封文档而不是信封本身或使用复合模板。

POST https://demo.docusign.net/restapi/v2/accounts/ACCTNMBR/envelopes/ENVELOPEID/documents/1/templates HTTP/1.1
Accept: application/json
Content-Type: application/json

{
  "documentTemplates": [{
    "documentId": "1",
    "templateId": "TEMPLATE_ID",
    "documentStartPage": "1",
    "documentEndPage": "15"
  }]
}