如何在DocuSign PowerForms / Templates上配置eventNotification

时间:2018-01-27 18:38:31

标签: python rest docusignapi

问题

我希望单个DocuSign Template / PowerForm创建的所有文档都配置了webhook,这样我就不需要continuously poll every 15 minutes来获取已完成的文档。我已经完成了很多阅读,并想知道在DocuSign API中是否可以实现这一点。

背景

我有一个自助服务豁免文件:用户导航到URL,填写他们的联系信息(即定义收件人角色),并期望他们完成的豁免被链接系统识别。

我在DocuSign template中使用PowerForm:用户导航到PowerForm的URL,PowerForm会让他们从关联的模板中创建一个新的信封。< / p>

我希望此设置创建的文档能够在完成后通过标准webhook自动通知HTTPS端点。

尝试解决方案

Envelopes::create方法(POST /v2/accounts/{accountId}/envelopes)接受可用于配置webhook的eventNotification参数。 webhook recipe非常适合使用此端点。如果我通过API请求创建每个Envelope,这将解决我的问题,但我喜欢PowerForm附带的可复制URL的简易性。

没有记录,但似乎Envelopes::updatePUT /v2/accounts/{accountId}/envelopes/{envelopeId})可能支持在已创建的信封上配置通知。我可以多次query the most current envelopes获取我的模板,更新正在进行的信封中的通知并处理已完成的信封,但这并不比轮询更好。

我浏览了REST API,特别是TemplatesPowerForms类别,但我没有看到任何明显的方法来配置任何资源来设置eventNotification创造了信封。

这是我已完成的一些API探索的快速代码转储:

#!/usr/bin/env python3
import requests


username = 'user@example.com'
password = 'some-sensitive-password'
integrator_key = 'abcdef01-2345-6789-0abcdef0123456789'


# Authenticate to the DocuSign API, get the base URL for subsequent requests
authenticate_str = (
    "<DocuSignCredentials>"
    "<Username>" + username + "</Username>"
    "<Password>" + password + "</Password>"
    "<IntegratorKey>" + integrator_key + "</IntegratorKey>"
    "</DocuSignCredentials>"
)
headers = {'X-DocuSign-Authentication': authenticate_str,
           'Accept': 'application/json'}
api_base = 'https://demo.docusign.net/restapi/v2/'
resp = requests.get(api_base + 'login_information', headers=headers)
base_url = resp.json()['loginAccounts'][0]['baseUrl']

# Identify all templates in my account
resp = requests.get(base_url + '/templates', headers=headers)
all_templates = resp.json()['envelopeTemplates']

# (Find my template, explore ways I could modify it with PUT, etc.)
template_id = find_desired_template(all_templates)
resp = requests.get(base_url + '/templates/{}'.format(template_id), headers=headers)

# Find just status changed envelopes from some recent date/datetime
resp = requests.get(base_url + '/envelopes',
                    params={'from_date': '2018-01-26'}, headers=headers)

# Configure just a single envelope to have push notifications
envelope_id = resp.json()['envelopes'][0]['envelopeId']

# Configure this _one_ envelope to notify us when completed.
# WARNING: This isn't repeatable: The next auto-created envelope won't work
event_notification = {
    "url": "https://my-own-api.example.com/some/endpoint",
    "loggingEnabled": "true",
    "requireAcknowledgment": "true",
    "useSoapInterface": "false",
    "includeCertificateWithSoap": "false",
    "signMessageWithX509Cert": "false",
    "includeDocuments": "true",
    "includeEnvelopeVoidReason": "true",
    "includeTimeZone": "true",
    "includeSenderAccountAsCustomField": "true",
    "includeDocumentFields": "true",
    "includeCertificateOfCompletion": "true",

    # Only notify on completion
    "envelopeEvents": [
        {"envelopeEventStatusCode": "completed"}
    ],
    "recipientEvents": [
        {"recipientEventStatusCode": "Completed"},
    ],
}

requests.put(base_url + '/envelopes/{}'.format(envelope_id),
             headers=headers,
             json={'eventNotification': event_notification})

约束

我的帐户未配置为DocuSign Connect,这样我就可以在帐户中的文档完成时每隔时通知HTTPS端点。我使用的是共享帐户(正在使用其他不相关的信封/模板),因此无论如何这都不是理想的解决方案。

1 个答案:

答案 0 :(得分:1)

出于商业原因,如果购买了帐户级连接选项,则连接网络挂钩只能与所有信封(或模板/电源表中的所有信封)关联。它可作为许多帐户类型的附加组件使用。

在这种情况下,如您所述,您的webhook监听器将收到其不感兴趣的信封事件的通知。对于这些通知消息,请回复200(已接收),然后丢弃该信息。