【Dify】Gmailプラグイン調査レポート
1. はじめに
今回は、前回のOutlookプラグイン調査レポートに続き、「Gmailプラグイン」 について調査しました。
本プラグインを使用することで、Dify上でGmailの送受信・管理が可能になります。
具体的に:
・受信した問い合わせメールをLLMが分析して「営業」や「サポート」に自動で振り分け、適切な担当者へ転送したり、要確認のフラグを立てたりする。
・打ち合わせのお礼としてメール内容の概要と添付ファイルを渡すだけで、LLMがメール文を生成し、添付ファイル付きの「下書き」としてGmailに保存する。

この記事では、導入のための初期設定から、具体的な活用例、Gmailプラグインで使用できる各ノードの詳細、Q&Aまでを解説します。
2. Gmailプラグインを利用するための設定
インストールの前に:
- このプラグインは、Difyの開発元であるLangGenius社が提供する公式プラグインです。
- SaaS版・Community版(※)で利用できます。
※Dify v1.7.0以降、本プラグインと互換性あり。 -
本プラグインが使用しているAPIについて:
- Googleが提供する標準的な Gmail API を利用しています。
- 参考:Gmail APIの概要 - Google for Developers
Gmailプラグイン導入において権限ごとにできることをまとめると、以下のようになります。
| プラットフォーム / 観点 | 必要な役割・権限 | この権限でできること (Gmailプラグイン関連) |
|---|---|---|
| 1. Google Cloud (GCP) システム構築側 |
GCP プロジェクト作成者 (または編集者・オーナー) |
「接続口の作成」 ・Dify用のプロジェクト作成とGmail APIの有効化。 ・OAuth同意画面の作成。 ・認証情報(Client ID / Secret)の発行。 |
| 2. Google Workspace セキュリティ管理側 |
Google Workspace特権管理者 | 「接続の許可」 ・1.で作ったGCPプロジェクトを「信頼できるアプリ」として登録。 ・APIアクセスの制限解除(組織のセキュリティポリシーでブロックされている場合)。 |
| 3. Dify ツール設定側 |
Dify ワークスペース 管理者 / オーナー |
「連携の完了」 ・GCPで発行したID/SecretをDifyに登録・保存する。 ・認証ボタンを押してGoogleログインを行い、DifyとGmailの連携(認可)を完了できる。 ・Gmailノードで使用するアカウントの切り替え管理。 |
インストール手順
-
Difyのワークスペースで 画面右上 > [プラグイン] を開きます。

-
画面左上>[マーケットプレイスを探索する]をクリックします。

-
検索バーで「Gmail」と入力します。

-
表示された「Gmail」プラグインの [インストール] ボタンをクリックします。
(カーソルを合わせるとインストールボタンが表示されます)

Googleアカウント連携 (OAuth認証)
インストールが完了したら、DifyとGoogleアカウントを「OAuth 2.0」というセキュアな認証方式を通してで連携させます。
設定は(A)Google側と(B)Dify側の両方で必要です。
(A)Google側での事前設定(GCP)
まず、Google Cloud Platform (GCP) 側でプロジェクトを作成し、「Gmail API」を有効化します。認証情報の設定でリダイレクトURI(Dify側で確認できます)を登録し、そこで発行された「クライアントID」と「クライアントシークレット」を控えておきます。
(B)Dify上での認証
次に、DifyのGmailツール設定画面で、(A)で取得したIDとシークレットを入力します。最後に[認証する]ボタンからGoogleアカウントでログインし、アクセス権限を許可すれば連携完了です。
詳細な手順はこちらをご覧ください: Gmail Plugin - Dify Marketplace
3. 主な活用例
活用例1:問い合わせメールの自動分類・転送
概要:
「お問い合わせ」という件名で届く未読メールを検知し、LLMが本文を読んで「営業」か「カスタマーサポート」かを判断。適切な担当部署へ転送するワークフローです。判断がつかない場合は、人が確認するためのフラグを立てます。
活用シーン:
- 代表アドレスに届く多種多様なメールの振り分け業務の効率化
- 緊急度の高いサポートメールと、対応不要な営業メールの選別
- 担当部署へのエスカレーション作業の効率化
何ができるか:
- 特定の件名(例:「お問い合わせ」)の未読メールを検索・取得
- メール本文の内容から、送信者の意図(営業/サポート/その他)をLLMが分類
- 「営業」なら営業チーム、「サポート」ならサポート担当へ、件名にタグを付けて自動転送
- 分類不能なメールにはGmail上で重要フラグ(スター)を付与し、見落としを防止
ワークフロー例

ワークフロー解説
- [開始]: 手動で開始。
- [Gmailメッセージを検索]: 件名が「お問い合わせ」かつ「未読」のメールを検索し、最新1件を取得します。
- [ID取得 (Code)]: 検索結果のJSONから、処理に必要な「メッセージID」と「件名」をPythonコードで抽出します。
- [Gmailメッセージの詳細を取得]: IDを元に、メールの「本文」や「送信元アドレス」を取得します。
- [本文・送信元抽出 (Code)]: LLMに渡しやすいよう、JSONデータから本文テキストと送信元アドレスを抽出・整形します。
- [LLM (分類)]: メール本文を読み込み、「営業」「サポート」「その他」のいずれかに分類します。
-
[IF/ELSE]: 分類結果に応じて処理を分岐させます。
-
分岐1 (営業):
-
Gmailメッセージを送信: 件名に[営業転送]を付与し、営業チームのアドレスへ転送します。
-
-
分岐2 (サポート):
-
Gmailメッセージを送信: 件名に[サポート転送]を付与し、サポート窓口へ転送します。
-
-
分岐3 (その他/不明):
-
Gmailメッセージにフラグを立てる: 元のメールにスター(flag)を付け、後で人間が確認できるようにします。
-
-
分岐1 (営業):
-
[回答]: どの処理を行ったかを結果として出力します。
記事の文字数上限により、こちらのDSLファイルはありません。
実行結果
-
顧客対応メールの場合
LLMが「サポート」と判断し、カスタマーサポートチーム宛に転送処理が完了します。

