見出し画像

社内お問い合わせをAIで自動化した話|GAS × Gemini APIで作る社内ポータルサイト

はじめに

「有給の申請方法って何だっけ?」「備品を申請したいんだけど、どこに言えばいい?」

こんな問い合わせが毎日総務部に届いていませんか?

今回は**Google Workspace(GWS)環境の会社向けに、社内お問い合わせ対応をAIで自動化するシステム「KAITO」**を構築した話をまとめます。

ノーコード・ローコードで作れる構成なので、エンジニアじゃなくても再現できます!


KAITOとは?

KAITO = Knowledge AI Inquiry Tool for Office

日本語の「解答(かいとう)」にもかかっています。

社内からの問い合わせを受け取り、社内規定を参照しながらGemini APIが自動で回答してくれるBOTです。

できること

  • Googleフォームからの問い合わせに自動返信

  • Gmailからの問い合わせに自動返信

  • 社内規定(Googleドキュメント)を参照した正確な回答

  • 申請書類(有給申請書など)を返信に自動添付

  • 回答が難しい場合は担当者へ自動エスカレーション

  • 全問い合わせをスプレッドシートにログ保存


システム構成

📁 Google Drive
├── 📄 社内規定(Googleドキュメント)← AIが参照
└── 📁 申請書類テンプレート

         ↓ GAS + Gemini API

📥 受付チャネル
├── Googleフォーム(onFormSubmitトリガー)
└── Gmail(件名「社内問合せ」+社内ドメイン)

         ↓ 自動処理

📤 返信 + 📊 ログ保存(スプレッドシート)

         ↓

🌐 社内ポータル(Google Sites)で公開

使用するサービスはすべてGoogle Workspaceの範囲内。追加のサービス費用はGemini APIの従量課金のみです(月数百円〜)。


なぜNotebookLMじゃなくてGAS?

最初に「NotebookLMに社内データを読ませればいいのでは?」という案も出ましたが、以下の理由でGAS構成にしました。

━━━━━━━━━━━━━━━━━━━━━━
📊 NotebookLM vs GAS + Gemini 比較
━━━━━━━━━━━━━━━━━━━━━━

📌 履歴の自動蓄積
❌ NotebookLM:できない
✅ GAS + Gemini:スプレッドシートに自動保存

📌 外部チャネルとの連携
❌ NotebookLM:難しい
✅ GAS + Gemini:フォーム・Gmailと直接連携

📌 社内データの更新
❌ NotebookLM:手動アップが必要
✅ GAS + Gemini:Driveのドキュメントを常に最新参照

📌 カスタマイズ性
❌ NotebookLM:低い
✅ GAS + Gemini:自由に設計できる

━━━━━━━━━━━━━━━━━━━━━━


ナレッジ管理の設計

社内規定の管理方法はGoogleドキュメント一択にしました。

PDFではなくGoogleドキュメントを選んだ理由

  • `DocumentApp.openById()` でテキストを構造ごと綺麗に読み込める

  • 規定の変更は該当箇所を直接編集するだけ

  • 変更履歴が自動で残り「いつ規定が変わったか」を追跡できる

  • 毎回PDFをアップロードする手間がない

データの役割分担

━━━━━━━━━━━━━━━━━━━━━━

📄 社内規定・マニュアル
→ Googleドキュメントで管理

📋 申請書類テンプレート
→ Google Drive(docx形式)で管理

📊 問い合わせ履歴ログ
→ Googleスプレッドシートに自動蓄積

━━━━━━━━━━━━━━━━━━━━━━


実装のポイント

1. GASのカテゴリ別ドキュメント参照

カテゴリに応じて参照するドキュメントを切り替えることで、Geminiに渡すコンテキストを最適化しています。

const categoryDocMap = {
  "有給":   ["就業規則", "有給休暇規定"],
  "備品":   ["備品管理規定"],
  "交通費": ["経費精算規定", "就業規則"],
  "勤怠":   ["就業規則"],
  "残業":   ["就業規則"],
  "その他": ["就業規則"],
};

2. エスカレーション判定

AIが回答に自信がない場合は `【要担当者確認】` を回答末尾に付けるようプロンプトで指示。GASがこれを検知して担当者へ自動通知します。

const needsEscalation = answer.includes("【要担当者確認】");
if (result.needsEscalation) {
  sendEscalationEmail(...);
}

3. Gmail受信フィルタリング

業務用メールアドレスへの誤作動を防ぐため、2段階のフィルタリングを実装しました。

// ① 件名に「社内問合せ」を含むメールのみ対象
const query = `subject:社内問合せ -label:【KAITO】社内問合せ/KAITO受信`;

// ② 社内ドメインからのメールのみ処理
if (!fromEmail.endsWith("@自社ドメイン")) continue;

4. 手動救済ラベルの仕組み

件名を間違えて送ってきたメールも、担当者が「KAITO未返信」ラベルを付けるだけで自動処理できる救済フローを用意しました。

