将Intercom API请求转换为Google Apps Script并导出数据至表格
用Google Apps Script整合Intercom API导出数据到Google Sheet
整体流程说明
三个API请求是链式依赖关系:先创建导出任务拿到job_identifier,再轮询任务状态直到完成获取下载URL,最后下载ZIP解析成CSV导入表格。
1. 传递job_identifier到第二个请求
直接把第一个请求返回的job_identifier拼到查询状态的API URL里就行。注意导出任务不是即时完成的,必须轮询检查状态,直到任务标记为completed再进入下一步。
示例代码(衔接你已有的创建任务代码):
function runIntercomExport() { // 第一步:创建导出任务(你已有的Tanaike提供的代码) const apiKey = "你的Intercom API密钥"; const createExportUrl = "https://api.intercom.io/export/content/data"; const createOptions = { method: "post", headers: { "Authorization": `Bearer ${apiKey}`, "Accept": "application/json", "Content-Type": "application/json" }, payload: JSON.stringify({ // 替换成你的导出参数,比如数据模型、时间范围 model: "conversation", created_at: { gt: "2024-01-01T00:00:00Z" } }) }; const createResponse = UrlFetchApp.fetch(createExportUrl, createOptions); const createData = JSON.parse(createResponse.getContentText()); const jobId = createData.job_identifier; // 提取job_identifier // 第二步:轮询任务状态 const checkStatusUrl = `https://api.intercom.io/export/content/data/${jobId}`; const checkOptions = { headers: { "Authorization": `Bearer ${apiKey}`, "Accept": "application/json" } }; let jobStatus = "processing"; let downloadUrl = ""; // 轮询间隔30秒,最多尝试20次(可按需调整) for (let i = 0; i < 20; i++) { const statusResponse = UrlFetchApp.fetch(checkStatusUrl, checkOptions); const statusData = JSON.parse(statusResponse.getContentText()); jobStatus = statusData.status; if (jobStatus === "completed") { downloadUrl = statusData.download_url; break; } Utilities.sleep(30000); // 等待30秒再查询 } if (jobStatus !== "completed") throw new Error("导出任务超时未完成");
2. 处理ZIP文件并导入Google Sheet
拿到下载URL后,先下载ZIP包,用Apps Script自带的工具解压,读取里面的CSV内容,最后写入指定工作表。
接上面的代码继续:
// 第三步:下载ZIP并解析CSV const zipResponse = UrlFetchApp.fetch(downloadUrl, { headers: { "Authorization": `Bearer ${apiKey}` } }); const zipBlob = zipResponse.getBlob(); const zipFile = Utilities.unzip(zipBlob); // 假设ZIP内只有一个CSV文件,直接取第一个 const csvBlob = zipFile[0]; const csvContent = csvBlob.getDataAsString(); // 若有乱码可指定编码,比如"UTF-8" // 将CSV转为二维数组,方便写入表格 const csvData = Utilities.parseCsv(csvContent); // 写入Google Sheet(替换成你的Sheet ID和工作表名称) const sheet = SpreadsheetApp.openById("你的Sheet ID").getSheetByName("导出数据"); sheet.clearContents(); // 清空原有内容(可选操作) sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData); }
关键注意点
- API权限:确保你的Intercom API密钥拥有
export相关权限,否则会返回权限错误 - 轮询参数:数据量越大,导出耗时越长,可根据实际情况调整轮询间隔和最大尝试次数
- 数据清洗:导出的CSV可能包含冗余字段或格式问题,可在写入表格前添加数据清洗逻辑
内容的提问来源于stack exchange,提问作者Damien
相关产品推荐
相关产品推荐