Dify上で実行結果を報告

転送完了 -
判断に迷うメールの場合
「その他」と判断され、受信トレイの該当メールにスターが付きます。

Dify上で実行結果を報告

スター(フラグ)設定完了
活用例2:メール下書き作成アシスタント
概要:
「下書きの新規作成」か「下書き一覧の確認」かを選択できるワークフローです。
新規作成時は、メール内容の要約テキストから、ビジネスシーンに適した丁寧なメール本文を生成します。また、オプションでファイルを添付し、下書きに保存可能です。下書き一覧の確認では、既存の下書きをキーワードで検索し、検索結果のIDや件名、本文抜粋をリストアップできます。
活用シーン:
- 要点の入力から商談相手に送るメールを作成
- 日報や定期連絡など、構成が決まっているメールの作成
- 埋もれてしまった下書きの検索と確認
何ができるか:
- モード選択: 「下書きを新規作成」または「下書きを検索して一覧表示」を選択可能
- AIによる本文生成: 要件を入力するだけで、整ったビジネスメール本文を生成
- 添付ファイル対応: Dify上でアップロードしたファイルを、そのままGmailの下書きに添付
- 下書き管理: 既存の下書きをキーワード検索し、IDや件名、本文抜粋をリストアップ
ワークフロー例

ワークフロー解説
-
[開始]: 以下の入力フィールドを受け付けます。
- 処理内容(新規作成/一覧表示)
- 宛先、件名、検索クエリ
- 添付ファイル、本文概要
- [IF/ELSE]: 「処理内容」で選択されたモードによって分岐します。
-
分岐A:下書きを新規作成
- [LLM-本文生成]: 入力された「本文概要」を元に、ビジネス敬語を用いた丁寧なメール本文を生成します。
- [Gmail下書きを作成]: 宛先、件名、そしてLLMが生成した本文を使って下書きを作成します。
- [Gmail下書きに添付ファイルを追加]: 作成された下書きIDに対し、アップロードされたファイルを添付します。
- [回答]: 作成完了メッセージと、生成された本文を表示します。
-
分岐B:下書き一覧を表示
- [Gmail下書きを一覧表示]: 入力された「検索クエリ」に基づいて下書きを検索・取得します。
- [テンプレート-出力整形]: 取得したJSONデータ(件名、ID、本文抜粋など)を見やすいMarkdown形式のリストに変換します。
-
[回答]: 整形された下書きリストを表示します。
DSLファイルはこちら
実行結果
- 新規作成モード

入力フィールドを埋めて実行

Dify上で実行結果を報告

作成された下書き
- 一覧表示モード
検索クエリを入力して実行すると、該当する下書きメールがリスト形式でチャット画面に表示され、IDや内容を即座に確認できます。

クエリを任意で設定し検索

下書きフォルダ


新しい順に出力。下書き4は宛先を記入していないので空欄
※将来的な活用例:トリガー機能を使用してメール受信->送信を自動化
トリガー機能とは:
トリガー機能は、Difyのバージョン1.10.0より登場した機能です。この機能によりワークフロー自動実行の「きっかけ」を設定できます。これまでは手動やAPIコールでしか開始できなかったワークフローを、外部システムからのイベント(メール受信など)や、設定したスケジュールに基づき、自動で起動できます。
概要:
「メールの受信」というイベントをきっかけに、Difyのワークフローを自動起動させる仕組みです。専用の「プラグイントリガー」や、より高度な連携が可能な「Webhookトリガー」で受信を検知し、LLMが受信内容を解析、分類、そして適切な返信メールを自動で生成・送信します。
具体的なワークフローについては、今後Gmail Triggerの動作確認ができ次第加筆予定です!
4. Gmailプラグイン - 各ノードの説明
Gmailプラグインで使用できるノードは全部で8種類です。
機能別に分類すると、以下の3つに分けられます。
- メール作成・送信関連: 4種類
- 受信メール処理関連: 3種類
- 下書き取得: 1種類
このセクションでは、これらの各ノードについて解説します。
0. 全ノード共通事項
-
メールの宛先はメール作成機能を持つ各ノードで指定:
- 該当ノード:
- 「Gmailメッセージを送信」ノード
- 「Gmail下書きを作成」ノード
- 例:「Gmailメッセージを送信」ノード設定画面
- 該当ノード:
-
複数宛先の指定:
宛先、CC、BCCは、メールアドレスをカンマ(,)区切りで入力することで複数設定可能です。 -
入力変数は定数・変数ともに設定可能:
各ノードの入力変数には定数だけでなく変数も設定できます。 -
IDの連携が重要:
多くのノードはmessage_idやdraft_idをキーにして動作します。これらは検索ノード等の出力に含まれます。 -
返信先について:
メッセージを送信するノードでは返信先が指定できます。
返信先を設定すると受信したメッセージの返信ボタンから直接、送信者ではない人(=返信先に設定された人)に返信できます。

