Difyのチャットフローを利用して、LLMが生成した内容をGoogle Apps Script(GAS)経由でGoogleスプレッドシートへ保存する方法を解説します。
1. まず、Dify側の準備
続いて、LLMノードを追加します。
ユーザーからの入力を適当に加工してもらうことにします。

AIモデルにGeminiを使っている場合、SYSTEMではなくUSERにプロンプトを入力しないとエラーになることがあります。
ただ、この辺りの仕組みは正直よくわかっていません…
LLMノードをさらに追加します。
先ほどの出力結果をJSON形式に変換します。

2. ここでいったん、GAS側の準備
スプレッドシート側で、データを受け取るためのGASを作成します。
function doPost(e){
try{
const jsonData = JSON.parse(e.postData.contents);
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
const currentDate = new Date();
const data = {
timestamp: currentDate,
title: jsonData.title || ''
};
sheet.appendRow([data.timestamp, data.title]);
return ContentService.createTextOutput(JSON.stringify({status: 'success'}))
.setMimeType(ContentService.MimeType.JSON);
} catch(error){
return ContentService.createTextOutput(JSON.stringify({status: 'error', message: error.toString()}))
.setMimeType(ContentService.MimeType.JSON);
}
}
このコードでは、以下の処理を行っています。
- 受信したPOSTデータをJSONとして解析
- タイムスタンプとJSON内の
titleを取得 - 指定したシートの末尾に行を追加
- 処理結果をJSONで返却
コードの記述後、「ウェブアプリ」 としてデプロイします。
Difyからアクセスできるよう、アクセス権限は 「全員」 に設定します。
3. Difyに戻って、設定の続き
Difyのフローに戻り、「HTTPリクエスト」ノードを追加します。
- メソッド: POST
- URL: 先ほど公開したGASのウェブアプリURL
-
ボディ: JSONを選択し、LLMノードで生成された変数を割り当てます


これで、LLMの出力結果をGASへ送信できるようになります。
4. 実行結果の判定
GASからのレスポンスを受け取り、成否を判定するために「IF/ELSE」ノードを追加します。
受信したJSONに success という文字列が含まれているかどうかにより、成功・失敗を判定します。

成功・失敗それぞれの分岐に「回答」ノードを接続し、各LLMノードで出力したテキストを返すようにしておきます。

5. 動作確認
適当なテキストを入力して実行してみると、


LLMが生成したタイトルが、スプレッドシートに自動で入力されることが確認できました。
まとめ
この仕組みを応用することで、対話内容から必要な項目を抽出して保存したり、アップロードされた画像の分析結果を保存するなど、チャットやファイルをデータベース化するという処理ができそうです。

