Webhook 端口

Version 26.2.9636


Webhook 端口


Webhook 端口支持公开公共的 API 接口。

核心功能

  • 公开 API 端点,支持通过 HTTP POST 和 PUT 进行数据摄取,并采用现代身份验证机制
  • 基于用户的速率限制和并发请求管理,并支持 CORS
  • 采用 HMAC 签名身份验证以增强安全性,并支持自定义响应事件脚本
  • 提供示例请求模板,用于 XML Map 端口集成和工作流自动化

概述

Webhook 端口使数据能够通过 HTTP POST 和 PUT 进入知行之桥工作流。每个 Webhook 端口在应用程序中公开一个接口,外部客户端可以向该接口发送 XML 和 JSON 负载。这些负载将写入输出文件,并发送到工作流中下一连接的端口。

可以在 Webhook 端口中指定示例请求,以简化 POST 到端点的数据转换流程。指定 XML 示例后,将 Webhook 端口连接到流程中的 XML Map 端口 端口,XML Map 端口会自动检测发布到端点的 XML 文件的预期结构。然后,可以使用 XML Map 端口的 节点值编辑器 将此结构映射到目标 XML 结构。

端口配置

本节包含所有可配置的端口属性。

设置选项卡

端口设置

与端口的核心操作相关的设置。

  • 端口 Id 端口的静态、唯一标识符。
  • 端口类型 显示端口类型及其用途的描述。
  • 端口描述 一个可选字段,用于提供端口及其在流中的角色的自由格式描述。
  • Webhook 接口 接口所在的生成的 URL(基于端口名)。
  • 本地文件名格式 用于为端口输出的消息分配文件名的方案。 可以在文件名中动态使用宏来包含标识符和时间戳等信息。 有关详细信息,请参阅

高级设置

  • 本地文件名格式 用于为端口输出的消息分配文件名的方案。 可以在文件名中动态使用宏来包含标识符和时间戳等信息。 有关详细信息,请参阅
  • 启用 HMAC 身份验证 勾选启用以使用 HMAC(基于哈希的消息认证码)签名身份验证来验证 Webhook 请求的真实性和完整性。详细信息请参阅 HMAC 身份验证
  • HMAC 签名标头 签名标头值。默认值为 x-cdata-hmac-signature,但可以自定义。

请求详情选项卡

提供一个 XML 或 JSON 模板,表示传入数据的预期结构。指定示例请求的主要好处是将 Webhook 端口连接到工作流中的 XML Map 端口。当 API 数据需要转换为其它格式(例如 EDI 报文或数据库插入)时,应使用 XML Map 端口。

XML Map 端口会检测示例请求的 XML 结构,并将其用作 XML Map 端口的源文件。将代表目标格式的 XML 结构上传为目标文件,然后使用 节点值编辑器 将源结构转换为目标结构。

用户选项卡

用户选项卡可让:

  • 创建用户及其关联的 authtoken 和 OAuth 2.0 凭据
  • 定义 POST 和/或 PUT 权限
  • 指定每个用户每小时可以发出多少个请求
  • 指定允许多少个并发请求

可以在此选项卡上添加、编辑和删除用户。有关每个字段的详细信息,请参阅添加或编辑用户

注意:此处的请求设置会覆盖服务器选项卡的默认速率限制部分中的设置。

服务器选项卡

受信任的 IP 地址

此选项卡上的 可信 IP 地址 部分提供以下功能:

  • 添加 输入新的 IP 地址范围。
  • 编辑 修改选定的 IP 地址范围。
  • 删除 从列表中删除选定的 IP 地址范围。

以下限制适用于此功能:

  • localhost 不能被修改或从列表中删除。
  • 任何超出定义范围的 IP 地址都将被拒绝。
  • 支持IP范围。 例如,“100.10.100.1-15”条目表示允许100.10.100.1至100.10.100.15之间的IP地址访问。
  • 支持 无类别域间路由(CIDR) 表示法。 例如,“100.10.100.0/24”条目表示允许100.10.100.0至100.10.100.255之间的IP地址访问。
  • 支持通配符模式。 例如,条目 100.10.100.* 表示允许以 100.10.100 开头的 IP 地址。 任何超出该范围的 IP 地址都将被拒绝。

注意:为了让客户端能够访问服务器,需要有清晰的网络路径。在云环境中,可能需要在三个地方进行更改:

  • 云控制台中的网络规则。
  • 托管应用程序的机器上的防火墙规则。例如,在使用 Amazon AMI 时,可以使用 简单防火墙 (UFW) 来允许所需端口上的流量。Linux 环境中的常见策略是将流量从低于 1024 的端口转发到高于 1024 的非标准端口,同时将应用程序配置为使用非标准端口。这可以避免与非 root 用户绑定到低于 1024 的端口相关的权限问题。
  • 安全选项卡的网络访问部分。

