отправка формы через скрипт приложений Google и сбор электронной почты - PullRequest
0 голосов
/ 30 апреля 2018

В течение последних нескольких лет мы использовали скрипт Google Apps с Сайтами Google и Google drive для проведения ежегодной встречи нескольких сотен делегатов. Это G-suite для некоммерческого домена, которым мы владеем.

Я думаю, что Google, возможно, что-то изменил, так как код, который работал в прошлом году, не работает в этом году.

Проблема у меня возникает, когда я пытаюсь отправить форму с помощью кода из скрипта Apps. Если форма настроена на сбор сообщений электронной почты пользователей для ответов, то при попытке отправки с помощью скрипта приложений происходит сбой с ошибкой:

"Извините, ответ на форму не может быть отправлен. Пожалуйста, подождите несколько минут и повторите попытку." Ошибка указывает на строку «отправить» в коде. ИЛИ иногда код выполняется, но все равно ничего не появляется на листе или в «ответах» в самой форме.

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

Я настроил тестовую форму, прикрепил ее к новому листу Google для ответов и вставил в свой код:

function codeVoteDoVoteByForm()
{

  // Get the Yes/No Google form
  var myForm = FormApp.openById('1eJ6Wu63lXHkPMsIUPS5ZIAmZ_hGg18XAFLD5QpvqSSU')

  // Get a list of questions on it
  var questions = myForm.getItems()

  // Get question 0 (only one on this form) and mark it as multiple choice
  var qt = questions[0].asMultipleChoiceItem()

  // Set the users vote
  var qr = qt.createResponse("I am here")

  //Create the response
  var FormResponse = myForm.createResponse()
  var testemail = FormResponse.getRespondentEmail()
  // Submit the response
  FormResponse.withItemResponse( qr );
  var myResponse = FormResponse.submit()

  var responseString = myResponse.getTimestamp()
  return "Vote recorded at " + responseString

}

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

Есть мысли?

1 Ответ

0 голосов
/ 26 июля 2018

Я думаю, что проблема в том, что вы отправляете ответ на форму, в которой собраны электронные письма или авторизованные ограничения пользователя, без добавления электронного письма или аутентификации пользователя. К сожалению, я думаю, что невозможно отправить такую ​​информацию с помощью API, поэтому в моем случае:

  • Я отключил ограничения, следующий
  • Я отправил ответ на форму, и наконец
  • Я снова включаю ограничения

    //disable restrictions temporaly
    form.setLimitOneResponsePerUser(false);
    form.setRequireLogin(false);
    form.setCollectEmail(false);
    
    var questions = form.getItems();
    
    var formResponse = form.createResponse();
    
    for (var i=0; i<questions.length; i++){
    
      var question = questions[i].asMultipleChoiceItem();
      var response = question.createResponse(correctAnswers[i]);
    
      formResponse.withItemResponse(response);
    }
    
    formResponse.submit();
    
    form.setLimitOneResponsePerUser(true);
    form.setRequireLogin(true);
    form.setCollectEmail(true); 
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...