用户指南 取消(C)

Acrobat Sign Webhook 概述

 

Adobe Acrobat Sign 指南

新增功能

  1. 预发行说明
  2. 发行说明
  3. 重要通知

快速入门

  1. 管理员快速入门指南
  2. 用户快速入门指南
  3. 针对开发人员
  4. 视频教程库
  5. 常见问题

管理

  1. Admin Console 概述
  2. 用户管理
    1. 添加用户
      1. 添加一名用户
      2. 批量添加用户
      3. 从目录添加用户
      4. 从 MS Azure Active Directory 添加用户
    2. 创建以功能为中心的用户
      1. 技术帐户 - API 驱动
      2. 服务帐户 - 手动驱动
    3. 检查是否有用户存在配置错误
    4. 更改姓名/电子邮件地址
    5. 编辑用户的组成员资格
    6. 通过组界面编辑用户的组成员资格
    7. 将用户提升为管理员角色
    8. 用户身份类型和 SSO
    9. 切换用户标识
    10. 使用 MS Azure 对用户进行身份验证
    11. 使用 Google 联合身份验证对用户进行身份验证
    12. 产品配置文件
    13. 登录体验
  3. 帐户/组设置
    1. 设置概述
    2. 全局设置
      1. 帐户级别和 ID
      2. 全新的收件人体验
      3. 自签名工作流
      4. 批量发送
      5. Web 表单
      6. 自定义发送工作流程
      7. Power Automate 工作流程
      8. 库文档
      9. 收集包含协议的表单数据
      10. 有限文件可见性
      11. 附加已签名协议的 PDF 副本
      12. 在电子邮件中包含链接
      13. 在电子邮件中包含图像
      14. 附加至电子邮件的文件将命名为
      15. 将审核报告附加到文档
      16. 将多个文档合并为一个
      17. 下载单个文档
      18. 上传签名文档
      19. 我的账户中的用户委托
      20. 允许外部收件人委派
      21. 授权签名
      22. 授权发送
      23. 授权添加电子密封
      24. 设置默认时区
      25. 设置默认日期格式
      26. 位于多个组的用户 (UMG)
        1. 升级以使用 UMG
      27. 组管理员权限
      28. 替换接收者
      29. 审核报告
        1. 概述
        2. 允许在事务验证页面上进行未经身份验证的访问
        3. 包含提醒
        4. 包含查看事件
        5. 包含协议页面/附件计数
      30. 事务页脚
      31. 在产品消息发送和指南中
      32. 可访问的 PDF
      33. 新版“编辑”体验
      34. 医疗保健客户
    3. 帐户设置
      1. 添加标志
      2. 自定义公司主机名/URL
      3. 添加公司名称
      4. 发布协议 URL 重定向
    4. 签名首选项
      1. 格式精美的签名
      2. 允许收件人签名的方式
      3. 签名者可以更改其姓名
      4. 允许接收者使用其保存的签名
      5. 自定义使用条款和消费者信息披露条款
      6. 在表单字段中导航收件人
      7. 重启协议工作流
      8. 拒绝签名
      9. 允许图章工作流
      10. 要求签名者提供其职务或公司
      11. 允许签名者打印并置入书面签名
      12. 进行电子签名时显示消息
      13. 需要签名者使用移动设备创建其签名
      14. 请求签名者的 IP 地址
      15. 从参与者图章中排除公司名称和职务
    5. 数字签名
      1. 概述
      2. 下载并使用 Acrobat 签名
      3. 使用云签名进行签名
      4. 包括身份提供商的元数据
      5. 受限的云签名提供商
    6. 电子签章
    7. 数字身份
      1. 数字身份网关
      2. 身份检查策略
    8. 报告设置
      1. 新版报告体验
      2. 经典报告设置
    9. 安全设置
      1. 单点登录设置
      2. 记住我设置
      3. 登录密码政策
      4. 登录密码强度
      5. Web 会话持续时间
      6. PDF 加密类型
      7. API
      8. 用户和组信息访问
      9. 允许的 IP 范围
      10. 帐户共享
      11. 帐户共享权限
      12. 协议共享控件
      13. 签名者身份验证
      14. 协议签名密码
      15. 文档密码强度
      16. 按地理位置屏蔽签名者
      17. 手机身份验证
      18. 基于知识的身份验证 (KBA)
      19. 允许页面提取
      20. 文档链接过期
      21. 上传用于 Webhook/回调的客户端证书
      22. 时间戳
    10. 发送设置
      1. 登录后显示“发送”页面
      2. 发送时需要收件人姓名
      3. 锁定已知用户的名称值
      4. 允许的收件人角色
      5. 允许电子见证人
      6. 收件人组
      7. CC
      8. 收件人协议访问
      9. 必填字段
      10. 附加文件
      11. 字段拼合
      12. 修改协议
      13. 协议名称
      14. 语言
      15. 私人消息
      16. 允许的签名类型
      17. 提醒
      18. 已签名文档的密码保护
      19. 通过以下方式发送协议通知
      20. 签名者身份识别选项
        1. 概述
        2. 签名密码
        3. 通过电子邮件发送一次性密码
        4. Acrobat Sign 身份验证
        5. 手机身份验证
        6. 基于云的数字签名
        7. 基于知识的身份验证
        8. 政府 ID
        9. 签名者身份报告
      21. 内容保护
      22. 启用 Notarize 事务
      23. 文件过期
      24. 预览、定位签名和添加字段
      25. 签名顺序
      26. “液体”模式
      27. 自定义工作流控件
      28. 电子签名页面的上传选项
      29. 签名后确认 URL 重定向
    11. 消息模板
    12. 生物识别设置
      1. 概述
      2. 强制执行身份验证
      3. 签名原因
    13. 工作流程集成
    14. 公证设置
    15. 付款集成
    16. 签名者消息发送
    17. SAML 设置
      1. SAML 配置
      2. 安装 Microsoft Active Directory 联合身份验证服务
      3. 安装 Okta
      4. 安装 OneLogin
      5. 安装 Oracle Identity Federation
    18. 数据管理
    19. 时间戳设置
    20. 外部归档
    21. 账户语言
    22. 电子邮件设置
      1. 电子邮件页眉/页脚图像
      2. 允许个人用户电子邮件页脚
      3. 自定义“请求签名”电子邮件
      4. 自定义“收件人”和“抄送”字段
      5. 启用无链接通知
      6. 自定义电子邮件模板
    23. 从 echosign.com 迁移到 adobesign.com
    24. 为收件人配置选项
  4. 监管要求指导
    1. 无障碍访问
      1. 无障碍访问合规性
      2. 使用 Acrobat 桌面版创建可访问的表单
      3. 创建可访问的 AcroForm
    2. HIPAA
    3. GDPR
      1. GDPR 概述
      2. 将用户标记为密文
      3. 将用户的协议标记为密文
    4. 21 CFR part 11 和 EudraLex Annex 11
      1. 21 CRF part 11 验证包
      2. 21 CFR 和 EudraLex Annex 11 手册
      3. 分担责任分析
    5. 医疗保健客户
    6. IVES 支持
    7. “保管”协议
    8. 欧盟/英国注意事项
      1. 欧盟/英国跨国事务和 eIDAS
      2. 电子签名契约的 HMLR 要求
      3. 英国脱欧对英国电子签名法的影响
  5. 批量下载协议
  6. 申请您的域
  7. “举报滥用”链接

