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