首页 > 解决方案 > 在 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 分钟,如果我可以更改它会解决所有问题,但这似乎不是一个选项。

所以总结一下:

  1. 我的 webhook 拉取了 1 个或多个实体的有效负载 - TRIGGER

    ----参见示例 1 或 2----

  2. Zapier 将有效负载作为单个值一起处理 - ISSUE

    ----如果示例 1 是有效负载,我的代码将仅生成示例 2----

  3. 我需要单独处理每个“实体” - DESIRED OUTPUT

    ----示例 1 应该输出 3 个单独的实体,以便在 zap 中处理----

  4. 然后我希望 zap 为每个单独的实体运行。ID - 最终结果

标签: javascriptwebhooksquickbookszapier

解决方案


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 为我们提供一些东西。


推荐阅读