发送、签署和管理协议

  1. 收件人选项
    1. 取消电子邮件提醒
    2. 电子签名页面上的选项
      1. 电子签名页面概述
      2. 打开以阅读不含字段的协议
      3. 拒绝签署协议
      4. 委派签名权限
      5. 重启协议
      6. 下载 PDF 版协议
      7. 查看协议历史记录
      8. 查看协议消息
      9. 从电子签名转换为书面签名
      10. 从书面签名转换为电子签名
      11. 浏览表单字段
      12. 清除表单字段中的数据
      13. 电子签名页面放大和导航
      14. 更改协议工具和信息中使用的语言
      15. 查看法律声明
      16. 调整 Acrobat Sign Cookie 首选项
  2. 发送协议  
    1. “发送”页面概述
    2. 仅向您自己发送协议
    3. 将协议发送给其他人
    4. 书面签名
    5. 收件人签名顺序
    6. 批量发送
      1. 批量发送功能概述
      2. 批量发送 - 配置父模板
      3. 批量发送 - 配置 CSV 文件
      4. 取消“批量发送”事务
      5. 添加批量发送提醒
      6. 批量发送报告
  3. 在文档中创作字段
    1. 应用程序内创作环境
      1. 自动字段检测
      2. 使用创作环境拖放字段
      3. 向收件人分配表单字段
      4. 预填充角色
      5. 使用可重复使用的字段模板应用字段
      6. 将字段传输到新库模板
      7. 更新了发送协议时的创作环境
    2. 使用文本标记创建表单
    3. 使用 Acrobat (AcroForms) 创建表单
      1. 创建 AcroForm
      2. 创建无障碍 PDF
    4. 字段
      1. 字段类型
        1. 常用字段类型
        2. 内嵌图像
        3. 图章图像
      2. 字段内容外观
      3. 字段验证
      4. 遮挡的字段值
      5. 设置显示/隐藏条件
      6. 计算型字段
    5. 创作常见问题
  4. 签署协议
    1. 签署发送给您的协议
    2. 填写并签署
    3. 自签名
  5. 管理协议
    1. “管理”页面概述
    2. 委派协议
    3. 替换收件人
    4. 限制文档可见性
    5. 取消协议
    6. 创建新提醒
    7. 查看提醒
    8. 取消提醒
    9. 访问 Power Automate 流程
    10. 更多操作...
      1. 搜索的工作方式
      2. 查看协议
      3. 通过协议创建模板
      4. 在视图中隐藏/取消隐藏协议
      5. 上载已签名协议
      6. 修改已发送协议的文件和字段
      7. 编辑收件人的身份验证方法
      8. 添加或修改过期日期
      9. 向协议添加注释
      10. 共享单个协议
      11. 取消共享协议
      12. 下载单个协议
      13. 下载一份协议下的各个文件
      14. 下载协议的审核报告
      15. 下载协议的字段内容
  6. 审核报告
  7. 报告和数据导出
    1. 概述
    2. 授予用户对报告的访问权限
    3. 报告图表
      1. 创建新报告
      2. 协议报告
      3. 事务报告
      4. 设置活动报告
      5. 编辑报告
    4. 数据导出 
      1. 创建新数据导出
      2. Web 表单数据导出
      3. 编辑数据导出
      4. 刷新数据导出内容
      5. 下载数据导出
    5. 重命名报告/导出
    6. 复制报告/导出
    7. 计划报告/导出
    8. 删除报告/导出
    9. 检查事务使用情况

