中級向け

LINE×Slack 問い合わせ対応

お客様との窓口は LINE、社内は Slack。LINE に届いた問い合わせのうち、営業時間・在庫・来店の空きのように答えが決まるものは AI が約5秒で返し、それ以外は Slack のスレッドに回して担当者が返すワークフローです。LINE から11通、Slack から5回試して、「チャンネルにも投稿」の返信が届かない、担当者どうしの相談がお客様に送られる、AI が担当者に回さず答えてしまう、の3つを直しました。

動作確認: — n8n 2.36.8 / Claude Haiku 4.5 / LINE Messaging API / Slack(無料プラン)

お客様との窓口は LINE、社内のやり取りは Slack。ツールが分かれていて、LINE の管理画面と Slack を行ったり来たりしているお店や会社は多いと思います。

このワークフローは、その2つをつなぎます。

  • LINE に届いた問い合わせのうち、答えが手元の情報で決まるもの(営業時間、在庫、来店の空き)は、AI がその場で返す
  • それ以外は、お客様に受付の返事だけ返して、Slack のスレッドに回す
  • 担当者がスレッドに書いた返信が、そのままお客様の LINE に届く

line-slack-handoff.json をダウンロード

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

お客様LINEn8n答えが手元の情報で決まるか?決まる → AI が即答(reply)営業時間・在庫・来店の空き 通数 0決まらないSlackお客様ごとのスレッド受付の返事だけ(reply) 通数 0担当者がスレッドに書く → LINE へ(push)通数を使うのはここだけ(1通)。「//」で始まる書き込みは送らない
LINE の返信用のトークンは、受信から1分以内しか使えない。人が Slack で返すと間に合わないので push になり、月の通数を使う。

AI に答えさせるもの、担当者に回すもの

線の引き方は、「答えが、手元の情報だけで決まるか」です。いくつかの答え方がある場合(平日と土日で営業時間が違う、など)も、情報で決まるなら AI が答えます。

問い合わせ 誰が返すか 答えの元
営業時間・定休日・場所・駐車場・支払い方法 AI ワークフローに書いた店の情報
商品の在庫・価格・サイズ AI(表に載っている商品だけ) 商品の表(Data Table)
来店の空き AI 来店枠の表(Data Table)
予約の確定・変更・取り消し 担当者 —
返品、苦情、値引き、送料、表に無い商品、それ以外 担当者 —
用件が2つ以上混ざっているもの 担当者 —

最後の行は、わざと入れています。「営業時間と、返品のやり方を教えてください」のような問い合わせに、AI が営業時間だけ答えると、残りの返品が漏れやすくなるためです。

なぜ AI が先に答えるのか:LINE の通数

LINE の返信には2種類あります。

  • reply:お客様のメッセージへの返事。月の通数に数えられない。ただし、返事に使うトークンは受信から1分以内しか使えない(Messaging API リファレンス)
  • push:こちらから、いつでも送れる。月の通数に数えられる(無料のコミュニケーションプランは月200通まで。Messaging API の料金)

担当者が Slack を見て返すと、ほぼ確実に1分を過ぎます。つまり人が返すたびに、通数を1通使います。

そこで、答えが決まるものは AI が1分以内に reply で返し、通数を使うのは人が返すときだけにしました。人に回すときも、受付の返事は reply で送るので、通数は使いません。

LINE から11通、Slack から5回試した結果

手元の n8n(2.36.8)に Cloudflare の一時的なトンネルをつなぎ、スマホの LINE から送って試しました。Slack は検証用に作った無料のワークスペースです。

