如何使用Docusign REST API将模板应用于文档

时间:2013-11-17 17:47:51

标签: templates docusignapi envelope

我目前正在使用docusign rest API,我想知道是否有人有一个如何在一个信封中添加文档和模板的示例。我可以访问我需要的模板ID,并且我使用了复合模板来创建一个包含多个文档和相应模板的信封。我只使用模板ID执行此操作。现在我想弄清楚如何将文档添加到复合模板。如果文档包含模板(我可以访问模板ID,如果有的话),则应将模板应用于该文档。

我可以通过其余API将模板应用于文档吗?如果是这样,有没有人有例子?

1 个答案:

答案 0 :(得分:7)

以下是一些示例,说明如何利用复合模板将模板中的信息与通过API请求本身指定的信息相结合。

示例#1:

以下示例请求创建一个Envelope,其中Template用于定义Envelope的标记和收件人角色,但文档和收件人信息由API请求本身提供。

POST https://demo.docusign.net/restapi/v2/accounts/ACCOUNTNBR/envelopes HTTP/1.1

X-DocuSign-Authentication: {"Username":"USERNAME","Password":"PASSWORD","IntegratorKey":"INTEGRATORKEY"}
Content-Type: multipart/form-data; boundary=MY_BOUNDARY
Accept: application/json
Host: demo.docusign.net
Content-Length: 162100

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

{
    "emailBlurb":"Test Email Body",
    "emailSubject": "Test Email Subject",
    "status" : "sent",
    "compositeTemplates": [
    {
        "serverTemplates": [
        {
            "sequence" : 1,
            "templateId": "TEMPLATE_ID"
        }],
        "inlineTemplates": [
        {
            "sequence" : 2,
            "recipients": {
                "signers" : [{
                    "email": "bettysemail@outlook.com",
                    "name": "Betty Adamson",
                    "recipientId": "1",
                    "roleName": "RoleOne"
                }]
            }
        }],
        "document": {
            "documentId": 1,
            "name": "test1.pdf"
        }
    }]
}

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

<document bytes removed>

--MY_BOUNDARY--

如上所示,要通过API请求本身提供文档,您需要提交多部分请求 - 其中第一部分代表请求的完整JSON,每个后续部分请求表示JSON中引用的单个文档的内容。如果您的JSON引用了多个文档,那么您的请求将为每个文档包含一个额外/单独的 部分

复合模板非常强大,因为它们在模板中将信息与运行时通过API请求本身提供的信息(文档,收件人)相结合,从而为您提供了极大的灵活性。上面的示例非常简单(一个模板,一个文档,一个收件人) - 但是对于要组合多个模板/文档/收件人的情况,可以轻松扩展它。

(REST API指南p26-27上的示例请求显示了发送多部分请求时所需的基本格式:http://www.docusign.com/sites/default/files/REST_API_Guide_v2.pdf。)

示例#2:

接下来,假设您希望在信封中包含模板中定义的所有文档,但您还希望在信封中包含两个附加文档(未由模板定义)。以下示例请求创建一个Envelope,其中包含2个文档,这些文档被指定为API请求(CustomerAgreement.pdf和Invoice.pdf)的一部分,以及由第3个复合模板结构中引用的模板定义的所有文档。几个一般性说明:

  • 文档将按照它们的顺序显示在信封中 在JSON请求中指定。在此示例中,这意味着文档顺序为:1)CustomerAgreement.pdf(通过第一个复合模板结构中的API请求指定),2)Invoice.pdf(通过第二个复合模板结构中的API请求指定),以及3 )由第三个复合模板结构中引用的模板指定的所有文档。

  • 虽然每个单独的复合模板结构必须指定收件人信息 - 在为信封形成收件人集合时,DocuSign将匹配/合并任何相同的收件人信息。在此示例中,生成的Envelope只有一个收件人:Abby Abbott。

因为我们通过API请求指定了两个文档,所以请求总共有三个部分:1)JSON,2)第一个文档的内容,3)第二个文档的内容。

POST https://demo.docusign.net/restapi/v2/accounts/ACCOUNTNBR/envelopes HTTP/1.1

X-DocuSign-Authentication: {"Username":"USERNAME","Password":"PASSWORD","IntegratorKey":"INTEGRATORKEY"}
Content-Type: multipart/form-data; boundary=MY_BOUNDARY
Accept: application/json
Host: demo.docusign.net
Content-Length: 162100

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

{
    "status" : "sent",
    "emailSubject" : "Test Envelope Subject",
    "emailBlurb" : "Test Envelope Blurb",
    "compositeTemplates": [
    {
        "inlineTemplates": [
        {
            "sequence" : 1,
            "recipients": {
                "signers" : [{
                    "email": "abbysemail@outlook.com",
                    "name": "Abby Abbott",
                    "recipientId": "1"
                }]
            }
        }],
        "document": {
            "documentId": 1,
            "name": "CustomerAgreement",
            "fileExtension": "pdf"
        }
    },
    {
        "inlineTemplates": [
        {
            "sequence" : 2,
            "recipients": {
                "signers" : [{
                    "email": "abbysemail@outlook.com",
                    "name": "Abby Abbott",
                    "recipientId": "1"
                }]
            }
        }],
        "document": {
            "documentId": 2,
            "name": "Invoice",
            "fileExtension": "pdf"
        }
    },
    {
        "serverTemplates": [
        {
            "sequence" : 1,
            "templateId": "TEMPLATE_ID"
        }],
        "inlineTemplates": [
        {
            "sequence" : 2,
            "recipients": {
                "signers" : [{
                    "email": "abbysemail@outlook.com",
                    "name": "Abby Abbott",
                    "recipientId": "1",
                    "roleName": "Initiator",
                    "routingOrder":"1"
                }
                ]
            }
        }]
    }]
}

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

    <document bytes removed>

--MY_BOUNDARY
Content-Type: application/pdf
Content-Disposition: file; filename="Invoice.pdf"; documentid="2"

    <document bytes removed>

--MY_BOUNDARY--