-
出力変数
text:
各ノード処理結果のステータス(成功/失敗)やエラーメッセージをtext変数として出力します。 -
出力変数
id類:
ID(draft_id, message_id, thread_id)を含むノードの出力は、抽出処理を挟むことなく、後続ノードでID情報として活用できます。 -
出力変数
json:
各ノードでメールの詳細情報はjson形式で出力されます。- Gmailメッセージを検索/Gmail下書きを一覧表示の
json: - 検索結果(メールや下書き)のリストがJSON配列として返されます。
主な中身:
- `id`: **メッセージID**。他のノード(詳細取得やフラグ立て)でメールを指定するために使います。 - `thread_id`: スレッド(一連のやり取り)のID。 - `snippet`: メールの本文の要約(スニペット)。 - `subject`: メールの件名。 - `from`: 送信者のメールアドレス。 - `to`: 宛先のメールアドレス。 - `date`: メールの送信日時。 - `body`: `include_body`を`true`に設定した場合のみ、ここに本文が入ります。デフォルト(`false`)の場合は空文字列 `""` になります。- Gmailメッセージの詳細を取得の
json: - メッセージ詳細のリストがJSON配列として返されます。
主な中身:
- `body`: メールの**完全な本文**。 - `subject`: 件名。 - `from`: 送信者。 - `to`: 宛先。 - `cc`: CCの宛先。 - `bcc`: BCCの宛先。 - `date`: 日付。 - `id`: メッセージID。 - `snippet`: 本文の要約。 - `attachments`: **添付ファイルのリスト**(配列)。添付ファイルがある場合、ここにファイル名やMIMEタイプなどの情報が入ります。- これらのjson形式の出力から特定の情報を取り出すためには、間に「コード実行」ノードを挟んでPythonコードでデータをパース(解析)する方法があります。
- Gmailメッセージを検索/Gmail下書きを一覧表示の
1. Gmailメッセージを検索 (search_messages)

Gmailの検索演算子を使用して、条件に一致するメールを検索・取得します。
-
主な機能:
- 検索クエリで件名、送信者、本文などを検索。
- 取得件数の制限設定。
- 本文をリストに含めるかどうかの選択。
- 結果の並び替え(日付順など)の指定。
-
設定:
-
検索クエリ: Gmailの検索ボックスで使う検索文字列(from:やsubject:など)。(必須) -
最大結果数: 取得するメールの最大数(デフォルト: 20)。(任意) -
メール本文を含める:trueにすると結果に本文を含めます(デフォルト:false)。(任意) -
並び替え:date(日付順)、from(送信者順)、subject(件名順) から選択(デフォルト:date)。(任意)
-
2. Gmailメッセージの詳細を取得 (get_message)

特定のメール1件の完全な詳細情報を取得します。
-
主な機能:
- メールIDを指定して詳細情報を取得。
- 本文の全文を取得。
- 送信者、受信者、CC、BCC情報を取得。
- 添付ファイル情報(ID、名前、サイズなど)を取得。
-
設定:
-
メッセージID: 「Gmailメッセージを検索」ノードなどで取得したメッセージの一意のID。(必須) -
メール本文を含める:trueにすると本文を含めます(デフォルト:true)。(任意) -
添付ファイルの詳細を含める:trueにすると添付ファイルの詳細情報を含めます(デフォルト:false)。(任意)
-
3. Gmailメッセージを送信 (send_message)

指定した宛先にメールを即時送信します。
-
主な機能:
- 宛先、件名、本文を指定して送信。
- CC、BCCの設定。
- 返信先の指定。
-
制約:
- ファイル添付不可。
-
設定:
-
宛先(受信者): 受信者のメールアドレス。(必須) -
件名: メールの件名。(必須) -
メール本文: メールの本文(プレーンテキスト)。(必須) -
CC(カーボンコピー): CCのアドレス。(任意) -
BCC(ブラインドカーボンコピー): BCCのアドレス。(任意) -
返信先: 返信先のアドレス(送信者と異なる場合)。(任意)
-
4. Gmail下書きを作成 (draft_message)

メールを送信せずに、下書きとして保存します。
-
主な機能:
- 宛先、件名、本文を指定して下書き保存。
- CC、BCC、返信先の設定。
- 後続処理用に下書きIDを出力。
-
設定:
-
宛先(受信者): 下書きの宛先。(任意) -
件名: 下書きの件名。(任意) -
メール本文: 下書きの本文。(任意) -
CC(カーボンコピー): 下書きのCC。(任意) -
BCC(ブラインドカーボンコピー): 下書きのBCC。(任意) -
返信先: 下書きの返信先。(任意)
-
5. Gmail下書きに添付ファイルを追加 (add_attachment_to_draft)

作成済みの下書きメールにファイルを添付します。
-
主な機能:
- 下書きIDを指定してファイルを添付。
- 添付時のファイル名を変更可能。
- Dify上のファイル変数をアップロード。
-
設定:
-
下書きID: 「Gmail下書きを作成」ノードなどで取得したID。(必須) -
添付するファイル: Difyのファイルアップロード機能などで渡されたファイル変数。(必須) -
添付ファイル名: 添付ファイルに付けるカスタム名(指定しない場合は元のファイル名)。(任意)
-
6. Gmail下書きを送信 (send_draft)

