Создание группы с API каталога Admin SDK в Google Apps Script не работает «При отправке формы»

#google-apps-script #oauth-2.0 #google-apps #google-admin-sdk #google-directory-api

#google-apps-script #oauth-2.0 #google-приложения #google-admin-sdk #google-directory-api

Вопрос:

Я прочитал все соответствующие страницы в документации Admin ADK Directory API и несколько вопросов по stackoverflow, и я все еще застрял.

Я являюсь суперадминистратором своего домена Google Apps, и я хочу, чтобы пользователи в моем домене могли создавать свои собственные группы Google. Я создал форму Google, в которой пользователь указывает имя и адрес электронной почты группы. Затем в таблице ответов Google Form есть триггер «При отправке формы», который вызывает мой код для создания группы.

Этот код работает, когда я запускаю createGroupTest() из редактора сценариев. Он немедленно создает группу в моем домене Google Apps.

Этот код не работает, когда триггер «При отправке формы» запускает onFormSubmit(e) функцию. Я получаю электронное письмо из catch(e) высказывания Exception: Failed to authenticate for service: Groups .

Кто-нибудь знает, что заставляет аутентификацию oauth работать из редактора сценариев, но не при вызове функцией onFormSubmit ?

 function onFormSubmitTest() {
 
  var t = new Date();
  t = t.getTime();
  
  onFormSubmit([t, "AAA Test Group "   t], ["aaa.testgroup."   t   "@mydomain.com"], ["me@mydomain.com"]);
  
}

var consumerKey = "mydomain.com";
var consumerSecret = "xxxxxxxxxxxxxxxxxxxxxxxx";
var domainName = "mydomain.com";

function onFormSubmit(e) {
  
  var timestamp  = e.values[0];
  var groupName  = e.values[1];
  var groupEmail = e.values[2];
  var owner      = e.values[3];
  
  owner = owner.split("@")[0];
  
  var description = 'test';
  
  var requestBody = {email: groupEmail, name: groupName, description: description};
             
  var scope = "https://www.googleapis.com/auth/admin.directory.group";
  
  var fetchArgs                = googleOAuth_("Groups", scope);
  fetchArgs.method             = "POST";
  fetchArgs.contentType        = "application/json";
  fetchArgs.payload            = JSON.stringify(requestBody);
  fetchArgs.muteHttpExceptions = true;
   
  var url = 'https://www.googleapis.com/admin/directory/v1/groups?key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
  
  UrlFetchApp.fetch(url, fetchArgs);

}
 

function googleOAuth_(name,scope) {
  var oAuthConfig = UrlFetchApp.addOAuthService(name)
  oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope=" scope);
  oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
  oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
  oAuthConfig.setConsumerKey(consumerKey);
  oAuthConfig.setConsumerSecret(consumerSecret);
  return {oAuthServiceName:name, oAuthUseToken:'always'};
}
  

Комментарии:

1. Этот код все еще действителен? Требуется ли для этого просто ключ в консоли разработчика или требуется oauth2? Не могли бы вы дать несколько инструкций по этому поводу?

2. @Riccardo Да, это все еще действует в 2021 году и все еще используется в моем коде. Он использует библиотеку сценариев OAuth2 для приложений, которая активно поддерживается командой Google Apps Script . googleOAuth_ был взят из этой библиотеки, но вам просто нужно добавить библиотеку, вам не нужно добавлять функцию в свой собственный код.

Ответ №1:

Я понял это: мне не удалось включить расширение домена в groupEmail строку (потому что моя форма Google запрашивает у пользователя только имя электронной почты группы без расширения домена).