Gmailの未読メールを判定→保存→通知まで実際に組む流れ

Dify

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

未読メールから要対応メールを抽出する仕組みの設計について
Gmailの未読メールを自動で抽出して、その内容を要約し優先度をラベル付けし要対応メールがある際には通知するという仕組みの設計をどう考えたかについて紹介しています。

今回は、その仕組みを実際にどう組んでいくかを順番にまとめます。
Gmailの未読メールを起点に、判定、保存、通知までつなげる流れです。

この記事では、設定の順番が追いやすいように、作業単位で整理していきます。

今回作る流れ

今回組むのは、次の流れです。

  1. Gmailで未読メールを対象にする
  2. Apps Scriptでメール情報を取得する
  3. Difyで要対応判定と整理を行う
  4. Google Sheetsへ保存する
  5. Gmailに結果ラベルを付ける
  6. 必要なものだけ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
元メールの情報と、Difyの判定結果を1行で見られるようにしておくのがポイントです。

Google Sheetsに残す理由

最初から高度なデータベースにしなくても、一覧で見返せるだけでかなり扱いやすくなります。

  • 何が来たか
  • どう判定されたか
  • 何をすべきか

をまとめて見たいとき、Google Sheetsは扱いやすい保存先です。

Step3. DifyでWorkflowを作る

次に、Dify側を準備します。
ここでは、メール内容を受け取って、要対応判定や優先度整理を返すWorkflowを作ります。

ノード構成

今回は、次のようなノード構成にしておくと扱いやすいです。

  1. User Input
  2. Code
  3. LLM
  4. Code
  5. Output

この形にしておくと、入力整形と出力補正を分けて確認しやすくなります。

User Inputで受ける項目

Difyへ渡す情報は、たとえば次のようなものです。

  • mail_id
  • thread_id
  • from_name
  • from_email
  • to_emails
  • cc_emails
  • subject
  • body
  • received_at
  • label_names_text
  • is_unread

ここで大事なのは、メール本文をそのまま放り込むのではなく、判断に必要な情報をそろえた形で渡すことです。

Difyに返してもらう項目

Difyからは、主に次の結果を返してもらいます。

  • summary
  • needs_action
  • action_type
  • priority
  • priority_reason
  • recommended_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. 未読メールを1通用意する
  2. 除外ラベルが付いていないことを確認する
  3. Apps Scriptを手動実行する
  4. Difyの実行履歴で入力と出力を見る
  5. Google Sheetsに1行追加されるか確認する
  6. Gmailラベルが付くか確認する
  7. Slack通知が必要なものだけ来るか確認する

この順で見ていくと、どこで止まっているか切り分けしやすくなります。

運用は毎朝1回から始める

最初から頻繁に巡回させる必要はありません。

まずは、

  • 毎朝1回

で十分です。

運用に慣れてきて、必要であれば

  • 朝と昼
  • 朝と昼と夕方

のように増やしていくといいと思います。

まとめ

今回の実装では、

  • Gmailで未読メールを対象にする
  • Apps Scriptで取得と接続を担当させる
  • Difyで要対応判定と整理をする
  • Google Sheetsで一覧化する
  • Gmailラベルで追いやすくする
  • Slackで必要なものだけ通知する

という流れで組んでいきます。

いきなり複雑にするより、まずは1本の流れをきれいに通す。
そのうえで必要に応じて広げていくほうが、実務にはのせやすいと思います。

もし、

  • 問い合わせ業務を改善したい
  • 抜け漏れを減らしたい
  • 自社の運用に合う形で仕組みを考えたい

という方がいれば、無料相談・お問い合わせからお気軽にご連絡ください。
今の運用に合わせて、どこまで自動化するのがちょうど良いか、一緒に整理できればと思います。

問い合わせフォームはこちら

コメント

タイトルとURLをコピーしました