Какие области действия подходят для запуска запроса в API скриптов приложений - PullRequest
2 голосов
/ 12 марта 2020

Я использую Apps Script API для запуска функции с учетными данными учетной записи службы. Я добавил все необходимые области в API ресурсов Ресурса https://developers.google.com/apps-script/api/reference/rest/v1/scripts/run.

Но когда я запустил этот скрипт ниже, он потерпел неудачу.

function run(){

 var CREDENTIALS = {
  "private_key": "Your Private key",
  "client_email": "Your Client email",
  "client_id": "Your Client ID",
  "user_email": "Your Email address",
  "api_key": "Your API key"
 };
 var service = getService(CREDENTIALS.client_email,CREDENTIALS.private_key);
  service.reset();
  if (service.hasAccess()) {
    var url = 'https://script.googleapis.com/v1/projects/[SCRIPT ID]:run';
    var body = {
      "function": [FUNCTION NAME]
    };
    var params = {
      headers: {
        Authorization: 'Bearer ' + service.getAccessToken()
      },
      method: 'post',
      playload : JSON.stringify(body),
      contentType: 'application/json',
      muteHttpExceptions: true
    };
    var response = UrlFetchApp.fetch(url, params);
    Logger.log(response);
  }
  else {
    Logger.log(service.getLastError());
  }
}

function getService(email, privateKey) {
  return OAuth2.createService('Service Account')
      // Set the endpoint URL.
      .setTokenUrl('https://oauth2.googleapis.com/token')

      // Set the private key and issuer.
      .setPrivateKey(privateKey)
      .setIssuer(email)

      // Set the name of the user to impersonate. This will only work for
      // Google Apps for Work/EDU accounts whose admin has setup domain-wide
      // delegation:
      // https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority
      .setSubject([USER EMAIL])

      // Set the property store where authorized tokens should be persisted.
      .setPropertyStore(PropertiesService.getScriptProperties())

      // Set the scope. This must match one of the scopes configured during the
      // setup of domain-wide delegation.
      .setScope('https://www.googleapis.com/auth/script.external_request');
}

У меня 404 Ошибка, и я думаю, что это происходит из списка областей. Поэтому я не могу запустить сценарий, развернутый как исполняемый файл API с маркером OAuth2.0. Какие области я должен выбрать для запуска функции через HTTP-запрос?

Ответы [ 3 ]

2 голосов
/ 12 марта 2020
  • Вы хотите использовать API сценариев приложений с учетной записью службы.
  • Вы хотите добиться этого с помощью скрипта Служб Google.

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

Проблема и обходное решение:

К сожалению, на данном этапе метод scripts.run в Apps Script API не может использоваться с Сервисный аккаунт. Официальный документ гласит следующее. Об этом, когда я проверял это, я мог подтвердить, что метод scripts.run в Apps Script API не может использоваться с учетной записью службы.

Предупреждение: API скриптов Apps не работает с учетные записи служб.

Ситуация, описанная выше, как обходной путь, как насчет использования токена доступа, полученного OAuth2? Чтобы использовать API сценариев приложений с OAuth2, необходимо связать проект облачной платформы с проектом сценариев Google Apps. Об этом вы можете увидеть поток для их связи на здесь .

Примечание:

Ссылки:

Если это не то направление, которое вы хотите, я приношу свои извинения.

Добавлено:

  • Вы хотите, чтобы несколько пользователей запускали скрипт как владелец, которым вы являетесь.

Начиная с вашего ответа , я мог бы понять, как описано выше. Когда Apps Script API используется для вышеуказанной ситуации, учетные данные требуются для предоставления каждому пользователю. Когда каждый пользователь использует токен доступа, полученный из ваших учетных данных, ваша цель может быть достигнута. Но я не могу рекомендовать это. Поэтому в вашем случае я бы хотел использовать веб-приложения для достижения вашей цели. Поток выглядит следующим образом.

1. Подготовьте сценарий.

Пожалуйста, подготовьте сценарий. Например, на текущем этапе вы хотите, чтобы пользователи запускали функцию myFunction(), поместите следующий пример сценария.

function doGet(e) {
  var values = e; // When you want to give the values by requesting, you can use the event object like "e".
  var res = myFunction(values);
  return ContentService.createTextOutput(res);
}
  • В этом случае используется метод GET. Если вы хотите запустить только функцию, вы можете использовать этот скрипт. Если вы хотите запустить функцию, предоставляя большие данные, вы можете использовать doPost() вместо doGet().

2. Развертывание веб-приложений.

  1. В редакторе сценариев откройте диалоговое окно с помощью «Publi sh» -> «Развернуть как веб-приложение».
  2. Выберите «Me " for " Запустите приложение как: ".
    • При этом сценарий запускается от имени владельца.
    • Здесь, если задано значение «Любой», сценарий запускается от имени каждого пользователя. В этом случае требуется предоставить общий доступ к сценарию каждому пользователю. И токен доступа требуется использовать. Пожалуйста, будьте осторожны.
  3. Выберите "Любой, даже анонимный" для "У кого есть доступ к приложению:" .
    • В этом случае токен доступа не требуется запрашивать. Я думаю, что в качестве тестового примера я рекомендую этот параметр.
    • Конечно, вы также можете использовать токен доступа. В это время установите «Anyone» .
  4. Нажмите кнопку «Развернуть» как новую «Project version».
  5. Автоматически открывать диалоговое окно «Требуется авторизация».
    1. Нажмите «Просмотреть разрешения».
    2. Выберите собственную учетную запись.
    3. Нажмите «Дополнительно» в разделе «Это приложение не подтверждено».
    4. Нажмите " Go to ### имя проекта ### (небезопасно) "
    5. Нажмите кнопку" Разрешить ".
  6. Нажмите" ОК ".
  7. Скопируйте URL-адрес веб-приложений. Это как https://script.google.com/macros/s/###/exec.
    • Когда вы изменили скрипт Google Apps, пожалуйста, повторно разверните его как новую версию. Этим измененный сценарий отражается в веб-приложениях. Пожалуйста, будьте осторожны с этим.

3. Запустите функцию с помощью веб-приложений.

Это пример команды curl для выполнения myFunction с веб-приложениями. Пожалуйста, установите URL своего веб-приложения. При указанных выше настройках веб-приложений каждый пользователь может получить доступ с помощью следующей команды curl.

curl -GL \
  -d "key=value" \
  "https://script.google.com/macros/s/###/exec"
  • Когда в качестве параметра запроса, как указано выше, используется key=value, в doGet(e) вы можете получить value с использованием e.parameter.key.

Ссылки:

2 голосов
/ 12 марта 2020

В вашей функции run для объекта params вы должны иметь payload, а не playload .

0 голосов
/ 12 марта 2020

Вы можете развернуть скрипт как веб-приложение. Для этого от go до Publish > Deploy as web app. Установите для поля Execute the app as: значение Me (youremail). Таким образом, вы можете поделиться сценарием как ссылкой браузера, и любой пользователь запустит сценарий с вашими учетными данными.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...