Dify入門ガイド:DifyのAPIをGASで使う方法!10分で作るAI連携システム

DifyのAPIをGASで使う方法

始めに

ども!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に格納されます。

headers:認証のための情報設定

先ほど取得した「API Key」を渡します。

data:APIアクセスに要するコンテンツ情報

以下のようなパラメーターが必要になります。

パラメータタイプ説明
userString必須
APIアクセスしたユーザーを識別する文字列(監視タブで確認できる)
response_modestreaming必須 応答のモード
streaming:タイプライターのように出力が可能
blocking:実行完了後に結果を返答する
inputsobject必須
開始ノードで設定したObject入力
filesarray[object]オプション
ファイル入力を可能にしている場合のファイル入力

今回は開始ノードに変数として、「URL」と「count」を設定しています。開始ノードに変数を設定していない場合は、空オブジェクトを設定してください。

GASでレスポンスを解析する

muteHttpExceptionsTrueに設定してるので、エラー時も処理は継続します。振り分けのためにステータスコードでの分岐を行っています。

// StatusCodeによって処理分岐
if (response.getResponseCode() === 200) {
  const responseJson = JSON.parse(responseText);
  Logger.log(responseJson.data.outputs)
} else {
  Logger.log("Error"); // エラー発生時のログ出力
}

Dify(API)のエラーコードとしては、以下のようなものがあります。

ステータスコードメッセージ説明
400invalid_param異常なパラメータ入力
400app_unavailableアプリの設定が利用できません
400provider_not_initialize利用可能なモデル資格情報の設定がありません
400provider_quota_exceededモデル呼び出しのクォータが不足しています
400model_currently_not_support現在のモデルは利用できません
400workflow_request_errorワークフローの実行に失敗しました
500内部サーバーエラー

レスポンスとしては、200/400/500しかありません。ですが、エラーメッセージに情報がのっているので、エラーが出た場合はメッセージを読んで適宜修正を行ってください。

終わり

DifyのAPIを使って、GASからアクセスする方法について解説しました。APIアクセスの設定は非常にシンプルで、API KEYを取得して、必要なパラメーターを設定するだけです。これからは、このGASとDify(API)を活用して様々な自動化を実現していきたいと思います。

XのAPIと連携して、ブログのPRを全自動化していくことが目標です。

ではまた~

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です