始めに
ども!Dify系のブログをチーム総出で書いて、眺めているのが楽しくなっている龍ちゃんです。Difyのブログも本数が出ていて続いていますね。
今回は、前回作成した「Dify入門ガイド:X投稿を自動生成!10分で作るブログPR効率化ワークフロー」のAPI公開をして、GASからアクセスしていきたいと思います。
アプリの公開方法に関しては、「Dify入門ガイド:作成したAIアプリ、どう公開する?Web公開・API活用する3つの方法」で詳しく解説しています
ソースコード
function sampleFunction() {
  const headers = {
    'Authorization': "Bearer *******************",  //api key発行してペースト
    'Content-Type': 'application/json'              //必須
  };
  const data = {
    "user": "*********",                            // 任意の文字列で可能(監視で表示される)
    "response_mode": "blocking",                    // streaming or blocking 
    'inputs': {                                     // 設定した開始ノードの入力
      "URL": "https://tech-lab.sios.jp/archives/45986",
      "count": 120
    }
  };
  const options = {
    "method": "post",
    "payload": JSON.stringify(data),
    "headers": headers,
    "muteHttpExceptions": true                      // エラーを平文で返してもらう
  };
  const requestUrl = "https://api.dify.ai/v1/workflows/run";
  const response = UrlFetchApp.fetch(requestUrl, options);
  const responseText = response.getContentText()
  // 帰ってきたレスポンスを表示
  Logger.log(responseText);                         // レスポンス内容をログに出力
  // StatusCodeによって処理分岐
  if (response.getResponseCode() === 200) {
    const responseJson = JSON.parse(responseText);
    Logger.log(responseJson.data.outputs.text)
  } else {
    Logger.log("Error"); // エラー発生時のログ出力
  }
}
Difyで公開したAPIにGASからアクセスをする
詳しい手順とソースコードの解説をしていきます。まだ、Dify上でアプリを作成していない方は、こちらの記事を参考にしてアプリを作成してください。
DifyでAPIを公開する
ワークフローの右上から「公開する」を選択して、アプリを公開します。

公開後は、下のような画像に代わります。ここからAPIにアクセスするためのAPI KEYを発行します。「APIリファレンスにアクセス」をクリックします。

右上の「APIキー」をクリックして「APIシークレットキー」を発行します。

発行した「API KEY」はDifyにAPIアクセスするのに必要になるので、大事に保管しましょう。もし、流出した場合は再発行して既存のAPIキーを失効させてください。
GASからDify(API)にアクセスする
GASからDify(API)アクセス部分はこちらになります。
const headers = {
  'Authorization': "Bearer *******************",  //api key発行してペースト
  'Content-Type': 'application/json'              //必須
};
const data = {
  "user": "*********",                            // 任意の文字列で可能(監視で表示される)
  "response_mode": "blocking",                    // streaming or blocking 
  'inputs': {                                     // 設定した開始ノードの入力
    "URL": "https://tech-lab.sios.jp/archives/45986",
    "count": 120
  }
};
const options = {
  "method": "post",
  "payload": JSON.stringify(data),
  "headers": headers,
  "muteHttpExceptions": true                      // エラーを平文で返してもらう
};
const requestUrl = "<https://api.dify.ai/v1/workflows/run>";
const response = UrlFetchApp.fetch(requestUrl, options);
const responseText = response.getContentText()
変更する点としては、「headers」と「data」になります。muteHttpExceptions はGASの設定パラメーターで、UrlFetchApp.fetchが失敗した場合はエラーがresponseに格納されます。
先ほど取得した「API Key」を渡します。
以下のようなパラメーターが必要になります。
| パラメータ | タイプ | 説明 | 
|---|---|---|
| user | String | 必須 APIアクセスしたユーザーを識別する文字列(監視タブで確認できる) | 
| response_mode | streaming | 必須 応答のモード streaming:タイプライターのように出力が可能 blocking:実行完了後に結果を返答する | 
| inputs | object | 必須 開始ノードで設定したObject入力 | 
| files | array[object] | オプション ファイル入力を可能にしている場合のファイル入力 | 
今回は開始ノードに変数として、「URL」と「count」を設定しています。開始ノードに変数を設定していない場合は、空オブジェクトを設定してください。
GASでレスポンスを解析する
muteHttpExceptionsをTrueに設定してるので、エラー時も処理は継続します。振り分けのためにステータスコードでの分岐を行っています。
// StatusCodeによって処理分岐
if (response.getResponseCode() === 200) {
  const responseJson = JSON.parse(responseText);
  Logger.log(responseJson.data.outputs)
} else {
  Logger.log("Error"); // エラー発生時のログ出力
}
Dify(API)のエラーコードとしては、以下のようなものがあります。
| ステータスコード | メッセージ | 説明 | 
|---|---|---|
| 400 | invalid_param | 異常なパラメータ入力 | 
| 400 | app_unavailable | アプリの設定が利用できません | 
| 400 | provider_not_initialize | 利用可能なモデル資格情報の設定がありません | 
| 400 | provider_quota_exceeded | モデル呼び出しのクォータが不足しています | 
| 400 | model_currently_not_support | 現在のモデルは利用できません | 
| 400 | workflow_request_error | ワークフローの実行に失敗しました | 
| 500 | – | 内部サーバーエラー | 
レスポンスとしては、200/400/500しかありません。ですが、エラーメッセージに情報がのっているので、エラーが出た場合はメッセージを読んで適宜修正を行ってください。
終わり
DifyのAPIを使って、GASからアクセスする方法について解説しました。APIアクセスの設定は非常にシンプルで、API KEYを取得して、必要なパラメーターを設定するだけです。これからは、このGASとDify(API)を活用して様々な自動化を実現していきたいと思います。
XのAPIと連携して、ブログのPRを全自動化していくことが目標です。
ではまた~
 
					

