如何将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的新增行来获取这个字段:
- 找到表单关联的Google Sheet,记录其ID和响应表的名称(通常是“表单响应 1”)。
- 修改你的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);} }
- 在Zapier中切换触发器为Google Sheets - New Spreadsheet Row,选择对应的Sheet和工作表,即可在工作流中获取到文件夹URL。
方法2:通过Zapier Webhook主动推送文件夹URL
利用Google Apps Script的UrlFetchApp将文件夹URL发送到Zapier的Webhook地址,让Zapier直接接收数据:
- 在Zapier中创建一个新的工作流,选择Webhooks by Zapier - Catch Hook触发器,复制生成的Webhook URL。
- 修改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);} }
- 测试表单提交,Zapier的Catch Hook触发器就能捕获到包含文件夹URL的 payload,后续工作流可直接使用这些变量。
内容的提问来源于stack exchange,提问作者Maciek
相关产品推荐
相关产品推荐