作成済みの下書きメールを指定して送信します。
-
主な機能:
- 下書きIDを指定して送信を実行。
-
設定:
-
下書きID: 「Gmail下書きを作成」または「添付ファイルを追加」ノードで取得したID。(必須)
-
7. Gmailメッセージにフラグを立てる (flag_message)

特定のメールにスター(重要マーク)を付ける、または外します。
-
主な機能:
- メッセージIDで対象のメールを指定。
- スターを付ける(flag)、外す(unflag)の選択。
-
設定:
-
メッセージID: 「Gmailメッセージを検索」ノードなどで取得したID。(必須) -
アクション:flag(スターを追加) またはunflag(スターを削除) を選択(デフォルト:flag)。(必須)
-
8. Gmail下書きを一覧表示 (list_drafts)

作成済みの下書きを一覧で表示します。
-
主な機能:
- 検索クエリで特定の下書きを絞り込み。
- 取得件数の制限設定。
- 下書きの本文を含めるかどうかの選択。
-
設定:
-
最大結果数: 取得する下書きの最大数(デフォルト: 10)。(任意) -
メール本文を含める:trueにすると結果に本文を含めます。(任意) -
検索クエリ: 下書きをフィルタリングするための検索文字列(from:やsubject:など)。(任意)
-
5. Q&A
セキュリティに関するQ&A
Q: 意図しないメールを送ってしまうリスクは?
A: 意図せずメールを送信するリスクは低いです。
- 実行の安全性: Difyのプラグインは、ワークフローの中で、配置したノードが実行されたときにだけ動作します。今回紹介した手動実行のワークフローであれば、指示を出した場合にのみ動作し、メールが自動で送信されることはありません。
Q: 送信元アカウントはどれになりますか?
A: 「Dify上での認証」に使用したGoogleアカウントになります。
- 複数アカウントを登録の場合は「6.Q&A > Q: 複数のOutlookアカウントを使い分けられますか?」をご覧ください。
Q: OAuthトークンの有効期限は?
A: GCPでの設定によります。
- GCPのOAuth同意画面で、ステータスを「Testing」にしている場合、Googleの仕様により7日間で認証が無効になります。この場合、7日ごとにDifyのGmail設定画面で再度「認証する」ボタンを押してログインし直す必要があります。(※GCPでのID/Secretの作り直しは不要です)
- 企業などのGoogle Workspaceアカウントで、ステータスを「Internal」に設定できる場合は、この7日制限はなくなり、一度認証すれば継続的に利用可能です。
- 詳しくは参考資料をご覧ください。
機能面に関するQ&A
Q: 送信するメールのUIをリッチにできますか?
A: プレーンテキストのみ可能です。
本プラグインはHTML形式のメール送信には対応していません。また、Markdown形式などにも対応していません。
そのためLLMに対して、「罫線や記号を使ったテキストのみでレイアウトを成形する」といった指示を出すことで、見やすく整ったメールを作成することが可能です。
Q: 添付ファイルは送れますか?
A: 送れます。
「下書きに添付ファイルを追加」ノードを使います。
Difyの開始ノードでアップロードしたファイル変数をこのノードに渡すことで、メールに添付できます。
添付できるファイル数は最大10個、1ファイル当たりのサイズ上限は15MB(ドキュメント形式の場合)です。
- 詳しくはこちら:ファイルアップロード - Dify Docs
Q: 複数のGoogleアカウントを使い分けられますか?
A: 使い分けられます。
以下の画像右側の「OAuth認証を使用する」より複数のアカウントを登録できます。(※)
それぞれのGmailノードで画像を参考に以下の操作を行うことで、アカウントを切り替えられます(※)。

- ノード右上の選択画面(画像では「ワークスペースのデフォルト」)を開く
- 設定したいアカウント(画像では「Auth2」または「Auth3」)を選択
※Difyの管理者以上の権限がないとアカウントの登録(認証)・アカウントの切り替えができません。
参考:「2. Gmailプラグインを利用するための設定」>「インストールの前に:」
Q: 大量のメールを送信することはできますか?
A: 可能ですが、Google側の送信制限に注意が必要です。
Gmail APIには技術的な使用量制限と、アカウント自体の送信数制限の2つが存在します。
詳しくはこちら
- APIの使用量制限: Gmail APIには「1日あたり10億クォータユニット」という枠がありますが、「送信」は1通あたり100ユニットを消費します。また、短時間に大量のリクエストを送ると「User-rate limit(秒間250ユニット等)」に抵触し、エラー(429 Too Many Requests)が返る可能性があります。
- アカウントの送信制限: API経由であっても、Googleはアカウント自体の送信上限(無料版: 約500通/日、Workspace: 約2,000通/日)を適用します。
Q: 一度に送信できるメールの最大サイズは?
A. Gmail APIの公式リファレンスには、メッセージ全体の具体的な最大サイズ値は明記されていません。
ただし、添付ファイルのサイズ上限については最大25MBまでであると公式ドキュメントに記載されています。
なお、Difyでファイルを添付する場合、このGmail側の制限とは別に、Dify側のファイルアップロードサイズ上限が適用されます。
- 詳しくは以下をご覧ください:
Q: 一度に検索できるメールの件数は?
A: 最大100件です。

