我正在尝试为docusign中的信封事件和收件人事件设置事件通知,但是我没有得到预期的结果。
我正在使用官方Java SDK中的java模型,所以我假定这是正确的。
因此,我的代码是:
private EventNotification createEventNotificationForRequest()
{
EventNotification eventNotification = new EventNotification();
eventNotification.setUrl(webhooksEnvelopeUpdateUrl);
envelopeEventToIncludeDocumentsMap.forEach(
(eventType, includeDocuments) ->
eventNotification.addEnvelopeEventsItem(
new EnvelopeEvent().envelopeEventStatusCode(eventType).includeDocuments(includeDocuments)));
recipientEventToIncludeDocumentsMap.forEach(
(eventType, includeDocuments) ->
eventNotification.addRecipientEventsItem(
new RecipientEvent().recipientEventStatusCode(eventType).includeDocuments(includeDocuments)));
return eventNotification;
}
以这样的方式创建两个地图:
//We want to be notified of all events, and receive a copy of the document if it is completed
// Map<EventType, IncludedDocumentsBooleanAsString>
private static Map<String, String> envelopeEventToIncludeDocumentsMap = ImmutableMap.<String, String>builder()
.put("Completed", TRUE)
.put("Declined", FALSE)
.put("Delivered", FALSE)
.put("Sent", FALSE)
.put("Voided", FALSE)
.build();
private static Map<String, String> recipientEventToIncludeDocumentsMap = ImmutableMap.<String, String>builder()
.put("AuthenticationFailed", FALSE)
.put("AutoResponded", FALSE)
.put("Completed", FALSE)
.put("Declined", FALSE)
.put("Delivered", FALSE)
.put("Sent", FALSE)
.build();
基于此,我的预期行为是,我将通过每种事件类型的提供的URL上的webhooks获取事件通知,但是当信封移至完成的步骤时,我们还将在webhook中获得完成的文档。一切顺利,但完整的文档事件通知未发送到已签名的pdf副本。
稍作调整,如下所示,我可以更改EventNotification
对象,使其确实返回文档,但是现在它为每个事件返回文档 ,并且仍然忽略{ {1}}字段中的特定事件。
includeDocuments
我对这种行为的期望是否错误,还是还有其他可见的问题?
有关发送的相关JSON的代码段,请参见下文:
private EventNotification createEventNotificationForRequest()
{
EventNotification eventNotification = new EventNotification();
eventNotification.setUrl(webhooksEnvelopeUpdateUrl);
// BELOW LINE IS CHANGE
eventNotification.includeDocuments(TRUE);
envelopeEventToIncludeDocumentsMap.forEach(
(eventType, includeDocuments) ->
eventNotification.addEnvelopeEventsItem(
new EnvelopeEvent().envelopeEventStatusCode(eventType).includeDocuments(includeDocuments)));
recipientEventToIncludeDocumentsMap.forEach(
(eventType, includeDocuments) ->
eventNotification.addRecipientEventsItem(
new RecipientEvent().recipientEventStatusCode(eventType).includeDocuments(includeDocuments)));
return eventNotification;
}
答案 0 :(得分:1)
不幸的是,Connect的实现存在一个错误。目前,您可以始终或永远不会在“连接”通知消息中收到信封的文档。
如果您正在使用帐户级Connect订阅,则一种解决方法是创建两个订阅,一个仅用于Envelope.Completed事件。然后包括仅用于后者订阅的文档。
在您的情况下,您正在通过eventNotification对象使用每个信封的订阅。每个信封可以有零个或一个这样的订阅。
最佳实践建议:eventNotifications中不包含信封的文档。这会导致POST通知很大,并且处理起来常常很麻烦(在DocuSign客户方面)。相反,根据需要使用通知作为触发来获取信封的文档。
此外,请确保始终向DocuSign返回200响应。并迅速执行。
事件通知到达服务器时,将其添加到FIFO可靠队列中,并响应DocuSign。
在单独的执行线程上,有一个或多个 worker 进程处理队列中的消息。
事件通知到达服务器时,请同步处理它。完成处理后,请响应DocuSign。
随着数量的增加,此模式将导致大问题,导致服务器通知丢失,重新发送导致的延迟等。您不想去那里。...