件名が違うメールが届く
 → 担当者が「KAITO未返信」ラベルを手動で付ける
 → 1分以内に自動処理
 → 返信完了後「KAITO受信」ラベルに移動

実際の回答品質

インフルエンザで休む社員からの問い合わせに対する回答例です。

○○○○様

お問い合わせいただきありがとうございます。
以下の内容にて自動回答いたします。

━━━━━━━━━━━━━━━━━━━━━━━
■ お問い合わせ内容
━━━━━━━━━━━━━━━━━━━━━━━
インフルエンザと診断されたため明日から休みたいです


━━━━━━━━━━━━━━━━━━━━━━━
■ 回答
━━━━━━━━━━━━━━━━━━━━━━━
○○様

この度はインフルエンザと診断されたとのこと、大変ご心配でございます。まずは体調を最優先になさってください。

お問い合わせいただいた件につきまして、有給休暇の申請に関する社内規定に基づき、以下の通りご案内いたします。

**【有給休暇の申請について】**
社内規定では、有給休暇の申請は以下の手順でお願いしております。

* **申請方法:**
* 社内ポータルの勤怠管理画面から申請してください。
* 取得希望日の5営業日前までに申請が必要です。
* 直属の上長が承認することで申請が完了します。
* 承認後、Googleカレンダーに自動反映されます。

**【今回のケースについて】**
「明日から休みたい」という緊急のご申請につきましては、規定の「取得希望日の5営業日前までに申請」という条件を満たすことが難しい状況かと存じます。

このような緊急時の有給休暇申請、特に病気による急な休暇取得の場合の具体的な手続きや、5営業日前ルールが適用されるか否かについては、現在の規定には明確な記載がございません。

つきましては、お手数ですが、まずは**直属の上長様へ速やかに状況をご連絡いただき、その後の申請手続きについてご相談いただくことをお勧めいたします。**上長様へのご連絡後、改めて勤怠管理担当者へ詳細を確認する必要がございます。

**【要担当者確認】**
緊急時の有給休暇申請における具体的な対応方法、および5営業日前ルールが適用されない場合の特例措置については、担当者による確認が必要です。

ご不明な点や本回答で解決しない場合は、担当者より改めてご連絡いたします。引き続きよろしくお願いいたします。

━━━━━━━━━━━━━━━━━━━━━━━
■ 関連書類
━━━━━━━━━━━━━━━━━━━━━━━
有給休暇申請書.docx
https://docs.google.com/document/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

━━━━━━━━━━━━━━━━━━━━━━━
⚠️ 本件は担当者(総務部)へ自動通知済みです
━━━━━━━━━━━━━━━━━━━━━━━

---
社内お問合わせBOT(自動送信)
※このメールはBOTによる自動返信です。

規定に書いていない内容は正直に「記載がない」と伝え、エスカレーションする。この動作が自動でできているのは実用上かなり重要なポイントです。


Google Sitesでポータルサイトも作成

社員向けの入り口として、Google Sitesでポータルサイトも作成しました。

ページ構成

━━━━━━━━━━━━━━━━━━━━━━

🏠 ホーム
→ ウェルカムメッセージ・フォームへのボタン・メール問い合わせ案内

📋 社内規定
→ 各規定ドキュメントへのリンク・申請書類ダウンロード

📝 お問い合わせ
→ Googleフォーム埋め込み・メール案内

━━━━━━━━━━━━━━━━━━━━━━

Google SitesはGWSに含まれるので追加費用ゼロ。社内ドメインのみ公開に設定することでセキュリティも確保できます。


今後の展開

現在はSTEP1として最小構成で運用開始しています。

✅ STEP1(完了)
 Googleフォーム・Gmail受付
 → Gemini自動回答 → ログ保存

⬜ STEP2(ログが100件溜まったら)
 蓄積した問い合わせ履歴からFAQ_DBを自動生成
 → 回答精度・速度のさらなる向上

⬜ STEP3(将来)
 Google Chat対応
 → メンションするだけで回答するBOTへ

まとめ

━━━━━━━━━━━━━━━━━━━━━━

⏱️ 開発期間
→ 1日

🛠️ 使用サービス
→ GWS(GAS・Drive・フォーム・Gmail・Sites)+ Gemini API

💰 月額コスト
→ 数百円〜(Gemini API従量課金のみ)

📥 対応チャネル
→ Googleフォーム・Gmail

🤖 回答精度
→ 社内規定に基づいた正確な回答・エスカレーション自動判定

━━━━━━━━━━━━━━━━━━━━━━

GWSを導入している会社であれば、ほぼそのままの構成で再現できます。「総務への問い合わせが多くて困っている」という会社さんにぜひ試してほしい構成です!


使用した主な技術

  • Google Apps Script(GAS)

  • Gemini API(gemini-2.5-flash)

  • Google Workspace(Drive・フォーム・Gmail・Sites・スプレッドシート・ドキュメント)


GASコードの詳細や各設定の手順についてはお気軽にご質問ください!

いいなと思ったら応援しよう!