Q: ワークフローの実行からメールが実際に処理(送信・フラグ立て)されるまでにかかる時間は?
A: 実行時間は、利用するLLMの応答速度やワークフローの処理内容によって異なります。
公式なパフォーマンス保証はありませんが、私が本記事の活用例を実行した際の「実測値」では、以下のようになりました。
- 活用例1(問い合わせメールの自動分類・転送): 約3秒
- 活用例2(メール下書き作成アシスタント):
- 新規作成モード:約5秒
- 一覧表示モード:約2秒
※環境により変動します。
Q: Google Apps Script (GAS) との違いは?
A: 「LLM(AI)」が使えるか、が最大の違いです。
GASは「毎日定時にメールを送る」といったルールベースの処理は得意ですが、GAS単体ではAIが使用できないため「メールの文面を読んで文脈を理解する」「丁寧な返信文を一から考える」といったタスクは苦手です。Difyを使えば、GAS単体では難しかった「内容の理解と生成」を伴うメール業務の効率化が実現できます。
Q: メールを取得した際にスレッドはどのように扱われますか?
A: スレッド単位ではなく、「個別のメール」単位で扱われます。
ただし、実質的に画像のようにスレッド全体を取得できます。
それは、「検索条件にヒットしたメールのうち、最新の1件」を取得する際、そのメール本文に過去の履歴がすべて「引用」として含まれているためです。
- 具体例:
例えば、「スレッド2」で検索したとすると、以下の手順で処理が行われます。
- 検索がヒット: Gmailの仕様上、「スレッド2」は2つ目のスレッドだけでなく、それを引用している「スレッド3」や「スレッド4(最新)」のメール本文にも含まれています。
-
新しい順にソート: メッセージ検索ノードは、ヒットしたメール(スレッド2, 3, 4)を「受信日時が新しい順」に並べ替えます。(並び替えを
dateにしているため) -
1件取得: ノードの制限が1の場合、メッセージ一覧ノードは一番新しい「スレッド4」のメール1件だけを取得します。
その結果、取得するのは「スレッド4」のメール1件ですが、その本文には「スレッド1〜3」がすべて引用されているため、結果的にスレッド全体の履歴が見える、という仕組みです。

