登入開始免費試用
Meta Tech Provider

將 WhatsApp 訊息記錄到 Airtable,並從 base 傳送訊息

Airtable 的 incoming webhook trigger 只接受 POST 請求,因此無法回應 Meta 的驗證 GET 請求,也不能直接成為號碼的 Webhook 目的地。請把目的地指向 n8n workflow,由它將每則訊息新增到資料表。傳送訊息可以在 Airtable 內完成:Run a script automation 可以用 fetch 呼叫 Cloud API,並把該號碼的存取權杖存放為 secret。

POST only

Airtable 的 When webhook received trigger 不接受其他方法,因此無法回應驗證 GET 請求。

5 per second

Airtable incoming webhook trigger 的請求上限,負載上限為 100 KB。

50 fetches

每個 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 寫回記錄,讓每次傳送都能對應到相應的一列。

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 會重試它認為失敗的傳送,而 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 完成這項設定

在 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,而非幾個月。應用程式在手機上仍可繼續運作。

開始免費試用

驗證日期

WhatsApp 與 Airtable:透過 Cloud API 連接