質問

アカウントにインストールされているカスタムアプリから別のアカウントのAPIにAPIリクエストを実行し、「error is not a proxyable URI」というメッセージを受け取らないようにするにはどうすればよいですか?

回答

client.requestのデフォルトの動作では、リクエストはZendeskのプロキシレイヤー(あるアカウントから別のアカウントへのHTTPリクエストをブロックするゲートウェイ)を通じて送信されます。その結果、403はプロキシ可能なURI応答ではありません。

アカウントのカスタムアプリから別のZendeskインスタンスのAPIにclient.requestを実行するには、request optionsオブジェクトにcors: trueを渡します。これにより、リクエストはZendeskのプロキシレイヤーをバイパスできます。

// make a request from a custom app in one Zendesk to the API of another Zendesk
 
 function newRequest(){
  var options = {
        url: 'https://subdomain.zendesk.com/api/v2/....',
        headers: { "Authorization": "Bearer OAUTH_TOKEN"},
        type: 'POST',
        data: JSON.stringify({my:"json", values:"go here"}), 
        contentType: "application/json",
        cors: true 
      } 
      client.request(options).then(
        function(response) {
          console.log(response);
        });
  }

クライアント側とサーバー側の要求に関する注意

各Zendesk APIエンドポイントは、Cross-Origin Resource Sharing(CORS)を実装しています。アプリからの要求がクライアント側から送信された場合、CORS応答はOAuthを使用しない限り失敗します。GETメソッドのみが必要な場合は、特定のリソースへの読み取り専用アクセス用にOAuthのスコープを設定し、クライアント側で実装します。

アプリの他のZendesk APIへのリクエストがPUTメソッドまたはPOSTメソッドを使用してデータを書き込むものである場合、どちらのオプションもネットワークトラフィックにトークンを公開するため安全ではありません。ほとんどのワークフローでは、安全な設定を使用してトークンのセキュリティ上の問題を防止できます。

セキュア設定は、リクエストがZendeskのプロキシレイヤーを通過する必要があるため、このワークフローでは機能しません。データの書き込みにアプリが必要な場合は、他のZendeskのAPIへのリクエストがアプリに戻され、サーバー側で処理されるサーバー側のソリューションを検討してください。

免責事項:この記事は説明のみを目的として提供されています。記事内で例示したコードについて、Zendeskはサポートも保証もいたしません。何か問題があった場合はコメント欄に投稿するか、インターネットで解決策を探してみてください。

翻訳に関する免責事項:この記事は、お客様の利便性のために自動翻訳ソフ トウェアによって翻訳されたものです。Zendeskでは、翻訳の正確さを期すために相応の努力を払っておりますが、翻訳の正確性につ いては保証いたしません。

翻訳された記事の内容の正確性に関して疑問が生じた場合は、正式版である英語の記事 を参照してください。

Powered by Zendesk