高级协议功能和工作流程

  1. Web 表单 
    1. 创建 Web 表单
    2. 编辑 Web 表单
    3. 禁用/启用 Web 表单
    4. 隐藏/取消隐藏 Web 表单
    5. 查找 URL 或脚本代码
    6. 使用 URL 参数预填充 Web 表单字段
    7. 保存 Web 表单以便稍后完成
    8. 调整 Web 表单的大小
  2. 可重复使用的模板(库模板)
    1. Acrobat Sign 库中的美国政府表单
    2. 创建库模板
    3. 更改库模板的名称
    4. 更改库模板的类型
    5. 更改库模板的权限级别
    6. 复制、编辑和保存共享模板
    7. 下载库模板的聚合字段数据
  3. 转让 Web 表单和库模板的所有权
  4. Power Automate 工作流程
    1. Power Automate 集成和包含的权限概述
    2. 启用 Power Automate 集成
    3. “管理”页面上的上下文操作
    4. 跟踪 Power Automate 使用情况
    5. 创建新的工作流(示例)
    6. 用于工作流的触发器
    7. 从 Acrobat Sign 外部导入工作流
    8. 管理工作流
    9. 编辑工作流
    10. 共享工作流
    11. 禁用或启用工作流
    12. 删除工作流
    13. 实用模板
      1. 仅限管理员
        1. 将所有已完成的文档保存到 SharePoint
        2. 将所有已完成的文档保存到 OneDrive for Business
        3. 将所有已完成的文档保存到 Google Drive
        4. 将所有已完成的文档保存到 DropBox
        5. 将所有已完成的文档保存到 Box
      2. 协议存档
        1. 将已完成的文档保存到 SharePoint
        2. 将已完成的文档保存到 OneDrive for Business
        3. 将已完成的文档保存到 Google Drive
        4. 将已完成的文档保存到 DropBox
        5. 将已完成的文档保存到 Box
      3. Web 表单协议存档
        1. 将已完成的 Web 表单文档保存到 SharePoint 库
        2. 将已完成的 Web 表单文档保存到 OneDrive for Business
        3. 将已完成的文档保存到 Google Drive
        4. 将已完成的 Web 表单文档保存到 Box
      4. 协议数据提取
        1. 从已签名文档中提取表单字段数据并更新 Excel 工作表
      5. 协议通知
        1. 发送包含协议内容和已签名协议的自定义电子邮件通知
        2. 在 Teams 渠道中获取 Adobe Acrobat Sign 通知
        3. 在 Slack 中获取 Adobe Acrobat Sign 通知
        4. 在 Webex 中获取 Adobe Acrobat Sign 通知
      6. 协议生成
        1. 通过 Power Apps 表单和 Word 模板生成文档,并发送以供签名
        2. 从 OneDrive 中的 Word 模板生成协议并获取签名
        3. 为所选 Excel 行生成协议,发送以供审阅和签名
  5. 自定义发送工作流程
    1. 自定义发送工作流程概述
    2. 创建新的发送工作流程
    3. 编辑“发送”工作流程
    4. 激活或停用发送工作流程
    5. 使用发送工作流程发送协议
  6. 共享用户和协议
    1. 共享用户
    2. 共享协议

与其他产品集成

  1.  Acrobat Sign 集成概述
  2. Acrobat Sign for Salesforce
  3. Acrobat Sign for Microsoft
    1. Acrobat Sign for Microsoft 365
    2. 适用于 Outlook 的 Acrobat Sign
    3. 适用于 Word/PowerPoint 的 Acrobat Sign
    4. Acrobat Sign 团队版
    5. 适用于 Microsoft PowerApps 和 Power Automate 的 Acrobat Sign
    6. 适用于 Microsoft Search 的 Acrobat Sign 连接器
    7. 适用于 Microsoft Dynamics 的 Acrobat Sign
    8. 适用于 Microsoft SharePoint 的 Acrobat Sign
  4. 其他集成
    1. Acrobat Sign for ServiceNow
    2. 适用于 HR ServiceNow 的 Acrobat Sign
    3. 适用于 SAP SuccessFactors 的 Acrobat Sign
    4. 适用于 Workday 的 Acrobat Sign
    5. 适用于 NetSuite 的 Acrobat Sign
    6. 适用于 VeevaVault 的 Acrobat Sign
    7. 适用于 Coupa BSM Suite 的 Acrobat Sign
  5. 合作伙伴管理的集成
  6. 如何获取集成密钥

Acrobat Sign 开发人员

  1. REST API
    1. 方法文档
    2. SDK/开发人员指南
    3. API 常见问题
  2. Webhook 
    1. Webhook 概述
    2. 配置新 Webhook
    3. 查看或编辑 Webhook
    4. 停用或重新激活 Webhook
    5. 删除 Webhook
    6. 双向 SSL 证书
    7. API 中的 Webhook

支持和故障排除

  1. 客户支持资源
  2. 企业客户成功资源 

概述

Webhook 是用户定义的 HTTPS 请求,在源站点发生订阅事件时触发(本例中为 Adobe Acrobat Sign)。

实际上,Webhook 只是一种接受数据或数据流的 REST 服务。

Webhook 适用于 PUSH 模型中的服务到服务通信

当触发订阅事件时,Acrobat Sign 会构造包含 JSON 正文的 HTTPS POST,并将其传递至指定的 URL。

在配置 Webhook 之前,请确保您的网络接受 Webhook 功能所需的 IP 范围

 

