Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Google AppSheetとDify連携について

※本件は他サイトでマルチポストしております。(teratailstack overflowstack overflow 日本語版)
他のサイトで回答やヒントなどの情報が得られた場合、自己回答で情報共有させていただきます。

解決したいこと

Google AppSheetでToDoリストを作成しました。

次の段階として、
・Google AppSheetにタスクを新規追加。
 ↓
・連携させたGoogle Apps ScriptDifyのワークフローのAPIを呼び出し。
 ↓
・Difyのワークフローで入力したタスクに関するアドバイスをLLM(Gemini Pro)に出力させる。
 ↓
・LLMの出力文をGoogle AppSheetに反映させる。

という実装をしたいと考えていますが、Google AppSheetのモニター画面にエラーが表示され、LLMの出力がGoogle AppSheetに反映されません。
修正が必要な内容についてご教示いただけないでしょうか。

↓ Google Apps Scriptのコード
※実際は、'MY SPREADSHEET ID'にはスプレッドシートのID、'MY Dify API'にはDifyのAPIを入力しています。

Google Apps Script
function sendChildrenQuestion() {
  // スプレッドシートのIDは、スプレッドシートのURLに含まれています。
  // 例えば、URLが https://docs.google.com/spreadsheets/d/abcd1234efgh5678ijkl90mnopqrstuv の場合、
  // abcd1234efgh5678ijkl90mnopqrstuv がスプレッドシートのIDです
  var spreadsheetId = 'MY SPREADSHEET ID'; // TODO スプレッドシートのIDを書き換え
  var sheetName = 'シート1';

  var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  var sheet = spreadsheet.getSheetByName(sheetName);

  // B列のデータをすべて取得
  var data = sheet.getRange('B:B').getValues();

  // 最後の行を特定(空のセルは除外)
  var lastRow = data.filter(String).length;

  // 最後の行の質問を取得
  var question = sheet.getRange('B' + lastRow).getValue();

  var url = 'https://api.dify.ai/v1/workflows/run';  // リクエストを送るURL

  // リクエストのヘッダー情報
  var headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {MY Dify API}'  // TODO DifyワークフローのAPIキーで書き換え
  };

  // リクエストのボディデータ
  var payload = {
    'inputs': {'Input':question},  // TODO Difyのワークフローの開始で設定した変数名
    'response_mode': 'blocking',
    'user': 'user123'
  };

  // オプションの設定
  var options = {
    'method': 'post',
    'headers': headers,
    'payload': JSON.stringify(payload),
    'muteHttpExceptions': true  // これをtrueにすると、エラーが発生しても例外がスローされません
  };

  // HTTP POSTリクエストの送信
  try {
    var response = UrlFetchApp.fetch(url, options);
    // Logger.log(response.getContentText());  // レスポンスの内容をログに出力
    var jsonResponse = response.getContentText()

    // JSONをオブジェクトに変換
    var responseObject = JSON.parse(jsonResponse);

    // 必要なデータを取得
    var taskId = responseObject.task_id;
    var workflowRunId = responseObject.workflow_run_id;
    var data = responseObject.data;
    var status = data.status;
    var outputs = data.outputs;
    var answer = outputs.text;

    // ログに出力
    Logger.log('Task ID: ' + taskId);
    Logger.log('Workflow Run ID: ' + workflowRunId);
    Logger.log('Status: ' + status);
    Logger.log('Outputs Text: ' + answer);

    // G列に返却された値を書き込み
    sheet.getRange('G' + lastRow).setValue(answer);
  } catch (e) {
    Logger.log('Error: ' + e.message);  // エラーメッセージをログに出力
  }
}

↓ Google AppSheetの参照元のスプレッドシート

↓ Difyのワークフロー

↓ Google AppSheetのモニター画面

発生している問題・エラーメッセージ

Error encountered in step with name [New step]: The tasks argument included a null value. (Parameter 'tasks')

自分で試したこと

Google AppSheetは以下のサイトを参考に作成しました。

Google Apps Scriptのコードは以下の記事を参考に作成しました。

0

1Answer

自己解決することができました。
Google Apps ScriptのコードでDifyの関数を指定する際、シングルクオーテーションが不要でした。
これにて質問はクローズとさせていただきます。

修正箇所
- 'inputs': {'Input':question},  // TODO Difyのワークフローの開始で設定した変数名
+ 'inputs': {Input:question},  // TODO Difyのワークフローの開始で設定した変数名
0Like

Your answer might help someone💌