Получение кода 500 обратно из Sling API JSON Post - PullRequest
0 голосов
/ 01 июня 2018

Похоже, что Sling ( sling.is ) обновил их API , но никогда не отправлял электронное письмо с предупреждением или информацией, поэтому мой скрипт не работает.Конечная цель моего кода (который работал до их обновления) - просто опубликовать смены для сотрудников в Sling после одобрения мероприятия компании.

Я запускаю весь этот код в скрипте приложений Google, так как мне нужно извлечь данные из электронной таблицы, чтобы создать смены.Код работает, сначала «добавляя» смены в систему, а затем, во-вторых, «публикует» эти смены, чтобы все сотрудники могли их видеть.Мне удалось выяснить, как исправить первую часть, так как кажется, что они поменяли базовый синтаксис.Но я не могу понять, как исправить вторую (издательскую) часть.

Слинг не предлагает никакой поддержки их API, поэтому я подумал, что размещение здесь будет моей следующей лучшей ставкой.

Вот ошибка, которую я получаю:

"Запрос не выполнен для https://api.sling.is/v1/shifts/sync, возвращен код 500. Усеченный ответ сервера: {" message ":" Упс, произошла непредвиденная ошибка. "} (Используйте параметр muteHttpExceptions для проверки полного ответа) (строка 257, файл")Код ")"

//CREATE SHIFTS ON SLING
     //This is pulling data from google spreadsheet cells
  var staff = getByName('Attendants', row);
  var start = Utilities.formatDate(getByName('Date', row), 
ss.getSpreadsheetTimeZone(), "YYYY-MM-dd") + "T" + 
Utilities.formatDate(getByName('Starting Time of Attendants', row), 
ss.getSpreadsheetTimeZone(), "H:mm") + ":00.000-04";
  var end = Utilities.formatDate(getByName('Date', row), 
ss.getSpreadsheetTimeZone(), "YYYY-MM-dd") + "T" + 
Utilities.formatDate(getByName('Ending Time of Attendants', row), 
ss.getSpreadsheetTimeZone(), "H:mm") + ":00.000-04";
  var notes = getByName('City', row) + ", " + getByName('Event Type', row)

  var payload = {
  "available": true,
  "dtstart": start,  
  "dtend": end,
  "location": {
    "id": 1022310
  },
  "position": {
    "id": 1022302
  },
  "summary": notes,
  "user": {
    "id": 1
  }
  };

  var headers = {
   "Authorization" : "9e632842f4e61927336337f1aa65b75c"
  };

  var options = {

  'method' : 'post',                  
  'contentType': 'application/json', 
  'headers' : headers,
  'payload' : JSON.stringify(payload)


};
  for(i=1; i<=staff; i++){
  UrlFetchApp.fetch("https://api.sling.is/v1/shifts? 
ignoreConflicts=false&publish=true", options);
  }
// All of that ^^ works               

  var payloadtwo = 
    {
      "summary": notes
  };          


  var optionstwo = {

  'method' : 'post',                  
  'contentType': 'application/json', 
  'headers' : headers,
  'payload' : JSON.stringify(payloadtwo)


  };

  UrlFetchApp.fetch("https://api.sling.is/v1/shifts/sync", optionstwo);

Я даже попытался полностью удалить параметр payload (body) из опций JSON.

  var payloadtwo = { 
  "summary": notes, 
  "dtstart": "2018-11-07T12:00:00:00.000-04", 
  "dtend": "2018-11-09T12:00:00:00.000-04" 
  };        


var optionstwo = {

'method' : 'post',                  
'contentType': 'application/json', 
'headers' : headers


};

UrlFetchApp.fetch("https://api.sling.is/v1/shifts/sync", optionstwo);

и затем он говорит

"Запрос не выполнен для https://api.sling.is/v1/shifts/sync, возвращен код 400. Усеченный ответ сервера: {" message ":" Для публикации требуется либо диапазон дат, либо список событий "} (используйте параметр muteHttpExceptions для проверки полного ответа)(строка 256, файл "Код") "

" Документация "Sling API для функции сменной публикации доступна здесь: https://api.sling.is/#/shifts/post_shifts_sync

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 05 июня 2018

Из документа API в вашем вопросе кажется, что тело запроса является объектом, включающим в себя массив.И похоже, что ключ event.Не могли бы вы попробовать этот модифицированный скрипт?Когда вы запускаете это, пожалуйста, установите notes и headers.

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

var payloadtwo = {
  "event": [ // or "Event"
    {
      "summary": notes,
      "dtstart": "2018-11-07T12:00:00:00.000-04",
      "dtend": "2018-11-09T12:00:00:00.000-04",
    }
  ]
};
var optionstwo = {
  'method': 'post',
  'contentType': 'application/json',
  'payload': JSON.stringify(payloadtwo),
  'headers': headers,
  'muteHttpExceptions': true,
};
var res = UrlFetchApp.fetch("https://api.sling.is/v1/shifts/sync", optionstwo);
Logger.log(res)

Примечание:

  • Если ошибка возникает, пожалуйста,измените значение с 'payload': JSON.stringify(payloadtwo), на 'payload': payloadtwo, и запустите его снова.

Я не мог попытаться проверить, потому что у меня нет учетной записи.Так что если в этом скрипте происходит ошибка, пожалуйста, сообщите мнеЯ хотел бы подумать о других точках модификации.

Редактировать 1:

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

var payloadtwo = [
  {
    "summary": notes,
    "dtstart": "2018-11-07T12:00:00:00.000-04",
    "dtend": "2018-11-09T12:00:00:00.000-04",
  }
];
var optionstwo = {
  'method': 'post',
  'contentType': 'application/json',
  'payload': JSON.stringify(payloadtwo), // or payloadtwo
  'headers': headers,
  'muteHttpExceptions': true,
};
var res = UrlFetchApp.fetch("https://api.sling.is/v1/shifts/sync", optionstwo);
Logger.log(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...