我创建了一个Google表单,其中包含与之关联的Google电子表格,可以通过我发送给它的每个收件人访问(使用URL形式)。现在,URL并非每个收件人都是唯一的。收件人可以访问表单然后提交。提交后,我将通过Google FormResponse类中提供的GetEditResponse()
功能生成修改网址。然后,收件人可以使用我提交表单时提供的编辑网址来编辑他们的回复。
这是我的Google App Script代码:
function myFunction() {
assignEditUrls();
}
function assignEditUrls() {
var form = FormApp.openById('formId');
//enter form ID here
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses');
//Change the sheet name as appropriate
var data = sheet.getDataRange().getValues();
var urlCol = 5; // column number where URL's should be populated; A = 1, B = 2 etc
var responses = form.getResponses();
var timestamps = [], urls = [], resultUrls = [];
for (var i = 0; i < responses.length; i++) {
timestamps.push(responses[i].getTimestamp().setMilliseconds(0));
urls.push(shortenUrl(responses[i].getEditResponseUrl()));
}
for (var j = 1; j < data.length; j++) {
resultUrls.push([data[j][0]?urls[timestamps.indexOf(data[j][0].setMilliseconds(0))]:'']);
}
sheet.getRange(2, urlCol, resultUrls.length).setValues(resultUrls);
}
function shortenUrl(longUrl) {
// google url shortener api key
var key = "apiKey";
var serviceUrl="https://www.googleapis.com/urlshortener/v1/url?key="+key;
var options={
muteHttpExceptions:true,
method:"post",
contentType: "application/json",
payload : JSON.stringify({'longUrl': longUrl })
};
var response=UrlFetchApp.fetch(serviceUrl, options);
if(response.getResponseCode() == 200) {
var content = JSON.parse(response.getContentText());
if ( (content != null) && (content["id"] != null) )
return content["id"];
}
return longUrl;
}
您还可以查看与表单相关联的Spreadsheet。
此模型的问题在于收件人需要返回已编辑的网址,以便稍后修改其回复。相反,我希望他们保留我最初提供的相同网址,每次他们回到该网址时,我应该确定它是哪个收件人,并使用上次更新的网址重定向它们。
为了实现这种情况,我需要:
1 即可。为每个收件人创建一个唯一的URL(标识符)。
2 即可。相同的URL应指向最后更新的URL(表单),以便它们始终可以使用最初提供的相同URL(后端进程)。
使用Google的可用工具是否可以实现?如果是,我如何创建一个唯一的URL来识别哪个收件人响应表单?
答案 0 :(得分:1)
保持在Google Apps脚本的范围内,您无法提供重定向到Google表单。
这是我头脑中的两个想法......
如果您愿意使用其他服务来处理重定向,您可以让它为您进行重定向。 (我不推荐任何,只是说它是一个选项。)
您可以编写一个Google Apps脚本网络服务,该服务会显示您的真实表单的模型。用户可以使用唯一的URL将其唯一标识符作为HTTP查询参数传递;哎呀,您可以像现在一样使用goo.gl
为每个人生成一个简短的URL。根据标识符,预先填写假表单及其最后结果。提交后,您的Web服务可以以编程方式提交表单。
答案 1 :(得分:1)
为每个收件人创建一个唯一的URL(标识符)。
为每个人创建单独的Google表单将为您提供此功能。
相同的网址应指向上次更新的网址
假设您为每个用户创建一个单独的表单,请尝试将编辑URL放回每个表单的描述或第一页,在提交第一个响应之后。你必须明确表示他们必须点击该链接。没有设置可以自动将原始Google表单网址重定向到相应的编辑响应AFAIK,如果这是您要求的。