为了更好地了解我们的CRM(ActiveCampaign)中发生的情况并创建我们自己的报告,我现在使用webhooks和Google Apps脚本将所有更改发布到BigQuery数据库。
这非常有效,但是我发现有1000个加载作业的限制,并且CRM中的每个更改都会创建至少一个,有时更多的加载作业。不能以任何方式增加此限制。所以我正在寻找一种批处理条目并每10分钟加载一次的方法。
我不知道如何在由webhook触发的Apps脚本中创建它,我无法在网上找到它。有没有人有建议?
答案 0 :(得分:3)
您可以通过在最初的webhook中将事件序列化为数据存储设备(如Google表格),然后使用基于时间的触发器来读取已保存的事件并将其发送到BigQuery,从而为事件处理添加时间延迟。
function doPost(e) {
var hdd = SpreadsheetApp.openById("some id");
/* Pick the sheet to log to based on parameters of the event */
var params = e.parameters, sector = "";
if(...) {
sector = "some sheet name";
} else if(...) {
sector = "some other sheet name"
}
... // Do other stuff with event that needs immediate handling.
// Serialize for batch processing later.
hdd.getSheetByName(sector).appendRow([JSON.stringify(e)]);
}
// Fire events in bulk. Create a time based trigger to call this function every so often.
function refireEvents() {
var sectors = SpreadsheetApp.openById("some id").getSheets();
for(var i = 0; i < sectors.length; ++i) {
var events = sectors[i].getDataRange().getValues();
var sheetName = sectors[i].getName();
for(var r = 0; r < events.length; ++r) {
var event = JSON.parse(events[r][0]); // Assuming only single column of data
/* Do stuff with the event response that was originally done in the webhook */
}
// Remove handled events.
sectors[i].clearContent();
}
}
答案 1 :(得分:0)
您可以使用Google Apps脚本创建将接收请求然后执行批处理操作的Web服务(Web应用程序)。
只需处理脚本中的doGet()
或doPost()
方法,然后在发布脚本时,只要GET
或POST
请求,就会调用函数对应的方法是脚本的URL。
请参阅网络应用指南:https://developers.google.com/apps-script/guides/web