jykang
jykang

Reputation: 13

How to get google form data at onFormSubmit

I want to send some google form data to outside API using UrlFetchApp.fetch when the google form is submitted but there is no form data in event data.

  1. My script is here

     function onFormSubmit(e) {
         Logger.log(JSON.stringfy(e))
    
         UrlFetchApp.fetch('https://api.server.com/result', {
             method: 'POST',
             headers: {
                 'Content-Type': 'application/json',
             },
             payload: JSON.stringify({
               answer1 : e.response.getItemResponses()[0].getResponse(),
               answer2 : e.response.getItemResponses()[1].getResponse()
             }),
         })
     }
    
  2. I add trigger to google form

enter image description here

  1. When google form is submitted, the function, onFormSubmit is called correctly but e has no response data like below log.

     {"authMode":"FULL","response":{},"source":{},"triggerUid":"16459009"}
    

My question is

  1. Why the event of onFormSubmit doesn't have any response data(=form data)?

  2. Is there something to do more (like install other trigger?)

  3. What should I do for correct action?

Upvotes: 1

Views: 1080

Answers (1)

Tedinoz
Tedinoz

Reputation: 8102

You have an onFormSubmit trigger for a script container-bound to a Google Form and you think that your log shows that the script is not collecting any form response data.

Your log results do NOT mean that no response data was collected.

The Event Objects response contains a FormResponse object, representing the user's response to the form as a whole.

To see your form response data, add the following after your "stringify" line:


let responses = e.response.getItemResponses();
for (i = 0; i<responses.length ; i++){
  Logger.log(responses[i].getResponse())
}

UrlFetchApp.fetch - PayLoad

Suggested modification

From

payload: JSON.stringify({
           answer1 : e.response.getItemResponses()[0].getResponse(),
           answer2 : e.response.getItemResponses()[1].getResponse()
         }),

To

payload: answer1 : e.response.getItemResponses()[0].getResponse(),
         answer2 : e.response.getItemResponses()[1].getResponse()
        ,

Upvotes: 1

Related Questions