使用 Ruby on Rails 中的现有模板和预填充值发送 Docusign 信封

问题描述 投票:0回答:1

我目前正在开发一个使用代码授权身份验证与 Docusign 集成的 Ruby on Rails 应用程序。我的目标是发送 Docusign 信封而不附加 Rails 应用程序中的任何文档。相反,我的目标是利用 Docusign 上已包含文档的现有模板。此外,我想预填充这些模板的值并将其发送给用户进行签名。最后,一旦用户签署了文档,我需要以 PDF 形式将签名的文档检索回我的 Rails 应用程序。

以下是我迄今为止所取得的成就以及面临的挑战的详细说明:

  1. 目前进展

    • 使用代码授权身份验证成功将 Docusign 与我的 Rails 应用程序集成。

    • 能够创建信封并使用现有模板发送。

    • 接收未签名的 PDF 回复。

  2. 遇到的挑战

    • 无法发送未附加文件的信封。如果我尝试发送没有文档的信封,我会收到“文档丢失”错误,从而导致请求失败。

    • 不确定如何在现有模板中预填充值,然后再将其发送给用户进行签名。

    • 需要有关如何以 PDF 形式将签名文档检索回我的 Rails 应用程序的指导。

这是我当前的代码

 def send_data_using_template(access_token)
    template_id = "8f33b649-****-4aa2-804a-01f2*****5e3"
    recipient_name = "ali676750"
    recipient_email = "[email protected]"
    document_file_path = "config/Software licensing agreement.pdf"

    fields_to_prefill = {
      "name" => "ahmad",
      "title" => "software engineer"
    }
  
    signer1 = DocuSign_eSign::Signer.new(
      email: recipient_email,
      name: recipient_name,
      recipientId: '11',
      routing_order: '11'
    )
  
    document_base64 = Base64.strict_encode64(File.read(document_file_path))
    document = {
      documentBase64: document_base64,
      name: File.basename(document_file_path),
      fileExtension: File.extname(document_file_path).delete('.'),
      documentId: '1'
    }

    tabs = DocuSign_eSign::Tabs.new

    recipients = DocuSign_eSign::Recipients.new(
      signers: [signer1],
    )
    
    envelope_definition = DocuSign_eSign::EnvelopeDefinition.new(
        emailSubject: "Your subject line here",
      status: "sent",
      template_id: template_id,
      documents: [document],
      tabs: tabs
    )


    envelope_definition.recipients = recipients

    response = HTTParty.post("https://demo.docusign.net/restapi/v2.1/accounts/#{ENV['DOCUSIGN_ACCOUNT_ID']}/envelopes", 
                              headers: { "Authorization" => "Bearer #{access_token}", "Content-Type" => "application/json" },
                              body: envelope_definition.to_json)

    if response.code == 201
      puts "Envelope created successfully "
      envelope_id = response.parsed_response["envelopeId"]

      response = HTTParty.get(
        "https://demo.docusign.net/restapi/v2.1/accounts/#{ENV['DOCUSIGN_ACCOUNT_ID']}/envelopes/#{envelope_id}/documents/combined",
        headers: { "Authorization" => "Bearer #{access_token}" }
      )
      
      decoded_content = Base64.decode64(response.body)

      file_path = "config/signed_document.pdf"

      File.open(file_path, "wb") { |file| file.write(decoded_content) }

      puts "PDF file saved successfully at #{file_path}"
    else
      puts "Error creating envelope: #{response.body}"
    end
  end

这是我寻求帮助的内容:

  1. 发送信封而不附加文档:有没有办法使用已包含文档的现有模板发送信封,而无需从我的 Rails 应用程序附加其他文档?

  2. 在模板中预填充值:如何在发送现有模板以供签名之前预填充现有模板中的值?

  3. 检索签名文档:在用户签名后,将签名文档以 PDF 形式检索回我的 Rails 应用程序的过程是什么?

我将非常感谢任何可以帮助我克服这些挑战的见解、建议或代码片段。预先感谢您的协助!

templates tabs docusignapi envelope docusign-sdk
1个回答
0
投票

1+2 的完成方式与您编写的代码类似。您可以找到完全可以使用的代码示例 - https://github.com/docusign/code-examples-ruby/blob/master/app/services/e_sign/eg017_set_template_tab_values_service.rb,它展示了如何使用模板而不是添加文档并设置选项卡值。

一些注意事项:

  1. 您的代码显示附加文档。如果您使用其中包含文档的模板,并且确保在
    template_id
    中放置正确的
    envelope_definition
    ,则无需添加文档,它们将来自模板。
  2. 为了确保您可以设置选项卡值,您需要在代码中添加选项卡(如我链接的示例),或者您必须首先找到在模板的信封中创建的选项卡的 ID,然后进行另一个 API 调用来更新它们的值。第一种方法是单个 API 调用,您可以在该调用中发送信封。第二种方法需要 4 次 API 调用,并且您只能在最后一次调用时发送信封。因此,如果您自己添加选项卡 - 这将为您节省大量工作。
  3. 收件人可以使用 template_roles,也可以像您一样进行设置。请注意,如果按照您的方式进行操作,则模板上将无法包含收件人,模板上也无法包含选项卡。然而,创建这样的模板只能通过 API 来完成。如果您通过 UI 创建模板,则必须至少有一个收件人,如果您希望该收件人具有通过 API 调用添加的选项卡,则必须使用 template_roles 并将它们添加到该特定对象。
© www.soinside.com 2019 - 2024. All rights reserved.