Difyのスプレッドシートプラグインが出てやれることが広がった感じがします。
問い合わせなどがあったときに行の追加が動的にできると良いですが、最終行をそのままだと取得できないのでBATCH GETとUPDATEを組み合わせて対応してみたメモです。
1. フロー作成まえの準備
1-1. サービスアカウントの作成とJSON認証情報
調べると以下のような記事が出てきますが、今回はGoogle系サービスのAPIを利用するにあたりサービスアカウントを使った認証をします。
サービスアカウントのメールアドレスとJSONのキーを取得しましょう。
1-2. Difyのプラグインインストール
Spread Sheetのプラグインをインストールしましょう。
インストールしたら設定まで実施。
1-3. 利用するシートの用意
スプレットシートを用意して、サービスアカウントのメールアドレスに編集権限を与えてください。
その後、シートの中身を用意します。
- シート名:
シート1 - フィールド名:
お名前/メール
だけを用意したシートを用意しました。試しに2行目に値も入れています。
2. 環境変数の設定
チャットフローを作成していきますが、まずは環境変数を指定
スプレッドシートのシートIDとシート名をよく使い回すのでミスを回避するために環境変数に入れておきます。
ssidとsheet_nameという変数を作成し、文字列(String)で指定して値を入れます。
- ssid: スプレッドシートのIDです
- URLの
/d/の後ろから/までがIDとなります https://docs.google.com/spreadsheets/d/(この部分)/edit?gid=12345677
- URLの
- sheet_name、シート1などのシート名を設定します
設定できると以下のようになります。
3. BATCH GETノード - 最終行の取得
目的は行の追加ですが、まずは最終行がどこにあるのか?の取得です。以下を設定しましょう。
- Spreadsheet ID: 先ほどの環境変数のssidを指定
- Ranges:
[シート名の環境変数!A:A] - Date Time Render Option:
SERIAL_NUMBER(デフォルトのまま) - Major Dimension:
ROWS - Value Render Option:
FORMATTED_VALLUE
Rangesは表の行数(最終行の数字)を知りたいのでA:Aの範囲でOKです。
一旦出力をみてみる
プレビューで"テスト"など適当に送り、ワークフロー処理の中身を確認してみます。
{
"text": "",
"files": [],
"json": [
{
"spreadsheetId": "xxxxxxxxxxxxxx",
"valueRanges": [
{
"majorDimension": "ROWS",
"range": "'シート1'!A1:A1000",
"values": [
[
"お名前",
"メール"
],
[
"のびすけtest",
"hoge@hoge.com"
]
]
}
]
}
]
}
このようなJSONになります。
4. コード実行ノード - シートに情報を作成する箇所を特定する
コード実行のノードを追加します。
まずはコードのタイプを JAVASCRIPTに変更します。
次に入力変数を設定します。
-
ss_body: BATCH GETの出力変数のJSONを指定
-
sheet_name: 最初に作成した環境変数を指定
最後にコードを貼り付けます。
function main({ss_body,sheet_name}) {
const last_row = ss_body[0].valueRanges[0].values.length;
const new_line_num = last_row + 1;
const range = `${sheet_name}!A${new_line_num}:F${new_line_num}`;
return {
result: range
}
}
ここではss_body[0].valueRanges[0].valuesにシートの中身の要素が入ってくるのでlengthを指定することで長さ(=行数)がわかります。
last_rowが最終行なので、const new_line_num = last_row + 1;とすることで次に追加する行数番号が分かります。
const range =
${sheet_name}!A${new_line_num}:F${new_line_num};
最後にレンジ情報の文字列を整形しています。
実際には"シート1!A3:F3"のような範囲になっているはずです。
5. BATCH UPDATE - 更新
コード実行の後にBATCH UPDATEノードを追加します。
- Spreadsheet ID: 最初に要したssidを指定
- Data:
[{"range":"XXXX", "values":[["すがわら","hoge@hogehoge.com"]]}]という指定で大乗です。
XXXXの箇所には、先ほどの"シート1!A3:F3"のような範囲の文字列を入れたく、コード実行のresultを指定しましょう。
他の設定そのままで大丈夫です。
この状態で最後にプレビューなどでtestなど送信すると情報がスプレッドシートに入っていきます。
今回はすがわら,hoge@hogehoge.comを固定で入れてましたが、ユーザーの入力情報からシートに追記できたら便利そうですね。
まとめ
意外とプラグインを使って行の追加の例は見なかったので誰かの参考になると幸いです。
一回やってしまえばなんてことないですが...スプレッドシート連携は行追加が結構癖があるように感じました。
前に一回やって今回思い出しつつ試してみました。
また忘れる可能性あるのでちゃんとメモ取るの大事ですね。














