Вызов POST-запроса через Hangouts API из консоли Google Scripts

Я создал бота через Hangouts API и теперь хочу отправить POST запрос в Google Calendar API (Freebusy: query) через консоль Google Scripts:

function testPOST() {

  var url = "https://www.googleapis.com/calendar/v3/freeBusy";

  var datetimeMin = "2018-02-22T18:00:00.000Z";
  var datetimeMax = "2018-02-22T20:00:00.000Z";

  var payload =
    {
      "timeMin": datetimeMin,
      "timeMax": datetimeMax,
      "timeZone": "Europe/Paris",
      "groupExpansionMax": 2,
      "calendarExpansionMax": 5,
      "items": [
        {
          //I read, that Gmail address is your default calendar ID
          "id": "%[email protected]%"
        }
      ]
    }

  var options =
    {
      "method": "POST",
      "payload": payload,
      "followRedirects": true,
      "muteHttpExceptions": true
    };

  var result = UrlFetchApp.fetch(url, options);

  if (result.getResponseCode() == 200) {

    var params = JSON.parse(result.getContentText());

    Logger.log(params.name);
    Logger.log(params.blog);

  } else {
    Logger.log(result);
  }
}

Во время выполнения result равно null или undefined, консоль Google показывает этот объект, но он пуст. Я проверил, календарь указанного адреса электронной почты по умолчанию является общедоступным.

Может кто-нибудь придумать, как отправить POST-запрос из Hangouts API через консоль Google Scripts?




Ответы (2)


Конечная точка API календаря, вероятно, ожидает, что полезная нагрузка будет строкой в ​​кодировке JSON. Итак, обновите свой объект параметров следующим образом:

var options = {
    "method":"POST",
    "contentType":"application/json",
    "payload":JSON.stringify(payload)
}
person TheAddonDepot    schedule 18.07.2018
comment
Верно, но возникла еще одна проблема - я забыл предоставить действующий ключ API. - person Mike B.; 18.07.2018

На самом деле с кодом было несколько проблем:

  1. url не содержал правильный ключ API Календаря Google

  2. Результат не был проанализирован в JSON

Правильный код:

function testPOST() {

    var url = 'https://www.googleapis.com/calendar/v3/freeBusy?key=%GOOGLE_CALENDAR_API_KEY%';

    var datetimeMin = "2018-02-22T18:00:00.000Z";
    var datetimeMax = "2018-02-22T20:00:00.000Z";

    var payload = {
            "timeMin": datetimeMin,
            "timeMax": datetimeMax,
            "timeZone": "Europe/Paris",
            "groupExpansionMax": 2,
            "calendarExpansionMax": 5,
            "items": [
                {
                    "id": "%[email protected]%"
                }
            ]
        }

    var options = {
            'method': "POST",
            "payload": payload,
            "muteHttpExceptions": true,
            "payload": JSON.stringify(payload),
            "contentType": 'application/json',
            "timeZone": "CEST",
        };

    var result = UrlFetchApp.fetch(url, options);

    Logger.log(result);

    if (result.getResponseCode() == 200) {

        var params = JSON.parse(result.getContentText());

        Logger.log(params.name);
        Logger.log(params.blog);

    } else {
        Logger.log(result);
    }
}
person Mike B.    schedule 18.07.2018