前回は、要対応メール抽出ツールをどう設計したかを整理しました。

今回は、その仕組みを実際にどう組んでいくかを順番にまとめます。
Gmailの未読メールを起点に、判定、保存、通知までつなげる流れです。
この記事では、設定の順番が追いやすいように、作業単位で整理していきます。
今回作る流れ
今回組むのは、次の流れです。
- Gmailで未読メールを対象にする
- Apps Scriptでメール情報を取得する
- Difyで要対応判定と整理を行う
- Google Sheetsへ保存する
- Gmailに結果ラベルを付ける
- 必要なものだけSlackへ通知する
作業を始める前に用意するもの
最初に、今回使うものをそろえます。
- Gmail
- Google Sheets
- Apps Script
- Dify
- Slack
ここでは、1つずつ設定していけばよいように進めます。
最初から全部つなげようとせず、段階ごとに確認していくほうが進めやすいと思います。
Step1. Gmailラベルを準備する
まずは、判定結果をGmailで見返しやすくするためのラベルを作ります。
抽出済抽出済/要返信抽出済/要確認抽出済/保留抽出済/対応不要
このラベルは、後から元メールを開きたいときにも役立ちます。
なぜ最初にラベルを作るのか
今回のツールでは、判定結果をGoogle Sheetsに保存するだけでなく、Gmailの中にも残します。
そのため、先にラベルを作っておくと、
- どのメールが判定済みか分かる
- 要返信だけを見返しやすい
- 再処理対象を外しやすい
という状態を作りやすくなります。
Step2. Google Sheetsを保存先として作る
次に、判定結果を保存するGoogle Sheetsを用意します。
シート名は mail_triage など、分かりやすいものにしておくと扱いやすいです。
1行目には、たとえば次のような列を用意します。
mail_id,gmail_message_id,thread_id,received_at,from_name,from_email,subject,body,summary,needs_action,action_type,priority,priority_reason,recommended_action,applied_label,processed_at,processing_status,slack_notified,error_message
Google Sheetsに残す理由
最初から高度なデータベースにしなくても、一覧で見返せるだけでかなり扱いやすくなります。
- 何が来たか
- どう判定されたか
- 何をすべきか
をまとめて見たいとき、Google Sheetsは扱いやすい保存先です。
Step3. DifyでWorkflowを作る

次に、Dify側を準備します。
ここでは、メール内容を受け取って、要対応判定や優先度整理を返すWorkflowを作ります。
ノード構成
今回は、次のようなノード構成にしておくと扱いやすいです。
User InputCodeLLMCodeOutput
この形にしておくと、入力整形と出力補正を分けて確認しやすくなります。
User Inputで受ける項目
Difyへ渡す情報は、たとえば次のようなものです。
mail_idthread_idfrom_namefrom_emailto_emailscc_emailssubjectbodyreceived_atlabel_names_textis_unread
ここで大事なのは、メール本文をそのまま放り込むのではなく、判断に必要な情報をそろえた形で渡すことです。
Difyに返してもらう項目
Difyからは、主に次の結果を返してもらいます。
summaryneeds_actionaction_typeprioritypriority_reasonrecommended_action
ここを先に決めておくと、GAS側やSheets側も整理しやすくなります。
Step4. Apps Scriptで中継処理を作る
次に、Apps Scriptで中継処理を作ります。
ここが、Gmail、Dify、Sheets、Slackをつなぐ役割になります。
Apps Scriptでやること
- Gmailから未読メールを取得する
- 除外ラベルを確認する
- 件名や本文を取り出す
- Difyに渡す形へ整える
- Dify Workflow APIを呼ぶ
- 結果をGoogle Sheetsへ保存する
- Gmailラベルを付ける
- 必要なものだけSlackへ通知する
Script Propertiesを設定する
Apps Scriptでは、IDやURL、APIキーなどはスクリプトプロパティで管理するようにしましょう。扱いやすく、セキュリティ面でもこちらで対応するのが安心です。
たとえば、次のような項目を入れておきます。
| キー | 用途 |
|---|---|
SPREADSHEET_ID |
保存先のGoogle Sheets ID |
SHEET_NAME |
シート名 |
DIFY_API_URL |
Dify Workflow API URL |
DIFY_API_KEY |
Dify APIキー |
DIFY_USER |
Difyに渡すユーザー名 |
SLACK_WEBHOOK_URL |
Slack通知用Webhook |
EXCLUDE_LABELS_CSV |
除外ラベル一覧 |
除外ラベルをどう使うか
今回のツールでは、すでに別の仕組みで扱っているラベルを除外します。
たとえば、問い合わせ や 追いメール下書き済 などです。
これにより、未整理の未読メールだけを対象にしやすくなります。
Step5. Gmail検索条件を決める
Apps Scriptで検索するときは、受信箱全体を対象にしつつ、未読かつ未整理のメールだけを拾う形にします。
イメージは、次のような条件です。
in:inbox is:unread -label:営業送信 -label:追いメール下書き済 -label:営業返信あり -label:追いメール送信済み -label:問い合わせ -label:問い合わせ整理済 -label:抽出済
この形なら、
- 未読
- まだ抽出していない
- 他ツールで扱っていない
メールだけを対象にできます。
Step6. 判定結果に応じてGmailラベルを付ける
Difyから結果が返ってきたら、Apps Script側で結果ラベルを付けます。
たとえば、次のような対応です。
| 判定結果 | 付けるラベル |
|---|---|
| 要返信 | 抽出済/要返信 |
| 要確認 | 抽出済/要確認 |
| 保留 | 抽出済/保留 |
| 対応不要 | 抽出済/対応不要 |
これにより、Gmail内でも結果を追いやすくなります。
Step7. Slack通知は必要なものだけにする
Slack通知は、すべてのメールを流すのではなく、needs_action = true のものだけにすることをおすすめします。
通知内容は、最初は要点だけで十分だと思います。必要に応じて修正していきましょう。
- 優先度
- 対応種別
- 差出人
- 件名
- 要約
- 推奨対応
こうしておくと、通知が多すぎて見なくなるのを防ぎやすくなります。
Step8. テストするときの順番
最初のテストは、一気に全部確認しようとするより、次の順で見ると進めやすいです。
- 未読メールを1通用意する
- 除外ラベルが付いていないことを確認する
- Apps Scriptを手動実行する
- Difyの実行履歴で入力と出力を見る
- Google Sheetsに1行追加されるか確認する
- Gmailラベルが付くか確認する
- Slack通知が必要なものだけ来るか確認する
この順で見ていくと、どこで止まっているか切り分けしやすくなります。
運用は毎朝1回から始める
最初から頻繁に巡回させる必要はありません。
まずは、
- 毎朝1回
で十分です。
運用に慣れてきて、必要であれば
- 朝と昼
- 朝と昼と夕方
のように増やしていくといいと思います。
まとめ
今回の実装では、
- Gmailで未読メールを対象にする
- Apps Scriptで取得と接続を担当させる
- Difyで要対応判定と整理をする
- Google Sheetsで一覧化する
- Gmailラベルで追いやすくする
- Slackで必要なものだけ通知する
という流れで組んでいきます。
いきなり複雑にするより、まずは1本の流れをきれいに通す。
そのうえで必要に応じて広げていくほうが、実務にはのせやすいと思います。
もし、
- 問い合わせ業務を改善したい
- 抜け漏れを減らしたい
- 自社の運用に合う形で仕組みを考えたい
という方がいれば、無料相談・お問い合わせからお気軽にご連絡ください。
今の運用に合わせて、どこまで自動化するのがちょうど良いか、一緒に整理できればと思います。

コメント