问题

如何从安装在我帐户中的自定义应用向另一个帐户的 API 发出 API 请求,但收不到消息, 因为错误不是可代理的 URI。

回答

的默认行为 client.request 是通过 Zendesk 的代理层发送请求,该代理层是一个阻止帐户相互发送 HTTP 请求的网关,这会导致 403 不是可代理的 URI 响应。

要从您帐户中的自定义应用向另一个 Zendesk 实例的 API 发出 客户端 请求,传递 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 端点都实施跨域资源共享 (CORS)。如果应用的请求来自客户端,则 CORS 响应会失败,除非 使用OAuth。如果您仅需要 GET 方法,请将OAuth密钥的范围限定为对特定资源的只读访问,并在客户端实施。

如果应用向另一个 Zendesk API 发出的请求是使用 PUT 或 POST 方法写入数据,那么这两个选项都不安全,因为它会导致密钥暴露在网络流量中。在大多数工作流程中,您可以使用 安全设置 来防止密钥出现安全问题。

安全设置对此工作流程不起作用,因为它们需要请求通过 Zendesk 的代理层。如果您需要应用写入数据,请考虑服务器端解决方案,其中对另一个 Zendesk API 的请求将发送回应用,在服务器端进行处理。

免责声明:本文仅供说明之用。Zendesk 不支持并不保证该代码。如有任何问题,请将其发布在评论部分,或尝试在线搜索解决方案。

翻译免责声明:本文章使用自动翻译软件翻译,以便您了解基本内容。 我们已采取合理措施提供准确翻译,但不保证翻译准确性

如对翻译准确性有任何疑问,请以文章的英语版本为准。

由 Zendesk 提供技术支持