相较于以往的回调方法,Webhook 有多方面的好处,其中包括:

  • 管理员可以启用自己的 Webhook 来列出回调 URL,而无需请 Acrobat Sign 支持参与
  • Webhook 在数据“新鲜度”、通信效率和安全性方面更佳。无需轮询
  • Webhook 能轻松支持不同级别的范围(帐户/组/用户/资源)。 
  • Webhook 是一种更现代的 API 解决方案,以更简单的方式配置现代应用程序
  • 每个范围(帐户/组/用户/资源)可配置多个 Webhook,其中回调必须是唯一的
  • Webhook 允许选择要返回的数据,其中回调是“全有或全无”式解决方案
  • 可以配置使用 Webhook 传输的元数据(基本或详细)
  • 由于 UI 完全受管理员的控制,因此根据需要创建、编辑或禁用 Webhook 容易得多。
注意:

此文档主要关注 Acrobat Sign Web 应用程序(先前为 Adobe Sign)中的 Webhook UI。

想要了解 API 详细信息的开发人员可通过以下网址找到更多信息:

先决条件

您必须通过网络安全允许 Webhook 的 IP 范围,以使该服务可用。

REST v5 中的旧版回调 URL 服务使用与 Webhook 服务相同的 IP 范围。

管理员可以登录到 Adobe Admin Console 以添加用户。登录后,导航至管理员的菜单并向下滚动至 Webhook。

使用方式

管理员首先需要拥有 Webhook 服务,准备好接受来自 Acrobat Sign 的入站推送。在这方面有很多选择,只要服务可以接受 POST 和 GET 请求,Webhook 就能成功。

具备服务后,Acrobat Sign 管理员可以从 Acrobat Sign 站点“帐户”菜单中的 Webhook 界面创建新 Webhook。

管理员可以配置 Webhook,以触发协议、Web 表单(构件)或批量发送 (MegaSign) 事件。还可以通过 API 配置库模板(库文档)资源。

通过管理员界面,Webhook 范围可以包括整个帐户或个别组。API 支持通过选择“用户”范围或“资源”范围来提高粒度。

推送到 URL 的数据类型可配置,可以包括协议信息、参与者信息、文档信息等内容。

配置和保存 Webhook 后,Acrobat Sign 会在每次触发订阅事件时将新 JSON 对象推送到定义的 URL。除非您想要更改事件触发器条件或 JSON 负载,否则不需要对 Webhook 进行持续操作。

Webhook URL 意图验证

在成功注册 Webhook 之前,Acrobat Sign 会验证注册请求中提供的 Webhook URL 是否打算接收通知。为此,当 Acrobat Sign 收到新的 Webhook 注册请求时,它会首先向 Webhook URL 发出验证请求。此验证请求是发送到 Webhook URL 的 HTTPS GET 请求。此请求具有自定义 HTTP 标头 X-AdobeSign-ClientId。此标头中的值将设置为请求创建/注册 Webhook 的 API 应用程序的客户端 ID(应用程序 ID)。为成功注册 Webhook,Webhook URL 必须通过 2XX 响应代码响应此验证请求,而且,它还必须通过以下两种方式之一发回相同的客户端 ID 值:

  • 要么在响应标头 X-AdobeSign-ClientId 中。这是在请求中传递并在响应中回显的同一标头。
  • 要么在 JSON 响应正文中,使用 xAdobeSignClientId 键及其值,该值与请求中发送的客户端 ID 相同。

仅当获得成功响应(2XX 响应代码)并且验证了标头或响应正文中的客户端 ID 时,Webhook 才能成功注册。此验证请求的目的是证明您的 Webhook URL 确实想要在该 URL 处接收通知。如果您不小心输入了错误的 URL,则 URL 无法正确响应意图请求验证,并且 Acrobat Sign 不会向该 URL 发送任何通知。此外,Webhook URL 还可以验证其是否只能通过由特定应用程序注册的 Webhook 接收通知。这可以通过验证在 X-AdobeSign-ClientId 标头中传递的应用程序客户端 ID 得以实现。如果 Webhook URL 无法识别该客户端 ID,则它不得响应成功响应代码,且 Acrobat Sign 将注意到该 URL 未注册为 Webhook。

在以下情况下,将对 Webhook URL 调用进行验证:

  • 注册 Webhook:如果此 Webhook URL 调用验证失败,将无法创建 Webhook。
  • 更新 Webhook:INACTIVE 更新为 ACTIVE:如果此 Webhook URL 调用验证失败,Webhook 状态将无法更改为 ACTIVE。

如何响应 Webhook 通知

Acrobat Sign 在已发送至 Webhook URL 的每个 Webhook 通知请求中执行意图的隐式验证。因此,每个 Webhook 通知 HTTPS 请求还包括称为 X-AdobeSign-ClientId 的自定义 HTTP 标头。此标头的值是创建 Webhook 的应用程序的客户端 ID(应用程序 ID)。当且仅当返回成功响应(2XX 响应代码)且在 HTTP 标头 (X-AdobeSign-ClientId) 或 JSON 响应正文发送客户端 ID 时(使用响应正文方法时,键为 xAdobeSignClientId,值为相同的客户端 ID),我们才会认为成功传递 Webhook 通知,否则我们将重试向 Webhook URL 传递通知,直至重试次数用尽。

如上所述,签名的每个通知请求中包括标头 'X-AdobeSign-ClientId',此标头的值(客户端 ID)应通过以下两种方式之一在响应中回显:

1. HTTP 标头 X-AdobeSign-ClientId 且值为此客户端 ID