默认速率限制/用户

如果”用户”选项卡上未提供值,则限制允许的请求数量的设置。

  • 每小时最大请求数 单个用户在一小时内可以发出的请求数的限制。
  • 最大并发请求 用户可以发出的并发请求数的限制。

跨域资源共享 (CORS)

管理使用 CORS 来服务跨域资源的设置。

  • 启用跨源资源共享 (CORS) 是否启用 CORS。 仅当选中此框时,其余选项才可用。
  • 允许所有不带 ‘*’ 的域 如果启用,域来源不限于特定列表。
  • Access-Control-Allow-Origin 要允许的以逗号分隔的域来源列表。 作为 HTTP 响应消息头包含在内。
  • Access-Control-Allow-Credentials 跨域请求中是否允许用户凭据(例如 cookie)。 作为 HTTP 响应消息头包含在内。
  • Access-Control-Allow-Methods 允许的以逗号分隔的方法列表。 作为 HTTP 响应消息头包含在内。
  • Access-Control-Allow-Headers 允许的消息头的逗号分隔列表。 作为 HTTP 响应消息头包含在内。
  • Access-Control-Max-Age 可以缓存 Access-Control 响应消息头值的最大持续时间(以秒为单位)。

高级设置

高级选项卡

消息

消息设置 确定端口如何搜索消息并在处理后管理它们。 可以将消息保存到你的 已发送 文件夹,或者可以根据 已发送 文件夹方案将它们保存,如下所述。

  • 保存至 Sent 文件夹 选中此选项可将端口处理的文件复制到端口的已发送文件夹中。
  • 已发送文件夹方案 端口根据选定的时间间隔对已发送文件夹中的文件进行分组。例如,选项每周(Weekly)指示端口每周创建一个新的子文件夹,并将本周发送的所有文件存储在该文件夹中。空白设置告诉端口将所有文件直接保存在“Sent”文件夹中。对于处理许多事务的端口,使用子文件夹可以帮助保持文件有序并提高性能。

日志

  • 日志级别 端口生成的日志详细程度。当您请求技术支持时,请将其设置为 Debug
  • 日志子文件夹方案:指示端口根据所选的时间间隔对日志(Logs)文件夹中的文件进行分组。每周(Weekly)选项(默认设置)指示端口每周创建一个新子文件夹,并将该周的所有日志存储在其中。如果此设置留空,则端口将所有日志直接保存在日志文件夹中。对于处理大量事务的端口,使用子文件夹有助于保持日志井然有序并提高性能。
  • 记录消息内容 勾选此项后,已处理文件的日志条目将包含该文件本身的副本。如果禁用此项,您可能无法从交易选项卡下载该文件的副本。

特殊设置

特殊设置 适用于特定用例。

  • 其他设置 允许在以分号分隔的列表中配置隐藏的端口设置,例如setting1=value1;setting2=value2。 正常的端口用例和功能不需要使用这些设置。

通知选项卡

与配置通知相关的设置。

在执行服务级别协议 (SLA) 之前,需要设置电子邮件通知以接收通知。默认情况下,知行之桥使用 通知 选项卡上的全局设置。要为此端口使用其他设置,请启用覆盖全局设置

默认情况下,错误通知处于启用状态,这意味着每当出现错误时都会发送电子邮件。要关闭错误通知,请取消选中启用复选框。

输入主题(必填),然后(可选)输入以逗号分隔的收件人电子邮件列表。

SLA 选项卡

与配置服务级别协议 (SLA) 相关的设置。

SLA 允许配置预期流程中端口发送或接收的数据量,并设置预期达到该数据量的时间范围。当 SLA 未达到时,知行之桥会发送电子邮件警告用户,并将 SLA 标记为_存在风险_,这意味着如果 SLA 未能尽快达到,则会被标记为_已违反_。这让用户有机会介入并确定 SLA 未达到的原因,并采取适当的措施。如果在风险时间段结束时仍未达到 SLA,则会将 SLA 标记为_已违反_,并再次通知用户。

要定义 SLA,请启用预期数据量,然后点击设置选项卡。

  • 如果端口具有单独的发送和接收操作,请使用单选按钮指定 SLA 适用的方向。
  • 在窗口的预计至少部分中:
    • 设置预计处理的最小事务数量(交易量)
    • 使用每个字段指定时间范围
    • 指示 SLA 生效的时间。如果选择开始于,请填写日期和时间字段。
    • 勾选希望 SLA 生效的星期几对应的复选框。如有必要,请使用下拉菜单选择每天
  • 在窗口的将状态设置为“有风险”部分中,指定应将 SLA 标记为有风险的时间。
    • 默认情况下,只有在违反 SLA 的情况下才会发送通知。要更改此设置,请勾选发送“有风险”通知

