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