示例 Javascript 代码,用于获取客户端 ID、对其进行验证,然后将其返回到响应标头中

//获取客户端 ID

var clientid = request.headers['X-ADOBESIGN-CLIENTID'];

 

//对其进行验证

if (clientid ==="BGBQIIE7H253K6") //将 'BGBQIIE7H253K6' 替换为创建 Webhook 时使用的应用程序的客户端 ID

{

    //将其返回到响应标头中

    response.headers['X-AdobeSign-ClientId'] = clientid;

    response.status = 200;  //默认值

}

示例 PHP 代码,用于获取客户端 ID、对其进行验证,然后将其返回到响应标头中

<?php

//获取客户端 ID

$clientid = $_SERVER['HTTP_X_ADOBESIGN_CLIENTID'];

//对其进行验证

if ($clientid == "BGBQIIE7H253K6") //将 'BGBQIIE7H253K6' 替换为创建 Webhook 时使用的应用程序的客户端 ID

{

    //将其返回到响应标头中

   header("X-AdobeSign-ClientId:$clientid");

   header("HTTP/1.1 200 OK"); // 默认值

}

?>


2. JSON 响应正文,键为 xAdobeSignClientId,值为相同的客户端 ID

示例 Javascript 代码,用于获取客户端 ID、对其进行验证,然后将其返回到响应正文中

//获取客户端 ID

var clientid = request.headers['X-ADOBESIGN-CLIENTID'];

 

 

//对其进行验证

if (clientid ==="BGBQIIE7H253K6") //将 'BGBQIIE7H253K6' 替换为创建 Webhook 时使用的应用程序的客户端 ID

{

    var responseBody = {

                         "xAdobeSignClientId" : clientid //在正文中返回客户端 ID

                       };

    response.headers['Content-Type'] = 'application/json';

    response.body = responseBody;

    response.status = 200;

}

示例 PHP 代码,用于获取客户端 ID、对其进行验证,然后将其返回到响应正文中

<?php

//获取客户端 ID

$clientid = $_SERVER['HTTP_X_ADOBESIGN_CLIENTID'];

//对其进行验证

if ($clientid == "BGBQIIE7H253K6") //将 'BGBQIIE7H253K6' 替换为创建 Webhook 时使用的应用程序的客户端 ID

{

   //将其返回到响应正文中

   header("Content-Type: application/json");

   $body = array('xAdobeSignClientId' => $clientid);

   echo json_encode($body);

   header("HTTP/1.1 200 OK"); // 默认值

}

?>

示例响应 JSON 正文

{

    "xAdobeSignClientId": "BGBQIIE7H253K6"

}

先决条件

您将需要:

  1. 具有许可证的 Microsoft 帐户,用于创建 Azure Function 应用程序
  2. 现有 Azure Functions 应用程序,您可以使用 https://docs.microsoft.com/zh-cn/azure/azure-functions/functions-create-first-azure-function 创建一个
  3. Javascript 基本知识,以便您理解代码,并使用自选的任何语言编写代码

创建 Azure Functions 触发器(用作 Acrobat Sign Webhook)的步骤

要创建 Javascript HTTP 触发器函数,请执行以下操作:

1. 通过您的 Microsoft 帐户登录 https://portal.azure.com/

2. 打开显示在“函数应用”选项卡下方的 Azure Functions 应用程序。

导航到 Azure 中的“函数应用”

这将打开 Azure Functions 应用程序列表:

3. 选择您想要在其中创建此新函数的应用程序

4. 单击“创建”(+) 按钮以创建新 Azure 函数

创建 Azure 函数

 

5. 选择 Webhook + API 作为场景,选择 Javascript 作为语言

6. 单击创建此函数

将创建具有处理传入 API 请求功能的新函数。

添加逻辑以注册 Acrobat Sign Webhook

在成功注册 Webhook 之前,Acrobat Sign 会验证注册请求中提供的 Webhook URL 是否真正旨在接收通知。出于此目的,当通过 Acrobat Sign 接收新 Webhook 注册请求时,它将首先向 Webhook URL 发出验证请求。此验证请求是发送至 Webhook URL 的 HTTPS GET 请求(具有自定义 HTTP 标头 X-AdobeSign-ClientId)。此标头中的值将设置为请求创建/注册 Webhook 的应用程序的客户端 ID。为成功注册 Webhook,Webhook URL 必须通过 2XX 响应代码响应此验证请求,而且,它还必须通过以下两种方式之一发回相同的客户端 ID 值。

您可以采用两种可选方案:


可选方案 1:在作为响应标头的 X-AdobeSign-ClientId 中传递客户端 ID

在响应标头中传递 X-AdobeSign-ClientId。它是在请求中传递的同一标头,并且必须在响应中回显。

将 Index.js 文件替换为以下内容:

替换 index.js 文件

module.exports = function (context, req) {

    var clientId = req.headers['x-adobesign-clientid'];

    //验证传入客户端 ID 是否属实

    if (clientId === '123XXX456') {

        context.res = {

            // 状态:200,/* 默认为 200 */ // 可接受任何 2XX 响应

            body: "Notification Accepted",

            headers : {

                'x-adobesign-clientid' : req.headers['x-adobesign-clientid']

            }

        };

    }

    else {

        context.res = {

            status: 400,

            body: "Opps!! Illegitimate Call identified"

        };

    }

    context.done();

};

 

通过模拟请求来测试行为:

1. 单击最右角的测试按钮

