Сделайте POST-запрос к Zendesk API, используя Google Apps-скрипт - PullRequest
0 голосов
/ 07 сентября 2018

Я хочу сделать POST-запрос к API zendesk, который будет создавать билеты zendesk из листов Google каждый раз при отправке формы Google.

Моя проблема в том, что моя аутентификация не проходит.

Я подтвердил, что мой токен API действителен с использованием скриптов Curl и Python.

Вот простая версия кода моего приложения-скрипта:

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);
}

Модифицированный код скрипта Apps

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.')

1 Ответ

0 голосов
/ 07 сентября 2018

Как насчет этой модификации?

Очки модификации:

Пожалуйста, измените 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 работает нормально.

Справка:

Если это не сработало, пожалуйста, скажите мне. Я хотел бы изменить его.

...