Skip to main content

このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、英語版 を参照してください。

出力先#

コマンドの結果は、常に JSON として stdout に出力されます。エラーと通知は stderr に出力されます:

  • エラー:ターミナルではテキストで表示されます。2> errors.log などでファイルや別のプログラムに送る場合は JSON になります。ターミナルでもエラーを JSON で表示するには、--json を付けます。
  • stream ended early: … などの通知:常にプレーンテキストです。

実行結果の読み方#

run console_app コマンドの結果には、アプリの回答と、次の操作に必要な ID が含まれます:

フィールド内容
text.answerチャットボット、レガシー Agent アプリ、Chatflow アプリ、テキストジェネレーターの応答。Workflow アプリでは空になる。
outputsWorkflow アプリの回答。出力ノードの変数がキーになる。Chatflow アプリでは応答がここにも入り、アプリが返したファイルがあればそれも入る。
run_idWorkflow アプリまたは Chatflow アプリの実行 ID。describe run と get run node で指定する。
conversation_idチャットボット、レガシー Agent アプリ、Chatflow アプリで、会話を続けるときに --conversation-id で渡す ID。

実行の終了状態の確認#

スクリプトでは、結果の status を確認します。実行が完了しても、一時停止しても、途中で打ち切られても、終了コードはどれも 0 です。違いは status で見分けます:

  • ended:実行が完了したことを表します。
  • suspended:実行が人間の入力フォームで一時停止したことを表します。結果の hints には、アクションボタンごとにコマンドが 1 つずつ含まれます。フォームに回答 するには、選んだアクションのコマンドを実行します。
  • incomplete:Ctrl+C を押した場合など、実行が終わる前に結果が打ち切られたことを表します。結果には、それまでに届いた内容だけが含まれます。Workflow アプリや Chatflow アプリの場合、実行はサーバー上で続きます。実行がどう終わるかを確認するには、結果の run_id を difyctl describe run に渡します。
  • failed(終了コード 1):実行が失敗したか、停止されたことを表します。理由は error.message で確認できます。

失敗した実行も、ほかの実行と同じく結果を stdout に出力し、stderr には何も出力しません。たとえば、必須の入力を渡さずに Workflow アプリを実行した場合は次のようになります:

エラーの読み方#

結果を出す前に失敗したコマンドは、stdout には何も出力せず、stderr にエラーを出力します。存在しないアプリ ID を指定した場合、エラーは JSON で次のようになります:

どのエラーにも code と message があります。分岐には code を使います。失敗の内容によっては、エラーに次のフィールドも含まれます:

  • hint:run difyctl help get console_app のように、次に試すことを文で示します。
  • http_status、method、url、server(サーバー側のエラー):サーバーがエラーを返した場合に含まれます。server_error では、http_status または server.code で分岐します。上の例では 404 と not_found です。
  • details:値が difyctl 側の検証に通らなかった場合(input_invalid)に含まれます。失敗したフィールドごとに、"field": "--limit", "msg": "must be integer" のようにフラグと理由が入ります。

ターミナルでは、サーバー側のコードがある場合、エラーの 1 行目にそのコードが表示されます。上の例(存在しないアプリ)では、not_found: app not found と表示されます。スクリプトの分岐に使うコードは、JSON から取得してください。この例の JSON では server_error です。

message だけでは失敗の原因がわからない場合は、--verbose を付けます。サーバーのレスポンス全体が、raw_response として含まれるようになります。

終了コード#

すべてのコマンドは、次のいずれかの終了コードで終了します:

終了コード意味エラーコード
0成功。一時停止した実行(suspended)や、途中で打ち切られた実行(incomplete)も含む。
1失敗した実行、またはサーバーエラーやネットワークエラーなど、ほかの行に当てはまらないエラー。server_error、network_connection、keyring_unavailable、skill_missing、unknown
2difyctl が送信前にコマンドを拒否した。原因は、不明なフラグ、必須フラグの指定漏れ、型の合わない値のいずれか。usage_invalid_flag、usage_missing_arg、input_invalid、config_invalid_key、config_invalid_value
4サインインしていない、サインインの期限が切れた、またはアクセス権がない。not_logged_in、auth_expired、access_denied
6コマンドがサーバーにない、または difyctl がサーバーのコマンド一覧を取得できなかった。unknown_op、catalog_unavailable
7レート制限 に達した。rate_limited

終了コードが 1 の場合は、まず stdout を確認します。失敗した実行の結果は stdout に出力されています。それ以外のエラーは stderr に出力されます。

特定のエラーを解決するには、トラブルシューティング を参照してください。

失敗したコマンドのリトライ#

get や describe など、読み取りを行うコマンドは安全にリトライできます。help では、各コマンドの説明の横に read、write、destructive のいずれかのラベルが表示されます。

write または destructive のコマンドをリトライする前に、対応する get や describe コマンドなどで、最初の試行が反映されたかどうかを確認してください。アプリの実行は write に分類され、リトライすると新しい実行が開始されます。

終了コード 7 の後は、実行を含め、どのコマンドも安全にリトライできます。レート制限 で拒否されたコマンドは、サーバー側では何も処理されていないためです。

終了コード 2 と 4 は、誤ったフラグや サインインの期限切れ などの原因を解消するまで、何度リトライしても返されます。

レート制限#

コマンドが終了コード 7 で終了した場合は、1 分待ってからリトライします。

サインインごとの上限は、1 分あたり 60 リクエストです。セルフホストのサーバーでは、OPENAPI_RATE_LIMIT_PER_TOKEN で上限を変更できます。0 に設定すると、上限を無効にできます。

トラブルシューティング#

メッセージコード対処方法
invalid bearerauth_expiredサインインの期限が切れたか、無効にされた。サインインし直す。
not logged in: …not_logged_inサインインする。すでにサインインしている場合は、サインイン時に使ったフォルダを DIFY_CONFIG_DIR で指定する。
場合による(insufficient workspace role など)access_deniedワークスペースのロール、または統合のインストール権限などのワークスペース設定で、この操作が許可されていない。
no command or server operation named <words>unknown_opdifyctl help でコマンドを確認する。スペルが正しい場合は、サーバーの Dify バージョンにそのコマンドがない。
failed to fetch the catalog: …catalog_unavailableサーバーが稼働しているか、正しいアドレスにサインインしたかを確認する。
<method> <url> timed out after <ms>msnetwork_connectionhttp.timeout の値を大きくする。
サインインが必要なすべてのコマンドで Internal Server Error(HTTP 503)が返されるserver_errorセルフホストのサーバーでは、ENABLE_OAUTH_BEARER が true に設定されていることを確認する。