送ったもの 結果
営業時間を教えてください AI が即答。お客様が送ってから LINE に返事が届くまで約5秒
ソファの在庫はありますか? 在庫数・価格・入荷予定・「展示品のみ」まで、表のとおりに答えた
10月5日の午後は空いていますか? 空いている 14:00 と 16:00 だけを案内し、「担当者が予約を確定します」と添えた
10月7日の午後に来店できますか? 「定休日のため受付がない」と答えた(1回目は理由を言わなかったので直した)
先週買った椅子を返品したいです 受付の返事だけ。Slack に「担当者の返信が必要」と出た
営業時間と、返品のやり方を教えてください 用件が2つなので、AI は答えず担当者へ
16:00でお願いします 予約の確定なので担当者へ
Slack のスレッドで返信した 約1秒で LINE に届き、Slack の書き込みに ✅ が付いた
表に無い商品(オフィスチェア)の写真 1回目は失敗(後で書きます)。直したあとは担当者へ
ダイニングチェアの在庫はありますか? 直したあとも、表にある商品は AI が答えた
スマホの LINE のトーク画面。お客様が「10月7日の午後に来店できますか?」と送り、店から来店の受付がない旨の返事が届いている。続けて「10月5日の午後は空いてますか?」と送り、「10月5日の午後は、14:00と16:00がご利用いただけます。ご希望の時間をこのトークでお知らせください。担当者が予約を確定してご連絡します。」と返事が届いている
来店の空きは AI が即答する。予約の確定は担当者に回す
Slack の #line-inquiry チャンネル。ボット line-madoguchi の投稿で、「チャンネルにも投稿済」の表示。本文は「先週買った椅子を返品したいです」と「担当者の返信が必要です。このスレッドに書くと、お客様の LINE に送られます(受付の返事だけ送りました)」
担当者に回すものは、スレッドの中だけでなくチャンネルにも出す。スレッドを開かなくても気づける

つまずいた3つと、直し方

1. 「チャンネルにも投稿する」を付けた返信が、LINE に届かなかった

Slack のスレッドに返信するとき、「以下にも投稿する:#チャンネル名」にチェックを付けられます。これを付けて返信したら、お客様の LINE に届きませんでした。 ✅ も付きませんでした。

n8n の記録を見ると、Slack からは種類(subtype)が thread_broadcast の出来事として届いていました。さらにもう1つ、message_changed(表示の更新)も届いていました。

最初の作りでは、ボット自身の投稿を拾わないように、種類が付いているものを全部捨てていました。それで、担当者の返信まで捨てていました。thread_broadcast だけ通すように直すと、1回だけ届きました。

2. 担当者どうしの相談が、お客様に送られた

試している途中で、お客様の「16:00でお願いします」を、Slack のスレッドに書いてしまいました。それがお店の発言として、お客様の LINE に届きました。

この作りでは、スレッドに書いたものは全部お客様に送られます。現場では、「16:00 で受けていいですか?」のような担当者どうしの相談を、スレッドに書くことがよくあるはずです。

そこで、「//」(半角のスラッシュ2つ)で始まる書き込みは送らないことにしました。全角の「//」だと送られてしまうので、気をつけてください。

Slack のスレッド。ボットの投稿「16:00でお願いします」「担当者の返信が必要です」の下に、スタッフAの書き込み「// 16:00で受けて大丈夫ですか?」がある。✅ は付いていない
「//」で始まる書き込みは LINE に送らない(✅ も付かない)。担当者の名前とアイコンは隠しています

3. AI が担当者に回さず、「お電話ください」と答えた

表に載っていない商品(オフィスチェア)の写真を送りました。担当者に回すのが正しい場面です。 AI には「聞かれた商品が表に無いときは、文章を書かずに ESCALATE とだけ出す」と指示していました。

ところが、返ってきたのは次の文でした。

申し訳ございませんが、写真のオフィスチェアは当店の在庫商品として見つかりませんでした。詳しくお調べさせていただきたいので、お手数ですがお電話またはご来店ください。

担当者に回らず、しかもこの店の情報には電話番号がありません。 お客様は電話をかけられません。

LINE 版でも、AI が「入荷したらご連絡します」と、データに無い約束を書いたことがありました。 「〜のときは、この言葉だけ出して」という指示は、AI が丁寧な断りの文を書くほうを選んで、守らないことがある、と考えています(2回とも Claude Haiku 4.5 で、ほかのモデルでは試していません)。

直し方は、担当者に回すかどうかを、AI の文章ではなく、ワークフローの分岐で決めることです。

  1. 在庫を答えるノードを、Information Extractor(決めた項目を取り出すノード)に変えた
  2. 「聞かれた商品が、店の商品の中にあるか」をはい/いいえの項目で答えさせ、返信の文は別の項目にした
  3. 「いいえ」なら、文章があっても使わず担当者に回す

同じ写真を送り直すと、担当者に回りました。あわせて、「情報に無い電話番号やメールアドレスを案内しない」もルールに足しました。

