登录开始免费试用
Meta Tech Provider

将 WhatsApp 消息记录到 Airtable,并从 base 发送

Airtable 的传入 Webhook 触发器只接受 POST 请求,因此无法响应 Meta 的验证 GET 请求,也不能直接作为号码的 Webhook 目标地址。请将目标地址指向一个 n8n 工作流,由它把每条消息追加到表中。发送则可以在 Airtable 内完成:Run a script 自动化可以用 fetch 调用 Cloud API,号码的访问令牌则保存为密钥。

POST only

Airtable 的 When webhook received 触发器不接受其他方法,因此无法响应验证 GET 请求。

5 per second

Airtable 传入 Webhook 触发器的请求上限,负载上限为 100 KB。

50 fetches

单个 Airtable Run a script 操作可发出的请求数,每个请求 30 秒后超时。

为什么 Airtable 无法直接接收 WhatsApp Webhook?

因为 Meta 在投递任何内容之前,会先检查目标地址。它会发送一个带有验证值(challenge)的 GET 请求,并期望响应正文原样返回该值。Airtable 的 When webhook received 触发器只接受 POST 请求,并且只返回自己固定的 JSON,所以验证无法通过,Meta 也就不会开始投递。

解决办法是在中间加一个环节。由 n8n 的 Webhook 节点处理验证并接收每条消息,再由 n8n 的 Airtable 节点追加一行,内容包括:发送者、资料名称、文本、消息 ID、时间戳和接收消息的 phone number id。在 Make 或 Zapier 中也可以用同样的结构。

这个中间环节还有一个好处。Airtable 的 Webhook 触发器每秒只允许 5 个请求,而工作流工具可以把突发的消息排队,否则这些请求会被拒绝。

如何从 Airtable base 发送 WhatsApp 模板?

使用动作为 Run a script 的自动化。触发条件可以是记录进入某个视图、某个字段发生变化,或者某个按钮被点击。脚本通过 input.config() 读取记录中的电话号码和字段,并用 fetch 调用 Cloud API 的 messages 端点。Airtable 自动化脚本在服务器端运行,因此不会受到浏览器限制的影响。

请把访问令牌保存为脚本编辑器中的密钥,而不是写在代码里。Airtable 会在控制台输出中隐藏密钥,并且只有能访问脚本全部密钥的人才能编辑该脚本。

对于客户在过去 24 小时内没有主动联系的情况,请使用模板,因为自由文本只能在该时间窗口内送达。脚本可以把返回的消息 ID 写回记录,从而将这次发送与对应的行关联起来。

Run a script action: send an approved template
const { phone, name } = input.config();
const token = input.secret("WHATSAPP_TOKEN");
const res = await fetch(
  "https://graph.facebook.com/v23.0/<PHONE_NUMBER_ID>/messages",
  {
    method: "POST",
    headers: { Authorization: "Bearer " + token, "Content-Type": "application/json" },
    body: JSON.stringify({
      messaging_product: "whatsapp",
      to: phone,
      type: "template",
      template: {
        name: "order_ready",
        language: { code: "en" },
        components: [{ type: "body", parameters: [{ type: "text", text: name }] }],
      },
    }),
  },
);
output.set("result", await res.json());

消息表应该是什么样的?

每条消息一行,并把 WhatsApp 消息 ID 作为主字段。Meta 会重试它认为失败的投递,而工作流在追加之前先查找该 ID,就不会重复写入同一条消息。

保留一个方向字段,取值为 inbound 和 outbound。在 Coexistence 号码上,团队在 WhatsApp Business 应用中输入的回复,会作为 smb_message_echoes 事件到达同一个 Webhook。把它们记为 outbound 行,base 中就有完整的对话,而不是只有一方。

把每条消息关联到 Contacts 表,并以仅含数字的电话号码作为键,这正是 Meta 发送的格式。之后通过汇总(rollup)即可显示每个联系人最近一次的 inbound 时间,自动化只需要这一个字段,就能判断该用自由文本还是模板。

常见错误

  • 把 Airtable 的 Webhook URL 设为号码的目标地址。它只接受 POST,Meta 的验证 GET 会失败,因此什么都不会被投递。
  • 把访问令牌直接粘贴到脚本正文中。请将其保存为脚本密钥,这样代码和日志中都不会出现它。
  • 从记录自动化向 24 小时内没有来信的人发送自由文本。只有已获批准的模板才能送达。
使用 EasyCoexistence 完成这些操作

在 easycoexistence.com 连接号码,把它的 Webhook 目标地址指向写入 Airtable 的 n8n 工作流,并在控制台中读取 phone number id 和访问令牌。每个号码每月 US$ 9 起,随号码增加降至 US$ 1,前 3 天免费试用。

常见问题

Airtable 免费方案可以使用 Run a script 吗?

Airtable 表示该动作适用于所有方案类型,但限制各不相同,并注明 Team 方案试用版不提供此功能。

可以不用 n8n,改用 Make 或 Zapier 吗?

可以。这三者中的任何一个都能接收 Webhook、响应验证并追加行。唯独 Airtable 本身不能作为目标地址。

Airtable 按钮可以发送 WhatsApp 消息吗?

可以。使用 When a button is clicked 触发器,配合调用 Cloud API 的 Run a script 动作,并用该行的数据填充模板。

EasyCoexistence 会存储这些消息吗?

不会。Meta 会把每个 Webhook 投递到您的 n8n URL,唯一的副本就是您的工作流写入 Airtable 的那一份。

继续阅读

准备开始了吗?

几分钟即可设置 WhatsApp Coexistence,而不是几个月。应用会继续在手机上运行。

开始免费试用

验证时间

基于 Cloud API 的 WhatsApp 与 Airtable 集成