2. 模拟虚拟请求

测试函数

虽然上面未显示响应标头,但您可以通过 postman/DHC 或任何其他服务对其进行模拟来观察。


可选方案 2:使用键 xAdobeSignClientId 在响应正文中传递客户端 ID

在 JSON 响应正文中,键为 xAdobeSignClientId,且其值为在请求标头中发送的同一客户端 ID。

将 Index.js 文件替换为以下内容:

更新 index.js 文件内容

module.exports = function (context, req) {

    var clientId = req.headers['x-adobesign-clientid'];

    //验证传入客户端 ID 是否属实

    if (clientId === '123XXX456') {

        context.res = {

            // 状态:200,/* 默认为 200 */ // 可接受任何 2XX 响应

            body: {

                'xAdobeSignClientId' : clientId

            },

            headers : {

                'Content-Type' : 'application/json'

            }

        };

    }

    else {

        context.res = {

            status: 400,

            body: "Opps!! Illegitimate Call identified"

        };

    }

    context.done();

};

 

通过模拟请求来测试行为

1. 单击最右角的测试按钮

2. 模拟虚拟请求

测试函数

另请注意,当 Webhook URL 接收到 POST 通知时,clientID 预期出现相同行为。 


准备使用

当您验证行为后,Webhook URL 将按照 Acrobat Sign 标准工作。您可以根据您的需求进一步更新自定义逻辑。

 

获取函数 URL

  • 单击获取函数 URL
获取函数 URL

 

复制 URL 并将其用于在 Acrobat Sign 中创建 webhook。

复制函数 URL

创建 AWS Lambda 函数

要创建 AWS Lambda,请登录您的 AWS 管理控制台,然后从服务列表中选择 AWS Lambda 服务。

  • 单击使用“从头开始创作”创建 Lambda 函数选项
  • 在“配置函数”页面中,输入函数名称 "lambdaWebhooks",然后选择 Node.js 4.3 作为运行时
  • 对于角色,请选择一个现有角色或从模板创建一个新角色。
    • 如果您选择了从模板创建新角色,请输入角色名称(例如,role-lamda),然后从策略模板列表中选择简单微服务权限
  • 单击创建函数按钮
在 AWS 上创建函数

  • 在新 AWS lamda 函数页面上,选择编辑代码内联作为代码输入类型,继续将 index.handler 用作处理程序。
  • 添加逻辑以注册 Acrobat Sign Webhook

    在成功注册 Webhook 之前,Acrobat Sign 会验证注册请求中提供的 Webhook URL 是否真正旨在接收通知。出于此目的,当通过 Acrobat Sign 接收新 Webhook 注册请求时,它将首先向 Webhook URL 发出验证请求。此验证请求是发送至 Webhook URL 的 HTTPS GET 请求(具有自定义 HTTP 标头 X-AdobeSign-ClientId)。此标头中的值将设置为请求创建/注册 Webhook 的应用程序的客户端 ID。为成功注册 Webhook,Webhook URL 必须通过 2XX 响应代码响应此验证请求,而且,它还必须通过以下两种方式之一发回相同的客户端 ID 值。 Also note the same behavior for clientID is expected when the Webhook URL receives POST notifications. 

    遵循以下两种情况之一:

    情况 1:在作为响应标头的 X-AdobeSign-ClientId 中传递客户端 ID

    •  在响应标头中传递 X-AdobeSign-ClientId。它是在请求中传递的同一标头,并且必须在响应中回显。

      代码片段
      在 index.js 文件中,将自动生成的代码片段替换为以下代码:

示例节点 JS 代码,用于获取客户端 ID、对其进行验证,然后将其返回到响应标头中

exports.handler = function index(event, context, callback) {

  //获取客户端 ID

  var clientid = event.headers['X-AdobeSign-ClientId'];

 

  //对其进行验证

  if (clientid =="BGBQIIE7H253K6") //将 'BGBQIIE7H253K6' 替换为创建 Webhook 时使用的应用程序的客户端 ID

  {

    var response = {

        statusCode: 200,

        headers: {

            "X-AdobeSign-ClientId": clientid

        }

     };

   callback(null,response);

  }

  else {

   callback("Oops!! illegitimate call");

  }

}

 

情况 2:使用键 xAdobeSignClientId 在响应正文中传递客户端 ID

在 JSON 响应正文中,键为 xAdobeSignClientId,且其值为在请求标头中发送的同一客户端 ID。

 

代码片段

将 Index.js 文件替换为以下项:

示例节点 JS 代码,用于获取客户端 ID、对其进行验证,然后将其返回到响应标头中

exports.handler = function index(event, context, callback) {

 //获取客户端 ID

 var clientid = event.headers['X-AdobeSign-ClientId'];

  

 //对其进行验证

 if (clientid =="BGBQIIE7H253K6") //将 'BGBQIIE7H253K6' 替换为创建 Webhook 时使用的应用程序的客户端 ID

 {

   var responseBody = {

        xAdobeSignClientId : clientid

   };

     

    var response = {

        statusCode: 200,

        body: JSON.stringify(responseBody)

    };

 

   callback(null,response);

 }

 else {

   callback("Opps!! illegitimate call");

  }

}

更新 index.js 文件内容

  • 保存函数。Lambda 函数已创建,我们几乎已准备就绪,可在实时 Webhook 中进行使用。

 

配置 AWS API 网关

为了使此 Lambda 可通过 HTTP 方法公开访问,我们需要使用我们的函数(上面已创建)作为 API 后端来配置 AWS API 网关。

