Docusignapi Docusign webhook消息无法区分不同的compositetemplate

Docusignapi Docusign webhook消息无法区分不同的compositetemplate,docusignapi,Docusignapi,我已经创建了一个信封,其中包含2个带有嵌入式签名的复合模板,我可以将它与webhook事件通知连接起来,以便在用户完成签名后接收消息,这样我就可以尝试更新我的db并下载该文件。但是,webhook响应没有自定义字段,我需要这些字段来标识哪个文件属于哪个文件,以便更新db行 这是我的json序列化信封示例。请注意每个内联模板上的自定义字段,其属性为DocuInfoId。我需要这些值来更新我的db行 { "status": "sent", "emailSubject": "DocuSign

我已经创建了一个信封,其中包含2个带有嵌入式签名的复合模板,我可以将它与webhook事件通知连接起来,以便在用户完成签名后接收消息,这样我就可以尝试更新我的db并下载该文件。但是,webhook响应没有自定义字段,我需要这些字段来标识哪个文件属于哪个文件,以便更新db行

这是我的json序列化信封示例。请注意每个内联模板上的自定义字段,其属性为DocuInfoId。我需要这些值来更新我的db行

{
  "status": "sent",
  "emailSubject": "DocuSign API - Template Example",
  "eventNotification": {
    "url": "https:\/\/mytestsite.net\/api\/documentstuff\/docusign\/available",
    "loggingEnabled": "false",
    "requireAcknowledgment": "true",
    "useSoapInterface": "false",
    "soapNameSpace": "",
    "includeCertificateWithSoap": "false",
    "signMessageWithX509Cert": "false",
    "includeDocuments": "false",
    "includeEnvelopeVoidReason": "false",
    "includeTimeZone": "true",
    "includeSenderAccountAsCustomField": "false",
    "includeDocumentFields": "false",
    "includeCertificateOfCompletion": "true",
    "envelopeEvents": [
      {
        "envelopeEventStatusCode": "Sent",
        "includeDocuments": null
      },
      {
        "envelopeEventStatusCode": "Completed",
        "includeDocuments": "true"
      }
    ],
    "recipientEvents": [
      {
        "recipientEventStatusCode": "Completed",
        "includeDocuments": "true"
      }
    ]
  },
  "compositeTemplates": [
    {
      "inlineTemplates": [
        {
          "sequence": "1",
          "recipients": {
            "signers": [
              {
                "clientUserId": "1",
                "recipientId": "1",
                "email": "testemail@test.com",
                "name": "Client Name",
                "roleName": "Client",
                "tabs": {
                  "TextTabs": "Just a bunch of text tabs, radio group, etc"
                }
              },
              {
                "clientUserId": "2",
                "recipientId": "2",
                "email": "testemail@test.com",
                "name": "Owner Name",
                "roleName": "Owner",
                "tabs": null
              }
            ]
          },
          "customFields": {
            "ListCustomFields": [
              {
                "name": "DocuInfoId",
                "required": "True",
                "show": "False",
                "value": "77",
                "listItems": null
              },
              {
                "name": "OpportunityId",
                "required": "True",
                "show": "False",
                "value": "1",
                "listItems": null
              }
            ]
          }
        }
      ],
      "serverTemplates": [
        {
          "sequence": "1",
          "templateId": "TemplateIDNumber1"
        }
      ]
    },
    {
      "inlineTemplates": [
        {
          "sequence": "2",
          "recipients": {
            "signers": [
              {
                "clientUserId": "1",
                "recipientId": "1",
                "email": "testemail@test.com",
                "name": "Client Name",
                "roleName": "Client",
                "tabs": {
                  "TextTabs": "Just another bunch of text tabs, radio group tab, etc"
                }
              }
            ]
          },
          "customFields": {
            "ListCustomFields": [
              {
                "name": "DocuInfoId",
                "required": "True",
                "show": "False",
                "value": "88",
                "listItems": null
              },
              {
                "name": "OpportunityId",
                "required": "True",
                "show": "False",
                "value": "1",
                "listItems": null
              }
            ]
          }
        }
      ],
      "serverTemplates": [
        {
          "sequence": "2",
          "templateId": "TemplateIDNumber2"
        }
      ]
    }
  ]
}
一旦我完成签名,就会触发webhook事件通知,并使用此响应消息调用我的api

{
  "EnvelopeStatus": {
    "EnvelopeID": "EnvelopeIDGivenByDocusign",
    "Status": "Completed",
    "CustomFields": [
      {
        "Name": "ContactID",
        "Show": "True",
        "Required": "False",
        "Value": ""
      },
      {
        "Name": "OpportunityID",
        "Show": "True",
        "Required": "False",
        "Value": ""
      },
      {
        "Name": "AccountID",
        "Show": "True",
        "Required": "False",
        "Value": ""
      },
      {
        "Name": "DocuInfoId",
        "Show": "False",
        "Required": "True",
        "Value": "88"
      },
      {
        "Name": "OpportunityId",
        "Show": "False",
        "Required": "True",
        "Value": "1"
      },
      {
        "Name": "LQAID",
        "Show": "True",
        "Required": "False",
        "Value": ""
      }
    ],
    "DocumentStatuses": [
      {
        "ID": 1,
        "Name": "Document - TX - 1001.pdf",
        "TemplateName": "Document - TX",
        "Sequence": 1
      },
      {
        "ID": 2,
        "Name": "Rejection.pdf",
        "TemplateName": "Rejection Form",
        "Sequence": 2
      }
    ]
  },
  "DocumentPDFs": [
    {
      "Name": "Document - TX - 1001.pdf",
      "DocumentID": "1",
      "DocumentType": "CONTENT"
    },
    {
      "Name": "Rejection.pdf",
      "DocumentID": "2",
      "DocumentType": "CONTENT"
    },
    {
      "Name": "CertificateOfCompletion_78sd89fuas89sadf.pdf",
      "DocumentID": null,
      "DocumentType": "SUMMARY"
    }
  ]
}
查看响应,只有1个docuinfoid的值为88,我也不确定自定义字段的其余部分来自何处,例如:“LQAID”。现在,我不确定这是属于哪个文档,第一个pdf文件(Document-TX-1001.pdf)还是第二个pdf文件(retainment.pdf)


有没有办法知道哪个pdf文档属于哪个docuinfoid,这样我就可以将它正确地附加到数据库中?

在DocuSign中有不同类型的自定义字段

  • 信封自定义字段将元数据与整个信封相关联
  • 文档自定义字段将元数据与信封中的特定文档相关联
要确定创建信封请求设置的自定义字段类型,可以对信封/文档执行以下请求并评估结果:

获取信封自定义字段

GET/v2/accounts/{accountId}/envelopes/{envelopeId}/custom_字段

获取文档自定义字段

GET/v2/accounts/{accountId}/envelopes/{envelopeId}/documents/{documentId}/fields

我怀疑您的创建信封请求可能正在设置信封自定义字段——这将元数据与整个信封相关联,而不是与信封中的任何特定文档相关联


根据您所描述的内容,听起来您希望为信封中的特定文档指定元数据。如果是这种情况,您需要修改创建信封请求的结构/内容,以设置文档自定义字段(而不是设置信封自定义字段)。

而不是使用XML的
自定义字段
部分的值,使用
选项卡status
元素中包含的值


您需要进行更多的解析,但它会提供所有上下文信息。

您可以为每个CompositeTemplate设置compositeTemplateId,然后在每个信封自定义字段中使用此Id。我已经修改了您的JSON请求以包含CompositeTemplateId

{
  "status": "sent",
  "emailSubject": "DocuSign API - Template Example",
  "eventNotification": {
    "url": "https:\/\/mytestsite.net\/api\/documentstuff\/docusign\/available",
    "loggingEnabled": "false",
    "requireAcknowledgment": "true",
    "useSoapInterface": "false",
    "soapNameSpace": "",
    "includeCertificateWithSoap": "false",
    "signMessageWithX509Cert": "false",
    "includeDocuments": "false",
    "includeEnvelopeVoidReason": "false",
    "includeTimeZone": "true",
    "includeSenderAccountAsCustomField": "false",
    "includeDocumentFields": "false",
    "includeCertificateOfCompletion": "true",
    "envelopeEvents": [
      {
        "envelopeEventStatusCode": "Sent",
        "includeDocuments": null
      },
      {
        "envelopeEventStatusCode": "Completed",
        "includeDocuments": "true"
      }
    ],
    "recipientEvents": [
      {
        "recipientEventStatusCode": "Completed",
        "includeDocuments": "true"
      }
    ]
  },
  "compositeTemplates": [
    {
      "compositeTemplateId": "1",
      "inlineTemplates": [
        {
          "sequence": "1",
          "recipients": {
            "signers": [
              {
                "clientUserId": "1",
                "recipientId": "1",
                "email": "testemail@test.com",
                "name": "Client Name",
                "roleName": "Client",
                "tabs": {
                  "TextTabs": "Just a bunch of text tabs, radio group, etc"
                }
              },
              {
                "clientUserId": "2",
                "recipientId": "2",
                "email": "testemail@test.com",
                "name": "Owner Name",
                "roleName": "Owner",
                "tabs": null
              }
            ]
          },
          "customFields": {
            "ListCustomFields": [
              {
                "name": "DocuInfoId_1",
                "required": "True",
                "show": "False",
                "value": "77",
                "listItems": null
              },
              {
                "name": "OpportunityId_1",
                "required": "True",
                "show": "False",
                "value": "1",
                "listItems": null
              }
            ]
          }
        }
      ],
      "serverTemplates": [
        {
          "sequence": "1",
          "templateId": "TemplateIDNumber1"
        }
      ]
    },
    {
      "compositeTemplateId": "2",
      "inlineTemplates": [
        {
          "sequence": "2",
          "recipients": {
            "signers": [
              {
                "clientUserId": "1",
                "recipientId": "1",
                "email": "testemail@test.com",
                "name": "Client Name",
                "roleName": "Client",
                "tabs": {
                  "TextTabs": "Just another bunch of text tabs, radio group tab, etc"
                }
              }
            ]
          },
          "customFields": {
            "ListCustomFields": [
              {
                "name": "DocuInfoId_2",
                "required": "True",
                "show": "False",
                "value": "88",
                "listItems": null
              },
              {
                "name": "OpportunityId_2",
                "required": "True",
                "show": "False",
                "value": "1",
                "listItems": null
              }
            ]
          }
        }
      ],
      "serverTemplates": [
        {
          "sequence": "2",
          "templateId": "TemplateIDNumber2"
        }
      ]
    }
  ]
}

现在,当您收到WebHook响应时,您将能够知道下面的哪些自定义字段与哪个复合模板相关联。我还有一个建议,因为您没有使用任何下拉列表,那么最好使用
TextCustomFields
而不是
ListCustomFields

我应该在复合模板上使用document属性吗?若你们看一下我最初的信封请求,我并没有什么东西可以放在文档中,所有的东西都来自服务器模板和内联模板。我只需要一种方法来知道webhook响应文档PDFS属性中的结果属于哪一个,您有什么例子吗?那么TabStatus将位于inlinetemplate属性内?当我从webhook信封中收到完整的消息时,它会是什么样子?