分别保存原始数据和最新数据:币种及金额准备好后,只写入一次 Rate at transaction、来源和生效时间。定时自动化则更新 Current rate 及其元数据,避免市场变动改写交易的历史记录。
创建 Transactions 表
创建 Transactions 表,包含以下字段:From、To(single line text);Amount、Rate at transaction、Transaction converted(number);Transaction source、Transaction market session、Transaction effective at;Archived(checkbox);Current rate、Current converted(number);以及 Source、Market session、Effective at、Checked at、Sync status、Sync error。将 Transaction effective at、Effective at、Checked at 设置为日期时间字段,其余元数据和状态字段使用单行文本。创建 Needs FX refresh 视图,筛选未勾选 Archived 的记录,按 Checked at 从旧到新排序,空值排在最前,使后续运行依次处理其他记录。
两组汇率含义不同。Transaction * 字段保存用于会计或审计的交易快照。没有该前缀的当前字段保存供看板或估值使用的新参考观测值。不要用当前值重写原始记录。
保存原始交易汇率
创建 Airtable 自动化,选择 When record matches conditions 触发器:From、To、Amount 已填写,而 Rate at transaction 为空。添加 Run a script,将 mode 设置为 snapshot,传入触发记录的 recordId,然后粘贴下载的脚本。添加名为 exchangerateApiKey 的 Automation secret;脚本通过 input.secret 读取它,没有密钥访问权限的编辑者仍能运行自动化,但看不到密钥值。只有原始汇率为空时,脚本才写入 Rate at transaction、Transaction converted、Transaction source、Transaction market session 和 Transaction effective at。重试时若已有值,所有原始字段都保持不变。
exchangerateApiKey,保持名称不变。不要把值放进表格字段、URL、共享描述或代码字面量。Airtable 只允许拥有相应密钥权限的用户编辑使用这些密钥的脚本。定时更新当前估值
创建第二个自动化,选择 At scheduled time 触发器。将 mode 设置为 refresh,留空 recordId,以处理 Needs FX refresh 中的前 25 条记录,并粘贴完整的 Airtable 脚本。每次运行最多发出 25 个 HTTP 请求,低于 Airtable 的 50 次 fetch 限制;每批最多写入 50 条记录。此示例适合小型报表库;更大的表需要规划队列和请求合并。若每天查询 25 个不同货币对,30 天最多约需 750 个 API 请求,另加初始快照和重试。
刷新只更新 Current rate、Current converted、Source、Market session、Effective at 和 Checked at,不会更新任何 Transaction * 字段。HTTP 失败或响应格式错误时,脚本将 Sync status 设为 Error,并保留上次成功取得的当前值。
明确显示失败状态
401 表示需要检查 Automation secret;429 表示需要检查运行频率或账户限制;缺少币种表示货币对无效或不可用。保留上次成功值及其原有 Checked at,并通过 Sync error 向操作人员提供诊断。不要把失败转换为汇率为零的记录。
检查 Airtable 套餐限制
Airtable 的 Run a script 文档介绍了内置 Automation secrets 及编辑权限保护。自动化限制说明 Free 套餐不支持 Run a script,失败的运行也计入用量。报表通常每天刷新即可;提高频率并不能把每日参考汇率变成日内报价。
