javascript - 在 Zapier Code JS 中的 webhook 有效负载后循环
问题描述
在 Zapier 中,我正在构建一个 zap,它从 quickbooks 中获取一个新的 webhook,将其与数据库进行比较,然后将其发送到网站(如果存在)。除了一部分之外,一切正常。从有效负载中提取唯一 ID 的 JavaScript 位仅从有效负载中获取最后一个结果,并且不会作为单独的值处理。
inputData.cleanID = webhookInputBodyHere //this is the input from zapier that gives the webhook body
if(inputData.cleanID == null){
var listArray = [];
} else{
var listArray = inputData.cleanID.split("},{");
}
var output = [];
var arrayNos = listArray.length;
var i = 0;
do{
var thisItem = new String(listArray[i]);
var thisItemObj = {};
var getEachId = thisItemObj.record = thisItem;
output.push({getEachId});
i++;
}
while (i < arrayNos);
有效载荷示例 1(多项目挂钩)
{"eventNotifications":[{"realmId":"SOMEID","dataChangeEvent":{"entities":[
{"name":"Estimate","id":"34371","operation":"Update","lastUpdated":"2019-10-09T13:04:27.000Z"},
{"name":"Estimate","id":"34369","operation":"Update","lastUpdated":"2019-10-09T13:04:06.000Z"},
{"name":"Estimate","id":"34370","operation":"Update","lastUpdated":"2019-10-09T13:04:18.000Z"}]}}]}
有效载荷示例 2(单钩):
{"eventNotifications":[{"realmId":"315179876","dataChangeEvent":{"entities":[
{"name":"Estimate","id":"34370","operation":"Update","lastUpdated":"2019-10-09T13:04:18.000Z"}]}}]}
我联系了支持人员,他们建议选择子键“entities”或“entities.id”,这两者都未能完成这项工作。我还尝试从堆栈中使用此选项,但它不再起作用了。
对于非 zapier 用户,您可以创建一个免费帐户,通过创建一个新的 zap 并选择“zapier webhook”作为触发器和“zapier 代码”作为一个动作来了解我在这里谈论的内容。
Quickbooks 开发人员中的挂钩时间设置为最短 1 分钟,如果我可以更改它会解决所有问题,但这似乎不是一个选项。
所以总结一下:
我的 webhook 拉取了 1 个或多个实体的有效负载 - TRIGGER
----参见示例 1 或 2----
Zapier 将有效负载作为单个值一起处理 - ISSUE
----如果示例 1 是有效负载,我的代码将仅生成示例 2----
我需要单独处理每个“实体” - DESIRED OUTPUT
----示例 1 应该输出 3 个单独的实体,以便在 zap 中处理----
然后我希望 zap 为每个单独的实体运行。ID - 最终结果
解决方案
Zapier 删除了为 zap 中的每个附加操作返回每个循环项目的能力。因此,使用TWO ZAPS绕过它时,您必须要有一点创意。这是我必须工作的解决方案:
ZAP 1:
操作(发送有问题的有效负载后)运行 Zapier Code JS
const myData = JSON.parse(inputData.cleanID);
return myData.eventNotifications.map(item => { return item; });
感谢用户 Kenny 提供了有助于解析数据的这段代码
行动
在 Google 表格中创建电子表格行
您将需要在谷歌驱动器(或任何允许多个项目的 zap)中创建一个电子表格。
选择允许多行的选项并选择您的 ID 输出作为列(以及您可能需要的任何其他内容),如下所示:
结束 Zap。
ZAP 2:
触发器: Google 表格中的新电子表格行
连接到工作表和 ID
行动:随心所欲
结束电击
这是我当时能找到的针对这个问题的最佳解决方案。我想使用 MySQL,但 zapier 还没有解决方案。它确实会导致您每次运行必须使用比原始 JS 代码选项多 2 个任务,但这实际上是我们现在可以做的所有事情,直到 zapier 为我们提供一些东西。
推荐阅读
- r - 使用 IdentityServer4 进行 ShinyProxy 和身份验证
- fortran - 是否有一种可移植的方式来选择 LOGICAL 变量的大小?
- javascript - document.querySelector 不适用于动态内容
- node.js - 如何使用 Node.js 仅获取 MongoDB 中的部分文档?
- azure - Azure 存储 - 使用存储访问策略时限制 SAS 中的 IP
- raspberry-pi - Raspberry Pi Zero - MotionEye 相机
- chart.js - 在chart.js散点图中反转X轴编号标签
- tensorflow - 获得ETA是否正常:6:43:26小时完成第一个epoch
- java - Spring Data JPA - 获取所有元素
- ibm-midrange - 如何在 sed 命令中使用处理换行符