跳转到内容

Webhook

Webhook 会将一张或多张数据表的事件发送到一个 HTTPS 地址:record.created、record.updated、record.deleted。在数据库菜单的 API 与智能体 下,通过 Webhook… 进行管理。

请求体始终是一个事件数组,每个事件都包含修改前和修改后的完整行,以及已更改字段的列表:

{ "events": [
{ "id": "0195e…", "type": "record.updated",
"occurred_at": "2026-09-26T14:03:00.120Z",
"tenant": "t4z56fq", "base": "b_t4z56fq_ventes", "table": "opportunites",
"record_id": "0195a…",
"actor": { "kind": "user" },
"before": { "statut": "negociation", "montant": "125000", … },
"after": { "statut": "gagne", "montant": "125000", … },
"changed": ["statut"] } ] }

即使是直接用 SQL 执行的写入也会产生事件:事件源自由触发器捕获的历史记录。

  • 已签名:X-Basedb-Signature: t=…,v1=…,即对原始请求体计算的 HMAC-SHA256,应在反序列化之前验证。
  • 按行保证顺序:同一行的两个事件会按顺序到达。
  • 失败时会重试;超过重试次数后,Webhook 会被停用,可在界面中重新启用。队列和每次投递都可以查看、重放或放弃。
  • 至少投递一次:请根据 X-Basedb-Delivery-Id 或 events[].id 去重。

Webhook 只会发往公共 HTTPS 地址。在开发环境中,BASEDB_WEBHOOK_DEV=1 允许使用 HTTP 和本地地址。

对于您网络中的服务器,实例的运维人员会在 BASEDB_WEBHOOK_ALLOW 中列出它——一个名称、一个 域名(*.intra.example.com)、一个地址或一个地址段(10.12.0.0/16):

Fenêtre de terminal
BASEDB_WEBHOOK_ALLOW=chat.intra.example.com,10.12.0.0/16

这些目标会被接受,无论其地址、端口和协议如何,包括 HTTP。该列表同样适用于自动化的 HTTP 请求 和同步数据表的数据源;它只能在环境变量中设置,永远不能从界面中设置。

无法被主动访问到的服务器,也可以反过来连接到 basedb,用数据库的集成令牌,通过实时流跟踪 一张数据表:

Fenêtre de terminal
curl -N "https://basedb.example.com/api/v1/t4z56fq/events?base=b_t4z56fq_ventes&table=opportunites" \
-H "Authorization: Bearer $BASEDB_TOKEN"

该流(text/event-stream)传输的是信号——records 事件,带有新建、修改或删除的行的 标识符——而不是具体的值:程序随后会通过REST API重新读取 这些行。令牌一旦被撤销,其流会在 20 秒内关闭。对于很少被读取的数据表,只需偶尔重新读取有变化 的行即可:filter=_updated_at gt "2026-09-30T08:00:00Z"。

basedb 是 AI 原生软件工作室 Eodia 出品的自由软件。