以下示例显示了为端口配置的 SLA,该端口预计在周一至周五每天接收 1000 个文件。如果尚未收到 1000 个文件,则会在时间段结束前 1 小时发送风险通知。

注意:如果有必要,可以关闭 SLA 通知。这在维护窗口期间非常有用。点击导航栏上的设置,然后跳转到通知 > 通用通知。点击平板和铅笔图标进行编辑,并取消勾选 SLA 通知设置。

HMAC 身份验证

HMAC(基于哈希的消息认证码)签名身份验证是一种加密方法,用于验证 Webhook 请求的真实性和完整性。它使用共享密钥为每个请求生成唯一的签名,从而确保:

  • 请求真实性:确认请求来自可信来源
  • 数据完整性:验证请求负载在传输过程中未被篡改
  • 重放攻击防护:防止拦截的请求被恶意重用

与基本身份验证或 API 密钥等更容易被破解的传统身份验证方法相比,HMAC 身份验证的安全性显著增强。

拥有专业版或企业版许可证的用户可以为传入的 Webhook 请求启用 HMAC 签名身份验证。

配置

重要提示:HMAC 身份验证是一项全局设置,适用于所有获得 Webhook 访问授权的用户。

  1. 启用 HMAC 身份验证
    1. 在 Webhook 端口设置中勾选启用 HMAC 身份验证
    2. (可选)自定义 HMAC 签名标头值(默认值为x-cdata-hmac-signature)。

为用户设置 HMAC 密钥

启用 HMAC 身份验证后:

  1. 导航至 Webhook 端口的用户选项卡。
  2. 为每个授权的 Webhook 用户配置 HMAC 密钥:
    1. 系统会为每个用户自动生成一个 HMAC 密钥。您可以使用自定义值覆盖自动生成的密钥。每个用户必须使用分配的 HMAC 密钥为其 Webhook 请求生成有效的签名。

Auth Token 身份验证

用户可以通过在请求中提供 authtoken 来访问 Webhook 资源。通过在用户选项卡上添加或编辑用户并导航到身份验证选项卡来管理用户和 authtoken。

在用户调用 Webhook 接口之前,还必须设置连接的受信任 IP 地址。在服务器选项卡的受信任的 IP 地址部分中进行设置。默认情况下,所有 IP 地址均受限制。

在基本身份认证中使用身份认证令牌

使用基本身份认证时,应将用户的 authtoken 用作密码。

在 HTTP 头部中使用认证令牌

将 HTTP 头部 x-cdata-authtoken 与 authtoken 一起添加为 HTTP 请求的一部分。

使用身份认证令牌作为查询字符串参数

要允许端口在查询字符串参数中传递 authtoken,请在服务器选项卡的高级设置部分中勾选 Allow authtoken in URL

启用此功能后,可以将 authtoken 指定为 @authtoken 参数的值,该参数可以作为 HTTP 表单数据或查询参数的一部分提供。

OAuth 2.0 身份验证

用户可以使用 OAuth 2.0 身份验证来保护 Webhook 资源。通过在用户选项卡上添加或编辑用户并导航到身份验证选项卡来管理用户和 OAuth 凭据。

接收数据

将数据上传到 Webhook 接口时,Web 请求的主体将作为输出文件写入并发送到工作流中下一个连接的端口。这允许使用灵活的方法通过调用外部 API 来调用知行之桥工作流。

在 Webhook 端口中未验证上传到接口的数据,如有必要,稍后应在工作流中对其进行验证。

自定义响应

通常,Webhook 端口接受带有请求已接受的令牌响应的发布数据,但可以使用Response事件自定义响应,其中_request_httpheaders_response_message 特殊项目 可用。 指定后,端口期望通过_response项提供自定义响应。

您还可以使用 Response 事件,通过以下属性推送自定义输出项:

  • Filename:传递到下游工作流的输出消息文件名。
  • Data:包含在传递到下游工作流的消息中的数据。对于二进制数据,请改用 Base64Data 属性。
  • Base64Data:包含在传递到下游工作流的消息中的 Base64 编码数据。
  • HeaderNames#:包含在传递到下游工作流的消息中的标头名称列表。使用 HeaderValues 属性在匹配的索引处指定这些标头的值。
  • HeaderValues#:包含在传递到下游工作流的消息中的标头值列表。这些值用于 HeaderNames 列表中相同索引处定义的标头名称。
  • Logs#:包含在事务日志中的日志条目列表。

