中級向け

LINE対応自動化ワークフロー

LINE公式アカウントに届いた問い合わせに受付の返事だけ即答し、AIが在庫や来店枠を調べた返信案をスタッフにメールで送って、「送る」を押したものだけをLINEで返すワークフローです。署名の確認と再送の排除つき。JSONを配布し、取り込み直して動くことを確かめました。

動作確認: — n8n 2.36.8 / Claude Haiku 4.5 / LINE Messaging API

LINE公式アカウントに届いた問い合わせに、AIが在庫や来店枠を調べて返信案を作り、スタッフが承認したものだけをLINEで返すワークフローです。 お客様にはすぐに受付の返事だけを送り、本文はスタッフがメールの「送る」を押すまで届きません。

line-claude-approval-reply.json をダウンロード

見本データ(架空の家具店。メール版と共通): shop_products.csv(在庫12商品)/ shop_visit_slots.csv(来店枠18枠)

ワークフローの前半。LINEから受信、署名を計算、署名が一致?と続き、falseの出口は署名が合わないので捨てるへ。trueの出口からイベントを1件ずつに、同じイベントを捨てる、問い合わせを整える、テキストと画像だけ、受付の返事をする、テキストか画像かと進む。textの出口はテキストの問い合わせへ、imageの出口は画像を取得、写真の内容を読む、画像の問い合わせへ進み、どちらも問い合わせ文で合流して用件を分類へつながる。下にClaude Haiku 4.5のモデルノードがあり、点線でAIノードにつながっている
前半。署名と重複を確かめ、受付の返事を送ってから、写真は文章に直して1本にそろえる
ワークフローの後半。用件を分類の3つの出口のうち、在庫の問い合わせは商品の種類を抽出、在庫を検索、検索結果をまとめる、在庫の返信案を作るへ、来店予約は来店希望を抽出、空き枠を検索、枠をまとめる、予約の返信案を作るへ進み、2本が返信案で合流する。そのあとスタッフに承認を頼む、承認の結果と進み、承認の結果の3つの出口が、お客様に送る、送らない、期限切れを知らせるにつながる。Otherの出口はスタッフに知らせるへ進む
後半。返信案を作ってスタッフに承認を頼み、送る・送らない・期限切れの3つに分ける

概要

メール版のテンプレートと同じ仕事を、LINEで受けて、LINEで返す形にしたものです。 メール版は Gmail に下書きを作るところで止めていましたが、LINEには下書きがありません。 そこで、返信案をスタッフにメールで送り、「送る」を押したものだけをお客様に送る形にしました。

お客様から見ると、こう進みます。

  1. 問い合わせを送ると、すぐに「お問い合わせありがとうございます。担当者が内容を確認して、このトークで改めてご返信いたします。」が届く
  2. スタッフが返信案を読んで「送る」を押すと、同じトークに返信が届く

動かした結果

この配布ファイルを作る前の版で、次のメッセージを順に送りました。最後のソファの質問は、配布ファイルを取り込み直した版でも試しています。

送ったもの 結果
グレーのソファありますか? 「在庫切れ・11月中旬入荷予定」の返信案。「送る」を押すとLINEに届いた
今週土曜の午後にお店に行きたいです 今日(10月3日・土曜)を正しく取り、空いている16時を案内する返信案。「送る」でLINEに届いた
本の写真 AIの判定は「家具は写っていません」。返信案は「商品名を教えてください」。「送らない」を押し、何も届かないことを確かめた
スタンプ 何も起きない(受付の返事も送らない)
先週買ったチェアの脚がぐらつきます 返信案は作らず、スタッフに「要対応のお問い合わせ」のメールが届いた
一度受け取ったものを、本文も署名もそのまま送り直す 署名の確認は通ったが、「同じイベントを捨てる」で止まった。返信案もメールも作られない
署名を付けずに送る 「署名が合わないので捨てる」で止まった
承認メールのボタンを押さずに2分待つ(期限を2分にして試した) スタッフに「承認されないまま期限が切れました」のメールが届いた
期限切れを知らせるメールの本文。返信案が承認されないまま期限が切れたので、お客様には受付の返事しか届いていません。LINE Official Account Managerのチャットから対応してください。と書かれ、その下にお客様からのLINE(グレーのソファありますか?)と、送られなかった返信案が続く
期限切れの通知。送られなかった返信案も一緒に届くので、そのままチャットで返せる

