07 februari 2014

Ontvangstbevestiging voor een Google formulier

Update juni 2015:
Beste mensen, ik zie dat deze pagina nog veel bezocht wordt en dat de code wordt uitgeprobeerd.

Inmiddels is er echter een veel betere add-on beschikbaar die je al het handmatige werk uit handen neemt en beter werkt. Ik wil je dus aanbevelen om dit bericht te lezen en formMule te gaan gebruiken!

Ik heb al eerder code beschikbaar gesteld waarmee je ervoor kunt zorgen dat iemand die een Google formulier invult een afschrift krijgt, maar het kan altijd nog mooier en beter.
In deze versie worden de velden die niet worden ingevuld weggelaten. Dat geldt ook voor het tijdstempel. Belangrijk is natuurlijk wel dat je in het formulier vraagt naar het e-mail adres van de invuller, anders werkt het natuurlijk niet. Het script gaat ervan uit dat in kolom 1 de naam staat en in kolom 2 het e-mail adres. Heb je die op een andere plek, dan moet je het script even aanpassen.

UPDATE:
Op 19 juni 2014 is de code bijgewerkt omdat de code die hier stond niet meer bleek te werken!
Op 11 augustus 2014 is de code opnieuw aangepast omdat Google weer iets veranderd heeft.

Installatie
De installatie is echt simpel en je bent met een paar minuten klaar als je deze stappen volgt:
  1. Ga naar Google Drive en maak een nieuw formulier aan. Creëer net zoveel velden als je nodig hebt, waarbij je in het eerste veld vraagt om de naam van de invuller en in het tweede veld om het e-mail adres. Natuurlijk werkt dit script ook met een reeds bestaand formulier!
  2. Ervan uitgaande dat je de resultaten laat binnenkomen in een apart spreadsheet, ga naar dat spreadsheet en open de Script Editor die je vindt onder het menu Extra.
  3. Copy- en paste  de code die hieronder staat, waarbij je op de aangegeven plekken de nodige dingen verandert, zoals je eigen e-mail adres, het onderwerp, de aanhef en de eindtekst.
  4. Bewaar het script door op de zwarte floppy te klikken en kies dan voor Hulpbronnen, Triggers voor huidige project. Voeg een nieuwe trigger toe en kies in het laatste veld voor Bij verzenden formulier.
  5. Klik op Opslaan en je zult gevraagd worden om autorisatie van het script, waar je uiteraard mee akkoord gaat.
Dat is alles! Wanneer iemand het formulier invult krijgt deze automatisch een afschrift, maar jij zelf ook als bcc. Makkelijker kan ik het niet maken...

Code voor het versturen van een ontvangstbevestiging:
function Ontvangstbevestiging(e) 
{  
    // [1] moet overeenkomen met het veld waar de naam wordt ingevuld
    // [2] moet overeenkomen met het veld waar e-mail adres wordt ingevuld
    var naam = e.values[1];
    var email = e.values[2];
  
    // Verander de variabelen hieronder
    var blackcarbonCopy = "jijzelf@afzender.nl";
    var naamAfzender = "Willem de Afzender";
    var emailAfzender = "info@afzender.nl";
    var onderwerp = "Ontvangstbevestiging";
  
    // Pas de begintekst in het bericht aan
    // Tip: <br> wordt gebruikt voor een regeleinde
    var bericht = "Beste " + naam + ",<br><br>";
    bericht += "Dit zijn de gegevens die je hebt ingevuld op het formulier:<br><br>";
    
    var s = SpreadsheetApp.getActiveSheet();
    var rij = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];

    // De velden met de antwoorden worden gegenereerd
    // lege velden en Tijdstempel worden niet getoond
    for ( var cellen in rij ) {
      var cel = rij[cellen];
      if ( e.namedValues[cel] ) {
        if ( cel != "Tijdstempel")  {
        bericht += cel + ': '+ e.namedValues[cel] + "<br>"; 
        }
      }
    }

    // Pas de eindtekst in het bericht aan
    bericht += "Klopt er toch iets niet, reageer dan even op dit bericht.<br><br>";
    bericht += "Met vriendelijke groet,<br> Jouw Naam";
  
    var tekstbericht = bericht.replace("<br>", "\n");
    
  MailApp.sendEmail(email, onderwerp, tekstbericht, {bcc: blackcarbonCopy, name: naamAfzender, htmlBody: bericht, replyTo: emailAfzender});
}
Klik in het kader om de code te selecteren

Kom je er ondanks de instructie niet uit, laat het dan weten en ik maak er een screencast van (bij voldoende animo).

5 opmerkingen:

  1. Werkt dit ook als je gebruik maakt van pagina einden ?

    BeantwoordenVerwijderen
  2. beste
    mij lukt het voorlopig niet.

    er staat steeds undefined als ik op bugfixer klik? TypeError: Kan eigenschap 'values' niet lezen uit undefined. (regel 5, bestand 'Code')
    misschien omdat de kolommen alfabetisch zijn?

    BeantwoordenVerwijderen
  3. Beste
    Ondertussen is het gelukt met de juiste kolomwaarde (door de kolom met tijdstempel in mindering te brengen).
    Maar, de kopie van het bericht in BCC krijg ik nog niet toe?
    groet.

    BeantwoordenVerwijderen
  4. Voor deze code is nu ook een mooie add-on beschikbaar: FormMule (email merge utility)

    BeantwoordenVerwijderen
  5. Beste
    Script kloppend. Nu TypeError: Kan eigenschap 'values' niet lezen uit undefined. Waarschijnlijk kolommen: hoe kolommen juiste waarde geven?
    Groet!

    BeantwoordenVerwijderen