You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Google Drive文件夹路径作为变量传递给Zapier

如何将Google Apps Script创建的Drive文件夹路径传递给Zapier?

问题背景

我有一个和Zapier联动的Google表单,已经用Google Apps Script实现了表单提交时在Google Drive中创建文件夹的功能。现在希望把新创建的Google Drive文件夹位置作为变量传递给Zapier,用于后续工作流环节。当前Zapier只能获取表单的标准变量,想知道是否可以通过类似return {'subfolder_url':subfolder.getUrl()};的方式传递文件夹路径?

现有Google Apps Script代码

function new_video_response(){
  try{
    const form=FormApp.getActiveForm();
    const folder=DriveApp.getFolderById('FOLDER_ID');
    const responses=form.getResponses()[0];
    const answers=responses.getItemResponses();
    const NAME=answers[0].getResponse();
    const found=folder.getFoldersByName(NAME);
    const subfolder=found.hasNext()?found.next():folder.createFolder(NAME);
    const datetime=Utilities.formatDate(new Date(),'PST','yyyy-MM-dd HH:mm:ss');
    console.log(datetime);
    const subsubfolder=subfolder.createFolder(datetime+' PST');
    answers[10].getResponse().forEach(ID=>DriveApp.getFileById(ID).moveTo(subsubfolder));
  }
  catch(error){console.log(error);}
}

解决方案

直接用return语句返回变量的方式不可行,因为表单触发的脚本(如onFormSubmit触发器)没有内置渠道将返回值传递给Zapier的标准表单触发器。你可以通过以下两种实用方法实现需求:

方法1:将文件夹URL写入表单响应表格,让Zapier监听表格新增行

把文件夹URL追加到Google表单关联的响应Sheet中,Zapier通过监听Sheet的新增行来获取这个字段:

  1. 找到表单关联的Google Sheet,记录其ID和响应表的名称(通常是“表单响应 1”)。
  2. 修改你的Apps Script代码,在创建文件夹后添加写入Sheet的逻辑:
function new_video_response(){
  try{
    const form=FormApp.getActiveForm();
    const folder=DriveApp.getFolderById('FOLDER_ID');
    const responses=form.getResponses()[0];
    const answers=responses.getItemResponses();
    const NAME=answers[0].getResponse();
    const found=folder.getFoldersByName(NAME);
    const subfolder=found.hasNext()?found.next():folder.createFolder(NAME);
    const datetime=Utilities.formatDate(new Date(),'PST','yyyy-MM-dd HH:mm:ss');
    console.log(datetime);
    const subsubfolder=subfolder.createFolder(datetime+' PST');
    answers[10].getResponse().forEach(ID=>DriveApp.getFileById(ID).moveTo(subsubfolder));

    // 新增:将文件夹URL写入响应表格
    const sheet = SpreadsheetApp.openById('你的表单关联Sheet ID').getSheetByName('表单响应 1');
    const lastRow = sheet.getLastRow();
    // 把URL写入第12列(可根据实际列数调整)
    sheet.getRange(lastRow, 12).setValue(subsubfolder.getUrl());
  }
  catch(error){console.log(error);}
}
  1. 在Zapier中切换触发器为Google Sheets - New Spreadsheet Row,选择对应的Sheet和工作表,即可在工作流中获取到文件夹URL。

方法2:通过Zapier Webhook主动推送文件夹URL

利用Google Apps Script的UrlFetchApp将文件夹URL发送到Zapier的Webhook地址,让Zapier直接接收数据:

  1. 在Zapier中创建一个新的工作流,选择Webhooks by Zapier - Catch Hook触发器,复制生成的Webhook URL。
  2. 修改Apps Script代码,添加推送Webhook的逻辑:
function new_video_response(){
  try{
    const form=FormApp.getActiveForm();
    const folder=DriveApp.getFolderById('FOLDER_ID');
    const responses=form.getResponses()[0];
    const answers=responses.getItemResponses();
    const NAME=answers[0].getResponse();
    const found=folder.getFoldersByName(NAME);
    const subfolder=found.hasNext()?found.next():folder.createFolder(NAME);
    const datetime=Utilities.formatDate(new Date(),'PST','yyyy-MM-dd HH:mm:ss');
    console.log(datetime);
    const subsubfolder=subfolder.createFolder(datetime+' PST');
    answers[10].getResponse().forEach(ID=>DriveApp.getFileById(ID).moveTo(subsubfolder));

    // 新增:推送文件夹URL到Zapier Webhook
    const zapierWebhookUrl = '你的Zapier Webhook URL';
    const payload = {
      subfolder_url: subsubfolder.getUrl(),
      folder_name: NAME,
      create_time: datetime
      // 可添加其他需要传递的字段
    };
    UrlFetchApp.fetch(zapierWebhookUrl, {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify(payload)
    });
  }
  catch(error){console.log(error);}
}
  1. 测试表单提交,Zapier的Catch Hook触发器就能捕获到包含文件夹URL的 payload,后续工作流可直接使用这些变量。

内容的提问来源于stack exchange,提问作者Maciek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 23:35:35