在 AWS 管理控制台中,从 AWS 服务选择 API 网关,然后单击创建 API 按钮

配置 API 网关

  • 创建新 API 页面中,选择新 API,然后输入 webhooks 作为 API 名称
  • 单击创建 API 按钮
  • 选择操作下拉列表,然后选择创建资源选项
  • 单击配置为代理资源选项,然后在资源名称中输入验证,在资源路径中输入 {proxy+}
  • 启用 API 网关 CORS 选项保持为取消选中,然后单击创建资源按钮
  • 将 Lambda 函数代理保持选择为集成类型,且在 Lambda 区域下拉列表中选择您已在其中创建 Lambda 函数的区域(可能与您正在创建 API 网关的区域相同)。
  • Lambda 函数中输入验证,然后单击保存按钮
  • 为 Lambda 函数添加权限弹出窗口中,单击确定

如果上述所有步骤均执行成功,您将看到如下显示:

已配置方法

部署 API

下一步是部署此 API,以使其可供使用。

  • 操作下拉列表中,选择部署 API
  • 部署阶段中选择[新阶段],然后在阶段名称中输入生产(或您想要识别此阶段的任何内容)
  • 单击部署按钮

API 现在可供使用,且您可以在蓝框中找到调用 URL,如下所示:

部署 API

记下此 URL,因为您后续要输入它作为实时 Webhook URL。

准备使用

完成。 Use this above url with "/{nodeJSfunctionName}" appended as webhook url in POST /webhooks API request.  当您验证行为后,Webhook URL 将按照 Acrobat Sign 标准工作。
您可以根据您的需求进一步更新/添加自定义逻辑。

如何启用或禁用

默认情况下,对于企业级帐户,已启用访问 Webhook 功能。

组级别管理员可以创建/控制仅在其组中运行的 Webhook。

可以在管理员菜单的左边栏中找到访问 Webhook 页面的方法。

导航至 Webhook 选项卡

基于并发的速率限制

Webhook(和回调)创建和通知事件在从 Acrobat Sign 系统主动发送给客户的并发通知数量方面受到限制。此限制应用于帐户,以包括帐户内的所有组。
这种速率限制可防止一个设计不佳的帐户消耗不成比例的服务器资源,从而对该服务器环境中的所有其他客户产生负面影响。

每个帐户的并发事件数已经过计算,以确保具有行为良好的 Webhook 的帐户将在最短时间内收到通知,并且很少遇到由于请求过多而延迟通知的情况。当前阈值为:

操作
(事件)

最大
并发
事件数

说明

Webhook 创建

10

每个帐户最多允许 10 个并发 Webhook 创建请求。
如果请求超过此限制,则会导致 429 TOO_MANY_REQUESTS 响应代码。

Webhook/回调通知

30

每个帐户最多允许 30 个并发 Webhook 和回调通知。
如果通知超过此限制,将根据指数退避重试,直到它们得以送达。

最佳实践

  • 订阅特定的所需事件,以限制向服务器发出的 HTTPS 请求的数量 - Webhook 越具体,需要筛选的数量就越少
  • 重复伪造 - 如果您有多个应用程序共享同一 Webhook URL 和映射到每个应用程序的同一用户,将多次向 Webhook 发送同一事件(每个应用程序一次)。在某些情况下,Webhook 可能会接收到重复事件。Webhook 应用程序应容忍此情况且通过事件 ID 删除重复数据。
  • 始终快速响应 Webhook - 您的应用程序只有五秒钟响应 Webhook 请求。对于验证请求,这很少会成为问题,因为您的应用程序无需为响应而执行任何实际工作。但对于通知请求则不然,您的应用程序通常需要花费时间执行一些工作来响应请求。建议您在单独的线程上工作,或者使用队列异步工作,以确保您可以在五秒内响应请求
  • 管理并发 - 当用户以快速、连续的方式进行多个更改时,您的应用程序可能会大致在同一时间接收到同一用户的多个通知。如果您不注意如何管理并发性,您的应用程序最终可能会为同一用户多次处理相同更改。为了利用 Acrobat Sign Webhook,需要清楚了解信息的使用方法。务必弄清楚以下问题:
    • 您想要在负载中返回哪些数据?
    • 谁将可以访问此信息?
    • 将产生什么决策或报告?
  • 接收已签名文档的建议 - 在决定如何从文档管理系统中的 Acrobat Sign 接收已签名 PDF 时需考虑几个因素。

虽然在创建 Webhook 时只选择协议已签署文档选项是完全可接受的,但您可能会在接收到触发事件(如协议状态完成)时考虑使用 Acrobat Sign API 检索文档。

注意事项...

JSON 大小限制

JSON 负载大小限制为 10 MB。

如果事件产生较大负载,将触发 Webhook,但条件参数属性(如果在请求中)将被删除,以减小负载大小。 

当发生此情况时,响应中将返回“ConditionalParametersTrimmed”,以通知客户端 conditionalParameters 信息已被移除。

conditionalParametersTrimmed”是包含有关已截断键信息的数组对象。

将按以下顺序完成截断:

  • includeSignedDocuments
  • includeParticipantsInfo
  • includeDocumentsInfo
  • includeDetailedInfo

已签名文档将首先被截断,然后是参与者信息、文档信息和最终详细信息。

例如,对于协议完成事件(如果它也包括已签名文档(base 64 编码))或具有多个窗体字段的协议而言,可能会发生此情况。

Webhook 通知

