中級向け
メール対応自動化ワークフロー
届いたメールをAIで仕分け、在庫の問い合わせには在庫を、来店の相談には空き枠を調べて、Gmailに返信の下書きを作るワークフローです。送信はしません。インポートできるJSONと見本データを配布し、取り込みから実行まで手順どおりに確かめました。
公開
動作確認: — n8n 2.36.8 / Claude Haiku 4.5
届いた問い合わせメールに、AIが在庫や空き枠を調べて返信の下書きを作るワークフローです。 送信はしません。下書きを人が読んで、直してから送る前提です。
gmail-claude-stock-visit-drafts.json をダウンロード
見本データ(架空の家具店): shop_products.csv(在庫12商品)/ shop_visit_slots.csv(来店枠18枠)

概要
店に届くメールを5分ごとに読み、AIで用件を仕分けます。 在庫の問い合わせには在庫を、来店の相談にはその日の空き枠を n8n の Data Table から調べ、 データに書かれていることだけを根拠に返信の下書きを Gmail に作ります。 どちらにも当てはまらないメールは、人が対応するようにラベルを付けて残します。
動かした結果
架空の客から届いた7通を流した結果です(この配布ファイルを取り込み直して実行しました)。
| 客のメール | 下書き |
|---|---|
| グレーのリネン2人掛けソファの在庫は?今月中に届けてほしい | 在庫切れ・11月中旬入荷予定。今月中は難しい |
| 幅150cmくらいのダイニングテーブルを探している | ウォールナットは在庫2、オークは在庫切れ・入荷未定 |
| シングルベッドは置いているか | 取り扱いがない |
| 今週土曜の午後に見に行きたい | 14時は満席、16時なら空きがあると案内 |
| 10月7日(水)11時に伺えるか | その日は来店枠がない |
| 先月買ったチェアの脚がぐらつく | 下書きは作らず、needs-human ラベル |
| 3人掛けソファを見に、日曜に行きたい | その日は全枠満席 |
同じ条件でもう一度実行すると、取得は0件で何も起きません。 処理したメールにラベルを付けて、次から読まないようにしているためです。
仕組み
- 5分ごとに起動し、Gmail からまだ処理していないメールを最大10通取得する
- 1通ずつ、Text Classifier で「在庫の問い合わせ」「来店予約」「どちらでもない」に仕分ける
- 在庫の問い合わせ:AIで商品の種類(ソファ、テーブルなど)を取り出し、Data Table の在庫表から同じ種類の行を取得する
- 来店予約:AIで希望の日付と時間帯を取り出し、Data Table の来店枠表からその日の枠を取得する。取り出すときに今日の日付と曜日を一緒に渡すので、「今週の土曜」のような書き方でも日付になる
- 取得したデータだけを根拠に、AIが返信の本文を書き、元のメールへの返信として Gmail に下書きを作る
- 下書きを作ったメールには
ai-drafted、どちらでもないメールにはneeds-humanのラベルを付ける。次の実行では、どちらかのラベルが付いたメールを読まない
AIは Anthropic の Claude Haiku 4.5 で、1通につき3回呼びます(仕分け・取り出し・返信)。
設定
取り込んでから実行できるまでの手順です。キャンバス左上の付箋にも同じことを書いてあります。
1. 取り込む
n8n で新しいワークフローを開き、右上の ... から Import from File… で JSON を選びます。

2. 認証情報を選ぶ
| ノード | 認証情報 |
|---|---|
| Claude Haiku 4.5 | Anthropic |
| 未処理のメールを取得、在庫の下書きを作る、予約の下書きを作る、ai-draftedラベルを付ける、needs-humanラベルを付ける | Gmail |
Anthropic のAPIキーの取り方と注意点は n8n で Claude を使う にまとめています。
3. Data Table を2つ作る
見本データの CSV から、そのままテーブルを作れます。検索の条件の書き方や落とし穴は Data Tableの使い方 にまとめています。
- n8n の Data tables の一覧で、新しいテーブルを作る
- Data table name に
shop_productsと入れ、Import CSV を選んでshop_products.csvを指定する - My CSV file contains a header row にチェックが入っていることを確かめて、Create
- 次の画面で列名と型が表示されるので、そのまま Create
shop_visit_slotsも同じように作る

