Docusign不生成多个嵌入式收件人视图

时间:2014-01-31 21:11:02

标签: ruby-on-rails iframe docusignapi

我通过gem for Rails使用Docusign Rest API。我有2个收件人,需要他们两个签署文件。

它应该像这样工作:

  • 生成信封,借款人信息传递到信封。
  • 显示用于签名的嵌入文档。
  • 返回自定义网址/操作
  • 如果有另一个签名者,应该
    • 重新加载iframe
    • 要求第二个签名者签名,使用刚签名的相同模板

相反,当我为第二个签名者重新加载iframe时,它会中断。它生成信封,我的第二个签名者有唯一的ID,电子邮件等。但是当我创建收件人视图时,它返回nil。

如何让签名者1签名,然后立即为第二个签名者加载,两次都填写所有自定义字段?

def deliver(signing_borrower)

    client = DocusignRest::Client.new
    hashData = {
      status: 'sent',
      template_id: my_id
      signers: [
        {
          embedded: true,
          name: signing_borrower.name,
          email: signing_borrower_email,
          role_name: if (signing_borrower==borrower) then 'Borrower' else 'Co-borrower' end
        }
      ]
    }
    generate_liabilities
    hashData[:signers][0][:tabs] = if (signing_borrower==borrower) then custom_fields else co_borrower_custom_fields end


    #if there is a coborrower, add that data to the form as the second signer
    if co_borrower
      if signing_borrower==co_borrower then opposite_of_signing_borrower = borrower else opposite_of_signing_borrower = co_borrower end

      borrower2= {
        name: opposite_of_signing_borrower.name,
        email: signing_borrower_email(opposite_of_signing_borrower),
        role_name: if (opposite_of_signing_borrower==co_borrower) then 'Co-borrower' else 'Borrower' end
      }

      #add second borrower to hash to generate envelope with all form fields filled
      hashData[:signers] << borrower2
      hashData[:signers][1][:tabs] = {
          textTabs: text_tabs,
          checkboxTabs: checkbox_tabs
        }
    end


    response = client.create_envelope_from_template hashData
    self.envelope_id = response["envelopeId"]
    self.signing_url = DocusignRest::Client.new.get_recipient_view({
      envelope_id: self.envelope_id,
      name: signing_borrower.name,
      email: signing_borrower_email(signing_borrower),
      return_url: return_url
    })

    response
  end

hashData

{:status=>"sent",
 :email=>
  {:subject=>"Application...",
   :body=>"please sign...."},
 :template_id=>"XXXX-XXXX-XXXX",
 :signers=>
  [{:embedded=>true,
    :name=>"DAVID L. TESTCASE",
    :email=>"email@test.com",
    :role_name=>"Borrower",
    :tabs=>
     {:textTabs=>
       [{:tablabel=>"phone",
         :name=>"phone",
         :value=>"717-717-7171"}]
     }
   },
   {:name=>"MARISOL TESTCASE",
    :email=>"email2@test.com",
    :role_name=>"Co-borrower",
    :tabs=>
      {:textTabs=>
         [{:tablabel=>"phone",
         :name=>"phone",
         :value=>"717-717-7171"}]
     }
  }]}

2 个答案:

答案 0 :(得分:2)

您可以通过进行3次API调用来完成您要执行的操作:

  1. 创建信封请求,通过为每个收件人设置 clientUserId 属性,将两个收件人都指定为“嵌入式/自定义”。

  2. POST收件人查看请求获取网址以启动 第一个 签名者的签名会话。

  3. POST收件人查看请求获取网址以启动 第二次 签名者的签名会话。

  4. 以下是这三个调用的示例JSON。

    1 - 创建信封请求

    POST https://{{env}}.docusign.net/restapi/{{version}}/accounts/{{acctId}}/envelopes
    
    {
      "emailSubject": "Please sign this",
      "emailBlurb": "Please sign...thanks!",
      "templateId": "064A7973-B7C1-41F3-A2AD-923CE8889333",
      "status": "sent",
      "templateRoles": [
       {
          "roleName": "Borrower",
          "name": "John Doe",
          "email": "johnsemail@outlook.com",
          "recipientId": "1",
          "clientUserId": "123",
          "tabs":{
                "textTabs":[
                   {
                      "tabLabel":"BorrowerPhone",
                      "value":"717-717-7171"
                   },
                ],
             }
        },
        {
          "roleName": "Co-borrower",
          "name": "Jane Doe",
          "email": "janesemail@outlook.com",
          "recipientId": "2",
          "clientUserId": "567",
          "tabs":{
                "textTabs":[
                   {
                      "tabLabel":"Co-borrowerPhone",
                      "value":"717-717-7171"
                   },
                ],
             }
        }
      ]
    }
    

    成功的回复将包含新创建的信封的ID。

    2 - POST收件人视图(针对第一个收件人)

    第一个签名者准备签名时拨打此电话。在请求网址中, {{envelopeId}} 创建信封请求的响应中返回的信封标识值,请求正文中的信息对应于信息您在创建信封请求中提交了第一个收件人。

    POST https://{{env}}.docusign.net/restapi/{{version}}/accounts/{{acctId}}/envelopes/{{envelopeId}}/views/recipient
    
    {
         "authenticationMethod": "Email",
         "clientUserId": "123",
         "userName": "John Doe",
         "email": "johnsemail@outlook.com",
         "returnUrl": "http://www.google.com"
    }
    

    响应将包含可用于为第一个收件人启动DocuSign Envelope的URL。

    3 - POST收件人视图(针对第二个收件人)

    在第二个签名者签名时拨打此电话。在请求网址中, {{envelopeId}} 是在创建信封请求的响应中返回的信封ID值,请求中的信息对应于您的信息已在创建信封请求中提交第二个收件人。

    POST https://{{env}}.docusign.net/restapi/{{version}}/accounts/{{acctId}}/envelopes/{{envelopeId}}/views/recipient
    
    {
         "authenticationMethod": "Email",
         "clientUserId": "567",
         "userName": "Jane Doe",
         "email": "janesemail@outlook.com",
         "returnUrl": "http://www.google.com"
    }
    

    响应将包含可用于为第二个收件人启动DocuSign信封的URL。

答案 1 :(得分:0)

我认为问题出在你正在构建的JSON请求体中。我很好奇你在哪里添加了embedded => true属性,这不在API文档或示例中。据我所知,这不是一个有效的属性,但我认为DocuSign API是宽容的,因为它不会在发送未识别的属性时出错,而是忽略它们。

通常,在创建Embedded(又名“Captive”)收件人时,您需要为这些收件人配置至少3个属性:

1.  email
2.  name
3.  clientUserId

所有这些都是客户端可配置的(即您可以将它们设置为您想要的任何值),但是无论您在添加每个收件人时使用什么值,您都需要在为它们请求签名URL时引用相同的确切值。

例如,要添加两个嵌入式收件人,您可以发送以下(部分)请求正文:

"signers": [
    {
        "name": "Sally Doe",
        "email": "test_1@email.com"
        "clientUserId": "1000"
    },
    {
        "name": "John Doe",
        "email": "test_2@email.com"
        "clientUserId": "1001"
    }
]

如果您没有为收件人指定routingOrder,则默认为路由顺序= 1.如果您未指定recipientId,系统将为每个收件人生成唯一的GUID并分配给他们


创建信封并添加收件人后,您可以请求签名网址,但如上所述,您需要引用nameemail的相同值和clientUserId

有关详细信息,请查看DocuSign开发人员中心的嵌入功能页面:

http://www.docusign.com/developer-center/explore/features