メインコンテンツへスキップ
見出し画像

金曜日の定時退社を実現!Dify×Gmailで作る全自動メール秘書システム

    こんにちは!YaroTechです。

    金曜日の夕方、まだオフィスでメール処理に追われていませんか?「今週も残業確定か...」と諦めていた私が、Difyを使ってメール処理を完全自動化し、毎週金曜日の定時退社を実現した方法をお伝えします!
    ※結果的には別の方法が良さそうということが分かりました。

    「また長いメールが...」「返信考えるの面倒だな」「日程調整めんどくさい」

    そんな金曜日の憂鬱を、AIが全部解決してくれる時代が来ました。今日は、Difyの強力なワークフロー機能を使って、メール自動分類システムを構築し、Google Chatへの通知まで実装する方法を、実際の画面と共に詳しく解説します!


    🖥️ 実行環境

    • OS: Windows 11 ARM64版(Surface Laptop 7th、Snapdragon X Elite)

    • Dify: v1.7.2(Docker Compose版)

    • Docker Desktop: 4.32.0

    • ブラウザ: Chrome 127.0

    • Google Chat: Workspace版

    • Python: 3.11.4(コード実行ノード用)


    🎯 この記事で得られること

    • Difyワークフローの構築方法が完全に理解できる

    • メール自動分類ワークフローが作れる

    • Google Chat通知連携の仕組みが分かる

    • Gmail連携の3つの方法を比較検討できる

    • 金曜日の残業がゼロになる可能性が見える


    🚀 実践内容

    ステップ1: Difyワークフローの基本設計

    今回は、メール分類の仕組みをDifyで構築し、Google Chatへの通知まで実装します。

    メール分類の5つのカテゴリ

    1. 🚨緊急対応(今日中に対応が必要)

    2. ⚠️重要(3日以内に対応が必要)

    3. 📋通常業務(1週間以内に対応)

    4. 📖情報共有(返信不要、確認のみ)

    5. 🗑️スパム/営業(対応不要)

    ステップ2: Difyワークフローの構築

    1. 開始ノードの設定

    入力フィールドを3つ追加:
    - email_subject(メールの件名) - 短文
    - email_body(メール本文) - 段落
    - sender_email(送信者メールアドレス) - 短文
    画像
    入力フィールドを追加(フィールドタイプ、変数名、ラベル名)
    画像
    入力フィールド追加後の開始ノード

    2. LLMノードの設定

    SYSTEMプロンプト:

    あなたは優秀なメール分類アシスタントです。
    受信したメールを以下の5つのカテゴリのいずれかに分類してください。
    
    カテゴリ:
    1. 緊急対応(今日中に対応が必要)
    2. 重要(3日以内に対応が必要)
    3. 通常業務(1週間以内に対応)
    4. 情報共有(返信不要、確認のみ)
    5. スパム/営業(対応不要)
    
    以下のJSON形式のみで回答してください。```や他の文字は一切含めないでください:
    {
      "category": "1",
      "category_name": "緊急対応",
      "priority": "high",
      "reason": "本日中の対応を求められているため"
    }

    USERプロンプト:

    以下のメールを分類してください:
    
    件名: {{開始.email_subject}}
    送信者: {{開始.sender_email}}
    本文: {{開始.email_body}}

    ※コンテキストで表示される変数をプロンプトに追加する必要があります。

    画像
    LLMノードの設定内容

    3. コード実行ノードの設定(JSON解析)

    入力変数:

    • 変数名: llm_result

    • 値: {{LLM.text}}

    Pythonコード:

    import json
    
    def main(llm_result):
        try:
            # LLMの出力から```json```を除去
            if "```json" in llm_result:
                json_str = llm_result.replace("```json", "").replace("```", "").strip()
            elif "```" in llm_result:
                json_str = llm_result.replace("```", "").strip()
            else:
                json_str = llm_result.strip()
            
            # JSON解析
            result = json.loads(json_str)
            
            # カテゴリごとのアクションを定義
            actions = {
                "1": {"label": "🚨緊急", "notify": "true"},
                "2": {"label": "⚠️重要", "notify": "true"},
                "3": {"label": "📋通常", "notify": "false"},
                "4": {"label": "📖情報", "notify": "false"},
                "5": {"label": "🗑️スパム", "notify": "false"}
            }
            
            category = str(result.get("category", "3"))
            action = actions.get(category, actions["3"])
            
            return {
                "category": category,
                "category_name": result.get("category_name", ""),
                "priority": result.get("priority", "medium"),
                "reason": result.get("reason", ""),
                "label": action["label"],
                "should_notify": action["notify"]  # "true" or "false"の文字列
            }
            
        except Exception as e:
            return {
                "category": "3",
                "category_name": "通常業務",
                "priority": "medium",
                "reason": f"エラー: {str(e)}",
                "label": "📋通常",
                "should_notify": "false"
            }

    出力変数(6つ設定):

    • category (String)

    • category_name (String)

    • priority (String)

    • reason (String)

    • label (String)

    • should_notify (String)

    画像
    コード実行ノードの設定内容

    4. IF/ELSE分岐の設定

    条件設定:

    左側: {{コード実行.should_notify}}
    演算子: である
    右側: true(ダブルクォートなし!)

    ※下記画像のように"[ダブルクォート]を入れると条件一致しないのでご注意ください!条件一致するのはダブルクォートなし!でお願いします。

    画像
    IF/ELSEノード設定内容

    5. Google Chat通知の設定(IF側)

    HTTPリクエストノード:

    1. Google ChatでWebhook URL取得:

      • Google Chatのスペースを開く

      • 「⋮」→「アプリと統合」→「Webhook を管理」

      • 「着信 Webhook を追加」

      • 名前: Dify メール通知

      • URLをコピー

    2. 終了ノードを追加

    ※下記HTTPリクエストノードのクロ助特製JSONコードが欲しい方はコメントにて「公開希望」と書き込んでください!

    画像
    HTTPリクエストノードの設定

    6. ELSE側の設定

    終了ノードを追加して、出力変数を設定:

    • メール分類結果: {{コード実行.category_name}}

    • ラベル: {{コード実行.label}}

    • 通知: 不要

    画像
    終了ノードの設定

    ステップ3: Gmail連携の3つの方法

    方法1:Zapier/Make経由(初心者向け)⭐おすすめ

    • 設定時間: 5分

    • メリット: コード不要、すぐ使える

    • デメリット: 外部サービス依存

    方法2:Google Apps Script(中級者向け)

    • 設定時間: 30分

    • メリット: 完全無料、カスタマイズ自由

    • デメリット: localhostアクセス不可(ngrok必要)

    方法3:Difyクラウド版(本番運用向け)

    • 設定時間: 10分

    • メリット: 常時稼働、セキュア

    • デメリット: 無料枠に制限(200メッセージ/月)


    🎯 3つの活用シーン

    1. お問い合わせ対応の完全自動化

    設定内容:

    • カスタマーサポート用のメールアドレスを監視

    • FAQデータベースと連携

    • 8割の問い合わせは自動返信で解決

    効果: サポート業務時間を75%削減

    2. ミーティング調整の自動化

    設定内容:

    • 「打ち合わせ」「ミーティング」をトリガーワードに

    • カレンダーとの連携も可能

    • 時差も自動計算

    効果: 日程調整メールの往復がゼロに

    3. 週次レポートの自動集計

    設定内容:

    • 特定のラベルが付いたメールを集計

    • 金曜17時に自動でレポート生成

    • 上司に自動送信

    効果: 金曜夕方の作業が30分短縮


    ⚠️ つまずきポイントと解決策

    エラー1: LLMが正しいJSON形式で返さない

    Error: "Expecting value: line 1 column 1 (char 0)"

    原因: LLMの出力に```json```が含まれている

    解決策:

    • コード実行ノードで```を除去する処理を追加(上記コード参照)

    • またはLLMプロンプトで「```を含めないでください」と明記

    エラー2: IF/ELSEで条件が判定されない

    原因: should_notifyの値が"true"(文字列)なのに、true(ブール値)と比較

    解決策:

    • 右側の値をtrue(ダブルクォートなし)に設定

    • または「含む」演算子を使用

    エラー3: Google Chat通知が届かない

    Error: "Webhook URL is invalid or expired"

    解決策:

    1. Google ChatでWebhookを再作成

    2. URLを正確にコピー

    3. HTTPリクエストノードのヘッダー設定を確認

      • キー: Content-Type

      • 値: application/json


    💡 さらなる応用例

    職種別カスタマイズ

    営業職向け:

    • 見込み客のスコアリング自動化

    • フォローアップメールの自動送信

    • 商談メモの自動作成

    エンジニア向け:

    • GitHubの通知を優先度別に整理

    • エラー通知の自動エスカレーション

    • コードレビュー依頼の自動振り分け

    マネージャー向け:

    • 承認依頼の自動整理

    • 部下からの報告を自動サマリー

    • 重要な意思決定事項のハイライト


    🔗 関連記事

    今回の内容に関連する過去記事もぜひご覧ください:


    📝 まとめ

    今回は、Difyでメール自動分類システムを構築し、Google Chatへの通知まで実装しました。

    今回完成したこと:

    1. Difyワークフローでメールを5カテゴリに分類

    2. LLMとコード実行ノードで柔軟な判定ロジック

    3. IF/ELSE分岐で通知要否を判定

    4. Google Chat通知で緊急メールを即座に把握

    Gmail連携の3つの方法:

    • Zapier/Make(初心者向け・5分で設定)

    • Google Apps Script(無料・カスタマイズ可能)

    • Difyクラウド版(本番運用・常時稼働)

    どの方法を選んでも、一度構築してしまえば、毎週1時間45分の時間が生まれます。金曜日の定時退社は夢じゃありません!
    ちなみに、「Google Apps Script」でGmailを連携させようと進めてテストをしてみたら、ローカルホストのDifyではGoogle側と通信ができなくて、結局テストメールでGoogle Chatに通知が来るところまでしかできませんでした。それでもGoogle Chatにメールの内容が通知来たときは感動しました!


    #YaroTech #Dify #Gmail #AI自動化 #金曜日 #定時退社 #メール処理 #生成AI #効率化 #ARM版Windows

     
     
    生成AIの感動を共有したいYaroTechです✨ 常識より実験。正解より行動。 生成AI時代を、先に試す傾奇者。 📝 470日間継続投稿中| 🎉 フォロワー1900名突破!🤝 質問大歓迎!みんなで「AIと共に羽ばたく」コミュニティを作りましょう🚀

    あなたへのおすすめ