Webhook 目标

场地、座位图及座位布局发生变化时,Seatmap.pro 可以通知您的系统。本页介绍 Webhook 目标的要求,以及投递失败时的处理方式。

事件

事件 发送时机
venue.created 创建场地。
venue.updated 修改场地。
venue.deleted 删除场地。
schema.created 创建座位图。
schema.updated 修改座位图。
schema.deleted 删除座位图。
seatmap.stored 保存座位布局。

目标要求

不兼容变更:自 1.70.0 起,Webhook 目标必须是公共 HTTPS 地址。不同时满足两个条件的目标在保存时会被拒绝,对其投递时会记录错误类型 TARGET_NOT_ALLOWED。

目标需满足:

  • URL 为包含主机名的有效 URI。
  • 协议为 https。普通 http 会被拒绝,除非自托管运营方已为内部目标启用该协议,详见下文。
  • 主机解析出的每个地址都可公开路由。

若任一解析地址属于回环、链路本地、站点本地(如 10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16 私有网段)、多播、运营商级 NAT 或其他保留地址,该主机将被拒绝。IPv6 唯一本地地址也会被拒绝;IPv4 映射的 IPv6 地址若底层 IPv4 地址被阻止,同样不可用。完全无法解析的主机也会被拒绝。

端点不是公共地址时

在公共主机名上终止 TLS,再向内部转发即可,例如在服务前部署反向代理或 API 网关。不要认为内部主机名能通过公共 DNS 解析到私有地址就可以使用;检查针对解析后的地址,而非名称。

确实需要向自身网络内部投递的自托管部署,可在 Editor 服务上将 seatmap.webhooks.allow-private-targets 设为 true。这会关闭地址检查,因此仅应在整个网络路径都由您控制时启用。

如果接收器仅支持普通 http,还需将 seatmap.webhooks.allow-insecure-targets 设为 true。两个设置必须同时启用;仅启用后者属于配置错误,Editor 服务将无法启动。

即使两个设置均启用,http 目标仍仅限内部网络:主机解析出的所有地址都必须是私有或其他不可公开路由的地址。因此 http://receiver.internal:8080/hook 可以使用,而公共 http 地址会被拒绝。http 流量在传输中不加密,因此有此范围限制。

重试

投递失败时使用指数退避重试,默认重试三次。默认值如下:

设置 默认值 含义
timeoutMs 30000 每次尝试的超时时间。
maxRetries 3 首次尝试之后的重试次数。
backoffInitialMs 1000 首次重试前的延迟。
backoffMultiplier 2.0 后续每次延迟的乘数。
retryOnHttpStatuses 500, 502, 503, 504 需要重试的状态码。
skipRetryOnHttpStatuses 400, 401, 403, 404 视为最终结果、不重试的状态码。

超时、网络错误和连接错误会重试。TARGET_NOT_ALLOWED 不重试,因为目标无效,等待不会改变结果。最后一次重试失败后,事件进入死信列表,不会被静默丢弃。

投递尝试保存的信息

每次尝试都会记录状态、错误类型和响应正文片段,您无需改造自己的端点就能查看失败原因。

可能包含凭据的响应头以 [redacted] 保存:authorization、proxy-authorization、set-cookie、set-cookie2、www-authenticate、proxy-authenticate 和 x-amz-security-token。如果端点在这些头中回显令牌,令牌不会出现在投递日志中。

输入功能、设置、端点或 SDK 方法。