マスク部分には送信者の氏名とメールアドレスが記載
6. おわりに
この記事では、DifyのGmailプラグインの導入設定から、具体的な活用例、各ノードの詳細、気になるQ&Aまで解説しました。
メール業務の効率化に本記事を参考にしていただけますと幸いです!
7. 参考
参照した記事
- Gmail APIの概要 - Google for Developers
- Google Workspaceのデータにアクセスできるアプリを制御する - Google Workspace管理者ヘルプ
- チームメンバーの管理 - Dify Docs
- Gmail Plugin - Dify Marketplace
- Gmailの検索を絞り込む - Gmailヘルプ
- OAuth 2.0 を使用して Google API にアクセスする - Google Identity
- ファイルアップロード - Dify Docs
- 使用制限 - Google Workspace
- Google Workspace における Gmail の送信制限 - GoogleWorkspace 管理者ヘルプ
- Gmail のメールにファイルを添付して送信する - Gmail ヘルプ
- Google Apps Script の概要 - Google Workspace
本記事で説明した活用例のDSLファイル
文字数上限により、活用例2のみとなります。
活用例2
app:
description: ''
icon: 🤖
icon_background: '#FFEAD5'
mode: advanced-chat
name: 技術ブログ_Gmail2
use_icon_as_answer_icon: false
dependencies:
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/openai:0.2.7@9031bbf9b37d9f6341a20c78a8bd18d686afd3ff627545496c3557705419d084
version: null
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/dify-gmail:0.2.0@b07b113a879e020e68928b96960bf892218b0146c911be437d38581fd3ac5ab9
version: null
kind: app
version: 0.4.0
workflow:
conversation_variables: []
environment_variables: []
features:
file_upload:
allowed_file_extensions:
- .JPG
- .JPEG
- .PNG
- .GIF
- .WEBP
- .SVG
allowed_file_types:
- image
allowed_file_upload_methods:
- local_file
- remote_url
enabled: false
fileUploadConfig:
audio_file_size_limit: 50
batch_count_limit: 5
file_size_limit: 15
image_file_size_limit: 10
video_file_size_limit: 100
workflow_file_upload_limit: 10
image:
enabled: false
number_limits: 3
transfer_methods:
- local_file
- remote_url
number_limits: 3
opening_statement: ''
retriever_resource:
enabled: true
sensitive_word_avoidance:
enabled: false
speech_to_text:
enabled: false
suggested_questions: []
suggested_questions_after_answer:
enabled: false
text_to_speech:
enabled: false
language: ''
voice: ''
graph:
edges:
- data:
isInIteration: false
isInLoop: false
sourceType: start
targetType: if-else
id: 1763683255508-source-1763685743152-target
source: '1763683255508'
sourceHandle: source
target: '1763685743152'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: llm
id: 1763685743152-true-1763685769030-target
source: '1763685743152'
sourceHandle: 'true'
target: '1763685769030'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: llm
targetType: tool
id: 1763685769030-source-1763685790601-target
source: '1763685769030'
sourceHandle: source
target: '1763685790601'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: tool
id: 1763685743152-false-1763685936812-target
source: '1763685743152'
sourceHandle: 'false'
target: '1763685936812'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: tool
targetType: tool
id: 1763685790601-source-1763686378774-target
source: '1763685790601'
sourceHandle: source
target: '1763686378774'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: tool
targetType: answer
id: 1763686378774-source-1763685887146-target
source: '1763686378774'
sourceHandle: source
target: '1763685887146'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: template-transform
targetType: answer
id: 1763687498928-source-1763686673248-target
source: '1763687498928'
sourceHandle: source
target: '1763686673248'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: tool
targetType: template-transform
id: 1763685936812-source-1763687498928-target
source: '1763685936812'
sourceHandle: source
target: '1763687498928'
targetHandle: target
type: custom
zIndex: 0
nodes:
- data:
selected: false
title: 開始
type: start
variables:
- default: ''
hint: ''
label: 処理内容
max_length: 48
options:
- 下書きを新規作成
- 下書きを検索して一覧表示
placeholder: ''
required: true
type: select
variable: select
- hint: ''
label: 宛先
max_length: 48
options: []
placeholder: ''
required: true
type: text-input
variable: to_address
- default: ''
hint: ''
label: 検索クエリ
max_length: 48
options: []
placeholder: ''
required: false
type: text-input
variable: search_query
- hint: ''
label: 件名
max_length: 48
options: []
placeholder: ''
required: true
type: text-input
variable: subject
- allowed_file_extensions: []
allowed_file_types:
- document
allowed_file_upload_methods:
- local_file
- remote_url
default: ''
hint: ''
label: 添付ファイル
max_length: 5
options: []
placeholder: ''
required: false
type: file-list
variable: file
- hint: ''
label: 本文概要
max_length: 200
options: []
placeholder: ''
required: true
type: text-input
variable: abstract
height: 218
id: '1763683255508'
position:
x: 80
y: 282
positionAbsolute:
x: 80
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: contains
id: a2c7fab3-a03f-4ac3-aee1-a58aaf5253cd
value: 新規作成
varType: string
variable_selector:
- '1763683255508'
- select
id: 'true'
logical_operator: and
selected: false
title: IF/ELSE
type: if-else
height: 124
id: '1763685743152'
position:
x: 380
y: 282
positionAbsolute:
x: 380
y: 282
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
context:
enabled: false
variable_selector: []
model:
completion_params: {}
mode: chat
name: gpt-4o
provider: langgenius/openai/openai
prompt_template:
- edition_type: basic
id: 7a07959d-9fc6-4d90-834f-0b639cefac0c
role: system
text: 'あなたは熟練したビジネスパーソンであり、メールライティングの専門家です。
以下の[メールの概要]に基づき、ビジネスシーンに適した丁寧で明確なメール本文のみを作成してください。
# 制約事項
- **範囲**: 「相手の宛名(〇〇様)」から書き始め、「結びの言葉(よろしくお願いいたします等)」で終えてください。
- **除外**: 件名、および末尾の署名(自分の名前や会社名)は一切含めないでください。
- **形式**: Gmailで送信するため、装飾のないプレーンテキスト形式で出力してください。
- **レイアウト**: 読みやすさを考慮し、適切な改行と空行を入れてください。
- **文体**: 相手に敬意を払いつつ、用件が伝わりやすい「礼儀正しく、かつ簡潔な」ビジネス敬語を使用してください。
# メールの概要
{{#1763683255508.abstract#}}
# 生成するメール本文'
selected: false
title: LLM-本文生成
type: llm
vision:
enabled: false
height: 88
id: '1763685769030'
position:
x: 710
y: 273
positionAbsolute:
x: 710
y: 273
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
is_team_authorization: true
paramSchemas:
- auto_generate: null
default: ''
form: llm
human_description:
en_US: Email addresses of the primary recipients (comma-separated for
multiple recipients)
ja_JP: 主要な受信者のメールアドレス(複数の受信者はカンマで区切る)
pt_BR: Endereços de email dos destinatários principais (separados por
vírgula para múltiplos destinatários)
zh_Hans: 主要收件人的电子邮件地址(多个收件人用逗号分隔)
label:
en_US: To (Recipients)
ja_JP: 宛先(受信者)
pt_BR: Para (Destinatários)
zh_Hans: 收件人
llm_description: Email addresses of the primary recipients. Multiple recipients
can be separated by commas. Can be left empty for drafts.
max: null
min: null
name: to
options: []
placeholder: null
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: ''
form: llm
human_description:
en_US: Subject line of the email (can be left empty for drafts)
ja_JP: メールの件名(下書きは空にできます)
pt_BR: Linha de assunto do email (pode ser deixada em branco para rascunhos)
zh_Hans: 电子邮件的主题行(草稿可以留空)
label:
en_US: Subject
ja_JP: 件名
pt_BR: Assunto
zh_Hans: 主题
llm_description: Subject line of the email message. Can be left empty for
drafts.
max: null
min: null
name: subject
options: []
placeholder: null
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: ''
form: llm
human_description:
en_US: Content of the email message (can be left empty for drafts)
ja_JP: メールメッセージの内容(下書きは空にできます)
pt_BR: Conteúdo da mensagem de email (pode ser deixado em branco para
rascunhos)
zh_Hans: 电子邮件的内容(草稿可以留空)
label:
en_US: Email Body
ja_JP: メール本文
pt_BR: Corpo do Email
zh_Hans: 邮件正文
llm_description: Content of the email message. Can be left empty for drafts.
Currently supports plain text format.
max: null
min: null
name: body
options: []
placeholder: null
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: ''
form: llm
human_description:
en_US: Email addresses to carbon copy (comma-separated for multiple recipients)
ja_JP: カーボンコピーするメールアドレス(複数の受信者はカンマで区切る)
pt_BR: Endereços de email para cópia (separados por vírgula para múltiplos
destinatários)
zh_Hans: 要抄送的电子邮件地址(多个收件人用逗号分隔)
label:
en_US: CC (Carbon Copy)
ja_JP: CC(カーボンコピー)
pt_BR: CC (Cópia)
zh_Hans: 抄送
llm_description: Email addresses to carbon copy. Multiple recipients can
be separated by commas. Leave empty if not needed.
max: null
min: null
name: cc
options: []
placeholder: null
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: ''
form: llm
human_description:
en_US: Email addresses to blind carbon copy (comma-separated for multiple
recipients)
ja_JP: ブラインドカーボンコピーするメールアドレス(複数の受信者はカンマで区切る)
pt_BR: Endereços de email para cópia oculta (separados por vírgula para
múltiplos destinatários)
zh_Hans: 要密送的电子邮件地址(多个收件人用逗号分隔)
label:
en_US: BCC (Blind Carbon Copy)
ja_JP: BCC(ブラインドカーボンコピー)
pt_BR: BCC (Cópia Oculta)
zh_Hans: 密送
llm_description: Email addresses to blind carbon copy. Multiple recipients
can be separated by commas. Leave empty if not needed.
max: null
min: null
name: bcc
options: []
placeholder: null
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: ''
form: llm
human_description:
en_US: Email address for replies (if different from sender)
ja_JP: 返信用のメールアドレス(送信者と異なる場合)
pt_BR: Endereço de email para respostas (se diferente do remetente)
zh_Hans: 回复的电子邮件地址(如果与发件人不同)
label:
en_US: Reply-To
ja_JP: 返信先
pt_BR: Responder Para
zh_Hans: 回复地址
llm_description: Email address for replies. If not specified, replies will
go to the sender's email address.
max: null
min: null
name: reply_to
options: []
placeholder: null
precision: null
required: false
scope: null
template: null
type: string
params:
bcc: ''
body: ''
cc: ''
reply_to: ''
subject: ''
to: ''
provider_id: langgenius/dify-gmail/dify-gmail
provider_name: langgenius/dify-gmail/dify-gmail
provider_type: builtin
selected: false
title: Gmail下書きを作成
tool_configurations: {}
tool_description: 後で編集して送信できるGmailの下書きメールを作成
tool_label: Gmail下書きを作成
tool_name: draft_message
tool_node_version: '2'
tool_parameters:
bcc:
type: mixed
value: ''
body:
type: mixed
value: '{{#1763685769030.text#}}'
cc:
type: mixed
value: ''
reply_to:
type: mixed
value: ''
subject:
type: mixed
value: '{{#1763683255508.subject#}}'
to:
type: mixed
value: '{{#1763683255508.to_address#}}'
type: tool
height: 52
id: '1763685790601'
position:
x: 1012
y: 273
positionAbsolute:
x: 1012
y: 273
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: '## 下書きを作成しました。Gmailで確認してください。
本文:
{{#1763685769030.text#}}'
selected: false
title: 回答
type: answer
variables: []
height: 134
id: '1763685887146'
position:
x: 1614
y: 273
positionAbsolute:
x: 1614
y: 273
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
is_team_authorization: true
paramSchemas:
- auto_generate: null
default: 10
form: llm
human_description:
en_US: Maximum number of drafts to retrieve (1-100)
ja_JP: 取得する下書きの最大数(1-100)
pt_BR: Número máximo de rascunhos a recuperar (1-100)
zh_Hans: 要检索的最大草稿数量(1-100)
label:
en_US: Maximum Results
ja_JP: 最大結果数
pt_BR: Resultados Máximos
zh_Hans: 最大结果数
llm_description: Maximum number of drafts to return (between 1 and 100,
default is 10)
max: null
min: null
name: limit
options: []
placeholder: null
precision: null
required: false
scope: null
template: null
type: number
- auto_generate: null
default: 0
form: llm
human_description:
en_US: Whether to include the full email body content in the results (may
increase response time)
ja_JP: 結果にメール本文の完全な内容を含めるかどうか(応答時間が増加する可能性があります)
pt_BR: Se deve incluir o conteúdo completo do corpo do email nos resultados
(pode aumentar o tempo de resposta)
zh_Hans: 是否在结果中包含完整的邮件正文内容(可能会增加响应时间)
label:
en_US: Include Email Body
ja_JP: メール本文を含める
pt_BR: Incluir Corpo do Email
zh_Hans: 包含邮件正文
llm_description: Set to true to include full email body content, false to
include only headers and metadata. Including body content will increase
response time.
max: null
min: null
name: include_body
options: []
placeholder: null
precision: null
required: false
scope: null
template: null
type: boolean
- auto_generate: null
default: ''
form: llm
human_description:
en_US: Optional Gmail search query to filter drafts (e.g., 'subject:meeting',
'to:example@gmail.com')
ja_JP: 下書きをフィルタリングするオプションのGmail検索クエリ(例:'subject:meeting'、'to:example@gmail.com')
pt_BR: 'Consulta de pesquisa opcional do Gmail para filtrar rascunhos
(ex: ''subject:meeting'', ''to:example@gmail.com'')'
zh_Hans: 可选的Gmail搜索查询来过滤草稿(例如:'subject:meeting'、'to:example@gmail.com')
label:
en_US: Search Query
ja_JP: 検索クエリ
pt_BR: Consulta de Pesquisa
zh_Hans: 搜索查询
llm_description: Optional Gmail search query to filter drafts. Use Gmail
search operators like 'subject:', 'to:', 'from:', 'has:attachment'. Leave
empty to get all drafts.
max: null
min: null
name: search_query
options: []
placeholder: null
precision: null
required: false
scope: null
template: null
type: string
params:
include_body: ''
limit: ''
search_query: ''
provider_id: langgenius/dify-gmail/dify-gmail
provider_name: langgenius/dify-gmail/dify-gmail
provider_type: builtin
selected: false
title: Gmail下書きを一覧表示
tool_configurations: {}
tool_description: Gmailの下書きフォルダから下書きメールを一覧表示し、オプションのフィルタリングをサポート
tool_label: Gmail下書きを一覧表示
tool_name: list_drafts
tool_node_version: '2'
tool_parameters:
include_body:
type: constant
value: true
limit:
type: constant
value: 10
search_query:
type: mixed
value: '{{#1763683255508.search_query#}}'
type: tool
height: 52
id: '1763685936812'
position:
x: 710
y: 400
positionAbsolute:
x: 710
y: 400
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
is_team_authorization: true
paramSchemas:
- auto_generate: null
default: null
form: llm
human_description:
en_US: The unique identifier of the Gmail draft to add the attachment
to
ja_JP: 添付ファイルを追加するGmail下書きの一意の識別子
pt_BR: Identificador único do rascunho do Gmail ao qual adicionar o anexo
zh_Hans: 要添加附件的Gmail草稿的唯一标识符
label:
en_US: Draft ID
ja_JP: 下書きID
pt_BR: ID do Rascunho
zh_Hans: 草稿ID
llm_description: The unique draft ID of the Gmail draft to add the attachment
to. This ID can be obtained from the list_drafts tool or draft_message
tool.
max: null
min: null
name: draft_id
options: []
placeholder: null
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: The files to attach to the draft email
ja_JP: 下書きメールに添付するファイル
pt_BR: Os arquivos para anexar ao rascunho de e-mail
zh_Hans: 要附加到草稿邮件的文件
label:
en_US: Files to Attach
ja_JP: 添付するファイル
pt_BR: Arquivos para Anexar
zh_Hans: 要附加的文件
llm_description: The files to attach to the draft email, you can upload
multiple files
max: null
min: null
name: file_to_attach
options: []
placeholder: null
precision: null
required: true
scope: null
template: null
type: files
- auto_generate: null
default: ''
form: llm
human_description:
en_US: Custom name for the attachment (if different from the original
filename)
ja_JP: 添付ファイルのカスタム名(元のファイル名と異なる場合)
pt_BR: Nome personalizado para o anexo (se diferente do nome do arquivo
original)
zh_Hans: 附件的自定义名称(如果与原始文件名不同)
label:
en_US: Attachment Name
ja_JP: 添付ファイル名
pt_BR: Nome do Anexo
zh_Hans: 附件名称
llm_description: Custom name for the attachment. If not specified, the original
filename will be used.
max: null
min: null
name: attachment_name
options: []
placeholder: null
precision: null
required: false
scope: null
template: null
type: string
params:
attachment_name: ''
draft_id: ''
file_to_attach: ''
provider_id: langgenius/dify-gmail/dify-gmail
provider_name: langgenius/dify-gmail/dify-gmail
provider_type: builtin
selected: false
title: Gmail下書きに添付ファイルを追加
tool_configurations: {}
tool_description: 既存のGmail下書きメッセージにファイル添付を追加
tool_label: Gmail下書きに添付ファイルを追加
tool_name: add_attachment_to_draft
tool_node_version: '2'
tool_parameters:
attachment_name:
type: mixed
value: ''
draft_id:
type: mixed
value: '{{#1763685790601.draft_id#}}'
file_to_attach:
type: variable
value:
- '1763683255508'
- file
type: tool
height: 52
id: '1763686378774'
position:
x: 1314
y: 273
positionAbsolute:
x: 1314
y: 273
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: '{{#1763687498928.output#}}'
selected: false
title: 回答 2
type: answer
variables: []
height: 102
id: '1763686673248'
position:
x: 1358
y: 400
positionAbsolute:
x: 1358
y: 400
selected: true
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
selected: false
template: "### \U0001F4C2 下書き一覧(最新{{ arg1[0].drafts | length }}件)\r\n\r\n\
{% if arg1[0].drafts %}\r\n{% for draft in arg1[0].drafts %}\r\n**件名:**\
\ {{ draft.subject | default('(件名なし)') }}\r\n- **ID:** `{{ draft.id }}`\r\
\n- **宛先:** {{ draft.to | default('(未設定)') }}\r\n- **本文抜粋:** {{ draft.body\
\ | replace('\\n', ' ') | truncate(50, true, '...') }}\r\n\r\n---\r\n{%\
\ endfor %}\r\n{% else %}\r\n下書きは見つかりませんでした。\r\n{% endif %}"
title: テンプレート-出力整形
type: template-transform
variables:
- value_selector:
- '1763685936812'
- json
value_type: array[object]
variable: arg1
height: 52
id: '1763687498928'
position:
x: 1060
y: 400
positionAbsolute:
x: 1060
y: 400
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
viewport:
x: -32.75774092252789
y: 53.96813632561674
zoom: 0.8270233684432657
rag_pipeline_variables: []
Discussion