shop_products.csv を取り込んでみたところ、列の型は自動で判定されました。width_cm・price・stock は Number、ほかは String です。
日本語もそのまま入り、空のセルは null になりました。(shop_visit_slots.csv の取り込みは試していません。capacity と booked が Number になっているか、作成時の画面で確かめてください)
自分の店のデータに置き換えるときは、列名を変えないでください(ワークフローがこの名前で検索します)。
shop_products(在庫)
| 列名 | 型 | 例 |
|---|---|---|
| sku | string | SF-201 |
| name | string | ソファ リネン 2人掛け |
| category | string | ソファ |
| color | string | ベージュ |
| width_cm | number | 160 |
| price | number | 89000 |
| stock | number | 3 |
| note | string | 次回入荷 11月中旬予定 |
category は、AIが取り出す商品の種類(ソファ、テーブル、チェア、照明、ラグ、収納)と同じ言葉にします。
自分の店の分類に変えるときは、「商品の種類を抽出」の説明文も同じ言葉に書き換えてください。
shop_visit_slots(来店枠)
| 列名 | 型 | 例 |
|---|---|---|
| slot_date | string | 2026-10-03 |
| slot_time | string | 16:00 |
| capacity | number | 2 |
| booked | number | 1 |
booked が capacity より少ない枠だけが「空き」として案内されます。
枠の行が無い日は「来店を受け付けていない日」として扱われるので、定休日は行を作らないでおけば済みます。
作ったら、「在庫を検索」で shop_products、「空き枠を検索」で shop_visit_slots を選びます。
条件(category と slot_date が Equals)は最初から入っているので、触らなくて構いません。
4. Gmail にラベルを2つ作る
Gmail の左メニュー「ラベル」の + から、ai-drafted と needs-human を作ります。
作ったら、「ai-draftedラベルを付ける」「needs-humanラベルを付ける」でそれぞれ選びます。
ラベル名は英数字にしてあります。日本語のラベル名が検索条件で確実に効くかは確かめていません。
5. 検索条件を書き換える
「未処理のメールを取得」の検索条件は、こうなっています。
in:inbox -in:drafts -label:ai-drafted -label:needs-human newer_than:1d to:support@example.com
最後の to:support@example.com を、問い合わせを受けるアドレスに書き換えてください。
書き換えるまでは1通も一致しないようにしてあります。書き換え忘れたまま実行しても、何も処理されません(実際に0件になることを確かめました)。
| 条件 | 意味 |
|---|---|
in:inbox -in:drafts |
受信箱だけを読む。自分が作った下書きを客のメールとして読まないため |
-label:ai-drafted -label:needs-human |
処理済みのメールを読まない |
newer_than:1d |
初回に、受信箱の過去のメールを全部処理しないため |
6. 手動で1回実行してから公開する
Execute workflow で1回実行し、Gmail の下書きを読んでください。問題なければ Publish で5分ごとに動き始めます。
費用
1通につきAIを3回呼んで、入力は合計1,500〜2,000、出力は200〜400トークンほどでした。 Claude Haiku 4.5 で 1通あたり約0.4〜0.6円です(1ドル150円で計算)。 どちらでもないメールは仕分けの1回だけです。
入っていないもの
このワークフローは下書きを作るところまでです。次のものは入っていません。
- 送信。下書きを人が読んで送る前提です。AIの返信には誤字や、データに無いことの言い換えが残ります(検証の記録)
- 予約の確定。空き枠を案内するだけで、Data Table の
bookedは増やしません。下書きを送らなかったときに枠が埋まったままになるのを避けるためです - needs-human の通知。ラベルを付けるだけです。Slack などへの通知は足していません
- 用件が2つあるメール。「ソファを見に、日曜に行きたい」は来店予約として扱われ、ソファの在庫には触れません
取り込むときに気づいたこと
- ワークフローのタイムゾーン設定は、取り込みで引き継がれませんでした。 配布 JSON には Asia/Tokyo を入れていましたが、取り込んだワークフローの設定には残っていません。そのため「今日の日付」の式を
$now.setZone('Asia/Tokyo')で日本時間に固定しています - 取り込んだワークフローは、既定で MCP から見えません。 Claude Code から操作するときは、ワークフローの設定で MCP からのアクセスを有効にしてください
確認していないこと
- n8n 2.36.8 でしか確かめていません
- Gmail Trigger は使っていません。 5分ごとに取得する形にしたのは、手動で何度でも検証できるためです
- 検証したメールは架空の7通です。実際の問い合わせは書き方がもっとばらつきます
- 公開(Publish)して5分ごとに動かし続けたときの挙動は、まだ長時間見ていません
次に読む
このワークフローを作る途中で踏んだ落とし穴(1通で後ろが全部止まる、自分の下書きに返信する、空き枠がある客を断る)は n8nで客のメール対応を自動化したら、1通の問い合わせで残りが全部止まった に書きました。
ほかの実例や、止まった場所のまとめは n8n 業務自動化の実例 にあります。