Last active
October 13, 2021 13:42
-
-
Save akash1810/640a45d5997de1d95f4a to your computer and use it in GitHub Desktop.
Google Apps Script to post a message to Slack when someone responds to a Google Form.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* ABOUT | |
* Google Apps Script to post a message to Slack when someone responds to a Google Form. | |
* | |
* Uses Slack incoming webhooks - https://api.slack.com/incoming-webhooks | |
* and FormsResponse - https://developers.google.com/apps-script/reference/forms/form-response | |
* | |
* | |
* AUTHOR | |
* Akash A <github.com/akash1810> | |
* | |
* | |
* USAGE | |
* Free to use. | |
*/ | |
// Create an incoming webhook here - https://api.slack.com/incoming-webhooks | |
var POST_URL = "https://hooks.slack.com/services/XXXX/XXXX/XXXX"; | |
function onSubmit(e) { | |
var response = e.response.getItemResponses(); | |
var fields = [ | |
{"title": "From", "value": e.response.getRespondentEmail()}, | |
{"title": "When", "value": e.response.getTimestamp()} | |
]; | |
for (var i = 0; i < response.length; i++) { | |
var question = response[i].getItem().getTitle(); | |
var answer = response[i].getResponse(); | |
fields.push({"title": question, "value": answer}); | |
} | |
var summaryAttachment = { | |
"fallback": FormApp.getActiveForm().getTitle(), | |
"pretext": "<!channel> New response submitted to: " + FormApp.getActiveForm().getTitle(), | |
"title": FormApp.getActiveForm().getTitle() + " (responses)", | |
"title_link": "https://docs.google.com/spreadsheets/d/" + FormApp.getActiveForm().getDestinationId(), | |
"fields": fields, | |
"color": "#393939" | |
}; | |
var responseAttachment = { | |
"fallback": FormApp.getActiveForm().getTitle(), | |
"title": "Respond via email? (mailto link)", | |
"title_link": "mailto:" + e.response.getRespondentEmail() + "?Subject=" + encodeURI(FormApp.getActiveForm().getTitle()) | |
}; | |
var options = { | |
"method" : "post", | |
"payload": JSON.stringify({ | |
"username": "Feedback", | |
"icon_emoji": ":speech_balloon:", | |
"attachments": [summaryAttachment, responseAttachment] | |
}) | |
}; | |
UrlFetchApp.fetch(POST_URL, options); | |
}; |
Nice script. How would you modify it to only apply to certain scripts? I'm not sure where to install the getId() method, whether as a variable or somehow nested in the getItemResponses method?
This is my experience as a beginner :
TypeError: Cannot read property "response" from undefined. (line 21, file "Code")
Solution : Ensure Google Sheet attached to the form for responses, in the Form Response you can click spreadsheet logo to create spreadsheet
Also :
- Ensure that you create the script inside the form,
- Ensure to create a trigger (from the script menu > Current Trigger > add Trigger
I have questions, my forms is using checkbox, it seems the answer is not posted on slack, can you help me? @akash1810 ?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This script is very elegant and works beautifully. However, Google Forms just released a feature where you can set a questions as 'file upload' and accept a file. How can I use this script to handle the file as a 'value' to pass to Slack? I've used the Logger to debug and I can see that the 'answer' variable can hold the file submitted through Google Forms, and pushes it to the 'fields' variable. However, it doesn't get passed through to Slack. Any suggestions to handle the new file upload question?