Google表单网址指向上次更新的答案

时间:2015-10-28 19:25:09

标签: google-apps-script google-sheets google-form

我创建了一个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来识别哪个收件人响应表单?

2 个答案:

答案 0 :(得分:1)

保持在Google Apps脚本的范围内,您无法提供重定向到Google表单。

这是我头脑中的两个想法......

  • 如果您愿意使用其他服务来处理重定向,您可以让它为您进行重定向。 (我不推荐任何,只是说它是一个选项。)

  • 您可以编写一个Google Apps脚本网络服务,该服务会显示您的真实表单的模型。用户可以使用唯一的URL将其唯一标识符作为HTTP查询参数传递;哎呀,您可以像现在一样使用goo.gl为每个人生成一个简短的URL。根据标识符,预先填写假表单及其最后结果。提交后,您的Web服务可以以编程方式提交表单。

答案 1 :(得分:1)

  

为每个收件人创建一个唯一的URL(标识符)。

为每个人创建单独的Google表单将为您提供此功能。

  

相同的网址应指向上次更新的网址

假设您为每个用户创建一个单独的表单,请尝试将编辑URL放回每个表单的描述或第一页,在提交第一个响应之后。你必须明确表示他们必须点击该链接。没有设置可以自动将原始Google表单网址重定向到相应的编辑响应AFAIK,如果这是您要求的。