将 WhatsApp 消息记录到 Airtable,并从 base 发送
Airtable 的传入 Webhook 触发器只接受 POST 请求,因此无法响应 Meta 的验证 GET 请求,也不能直接作为号码的 Webhook 目标地址。请将目标地址指向一个 n8n 工作流,由它把每条消息追加到表中。发送则可以在 Airtable 内完成:Run a script 自动化可以用 fetch 调用 Cloud API,号码的访问令牌则保存为密钥。
Airtable 的 When webhook received 触发器不接受其他方法,因此无法响应验证 GET 请求。
Airtable 传入 Webhook 触发器的请求上限,负载上限为 100 KB。
单个 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 写回记录,从而将这次发送与对应的行关联起来。
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.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,而不是几个月。应用会继续在手机上运行。
开始免费试用验证时间