Acrobat Sign Webhook 可向协议发件人以及在发送协议的组内配置的任何 Webhook 发送通知。帐户范围内的 Webhook 会接收所有事件。

发件人:用户 A | 签名者:用户 B | 共享者:用户 C

用户 A 和用户 B 位于不同的帐户中

用户 A 和用户 C 位于不同的帐户中

用例

通知?

评论/注释

用户 A 的帐户具有帐户级别 Webhook(由用户 A 或帐户管理员创建)。

帐户级别 Webhook 会收到该帐户中触发的所有事件的通知。

用户 A 的帐户具有级别 Webhook(由用户 A 或帐户/组管理员创建)。

假设:用户 A 和组管理员位于同一组中。

级别 Webhook 会收到该组中触发的所有事件的通知。

用户 A 具有用户级别 Webhook。

作为发件人,用户 A 的用户级别 Webhook 被触发

用户 A 具有资源级别 Webhook(针对上述已发送的协议)。

 
     

用户 B 的帐户具有帐户级别 Webhook(由用户 B 或帐户管理员创建)。

用户 B 的帐户级别 Webhook 被视为签名者 Webhook。

用户 B 的帐户具有级别 Webhook(由用户 B 或帐户/组管理员创建)。

假设:用户 B 和组管理员位于同一组中。

用户 B 的级别 Webhook 被视为签名者 Webhook。

用户 B 具有用户级别 Webhook。

用户 B 的用户级别 Webhook 被视为签名者 Webhook。

     

用户 C 的帐户具有帐户级别 Webhook(由用户 C 或帐户管理员创建)。

用户 C 的帐户级别 Webhook 被视为非发起者 Webhook。

用户 C 的帐户具有级别 Webhook(由用户 C 或帐户/组管理员创建)。

假设:用户 C 和组管理员位于同一组中。

用户 C 的级别 Webhook 被视为非发起者 Webhook。

用户 C 具有用户级别 Webhook。

用户 C 的用户级别 Webhook 被视为非发起者 Webhook。

发件人:用户 A | 签名者:用户 B | 共享者:用户 C

用户 A、用户 B 和用户 C 位于同一帐户中

用例

通知?

注释

用户 A 的帐户具有帐户级别 Webhook(由用户 A 或帐户管理员创建)。

帐户级别的 Webhook 会针对帐户触发的事件发出通知。

用户 A 的帐户具有级别 Webhook(由用户 A 或帐户/组管理员创建)。

假设:用户 A 和组管理员位于同一组中。

级别 Webhook 会针对其组内的用户触发的事件发出通知。

用户 A 具有用户级别 Webhook。

作为发件人,用户 A 的用户级别 Webhook 被触发

用户 A 具有资源级别 Webhook(针对上述已发送的协议)。

 
     

用户 B 的帐户具有帐户级别 Webhook(由用户 B 或帐户管理员创建)。

由于用户 A 和用户 B 位于同一帐户中,帐户级别 Webhook 会收到该帐户中触发的所有事件的通知。

用户 B 的帐户具有级别 Webhook(由用户 B 或帐户/组管理员创建)。

假设:用户 A、用户 B 和组管理员位于同一组中。

由于用户 A 和用户 B 位于同一组中,因此级别 Webhook 会收到该组中触发的所有事件的通知。

用户 B 的帐户具有级别 Webhook(由用户 B 或帐户/组管理员创建)。

假设:用户 A 和用户 B 位于不同的组中。

用户 B 的级别 Webhook 被视为签名者 Webhook。

用户 A 的 Webhook(资源/用户/组/帐户)将被触发。

用户 B 具有用户级别 Webhook。

作为收件人,用户 B 的用户级别 Webhook 不会被触发。

     

用户 C 的帐户具有帐户级别 Webhook(由用户 C 或帐户管理员创建)。

由于用户 A 和用户 C 位于同一帐户中,因此帐户级别 Webhook 会收到该帐户中触发的所有事件的通知。

用户 C 的帐户具有级别 Webhook(由用户 C 或帐户/组管理员创建)。

假设:用户 A、用户 C 和组管理员位于同一组中。

由于用户 A 和用户 C 位于同一组中,因此级别 Webhook 会收到该组中触发的所有事件的通知。

用户 C 的帐户具有级别 Webhook(由用户 C 或帐户/组管理员创建)。

假设:用户 A 和用户 C 位于不同的组中。

用户 C 的级别 Webhook 被视为非发起者 Webhook。

用户 A 的 Webhook(资源/用户/组/帐户)将被触发。

用户 C 具有用户级别 Webhook。

用户 C 的用户级别 Webhook 被视为非发起者 Webhook。

侦听服务停止时重试

如果 Webhook 的目标 URL 因任何原因而停止运转,Acrobat Sign 会将 JSON 排入队列,然后在 72 小时内循序渐进地重试推送。

未传递的事件将会保留在重试队列中,并且在接下来的 72 小时内,将会尽可能按照发生顺序来传递通知。

重试传递通知的策略是:将两次尝试之间的时间增加一倍,从 1 分钟的间隔开始,增加到每 12 小时一次,进而在 72 小时内重试 15 次。

如果 Webhook 收件人无法在 72 小时内进行响应,且在过去七天没有成功传递通知,则 Webhook 将被禁用。在再次激活 Webhook 之前,不会向此 URL 发送通知。

在 Webhook 被禁用到随后再次启用期间的所有通知将丢失。

更快、更轻松地获得帮助

新用户?