※本件は他サイトでマルチポストしております。(Qiita、stack overflow、stack overflow 日本語版)
他のサイトで回答やヒントなどの情報が得られた場合、自己回答で情報共有させていただきます。
実現したいこと
Google AppSheetでToDoリストを作成しました。
次の段階として、
・Google AppSheetにタスクを新規追加。
↓
・連携させたGoogle Apps ScriptでDifyのワークフローのAPIを呼び出し。
↓
・Difyのワークフローで入力したタスクに関するアドバイスをLLM(Gemini Pro)に出力させる。
↓
・LLMの出力文をGoogle AppSheetに反映させる。
という実装をしたいと考えています。
発生している問題・分からないこと
Google AppSheetのモニター画面にエラーが表示され、LLMの出力がGoogle AppSheetに反映されません。
修正が必要な内容についてご教示いただけないでしょうか。
↓ Google AppSheetの参照元のスプレッドシート
エラーメッセージ
error
1Error encountered in step with name [New step]: The tasks argument included a null value. (Parameter 'tasks')
該当のソースコード
js
1function sendChildrenQuestion() { 2 // スプレッドシートのIDは、スプレッドシートのURLに含まれています。 3 // 例えば、URLが https://docs.google.com/spreadsheets/d/abcd1234efgh5678ijkl90mnopqrstuv の場合、 4 // abcd1234efgh5678ijkl90mnopqrstuv がスプレッドシートのIDです 5 var spreadsheetId = 'MY SPREADSHEET ID'; // TODO スプレッドシートのIDを書き換え 6 var sheetName = 'シート1'; 7 8 var spreadsheet = SpreadsheetApp.openById(spreadsheetId); 9 var sheet = spreadsheet.getSheetByName(sheetName); 10 11 // B列のデータをすべて取得 12 var data = sheet.getRange('B:B').getValues(); 13 14 // 最後の行を特定(空のセルは除外) 15 var lastRow = data.filter(String).length; 16 17 // 最後の行の質問を取得 18 var question = sheet.getRange('B' + lastRow).getValue(); 19 20 var url = 'https://api.dify.ai/v1/workflows/run'; // リクエストを送るURL 21 22 // リクエストのヘッダー情報 23 var headers = { 24 'Content-Type': 'application/json', 25 'Authorization': 'Bearer {MY Dify API}' // TODO DifyワークフローのAPIキーで書き換え 26 }; 27 28 // リクエストのボディデータ 29 var payload = { 30 'inputs': {'Input':question}, // TODO Difyのワークフローの開始で設定した変数名 31 'response_mode': 'blocking', 32 'user': 'user123' 33 }; 34 35 // オプションの設定 36 var options = { 37 'method': 'post', 38 'headers': headers, 39 'payload': JSON.stringify(payload), 40 'muteHttpExceptions': true // これをtrueにすると、エラーが発生しても例外がスローされません 41 }; 42 43 // HTTP POSTリクエストの送信 44 try { 45 var response = UrlFetchApp.fetch(url, options); 46 // Logger.log(response.getContentText()); // レスポンスの内容をログに出力 47 var jsonResponse = response.getContentText() 48 49 // JSONをオブジェクトに変換 50 var responseObject = JSON.parse(jsonResponse); 51 52 // 必要なデータを取得 53 var taskId = responseObject.task_id; 54 var workflowRunId = responseObject.workflow_run_id; 55 var data = responseObject.data; 56 var status = data.status; 57 var outputs = data.outputs; 58 var answer = outputs.text; 59 60 // ログに出力 61 Logger.log('Task ID: ' + taskId); 62 Logger.log('Workflow Run ID: ' + workflowRunId); 63 Logger.log('Status: ' + status); 64 Logger.log('Outputs Text: ' + answer); 65 66 // G列に返却された値を書き込み 67 sheet.getRange('G' + lastRow).setValue(answer); 68 } catch (e) { 69 Logger.log('Error: ' + e.message); // エラーメッセージをログに出力 70 } 71}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
Google AppSheetは以下のサイトを参考に作成しました。
https://www.yoshidumi.co.jp/collaboration-lab/appsheet-tasks
Google Apps Scriptのコードは以下の記事を参考に作成しました。
https://qiita.com/cog1t0/items/5ad8da7a09ac2d29ab2a#gas%E3%81%AE%E6%BA%96%E5%82%99
補足
※実際は、Google Apps Scriptの'MY SPREADSHEET ID'にはスプレッドシートのID、'MY Dify API'にはDifyのAPIを入力しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。