【问题标题】:Make POST request to zendesk api using google apps-script使用 google apps-script 向 zendesk api 发出 POST 请求
【发布时间】:2018-09-06 23:58:52
【问题描述】:

我想向 zendesk api 发出 POST 请求,每次提交 google 表单时,该 api 都会从 google 表格创建 zendesk 票证。

我的问题是,我的身份验证一直失败。

我已使用 Curl 和 python 脚本确认我的 api 令牌有效。

这是我的应用程序脚本代码的简单版本:

function onSubmit(e){      
  var subject = 'Test ticket';
  var body = 'test ticket was successful!';
  var data = {'ticket': {'subject': subject, 'comment': {'body': body}}};
  var url = 'https://mydomain.zendesk.com/api/v2/tickets.json';
  var user = 'myemail@email.com/token:';
  var pwd = 'MY_SECRET_API_KEY';

  options = {
    'method' : 'post',
    'headers': {
      'contentType': 'application/json',
      'Authorization':  'Basic ' + Utilities.base64Encode(user + pwd);
    },
    'data' : JSON.stringify(data)
  };
  UrlFetchApp.fetch(url, options);
}

修改后的应用脚本代码

function onSubmit(e){
  var subject = 'Test ticket';
  var body = 'test ticket was successful!';
  var data = {'ticket': {'subject': subject, 'comment': {'body': body}}};      
  var url = 'https://mydomain.zendesk.com/api/v2/tickets.json';
  var user = 'myemail@email.com/token';
  var pwd = 'MY_SECRET_API_KEY';
  var options = {
      'method' : 'post',
      'headers': {
        'Authorization': "Basic " + Utilities.base64Encode(user + ':' + pwd)
      },
      'payload' : JSON.stringify(data),
      'contentType': 'application/json',
      'muteHttpExceptions': true
  };
  UrlFetchApp.fetch(url, options);
}

回应: 401 {"error":"Couldn't authenticate you"}

我的 python 脚本有效:

import json
import requests

subject = 'This is a test!'
body = 'Testing api calls.'
data = {'ticket': {'subject': subject, 'comment': {'body': body}}}
payload = json.dumps(data)
url = 'https://mydomain.zendesk.com/api/v2/tickets.json'
user = 'myemail@email.com/token'
pwd = 'MY_SECRET_API_KEY'
headers = {'content-type': 'application/json'}

response = requests.post(url, data=payload, auth=(user, pwd), headers=headers)

if response.status_code != 201:
    print('Status:', response.status_code, payload, 'Problem with the request. Exiting.')
    exit()

print('Successfully created the ticket.')

【问题讨论】:

    标签: google-apps-script zendesk-api


    【解决方案1】:

    这个修改怎么样?

    修改点:

    请修改options如下。

    • 当您使用contentType时,请将其放在headers之外。
      • 当您使用Content-Type时,请将其放在headers中。
    • data修改为payload

    修改脚本:

    var options = {
      'method' : 'post',
      'headers': {
        'Authorization': 'Basic ' + Utilities.base64Encode(user + ':' + pwd), // Modified
      },
      'contentType': 'application/json',
      'payload' : JSON.stringify(data)
    };
    

    注意:

    • 这个修改后的脚本假设你的 python 脚本工作正常。

    参考:

    如果这不起作用,请告诉我。我想修改它。

    【讨论】:

    • 响应仍然返回 401,“无法验证您”。
    • @Casey Gov 对于给您带来的不便,我深表歉意。我忘记了基本授权。所以我修改并更新了我的答案。你能确认一下吗?我对你的剧本有一个问题。在您的 python 脚本中,您使用user = 'myemail@email.com/token'。但是在您的 GAS 中,您使用 user = 'myemail@email.com/token:'。这种差异与问题有关吗?
    • 感谢您的跟进。不幸的是,身份验证仍然失败。 @田池
    • @Casey Gov 对于给您带来的不便,我深表歉意。在您的问题中,您说您的 python 脚本有效。在这个修改后的 GAS 脚本中,我确认请求与您的 python 脚本的请求相同。那么你能展示你最新的 GAS 脚本吗?我想确认一下。
    • 抱歉耽搁了。我已将修改后的脚本添加到上面的问题中。注意我也与 zendesk 确认,我的 API 令牌仍然有效。我的 python 脚本仍然成功创建了 zendesk 票证,
    猜你喜欢
    • 2020-11-03
    • 2021-11-01
    • 2014-04-04
    • 1970-01-01
    • 2016-12-12
    • 2012-07-13
    • 2021-11-12
    • 2022-01-12
    相关资源
    最近更新 更多