API приложения Google с ошибкой API Freshdesk
При использовании API-интерфейса freshdesk из приложения Google выдается ошибка
"{"code":"invalid_content_type","message":"Content-Type header is set to . It should be set to application/json"}"
Код, используемый для этого
function hd_getTickets(){//using v2
var API_KEY = 'xxxxxxxxxxxxxx';
var headers = {'Content-type': 'application/json','Authorization': 'Basic ' + Utilities.base64Encode(API_KEY + ':X') };
var data = { "query":"\"priority:3\"" };
var ENDPOINT = 'https://xxxxxxx.freshdesk.com/api/v2';
var url = ENDPOINT + '/search/tickets';
var options = { 'method': 'get', muteHttpExceptions: true,'headers': headers,'payload' : JSON.stringify(data)};
var response = UrlFetchApp.fetch(url, options);
}
Изменение конечной точки и удаление полезных данных из опций работают, поэтому при условии, что авторизация и заголовок в порядке
var url = ENDPOINT + '/tickets';
var options = {'method':'get','headers':headers, muteHttpExceptions: true};
С помощью почтальона это работает
https://xxxxxxx.freshdesk.com/api/v2/search/tickets?query="priority:3"
с заголовком, установленным как
Content-Type:application/json
Authorization:Basic xxxxxxxxxxxxxxxx
2 ответа
Обнаружено две проблемы: 1) веб-сайт не поддерживает получение на основе полезной нагрузки. 2) приложения Google не поддерживают специальные символы в URL.
Добавление параметров к исходному URL и кодирование двойных кавычек работает.
var ENDPOINT = 'https://xxxxxx.freshdesk.com/api/v2';
var query ='query='+encodeURIComponent("\"priority")+":1"+encodeURIComponent("\"");
var url = ENDPOINT + '/search/tickets?'+query;
var options = {'method': 'get', muteHttpExceptions: true,'headers': headers};
var response = UrlFetchApp.fetch(url, options);
Вы отправляете запрос GET к API с переменной Payload в опциях. На мой взгляд, полезные нагрузки используются для запросов POST.
Создайте URL с параметрами запроса и отправьте его без полезной нагрузки. Пример: ' https://domain.freshdesk.com/api/v2/search/tickets?query="priority: 3"'
Подробности см. Здесь: HTTP GET с телом запроса. Документ API Freshdesk: https://developers.freshdesk.com/api/