Difyの結果をExcelに追記していく

Difyは結果のExcel出力のようなブロックがなかったので
Google Apps Script(以下GAS) を使用して、GoogleSpreadSheetに結果を記録していくスクリプトを作りました。
ちなみに入力の方はバッチ実行でcsvファイルを設定可能なのでDify内だけでできます。

## GoogleDrive側の手順

### Google Apps Script プロジェクトを作成
   Google Drive上で「＋新規」→「その他」→「Apps Script」を開き、新しいプロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/667f399e-8725-d655-91df-9c14f561c5b5.png)

### スクリプトコードを追加
   次のコードをプロジェクトに貼り付けます。
```javascript
function doPost(e) {
  try {
    // リクエストボディからデータをパースして取得
    const requestData = JSON.parse(e.postData.contents); // JSONデータを取得
    const fileId = requestData.fileId; // JSONからfileIdを取得

    // スプレッドシートを取得
    const sheet = SpreadsheetApp.openById(fileId).getSheets()[0]; // 最初のシートを使用

    // ヘッダーの列インデックスを取得
    const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
    const newRow = [];

    // ヘッダーに対応する値を取得し、行データを生成
    headers.forEach(header => {
      newRow.push(requestData[header] || ""); // ヘッダーが存在しない場合は空白を入れる
    });

    // 新しい行を追記
    sheet.appendRow(newRow);

    return ContentService.createTextOutput(JSON.stringify({ status: "success" }))
      .setMimeType(ContentService.MimeType.JSON);
  } catch (error) {
    return ContentService.createTextOutput(JSON.stringify({ status: "error", message: error.message }))
      .setMimeType(ContentService.MimeType.JSON);
  }
}
```
### Web APIを公開
   - 「デプロイ」→「新しいデプロイ」
   - 歯車アイコン→「ウェブアプリ」
   - アクセス許可を「全員」に設定してデプロイ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/e7f02764-7345-2cad-1c1d-3ce2a9a71eb6.png)
　
承認を求められるので承認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/34f56b66-71e6-4af8-0c28-490ed79bfb0f.png)
　
その際警告が出る場合があるが、このコードの作成者が信頼できない場合があるという警告
「Advanced」を押し「Go to プロジェクト名」を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/78cb801c-f17a-035c-58c9-5823fa4b17bc.png)

### デプロイしたGASのエンドポイント(URL)をメモっておく
IDもあるが今回使うのはURLだけ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/b462ab21-1e48-af42-30f1-9968dca2743a.png)


### SpreadSheetの準備
任意のSpreadSheetをGoogleDrive上に作成する、
1行目に列名を記載しておく(今回はaaa,bbb,ccc)とする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/19612e7d-8aa8-6cd8-e370-983a4f334a32.png)


またURLを確認し以下の部分をメモっておく
https://docs.google.com/spreadsheets/d/【この部分】/edit?gid=0

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/31ac521b-676f-0ada-2cfd-1b50477f97a3.png)



## Dify側の設定
### 環境変数にGAS URLとShpreadSheetのIDを入れておく
今回はendpointとsheetFileIdという環境変数を作成しておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/68ea2b4b-2a2b-187f-8adb-bc193a133e53.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/b068b7b4-b4e1-306a-0f78-1be5cebdd3f9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/29dfe5e9-0c87-db75-ffdf-975280f7f108.png)

### HTTPリクエストブロックを追加

- API
POSTを選択し、環境変数endpointを
- ボディでjsonを選択し以下のように設定
```json
     {
       "fileId": "環境変数sheetFileId",
       "列名": "データ",
       "列名": "データ"
       ...
     }
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/c95bf5af-a81b-fbf6-6a7d-63949935ab04.png)
変数の前後に""を忘れがちなので注意