🚀

問い合わせメールを内容別にSlackへ自動振り分けする(Google Apps Script・コピペ可)

に公開

この記事でできるようになること

info@ 宛や共有メールボックスに届く問い合わせを、件名・本文のキーワードで自動分類し、担当のSlackチャンネルへ通知 + Gmailにラベル付けする仕組みを、Google Apps Script(GAS)だけで作ります。サーバーもSaaS契約も不要、設定はおよそ25分です。

対象は「営業・経理・総務から『これ自動化できる?』が全部自分に飛んでくる」ひとり情シス/DX担当の方。コードは1行ずつ日本語コメントを付けているので、自社の分類ルールに合わせて読み替えながら使えます。

動作環境: Google Workspace(Gmail)+ Slack(Incoming Webhook)。追加費用はかかりません。実際の挙動は受信メールの内容・Slack権限・APIのレート制限により変わる場合があります。

完成イメージ

  • 受信トレイの未読メールを5分おきにチェック
  • 「見積・営業 / サポート / 採用 / その他」に自動分類
  • 分類ごとに別々のSlackチャンネル(Webhook)へ通知
  • 同時にGmailへ分類ラベルを付与
  • 「とりあえず全部自分が一次受け」する回数を減らす

ポイントは、最初から完璧な分類を組まないこと。いちばん多い問い合わせ1種類(例: 請求関連)だけのルールから始めて、慣れたら増やすのが挫折しないコツです。

1. Slack側の準備(Incoming Webhook)

分類ごとにSlackのIncoming Webhook URLを発行します(Slack API: Incoming Webhooks)。最初は1本でも構いません。発行したURLは後でコードに貼ります。

2. コード(Code.gs)

script.google.com で新規プロジェクトを作り、以下を貼り付けます。

// ===== 設定: 分類ルール(自社の問い合わせに合わせて編集) =====
// label: Gmailに付けるラベル名 / keywords: 本文・件名に含まれたら該当 / webhook: 通知先Slack
const ROUTING_RULES = [
  { label: '見積・営業', keywords: ['見積','お見積','料金','価格','導入','商談'], webhook: 'https://hooks.slack.com/services/XXX/SALES/XXX' },
  { label: 'サポート',   keywords: ['不具合','エラー','動かない','使い方','ログイン','解約'], webhook: 'https://hooks.slack.com/services/XXX/SUPPORT/XXX' },
  { label: '採用',       keywords: ['採用','応募','求人','面接'], webhook: 'https://hooks.slack.com/services/XXX/HR/XXX' }
];
const DEFAULT_WEBHOOK = 'https://hooks.slack.com/services/XXX/OTHER/XXX'; // どれにも当たらない時の通知先
const GMAIL_QUERY = 'in:inbox is:unread'; // 処理対象の絞り込み(まずは狭く)
const MAX_THREADS = 20;   // 1回の処理上限(レート保護)
const MARK_AS_READ = true; // 通知済みは既読にして二重処理を防ぐ

// ===== メイン: 未読を分類してSlackへ =====
function routeInquiries() {
  const threads = GmailApp.search(GMAIL_QUERY, 0, MAX_THREADS); // 対象スレッドを取得
  threads.forEach(function(thread) {
    const msg = thread.getMessages()[0];        // スレッド先頭メッセージ
    const subject = msg.getSubject() || '';
    const body = msg.getPlainBody() || '';
    const from = msg.getFrom() || '';
    const rule = classify_(subject + ' ' + body); // 件名+本文で分類
    applyLabel_(thread, rule.label);               // Gmailラベル付与
    notifySlack_(rule, subject, from);             // Slack通知
    if (MARK_AS_READ) thread.markRead();           // 二重処理防止
  });
}

// ===== 分類: 最初に一致したルールを返す =====
function classify_(text) {
  for (var i = 0; i < ROUTING_RULES.length; i++) {
    var rule = ROUTING_RULES[i];
    for (var j = 0; j < rule.keywords.length; j++) {
      if (text.indexOf(rule.keywords[j]) !== -1) return rule; // キーワード一致
    }
  }
  return { label: 'その他', webhook: DEFAULT_WEBHOOK }; // 未一致は「その他」
}

// ===== Gmailラベル付与(無ければ作成) =====
function applyLabel_(thread, labelName) {
  var label = GmailApp.getUserLabelByName(labelName) || GmailApp.createLabel(labelName);
  thread.addLabel(label);
}

// ===== Slack通知(Incoming Webhookへ) =====
function notifySlack_(rule, subject, from) {
  var text = '*【' + rule.label + '】新しい問い合わせ*\n差出人: ' + from + '\n件名: ' + subject;
  UrlFetchApp.fetch(rule.webhook, {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify({ text: text })
  });
}

// ===== トリガー設定: 5分おきに自動実行 =====
function setupInquiryTrigger() {
  ScriptApp.getProjectTriggers().forEach(function(t) {
    if (t.getHandlerFunction() === 'routeInquiries') ScriptApp.deleteTrigger(t); // 重複防止
  });
  ScriptApp.newTrigger('routeInquiries').timeBased().everyMinutes(5).create();
}

3. 動かす手順(約25分)

  1. 上のコードを貼り付け、ROUTING_RULES を自社の分類に編集(ラベル名・キーワード・通知先Webhook)
  2. どれにも当たらない時の DEFAULT_WEBHOOK を設定
  3. routeInquiries を手動実行 → 権限承認 → Slackに通知が来ればOK
  4. setupInquiryTrigger を1回実行 → 5分おきの自動振り分けが開始

4. つまずきポイント

  • 全部「その他」になる: キーワードが本文と一致していません。ROUTING_RULES を実際のメール文面に合わせて見直します。
  • 通知が来ない: Webhook URLの貼り間違いが大半です。
  • 処理が多すぎて不安: MAX_THREADS を小さくし、GMAIL_QUERYin:inbox is:unread label:問い合わせ のように絞ってから広げます。

5. 業種に合わせた応用

卸売業なら分類をこう変えるイメージです。

const ROUTING_RULES = [
  { label: '注文・取引', keywords: ['注文','発注','納期','在庫'], webhook: '...' },
  { label: '与信・請求', keywords: ['請求','振込','与信','支払'], webhook: '...' },
  { label: '配送',       keywords: ['配送','遅延','破損','配達'], webhook: '...' }
];

セキュリティ上の注意

  • Webhook URLは機密情報です。第三者に共有しないでください。長期運用ではコード直書きではなく Script Properties での管理を推奨します。
  • このスクリプトは各自のGoogle Workspace/Slack環境内で動作します。本文に個人情報が含まれる場合、通知先チャンネルの公開範囲にご注意ください。

まとめ

問い合わせの一次受けは「自動でSlackに振り分ける」だけでかなり軽くなります。まずは1ルールから始めてみてください。


このテンプレートは、ひとり情シス/DX担当向けに日本のオフィスツール(Sheets / Gmail / Slack / freee / kintone)の自動化テンプレを揃えている Peace Craft のサンプルです。上記コード一式と設定手順は無料で配布しています。

Discussion