示例

若要将包含 Webhook 请求正文的文件(带有自定义文件名和标头)推送到下游工作流中,Response 事件中的 ArcScript 可能如下所示:

<arc:set attr="out.Filename" value="MyCustomFilename.xml" />
<arc:set attr="out.Data" value="[_message.body]" />
<arc:set attr="out.HeaderNames#1" value="MyHeader1" />
<arc:set attr="out.HeaderValue#1" value="MyHeader1Value" />
<arc:push item="out" />

例如,要将传入请求上的消息头显示为向下传递的消息上的消息头,Response事件中的 ArcScript 可能如下所示:

<arc:set attr="_message.header:MySpecialHeader" value="[_httpheaders.MyWebhookHeader]" />
<arc:set attr="_response.header:Content-Type" value="application/xml" />
<arc:set attr="_response.write" value="<Status>Successfully processed message with MySpecialHeader=[_message.header:MySpecialHeader]</Status>" />

使用上述 ArcScript 中的 响应(Response) 事件,客户端可以发送类似于以下内容的请求:

POST https://localhost/connector/Webhook1/webhook.rsb HTTP/1.1
content-type: application/xml
X-CData-Authtoken: 1s7U4w0a2P3l8v9W3l0q
MyWebhookHeader: Hello World!

<Items>
  <Webhook>Hello World!</Webhook>
</Items>

并收到以下回复:

HTTP/1.1 200 OK
Connection: close
Date: Tue, 31 Aug 2021 19:16:13 GMT
X-Frame-Options: SAMEORIGIN
Content-Type: application/xml
Content-Length: 81
Server: Jetty(9.4.z-SNAPSHOT)

<Status>Successfully processed message with MySpecialHeader=Hello World!</Status>

在文件命名策略中使用宏可以提高组织效率和对数据的上下文理解。 通过将宏合并到文件名中,可以动态地包含相关信息,例如标识符、时间戳和消息头信息,从而为每个文件提供有价值的上下文。 这有助于确保文件名反映对组织重要的详细信息。

知行之桥 支持这些宏,它们都使用以下语法:%Macro%

描述
ConnectorID 替换为端口的 ConnectorID。
Ext 替换为端口当前正在处理的文件的文件扩展名。
Filename 替换为端口当前正在处理的文件的文件名(包括扩展名)。
FilenameNoExt 替换为端口当前正在处理的文件的文件名(不带扩展名)。
MessageId 计算端口输出的消息的 MessageId。
RegexFilename:pattern 将正则表达式模式应用于端口当前正在处理的文件的文件名。
Header:headername 替换为端口正在处理的当前消息的目标消息头 (headername) 的值。
LongDate 以常规格式计算系统的当前日期时间(例如,2024 年 1 月 24 日星期三)。
ShortDate 以 yyyy-MM-dd 格式计算系统的当前日期时间(例如 2024-01-24)。
DateFormat:format 以指定格式(format)计算系统的当前日期时间。 有关可用的日期时间格式,请参阅示例日期格式
Vault:vaultitem 计算指定保管库项目的值。

示例

某些宏(例如 %Ext% 和 %ShortDate%)不需要参数,但其他宏则需要。 所有带有参数的宏都使用以下语法:%Macro:argument%

以下是带有参数的宏的一些示例:

  • %Header:headername%:其中 headername 是消息上消息头的名称。
  • %Header:mycustomheader% 解析为输入消息上设置的 mycustomheader 消息头的值。
  • %Header:ponum% 解析为输入消息上设置的 ponum 消息头的值。
  • %RegexFilename:pattern%:其中“pattern”是正则表达式模式。 例如,%RegexFilename:^([\w][A-Za-z]+)% 匹配并解析为文件名中的第一个单词,并且不区分大小写(test_file.xml解析为test) 。
  • %Vault:vaultitem%:其中 vaultitemvault 中项目的名称。 例如,%Vault:companyname%解析为存储在保管库中的companyname项的值。
  • %DateFormat:format%:其中 format 是可接受的日期格式(有关详细信息,请参阅示例日期格式)。 例如,%DateFormat:yyyy-MM-dd-HH-mm-ss-fff%解析为文件上的日期和时间戳。

还可以创建更复杂的宏,如以下示例所示:

  • 将多个宏组合在一个文件名中:%DateFormat:yyyy-MM-dd-HH-mm-ss-fff%%EXT%
  • 包括宏之外的文本:MyFile_%DateFormat:yyyy-MM-dd-HH-mm-ss-fff%
  • 在宏中包含文本: %DateFormat:'DateProcessed-'yyyy-MM-dd_'TimeProcessed-'HH-mm-ss%