ログイン無料トライアルを開始
Meta Tech Provider

WhatsApp のメッセージを Airtable に記録し、ベースから送信する

Airtable の受信 Webhook トリガーは POST リクエストしか受け付けません。そのため Meta の認証用 GET に応答できず、番号の Webhook 送信先にはなれません。送信先は、各メッセージをテーブルに追加する n8n のワークフローに向けてください。送信は Airtable の中だけで完結します。Run a script オートメーションから fetch で Cloud API を呼び出し、番号のアクセストークンはシークレットとして保存します。

POST only

Airtable の「When webhook received」トリガーは POST 以外を受け付けないため、認証用の GET には応答できません。

5 per second

Airtable の受信 Webhook トリガーのリクエスト上限です。ペイロードは 100 KB までです。

50 fetches

Airtable の Run a script アクション 1 回で実行できるリクエスト数です。各リクエストは 30 秒でタイムアウトします。

Airtable で WhatsApp の Webhook を直接受け取れないのはなぜですか?

Meta は、メッセージを配信する前に送信先を確認するためです。チャレンジ値を付けた GET リクエストを送り、同じ値がレスポンスボディとして返ることを求めます。Airtable の「When webhook received」トリガーは POST リクエストしか受け付けず、固定の JSON を返すため、この確認は通らず、Meta は配信を開始しません。

解決策は、間に 1 つ手順を挟むことです。n8n の Webhook ノードが認証を処理して各メッセージを受信し、n8n の Airtable ノードが 1 行を追加します。記録する内容は、送信者、プロフィール名、本文、メッセージ ID、タイムスタンプ、受信側の電話番号 ID です。Make や Zapier でも同じ構成で動きます。

間に挟む手順には、もう 1 つ利点があります。Airtable の Webhook トリガーは 1 秒あたり 5 リクエストまでですが、ワークフローツールならバーストをキューに溜められるため、拒否されるはずだったリクエストも処理できます。

Airtable のベースから WhatsApp テンプレートを送信するには?

アクションに Run a script を指定したオートメーションを使います。トリガーには、レコードがビューに入ったとき、フィールドが変更されたとき、ボタンがクリックされたときのいずれかを選べます。スクリプトは input.config() でレコードの電話番号とフィールドを読み取り、fetch で Cloud API の messages エンドポイントを呼び出します。Airtable のオートメーションスクリプトはサーバー側で実行されるため、ブラウザの制約は受けません。

アクセストークンはコードに書かず、スクリプトエディタのシークレットとして保存してください。Airtable はコンソール出力からシークレットを伏せ字にし、スクリプトのすべてのシークレットにアクセスできるユーザーだけが編集できます。

お客様から直近 24 時間以内にメッセージがない場合は、必ずテンプレートを使ってください。フリーテキストが届くのは、この 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());

メッセージ用のテーブルはどう設計すればよいですか?

メッセージ 1 件につき 1 行とし、WhatsApp のメッセージ ID を主フィールドにします。Meta は失敗したと判断した配信を再試行しますが、追加の前に ID を検索するワークフローなら、同じメッセージを二重に書き込むことはありません。

方向を示すフィールドを用意し、inbound と outbound を記録します。Coexistence の番号では、チームが WhatsApp Business アプリで入力した返信も、smb_message_echoes イベントとして同じ Webhook に届きます。これを outbound の行として記録すれば、ベースには片側だけでなく会話の全体が残ります。

各メッセージは、数字のみの電話番号をキーにした Contacts テーブルにリンクします。これは Meta が送ってくる形式です。ロールアップを使えば連絡先ごとの最終受信時刻が分かり、オートメーションがフリーテキストとテンプレートのどちらを使うかを判断するには、このフィールド 1 つで足ります。

よくある間違い

  • Airtable の Webhook URL を番号の送信先に設定する。POST しか受け付けないため Meta の認証用 GET が失敗し、何も配信されません。
  • アクセストークンをスクリプト本体に貼り付ける。スクリプトのシークレットとして保存すれば、コードにもログにも残りません。
  • 24 時間以内に連絡のない相手へ、レコードのオートメーションからフリーテキストを送る。届くのは承認済みのテンプレートだけです。
EasyCoexistence で実現する

easycoexistence.com で番号を接続し、Webhook の送信先を Airtable に書き込む n8n のワークフローに設定します。電話番号 ID とアクセストークンはダッシュボードで確認できます。料金は番号 1 件あたり月額 US$ 9 から、番号を追加するほど下がり US$ 1 までで、最初の 3 日間は無料です。

よくある質問

Run a script は Airtable の無料プランで使えますか?

Airtable は、このアクションをすべてのプランで制限付きで利用できるとしています。ただし、Team プランの無料トライアルでは利用できません。

n8n を使わずに Make や Zapier を使えますか?

はい。3 つのどれでも、Webhook の受信、認証への応答、行の追加ができます。送信先になれないのは Airtable 自体だけです。

Airtable のボタンから WhatsApp メッセージを送れますか?

はい。「When a button is clicked」トリガーと、Cloud API を呼び出す Run a script アクションを組み合わせます。テンプレートには、その行のデータが差し込まれます。

EasyCoexistence はメッセージを保存しますか?

いいえ。Meta は各 Webhook をお客様の n8n の URL に直接配信します。コピーが残るのは、ワークフローが Airtable に書き込んだ分だけです。

続きを読む

始める準備はできましたか?

WhatsApp Coexistence の設定は数分で完了し、数か月もかかりません。スマートフォン上のアプリも引き続き使えます。

無料トライアルを始める

確認日

WhatsApp と Airtable を Cloud API で連携する