仕組み

  1. LINE から Webhook で問い合わせを受け取る(受け取った時点で LINE には 200 を返す)
  2. 署名を確かめる。LINE は本文をチャネルシークレットで署名して x-line-signature ヘッダーに入れてくるので、受け取った本文から同じ計算をして一致するか比べる。一致しないものは捨てる
  3. 1回の送信に複数のイベントが入ることがあるので、1件ずつに分け、webhookEventId で一度処理したイベントを捨てる
  4. テキストと画像だけを残し、受付の返事を送る(reply API)
  5. 画像なら LINE から画像を取り出し、AIに「何の家具が写っているか」を書かせて、テキストの問い合わせと同じ形にそろえる
  6. ここからはメール版と同じ。AIで「在庫の問い合わせ」「来店予約」「どちらでもない」に仕分け、Data Table を調べて返信案を作る。どちらでもないものはスタッフにメールで知らせる
  7. 返信案をスタッフに Gmail の Send and Wait で送り、「送る」「送らない」のボタンが押されるのを待つ
  8. 押された結果で3つに分ける。送るならお客様に送る(push API)、送らないなら何もしない、24時間押されなければスタッフに期限切れを知らせる

AIは Claude Haiku 4.5 で、テキストなら3回、写真なら4回呼びます。

設定

取り込んでから動くまでの手順です。キャンバス左の付箋にも同じことを書いてあります。

LINE 公式アカウントと Messaging API のチャネルは、先に作ってある前提です。

1. 取り込む

n8n で新しいワークフローを開き、右上の ... から Import from File… で JSON を選びます。

2. 認証情報を4種類選ぶ

ノード 認証情報 入れるもの
受付の返事をする、画像を取得、お客様に送る Header Auth Name に Authorization、Value に Bearer + チャネルアクセストークン
署名を計算 Crypto Hmac Secret にチャネルシークレット
Claude Haiku 4.5 Anthropic APIキー
スタッフに知らせる、スタッフに承認を頼む、期限切れを知らせる Gmail スタッフのGmail

チャネルアクセストークンとチャネルシークレットは、どちらも LINE Developers のチャネルの画面にあります。

何に使うか 置き場所
チャネルシークレット LINE から届いたものが本物かを確かめる 「チャネル基本設定」タブ
チャネルアクセストークン n8n から LINE に送る・画像を取り出す 「Messaging API設定」タブの一番下(長期のトークン)

3. Data Table を2つ作る

メール版の記事と同じテーブルです。見本の CSV から作り、「在庫を検索」で shop_products、「空き枠を検索」で shop_visit_slots を選びます。 メール版をすでに使っているなら、同じテーブルを選べば済みます。

4. Gmail の宛先を3つ書き換える

「スタッフに知らせる」「スタッフに承認を頼む」「期限切れを知らせる」の宛先は、staff@example.com にしてあります。スタッフのアドレスに書き換えてください。

5. 公開して、LINE に Webhook URL を入れる

  1. n8n で Publish する
  2. 「LINEから受信」を開き、Production URL(/webhook/line-shop で終わるもの)をコピーする
  3. LINE Developers の「Messaging API設定」タブで、Webhook URL に貼って「更新」し、「検証」を押す。「成功」と出れば届いている
  4. 同じタブで Webhookの利用 をオンにする