そのほかに分かったこと

  • 担当者が返してから、お客様に届くまでは約1秒でした。✅ が付かない書き込みは、届いていないと考えてください
  • Slack の投稿には、お客様の LINE の表示名(本名のことがあります)が出ます。写真を送られたときは、AI が読んだ写真の説明(部屋の様子まで書くことがあります)も載ります。社内とはいえ、Slack の誰が見てよいかを決めてください
  • Slack のボットの表示名(display_name)を日本語にしたら、アプリを作る画面でエラーになりました。半角の英小文字とハイフンにしたら通りました(アプリの名前は日本語で問題ありませんでした)
  • ボットは、チャンネルに招待しないと投稿できません。チャンネルが無いときは channel_not_found、招待していないときは not_in_channel と、エラーが違いました
  • n8n の Slack Trigger は、署名の無いリクエストを 401 で拒否しました。認証情報に入れた Signing Secret で確かめているようです(実装は読んでいません)

使うための設定

1. 取り込む

ダウンロードした JSON を、n8n の新しいワークフローに取り込みます。LINE を受ける部分と、Slack の返信を受ける部分が、1つのワークフローに入っています。

2. Slack のアプリを作る

Slack の アプリの管理画面 で「Create New App」→「From a manifest」を選び、次を貼り付けると、必要な権限がそろったアプリができます。

{
  "display_information": { "name": "LINE窓口" },
  "features": { "bot_user": { "display_name": "line-madoguchi", "always_online": true } },
  "oauth_config": { "scopes": { "bot": ["chat:write", "channels:read", "channels:history", "reactions:write"] } },
  "settings": { "org_deploy_enabled": false, "socket_mode_enabled": false, "token_rotation_enabled": false }
}
権限 使い道
chat:write 問い合わせをチャンネルに投稿する
channels:read n8n の画面でチャンネルを選べるようにする
channels:history 担当者がスレッドに書いた返信を受け取る
reactions:write 送れた書き込みに ✅ を付ける

作ったら、投稿先のチャンネルで /invite @line-madoguchi と打って、ボットを招待します。

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

認証情報 入れるもの 使うノード
Header Auth Name Authorization、Value Bearer + LINE のチャネルアクセストークン LINE に送る・取得するノード
Crypto Secret に LINE のチャネルシークレット 署名を計算
Anthropic API キー Claude Haiku 4.5
Slack API Access Token にボットのトークン(xoxb- で始まる)、Signature Secret に Slack アプリの Signing Secret Slack のノード全部

Slack のトークンは、アプリの管理画面の「OAuth & Permissions」の Bot User OAuth Token です(xoxp- で始まる User のトークンではありません)。Signing Secret は「Basic Information」→「App Credentials」にあります。

4. Data Table を3つ作る

  • shop_products、shop_visit_slots:見本の CSV から作れます(LINE 版と同じ)。来店枠の日付は、これから先の日付に書き換えてください
  • line_slack_threads:お客様と Slack のスレッドの対応を記録します。列は line_user_id、slack_ts、status、last_inquiry(すべて文字列)

検索・記録のノードで、それぞれの表を選びます。Slack のノードでは、投稿先のチャンネルを選びます。

5. 店の情報を書き換える

「店舗情報で答える」と「空きで答える」のノードに、架空の店の情報(営業時間、定休日、駐車場、支払い方法など)が書いてあります。自分の店の内容に書き換えてください。AI はここに書いたことだけを答えます。

6. 公開して、URL を2か所に入れる

Publish したら、次の2か所に URL を入れます。どちらも、外から https で届く必要があります(n8nはどこで動かすか)。

  • LINE Developers の Webhook URL:「LINEから受信」ノードの Production URL。応答設定で、Webhook をオン、応答メッセージをオフにする
  • Slack アプリの Event Subscriptions:「Slackのメッセージ」ノードの Production URL を Request URL に入れ、bot event の message.channels を足して保存する

確認していないこと

  • 配布した JSON を取り込み直して、最初から設定して動かすところまでは、まだ試していません(取り込んで、画面に正しく並ぶことは確かめました)
  • push で送った通数が、LINE の管理画面でどう数えられるかは見ていません
  • Slack の無料プランで、古いスレッドがいつ見られなくなるかは確かめていません
  • スタンプ・動画・位置情報は、受け取っても捨てています(文字と写真だけ扱います)
  • 担当者が Slack に書いたリンクやメンション、太字などの書式は、Slack の書き方のまま LINE に送られます。変換していません
  • お客様1人につきスレッドは1つです。何か月も続けたときにスレッドが長くなりすぎる問題は、試していません
  • Chatwork・Teams 版は、まだ作っていません

次に読む

次に読む