Jak dodać link "Edytuj odpowiedź" do wiadomości e-mail w Formularzach Google?

Mam prosty formularz Google, który zbiera Dane i za pomocą AppScript wysyła e-maile z potwierdzeniem do użytkowników, którzy je wypełniają. Po przesłaniu formularza, po potwierdzeniu, użytkownik zobaczy link do edycji swojej odpowiedzi.

Chciałbym dołączyć ten link jako część e-maila potwierdzającego (w tej chwili pojawia się tylko na stronie.) Jak Mogę uzyskać adres URL, aby edytować przesłaną odpowiedź?

Jestem w stanie uzyskać link do formularza przez SpreadsheetApp.getActiveSpreadsheet().getFormUrl(). Daje mi następujący format: https://docs.google.com/a/domain.com/spreadsheet/viewform?formkey=<formKey>

Link nie zawiera jednak klucza edycji, który jest wymagany dla użytkowników do edycji swojej odpowiedzi. Oczekiwany adres URL powinien wyglądać tak: https://docs.google.com/a/domain.com/spreadsheet/viewform?formkey=<formKey>&edit=<editKey>

Z góry dzięki za pomoc!

- K

Edycja:

Dodano żądanie funkcji na ten temat: http://code.google.com/p/google-apps-script-issues/issues/detail?id=1345&thanks=1345&ts=1337773007

Author: Mogsdad, 2012-05-23

9 answers

Odpowiedź, że nie było to możliwe przez @ Henrique Abreu, była prawdziwa do niedawna. Google chyba dodało getEditResponseUrl() do klasy FormResponse i dzięki temu możliwe jest użycie kodu w ten sposób, aby uzyskać adres URL edycji dla kilku istniejących formularzy:

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

Aby automatycznie wysłać wiadomość e-mail do użytkownika, który odpowiada, można dodać WYZWALACZ w formularzu wyślij. Ponieważ sytuacja, z którą pracuję, nie wymaga od ludzi logowania się za pomocą konta aplikacji, którego nie mam dostęp do adresu e-mail automatycznie, więc mam pytanie tekstowe, które przechwytuje adres e-mail użytkownika.

Zadaje pytanie, czy edytowanie formularzy jest tym, czego chcesz. Zmagałem się z względnymi zaletami edycji istniejącej odpowiedzi lub wysłania wypełnionego Formularza za pomocą toPrefilledUrl() żebym mógł zobaczyć, jak rzeczy zmieniły się w czasie. Myślę, że sprowadza się to do wartości, jaką zapewni Ci śledzenie tego.

 20
Author: Ben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-16 23:36:47

Jeśli korzystasz z Google Apps, twoi respondenci mogą edytować tam odpowiedzi formularzy.

Zobacz: Jak edytować odpowiedzi formularza

 2
Author: ScampMichael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-23 01:36:53

--edycja ta jest teraz możliwa. Zobacz inne odpowiedzi.

Po przesłaniu przez użytkownika formularza, po potwierdzeniu pojawi się link do edytuj jego / jej odpowiedź. Chciałbym dołączyć ten link jako część e-maila potwierdzającego

To niemożliwe, kropka.

Ten link nie jest nigdzie dostępny i nie można go odgadnąć/skonstruować. Ale są pewne obejścia, które mogą ci pasować (niektóre sugerowały, że przeformułuję), np.

Wyślij link do formularza i niech użytkownik prześle go ponownie. Musisz mieć jakieś pole kontrolne (np. nazwę użytkownika), abyś mógł znać i usuwać/ignorować jego starsze zgłoszenia. Prawdopodobnie automatycznie za pomocą skryptu.

Można również opracować i opublikować GUI apps-script i wysłać link do tego skryptu aplikacji oraz generowany parametr, w którym można określić, który wpis należy edytować. Minusem tego podejścia jest to, że jest to nieco kłopotliwe i przesadne, aby ponownie zaprojektować cały formularz na skrypcie aplikacji. Ale znowu, to działa.

W końcu możesz otworzyć "prośbę o ulepszenie" w Apps Script issue tracker i poczekać, aż oni i zespół arkuszy kalkulacyjnych/Formularzy Google spotkają się, aby opracować rozwiązanie.
 2
Author: Henrique G. Abreu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-03 21:52:11

Oto jasny post na blogu, który pokazuje, jak to zrobić krok po kroku i wyjaśnia, co dzieje się pod maską dla początkujących AppsScripts:

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

O ile zbiorowo można się tam dostać ze wszystkich doskonałych odpowiedzi podanych tutaj, skrypt z tego postu działał najlepiej dla mnie.

 2
Author: Von,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-24 23:01:42

Czy to pomaga - nie próbowałem, ale Szukałem tego samego jakiś czas temu i zauważyłem to.

Z tej strony https://developers.google.com/apps-script/reference/forms/

Kod stamtąd Zawiera to:

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

Jon

 1
Author: eskdale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-19 18:21:26

Świetnie, scenariusz działa! Dzięki.

Dla początkujących, jak ja: po prostu wklej kod andre dla funkcji SendConfirmationMail(e) do edytora kodu arkusza kalkulacyjnego i ustaw WYZWALACZ "on form submit", aby go uruchomić. Jest to edytor skryptów arkusza kalkulacyjnego, a nie Edytor skryptów formularzy.

Musisz włamać się do niektórych wartości. Przeczytaj kod. Dla mnie myląca była potrzeba zastąpienia ********COLUMN SEQUENCE EX 14****** numerem kolumny arkusza, w którym chcesz, aby edytowane adresy URL kończyły się. Użyłem 39 czyli o jedną kolumnę więcej niż mój formularz zużywam.

Jednak w tej części mam runtime Proby:

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

Nie wiem dlaczego, ale zastąpiłem go tym:

 for (var keys in columns) {
        var key = columns[keys];
        if ( e.namedValues[key]) {
        message += key + ' :: '+ e.namedValues[key] + "<br>"; 
        } 
    }
Mi pasuje.
 1
Author: user3397716,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-18 13:49:15

Spróbuj tego: (napisy nie są dla mnie, bo łączę dwa rozwiązania trzeciej części)

Źródło: wyślij e-mail z potwierdzeniem za pomocą Formularzy Google

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

}
 1
Author: Andre Vacari - Capo Software,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-18 18:45:09

Możesz spróbować wypełnić formularz wartościami podanymi z tego adresu e-mail, a następnie usunąć poprzednie odpowiedzi ...

To nie jest piękny sposób, ale może działać ...

 0
Author: Edo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-23 01:15:49

Myślę, że nie mamy dostępu do tego, czym jest ta wartość poprzez API arkusza kalkulacyjnego(co oznacza, że skrypt aplikacji też jej nie ma). Najbliższa mi może być wartość "klucz" w w tym kanale . Musiałbyś przetestować, żeby się dowiedzieć. Nie ma innej alternatywy, którą znam, poza bezpośrednim dostępem do interfejsu API arkusza kalkulacyjnego. Więc najpierw musisz uzyskać ostatni wiersz przez użycie api ?reverse=true&max-results=1

 -1
Author: mzimmerman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-23 01:07:38