問い合わせメールを内容別に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分)
- 上のコードを貼り付け、
ROUTING_RULESを自社の分類に編集(ラベル名・キーワード・通知先Webhook) - どれにも当たらない時の
DEFAULT_WEBHOOKを設定 -
routeInquiriesを手動実行 → 権限承認 → Slackに通知が来ればOK -
setupInquiryTriggerを1回実行 → 5分おきの自動振り分けが開始
4. つまずきポイント
-
全部「その他」になる: キーワードが本文と一致していません。
ROUTING_RULESを実際のメール文面に合わせて見直します。 - 通知が来ない: Webhook URLの貼り間違いが大半です。
-
処理が多すぎて不安:
MAX_THREADSを小さくし、GMAIL_QUERYをin: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 のサンプルです。上記コード一式と設定手順は無料で配布しています。
- 無料サンプルを受け取る(メールアドレスのみ): https://preview.mailerlite.io/forms/2388818/188954932000327038/share
- 他のテンプレ一覧(在庫アラート / freee取引エクスポート / kintone→Slack / 申請承認フロー など): https://curvy-plutonium-09b.notion.site/Peace-Craft-Automation-Library-36fbcd29551f818f9778ca31ab3eaeb9?ref=zenn
Discussion