Как создать публикацию с помощью Google My Business API — скрипт Google Apps

Я не могу понять, почему я получаю сообщение об ошибке ниже, когда пытаюсь создать сообщение с помощью GMB API в скрипте Google Apps. Я следую этой документации https://developers.google.com/my-business/content/posts-data

{

 "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.mybusiness.v4.ValidationError",
        "errorDetails": [
          {
            "code": 2,
            "field": "summary",
            "message": "Standard local post must have at least a media or summary."
          }
        ]
      }
    ]
  }
}

Вот мой сценарий

function callToActionPost() {
  var url = 'https://mybusiness.googleapis.com/v4/accounts/123/locations/456/localPosts';


  var options = {
    headers: { Authorization: "Bearer " + getGMBService_().getAccessToken() },
    method: 'POST',
    muteHttpExceptions: true,
    languageCode: "en",
    topicType: "STANDARD",
    summary: "New Release!",
    callToAction: {
      actionType: "ORDER",
      url: "https://www.artivem.com/"
    },
    media: {
      sourceUrl: "https://untappd.akamaized.net/photos/2021_04_16/ccff4c358e362ce3c4835fcc94549a8f_640x640.jpg",
      mediaFormat: "PHOTO"
    }
  };

  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response);
}

Я попробовал следующую адаптацию, но она не сработала

function callToActionPost() {
      var url = 'https://mybusiness.googleapis.com/v4/accounts/123/locations/456/localPosts';
    
    
      var options = {
        headers: { Authorization: "Bearer " + getGMBService_().getAccessToken() },
        method: 'POST',
        muteHttpExceptions: true,
        payload: {
        languageCode: "en",
        topicType: "STANDARD",
        summary: "New Release!",
        callToAction: {
          actionType: "ORDER",
          url: "https://www.artivem.com/"
        },
        media: {
          sourceUrl: "https://untappd.akamaized.net/photos/2021_04_16/ccff4c358e362ce3c4835fcc94549a8f_640x640.jpg",
          mediaFormat: "PHOTO"
        }
      }
      };
    
      var response = UrlFetchApp.fetch(url, options);
      Logger.log(response);
    }

Заранее спасибо!


person Efficient Small Business    schedule 24.04.2021    source источник


Ответы (1)


Объект запроса должен войти в полезную нагрузку. полезная нагрузка является параметром файла options.

function callToActionPost() {
  var url = 'https://mybusiness.googleapis.com/v4/accounts/123/locations/456/localPosts';

  var payload = {
    "languageCode": "en-US",
    "summary": "New Release!",
    "callToAction": {
      "actionType": "ORDER",
      "url": "https://www.artivem.com/"
    },
    "media": [{
      "sourceUrl": "https://untappd.akamaized.net/photos/2021_04_16/9999999999999999.jpg",
      "mediaFormat": "PHOTO"
    }]
  }
  
  var options = {
    headers: { Authorization: "Bearer " + getGMBService_().getAccessToken() },
    method: 'POST',
    muteHttpExceptions: true,
    'contentType': 'application/json',
    'payload' : JSON.stringify(payload)
  };

  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response);
  
  if (response.getResponseCode() !== 200) {
    console.log("Error Code: " + response.getResponseCode());
    
  }
  
}
person Alan Wells    schedule 24.04.2021
comment
Спасибо за ответ, Алан! Это то, что я пробовал в качестве своей адаптации, и это не работает. Однако это дает мне другую ошибку. Вот фрагмент ошибки для этого метода: Получены недопустимые полезные данные JSON. Неизвестное имя \summary\: Невозможно связать параметр запроса. Поле «сводка» не может быть найдено в сообщении запроса... Далее в сообщении об ошибке говорится, что каждый параметр неизвестен и недействителен. - person Efficient Small Business; 25.04.2021
comment
Следующее, что я бы попробовал, — это преобразовать полезную нагрузку в строку JSON и настроить тип контента. Смотрите обновленный ответ. - person Alan Wells; 25.04.2021
comment
Вот фрагмент ошибки, которую я получаю при преобразовании в строку: код: 400, сообщение: получена недопустимая полезная нагрузка JSON. Неизвестное имя \{\languageCode\:\en\,\topicType\:\STANDARD\,\summary\:\New Release!\,\callToAction\:{\actionType\:\ORDER\,\url\:\artivem.com\}... и вот фрагмент ошибки, которую я получаю, сохраняя его как объект: error: {код: 400, сообщение: получена недопустимая полезная нагрузка JSON. Неизвестное имя \languageCode\: невозможно связать параметр запроса. Поле 'languageCode' не может быть найдено в сообщении запроса... - person Efficient Small Business; 27.04.2021
comment
Похоже, что значение media неверно. Согласно документации, это должен быть массив объектов. И я бы поместил все имена ключей в двойные кавычки и изменил код языка на en-US. - person Alan Wells; 27.04.2021
comment
@AlanWells Как получить идентификатор учетной записи и идентификатор местоположения? - person zus; 27.04.2021