2012-05-22 7 views
23

Ho un semplice modulo Google che raccoglie i dati e, tramite AppScript, invia e-mail di conferma agli utenti che li compilano. Dopo che l'utente ha inviato il modulo, alla conferma, vedrà un link per modificare la sua risposta.Come aggiungere il link "Modifica risposta" alle email di Google Forms?

Vorrei aggiungere questo link come parte dell'email di conferma (in questo momento, viene visualizzato solo nella pagina.) Come posso ottenere l'URL per modificare una risposta inviata?

Sono in grado di ottenere il collegamento al modulo tramite SpreadsheetApp.getActiveSpreadsheet().getFormUrl(). Mi dà il seguente formato: https://docs.google.com/a/domain.com/spreadsheet/viewform?formkey=<formKey>

Il collegamento tuttavia non include la chiave di modifica, che è richiesta agli utenti per modificare la sua risposta. L'URL previsto dovrebbe essere simile a questo: https://docs.google.com/a/domain.com/spreadsheet/viewform?formkey=<formKey>&edit=<editKey>

Grazie per l'aiuto in anticipo!

-K

Modificato:

Aggiunta una richiesta di funzionalità su questo: http://code.google.com/p/google-apps-script-issues/issues/detail?id=1345&thanks=1345&ts=1337773007

risposta

18

La risposta che questo non era possibile per @Henrique Abreu era vera fino a poco tempo fa. Google sembra aver aggiunto getEditResponseUrl() alla classe FormResponse e che diventa possibile utilizzare il codice come questo per ottenere l'URL per la modifica per un mucchio di forme esistenti:

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()); 
} 
} 

Per rendere più e-mail automaticamente l'utente come essi rispondono si potrebbe aggiungere un trigger sul modulo submit. Poiché la situazione con cui sto lavorando non richiede l'accesso alle persone con un account di app, non ho accesso a un indirizzo email automaticamente, quindi ho una domanda di testo che cattura l'indirizzo email dell'utente.

Fa la domanda se la modifica dei moduli è o meno ciò che si desidera. Sono stato alle prese con i vantaggi relativi alla modifica di una risposta esistente o all'invio di un modulo precompilato utilizzando toPrefilledUrl() in modo da poter vedere come le cose sono cambiate nel tempo. Immagino che questo dipenda dal valore che ti fornirà il monitoraggio di questo.

+1

Questo funziona completamente, e io [lo ho dettagliato in un modo leggermente diverso qui] (http://stackoverflow.com/a/42211883/26510) –

-1

Non credo che abbiamo accesso a ciò che il valore è tramite l'API Spreadsheet (che significa Apps Script non ce l'ha neanche). Il più vicino che posso pensare sarebbe il valore "chiave" in this feed. Dovresti testare per scoprirlo però. Non c'è altra alternativa che io conosca diversa dall'accesso direttamente all'API di Spreadsheet. Quindi, prima, dovreste ottenere l'ultima riga tramite l'API utilizzare ?reverse=true&max-results=1

0

si può provare a compilare un modulo con i valori indicati da tale indirizzo e-mail di cancellare le risposte precedenti ...

non è un modo bello ma può funzionare ...

2

--edit questo è ora possibile. Vedi altre risposte.

Dopo utente invia il modulo, sulla conferma, s/egli vedrà un link al modificare il suo/la sua risposta. Vorrei includere tale collegamento come parte dell'e-mail di conferma

Questo non è possibile, punto.

Tale collegamento non è accessibile da nessuna parte e non è possibile indovinarlo/costruirlo. Ma, ci sono alcuni soluzioni alternative che potrebbero essere adatte a te (alcuni suggeriscono qui che ripeterò la frase), ad es.

Inviare un collegamento modulo popolato e chiedere all'utente di inviarlo nuovamente. Dovresti avere una sorta di campo di controllo (ad esempio il nome utente), in modo da poter conoscere ed eliminare/ignorare i suoi precedenti invii. Forse automaticamente tramite uno script.

È inoltre possibile sviluppare e pubblicare una GUI di script-app e inviare un collegamento a questo script di app oltre a un parametro da generare dove è possibile determinare quale voce modificare. Il lato negativo di questo approccio è che è alquanto ingombrante e eccessivo per riprogettare l'intero modulo su Apps Script. Ma ancora, funziona.

Finalmente, è possibile aprire una "Richiesta di miglioramento" su Apps Script issue tracker e attendere fino a quando essi e il team di Google Spreadsheet/Forms si uniscono per sviluppare una soluzione.

+0

Grazie. Ho creato una richiesta di funzionalità. Spero che questo vada attraverso ... Diventa un po 'fastidioso lol. http://code.google.com/p/google-apps-script-issues/issues/detail?id=1345&thanks=1345&ts=1337773007 – DashK

+0

Sì, lo spero anch'io. Ma se questo è un po 'critico per te, ti consiglio di non aspettare e di andare con qualsiasi soluzione. Dalla mia esperienza, richieste come questa possono richiedere oltre un anno per "passare attraverso". –

1

Questo aiuto - non l'ho provato ma stavo cercando la stessa cosa qualche tempo fa e ho notato questo.

Da questa pagina di codice https://developers.google.com/apps-script/reference/forms/

da lì contiene questo:

Logger.log('Published URL: ' + form.getPublishedUrl()); 
Logger.log('Editor URL: ' + form.getEditUrl()); 

Jon

1

Try This: (crediti non è per me, perché io unire due soluzioni della terza parte)

Fonte: Send Confirmation Email with 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()); 
    } 

} 
+0

C'è un problema con il codice in questa risposta. Vedi [questa altra risposta] (http://stackoverflow.com/a/22434475/1595451). –

1

Grande, script funziona! Grazie.

Per i neofiti, come me: basta incollare il codice di andre per la funzione SendConfirmationMail(e) nell'editor di codice del foglio di calcolo e impostare il trigger "su form submit" per eseguirlo. Questo è nell'editor di script di fogli di calcolo, non nell'editor di script di form.

È necessario modificare alcuni valori. Leggi il codice Per me la confusione era la necessità di sostituire lo ********COLUMN SEQUENCE EX 14****** con il numero della colonna del foglio in cui si desidera che gli URL di modifica finiscano. Ho usato 39 che è una colonna in più rispetto al mio modulo stava usando.

Tuttavia, ho avuto probs runtime in questa parte:

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>"; 
      } 
     } 

so perché, ma ho sostituito con questo:

for (var keys in columns) { 
     var key = columns[keys]; 
     if (e.namedValues[key]) { 
     message += key + ' :: '+ e.namedValues[key] + "<br>"; 
     } 
    } 

funziona per me.

+0

Dovrebbero essere usate le intestazioni 'invece di' colonne'. –

2

Ecco un post sul blog chiaro che vi mostra come fare passo dopo passo e spiega che cosa sta succedendo sotto il cofano per AppsScripts neofiti:

http://securitasdato.blogspot.com/2014/11/sending-confirmation-emails-from-google.html

Mentre collettivamente si può arrivare dal tutto le ottime risposte fornite qui, la sceneggiatura di quel post ha funzionato meglio per me.

+0

Il post sul blog di cui si parla è una grande scoperta. Grazie per aver condiviso il link qui. –

+1

contento che fosse utile! – Von

Problemi correlati