DocuSign事件通知包括REST AP上忽略的文档

时间:2018-09-26 15:50:54

标签: java docusignapi

我正在尝试为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;
}

1 个答案:

答案 0 :(得分:1)

不幸的是,Connect的实现存在一个错误。目前,您可以始终或永远不会在“连接”通知消息中收到信封的文档。

如果您正在使用帐户级Connect订阅,则一种解决方法是创建两个订阅,一个仅用于Envelope.Completed事件。然后包括仅用于后者订阅的文档。

在您的情况下,您正在通过eventNotification对象使用每个信封的订阅。每个信封可以有零个或一个这样的订阅。

最佳实践建议:eventNotifications中不包含信封的文档。这会导致POST通知很大,并且处理起来常常很麻烦(在DocuSign客户方面)。相反,根据需要使用通知作为触发来获取信封的文档。

此外,请确保始终向DocuSign返回200响应。并迅速执行。

推荐

事件通知到达服务器时,将其添加到FIFO可靠队列中,并响应DocuSign。

在单独的执行线程上,有一个或多个 worker 进程处理队列中的消息。

不推荐

事件通知到达服务器时,请同步处理它。完成处理后,请响应DocuSign。

随着数量的增加,此模式将导致大问题,导致服务器通知丢失,重新发送导致的延迟等。您不想去那里。...