LINE から n8n に届くには、n8n が外から https で開ける必要があります。 localhost のままでは届きません。 検証では Cloudflare の一時的なトンネル(cloudflared tunnel --url http://localhost:5678)を使いました。 このトンネルは起動し直すたびに URL が変わるので、そのたびに LINE の Webhook URL も入れ直す必要があります。続けて使うなら、固定の URL で n8n を公開してください。

6. LINE の応答設定を変える

LINE Official Account Manager の 設定 → 応答設定 で、次のようにします。

項目 設定 理由
Webhook オン オフだと n8n に届かない
応答メッセージ オフ オンのままだと、LINE の自動応答(「メッセージありがとうございます!」など)も届く
チャット オン 在庫・来店以外の問い合わせと、期限切れのものは、スタッフがチャットから返す

応答メッセージは、Webhook の受信だけを試していた段階ではオンのままで、送るたびに LINE の自動応答が返ってきていました。 オフにしてから試したので、受付の返事と自動応答が両方届くところは確かめていません。

承認ボタンについて分かったこと

返信案の承認には、Gmail ノードの Send and Wait(メールを送って返事を待つ)を使っています。 スタッフにはこう届きます。

スタッフに届いた承認メール。お客様からのLINE(グレーのソファありますか?)と返信案が書かれ、返信案には在庫切れで次回入荷は11月中旬を予定しており、入荷しましたら改めてご連絡させていただきますとある。最後に承認すると、この返信案がそのままお客様のLINEに送られます。とあり、下に送らないと送るの2つのボタンがある
承認メール。この返信案には、データに無い約束(入荷したら連絡する)が入っている

このボタン(Gmail ノードの Send and Wait for Response)について、動かして分かったことを短くまとめます。 細かい挙動と実測は Send and Wait の使い方 に書きました。

  • ボタンは localhost を向いている。 n8n を動かしているパソコンからしか押せない。スマホから押すには WEBHOOK_URL の設定が要る(試していない)
  • 期限を付けないと、西暦3000年まで待つ。 誰も押さなければ、お客様は受付の返事だけで放置される。配布版は24時間で切れるようにした
  • 期限切れは「送る」でも「送らない」でもない形で出てくる。 配布版は Switch で「送る/送らない/どちらでもない」に分け、3つ目を期限切れとしてスタッフに知らせる
  • 2回押しても二重には送られない。 押し終えたボタンは「何もする必要はありません」と出るだけ
  • 承認メールのコピーを持っている人は誰でも押せる。 宛先を書き換え忘れた承認メールでも、送信済みに残ったコピーから承認できた

費用

AIの呼び出しを実行記録から数えました(Claude Haiku 4.5、1ドル150円で計算)。

問い合わせ AIの呼び出し 入力/出力トークン 1件あたり
ソファの在庫(テキスト) 3回 1,806 / 146 約0.4円
土曜の来店(テキスト) 3回 1,718 / 175 約0.4円
本の写真 4回 3,176 / 170 約0.6円
チェアの不具合(どちらでもない) 1回 599 / 34 約0.1円

写真は、画像を読ませる1回だけで入力が1,674トークンありました。

LINE の送信にも費用の考え方があります。受付の返事に使っている reply API は、届いたメッセージに付いてくる返信用のトークンで送るもので、 承認後の返信に使っている push API は、こちらから任意のときに送るものです。 LINE Developers の資料では、push で送ったメッセージは月のメッセージ通数に数えられ、reply は数えられないとされています(Messaging APIの料金)。 このワークフローでは、承認して送った返信1件ごとに1通数えられます。 無料で送れる通数はプランで決まっています。実際のカウントは確かめていません。

承認を待ってから送る形にしている以上、reply API は使えません。返信用のトークンは「Webhookを受信してから1分以内」に使う必要があり(Messaging APIリファレンス)、スタッフが読み終わるころには切れているためです(資料で読んだだけで、切れるところは試していません)。

入っていないもの

  • 予約の確定。空き枠を案内するだけで、Data Table の booked は増やしません
  • 会話の続き。お客様が「16時でお願いします」と返しても、新しい問い合わせとして一から処理します。前のやりとりは覚えていません
  • テキストと画像以外。スタンプ、位置情報、動画などは無視します。受付の返事も送りません
  • 用件が2つある問い合わせ。どちらか1つに仕分けます(メール版と同じ)
  • 承認する人の確認。上に書いたとおり、承認メールを持っている人は誰でも送れます

取り込むときに気づいたこと

  • ワークフローのタイムゾーン設定は、取り込みで引き継がれませんでした。 メール版と同じです。「今日の日付」は式の中で $now.setZone('Asia/Tokyo') として日本時間に固定してあるので、動作には影響しません
  • 取り込んだワークフローは、既定で MCP から見えません。 Claude Code から実行記録を読むときは、ワークフローの設定で MCP からのアクセスを有効にしてください
  • 元のワークフローと取り込んだワークフローは、どちらも受け口が line-shop なので、同時に公開できません。片方を Unpublish してから公開してください

確認していないこと

  • n8n 2.36.8 でしか確かめていません
  • 送ったメッセージは上の表の数件だけです。実際の問い合わせは書き方がもっとばらつきます
  • WEBHOOK_URL を設定して、スマホから承認するところは試していません
  • push で送った通数が、LINE の管理画面でどう数えられるかは見ていません
  • LINE が実際に同じイベントを再送してきたところは見ていません。再送の排除は、受け取ったものを自分で送り直して確かめました
  • 一時的なトンネルで動かしただけで、固定の URL で長時間動かしたときの挙動は見ていません

次に読む

承認をメールではなく Slack のスレッドで行い、答えが決まるものは AI が即答する形は LINE×Slack 問い合わせ対応 で配布しています。

同じ仕事をメールで受けるテンプレートは メール対応自動化ワークフロー で配布しています。

この仕事を AI Agent 1つに任せたらどうなるかは AI Agentに任せるか、手順を組むか で比べました。

ほかの実例や、止まった場所のまとめは n8n 業務自動化の実例 にあります。

再送されたイベントを捨てる仕組みは Remove Duplicatesノードの使い方 で、実行をまたぐ記憶の持ち方まで確かめています。

次に読む