將 WhatsApp 訊息記錄到 Airtable,並從 base 傳送訊息
Airtable 的 incoming webhook trigger 只接受 POST 請求,因此無法回應 Meta 的驗證 GET 請求,也不能直接成為號碼的 Webhook 目的地。請把目的地指向 n8n workflow,由它將每則訊息新增到資料表。傳送訊息可以在 Airtable 內完成:Run a script automation 可以用 fetch 呼叫 Cloud API,並把該號碼的存取權杖存放為 secret。
Airtable 的 When webhook received trigger 不接受其他方法,因此無法回應驗證 GET 請求。
Airtable incoming webhook trigger 的請求上限,負載上限為 100 KB。
每個 Airtable Run a script action 可發出的請求數目,每個請求 30 秒後逾時。
為什麼 Airtable 不能直接接收 WhatsApp Webhook?
因為 Meta 在傳送任何內容之前,會先檢查目的地。它會發出帶有 challenge 值的 GET 請求,並期望回應內容原樣返回同一個值。Airtable 的 When webhook received trigger 只接受 POST 請求,並以自己固定的 JSON 回應,所以驗證無法通過,Meta 也就不會開始傳送。
解決方法是在中間加一個步驟。由 n8n 的 Webhook node 處理驗證並接收每則訊息,再由 n8n 的 Airtable node 新增一列:寄件人、個人檔案名稱、內容、訊息 id、時間戳記,以及接收訊息的 phone number id。同樣的結構也適用於 Make 或 Zapier。
中間這一步還有另一個好處。Airtable 的 Webhook trigger 每秒只允許五個請求,而工作流程工具可以把突發的大量訊息排隊處理,否則這些請求會被拒絕。
如何從 Airtable base 傳送 WhatsApp 訊息範本?
使用動作為 Run a script 的 automation。觸發條件可以是記錄進入某個檢視、欄位變更或按下按鈕。腳本透過 input.config() 讀取記錄的電話號碼和欄位,再用 fetch 呼叫 Cloud API 的 messages 端點。Airtable 的 automation 腳本在伺服器端執行,所以不會受到瀏覽器的限制。
請把存取權杖存放為腳本編輯器中的 secret,而不要寫在程式碼裡。Airtable 會在主控台輸出中隱藏 secret,而且只有能存取腳本全部 secret 的人才可以編輯該腳本。
客戶在過去 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 會重試它認為失敗的傳送,而 workflow 在新增之前先查詢該 id,就不會重複寫入同一則訊息。
另設一個方向欄位,值為 inbound 和 outbound。在 Coexistence 號碼上,團隊在 WhatsApp Business 應用程式中輸入的回覆,會以 smb_message_echoes 事件送到同一個 Webhook。把這些記錄為 outbound 列,base 就能取得完整對話,而不只是其中一方。
把每則訊息連結到 Contacts 資料表,並以純數字電話號碼作為鍵,這正是 Meta 傳送的格式。然後用 rollup 顯示每位聯絡人最後一次 inbound 的時間,automation 只需這一個欄位,就能決定使用自由格式訊息還是訊息範本。
常見錯誤
- 把 Airtable 的 Webhook URL 設為號碼的目的地。它只接受 POST,Meta 的驗證 GET 會失敗,因此完全不會有訊息送達。
- 把存取權杖直接貼進腳本內容。請存放為腳本 secret,讓它不會出現在程式碼和日誌中。
- 對 24 小時內沒有來訊的人,從記錄 automation 傳送自由格式訊息。只有已核准的訊息範本才能送達。
在 easycoexistence.com 連接號碼,把它的 Webhook 目的地指向寫入 Airtable 的 n8n workflow,再從控制台讀取 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 trigger,搭配呼叫 Cloud API 的 Run a script action,並以該列的資料填入訊息範本。
EasyCoexistence 會儲存這些訊息嗎?
不會。Meta 會把每個 Webhook 傳送到您的 n8n URL,唯一的副本就是您的 workflow 寫入 Airtable 的那一份。
繼續閱讀
準備開始嗎?
幾分鐘內設定 WhatsApp Coexistence,而非幾個月。應用程式在手機上仍可繼續運作。
開始免費試用驗證日期