Comment ajouter un lien "Modifier la réponse" aux e-mails Google Forms?
J'ai un simple formulaire Google qui collecte des données et, à L'aide D'AppScript, envoie des e-mails de confirmation aux utilisateurs qui le remplissent. Après que l'utilisateur ait soumis le formulaire, lors de la confirmation, il verra un lien pour modifier sa réponse.
Je voudrais inclure ce lien dans l'e-mail de confirmation (pour le moment, il n'apparaît que sur la page.) Comment puis-je obtenir L'URL pour modifier une réponse soumise?
Je suis en mesure d'obtenir le lien vers le formulaire via SpreadsheetApp.getActiveSpreadsheet().getFormUrl()
. Il me donne le format suivant: https://docs.google.com/a/domain.com/spreadsheet/viewform?formkey=<formKey>
Le lien n'inclut cependant pas la touche edit, qui est requise pour que les utilisateurs puissent modifier leur réponse. L'URL attendue devrait ressembler à ceci: https://docs.google.com/a/domain.com/spreadsheet/viewform?formkey=<formKey>&edit=<editKey>
Merci pour l'aide à l'avance!
- K
Édité:
Ajout d'une demande de fonctionnalité à ce sujet: http://code.google.com/p/google-apps-script-issues/issues/detail?id=1345&thanks=1345&ts=1337773007
9 réponses
La réponse que cela n'a pas été possible par @Henrique Abreu était vraie jusqu'à très récemment. Google semble avoir ajouté getEditResponseUrl()
à la classe FormResponse et avec cela, il devient possible d'utiliser du code comme celui-ci pour obtenir l'URL d'édition pour un tas de formulaires existants:
function responseURL() {
// Open a form by ID and log the responses to each question.
var form = FormApp.openById('1gJw1MbMKmOYE40Og1ek0cRgtdofguIrAB8KhmB0BYXY'); //this is the ID in the url of your live form
var formResponses = form.getResponses();
for (var i = 0; i < formResponses.length; i++) {
var formResponse = formResponses[i];
Logger.log(formResponse.getEditResponseUrl());
}
}
Pour le faire envoyer automatiquement à l'utilisateur au fur et à mesure qu'il répond, on peut ajouter un déclencheur sur le formulaire submit. Comme la situation avec laquelle je travaille n'exige pas que les gens se connectent avec un compte apps que je n'ai pas l'accès à une adresse e-mail automatiquement, donc j'ai une question texte qui capture l'adresse e-mail de l'utilisateur.
Il pose la question de savoir si l'édition des formulaires est ou non ce que vous voulez. J'ai été aux prises avec les avantages relatifs de l'édition d'une réponse existante ou de l'envoi d'un formulaire pré rempli en utilisant toPrefilledUrl()
pour que je puisse voir comment les choses ont changé au fil du temps. Je suppose que cela revient à la valeur que le suivi de cela vous fournira.
Si vous utilisez Google Apps, vos intervenants peuvent modifier les réponses du formulaire.
--modifier ceci est maintenant possible. Voir les autres réponses.
Après que l'utilisateur ait soumis le formulaire, lors de la confirmation, il/elle verra un lien vers modifier sa réponse. Je voudrais inclure ce lien dans l'e-mail de confirmation
Ce n'est pas possible, point final.
Ce lien n'est accessible nulle part et on ne peut pas le deviner/le construire. Mais, il y a des solutions de contournement qui pourraient vous convenir (certains ont suggéré ici que je vais reformuler), par exemple
Envoyer un lien de formulaire par-rempli et demandez à l'utilisateur de le renvoyer. Vous auriez besoin d'avoir une sorte de champ de contrôle (par exemple le nom d'utilisateur), de sorte que vous pouvez connaître et supprimer/ignorer ses anciennes soumissions. Éventuellement automatiquement via un script.
Vous pouvez également développer et publier une interface graphique apps-script et envoyer un lien vers ce script apps plus un paramètre que vous générez où vous pouvez déterminer quelle entrée vous devez modifier. L'inconvénient de cette approche est qu'il est un peu lourd et exagéré de re-concevoir le formulaire entier sur le Script des applications. Mais encore une fois, il fonctionne.
Enfin, vous pouvez ouvrir une "demande D'amélioration" sur Apps Script issue tracker et attendre jusqu'à ce Qu'ils et Google Spreadsheet/Forms équipe se réunissent pour développer une solution.
Voici un billet de blog clair qui vous montre comment le faire étape par étape et explique ce qui se passe sous le capot pour les débutants AppsScripts:
Http://securitasdato.blogspot.com/2014/11/sending-confirmation-emails-from-google.html
Alors que collectivement, vous pouvez y arriver à partir de toutes les excellentes réponses fournies ici, le script de ce post a le mieux fonctionné pour moi.
Cela - je n'ai pas essayé, mais je cherchais la même chose il y a un moment et remarqué.
De cette page https://developers.google.com/apps-script/reference/forms/
Le Code à partir de là contient ceci:
Logger.log('Published URL: ' + form.getPublishedUrl());
Logger.log('Editor URL: ' + form.getEditUrl());
Jon
Génial, le script fonctionne! Grâce.
Pour les débutants, comme moi: collez simplement le code d'andre pour la fonction SendConfirmationMail(e)
dans l'éditeur de code de votre feuille de calcul et définissez le déclencheur 'on form submit' pour l'exécuter. C'est dans l'éditeur de script de feuille de calcul, pas dans l'éditeur de script de formulaire.
Vous devez pirater certaines valeurs. Lisez le code. Pour moi, la confusion était la nécessité de remplacer le ********COLUMN SEQUENCE EX 14******
par le numéro de colonne de la feuille où vous voulez que les URL d'édition finissent. J'ai utilisé 39 qui est une colonne de plus que mon formulaire était à l'aide de jusqu'à.
Cependant, j'ai des problèmes d'exécution dans cette partie:
for (var i in headers) {
value = e.namedValues[headers[i]].toString();
// Do not send the timestamp and blank fields
if ((i !== "0") && (value !== "")) {
message += headers[i] + ' :: ' + value + "<br>";
}
}
Je ne sais pas pourquoi, mais je l'ai remplacé par ceci:
for (var keys in columns) {
var key = columns[keys];
if ( e.namedValues[key]) {
message += key + ' :: '+ e.namedValues[key] + "<br>";
}
}
Fonctionne pour moi.
Essayez ceci: (les crédits ne sont pas pour moi, car je fusionne deux solutions de la troisième partie)
Source: envoyer un e-mail de Confirmation avec Google Forms
/* Send Confirmation Email with Google Forms */
function Initialize() {
var triggers = ScriptApp.getScriptTriggers();
for (var i in triggers) {
ScriptApp.deleteTrigger(triggers[i]);
}
ScriptApp.newTrigger("SendConfirmationMail")
.forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
.onFormSubmit()
.create();
}
function SendConfirmationMail(e) {
var form = FormApp.openById('***YOUR FORM CODE***');
//enter form ID here
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('***SHEET NAME***');
//Change the sheet name as appropriate
var data = sheet.getDataRange().getValues();
var urlCol = ***************COLUMN SEQUENCE EX 14******; // column number where URL's should be populated; A = 1, B = 2 etc
var responses = form.getResponses();
var timestamps = [], urls = [], resultUrls = [], url;
for (var i = 0; i < responses.length; i++) {
timestamps.push(responses[i].getTimestamp().setMilliseconds(0));
urls.push(responses[i].getEditResponseUrl());
}
for (var j = 1; j < data.length; j++) {
resultUrls.push([data[j][0]?urls[timestamps.indexOf(data[j][0].setMilliseconds(0))]:'']);
url = resultUrls[i-1]
}
sheet.getRange(2, urlCol, resultUrls.length).setValues(resultUrls);
try {
var ss, cc, sendername, subject, headers;
var message, value, textbody, sender;
// This is your email address and you will be in the CC
cc = Session.getActiveUser().getEmail();
// This will show up as the sender's name
sendername = "****YOUR NAME******";
// Optional but change the following variable
// to have a custom subject for Google Docs emails
subject = "Registro de Oportunidade submetido com sucesso";
// This is the body of the auto-reply
message = "Nós recebemos seu registro de oportunidade.<br>Muito Obrigado!<br><br>";
ss = SpreadsheetApp.getActiveSheet();
headers = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0];
// This is the submitter's email address
sender = e.namedValues["********COLUMN NAME OF DESTINATION E-MAIL************"].toString();
for (var i in headers) {
value = e.namedValues[headers[i]].toString();
// Do not send the timestamp and blank fields
if ((i !== "0") && (value !== "")) {
message += headers[i] + ' :: ' + value + "<br>";
}
}
message += "<br>Link to edit" + ' :: ' + url + "<br>";
textbody = message.replace("<br>", "\n");
GmailApp.sendEmail(sender, subject, textbody,
{cc: cc, name: sendername, htmlBody: message});
} catch (e) {
Logger.log(e.toString());
}
}
Vous pouvez essayer de remplir un formulaire avec les valeurs données à partir de cette adresse e-mail que supprimer les réponses précédentes ...
Ce n'est pas une belle façon mais cela peut fonctionner ...
Je ne pense pas que nous ayons accès à cette valeur via L'API Spreadsheet (ce qui signifie que le Script Apps ne l'a pas non plus). Le plus proche auquel je peux penser serait la valeur "key" dans ce flux . Vous auriez à tester pour savoir si. Il n'y a pas d'autre alternative que d'accéder directement à L'API de feuille de calcul. Donc, d'abord, vous devez obtenir la dernière ligne via l'api use ?reverse=true&max-results=1