如何利用明道云webhook实现快递实时追踪?

分享  收藏
10 / 1575

追踪快递的需求,是一个很常见的需求。 在我们行业里面,非电放单据需要通过国际快递邮寄给客户。单据本身是货权凭证,极其重要。所以对于寄单快递的追踪,实时大的投递信息的获取尤为重要。

上效果图:
image.png

功能描述

交单表录入快递单号和快递公司信息后,每天自动获取快递最新动态。根据快递信息,更新交单状态。

原理概述

1.通过定时触发工作流,每天上午上班前触发工作流。
2.工作流配置 webhook 模块,通过快递 API 去请求快递数据。快递 API 会返回一个或多个数组(就是所有的信息都在一起,有新的有旧的,一团乱麻基本用不了),并存入最新动态文本字段。
3.通过 JavaScript 代码块处理返回的数据。将返回的数组中找出最新的。
4.将 JavaScript 代码块的处理出来的最新动态信息存入最新状态字段。

如何实现?

如何获取可用的快递 API?

推荐阿里云 API 市场,里面有免费的 API 可以用。当然免费是限制请求次数的,如果请求的次数和需求过大,需要买付费的。
阿里云市场传送门 ,然后搜索 快递 API,你可以找到很多服务提供商,找一个自己满意的。

我因为要用到国际快递,找的是这家:
image.png

买了之后,

  1. 然后去找到你的 appcode,你买了这个 API 之后,就会有一个 appcode。 这个东西相当于授权码。由他你才能用。
  2. 在下面看请求示例:
    image.png
    请求示例的链接,就是你配置 webhook 里面用的 get 方式下的请求链接。
    我就不贴这个链接了,好像贴出来帖子过不了审。

如何准备工作表?

你的表记录需要有几个字段:

  1. 记录状态字段。我用的单选字段。image.png
  2. 快递公司字段。我用的单选。 因为我们一般只会用到 DHL 和 Fedex 所以只有两个选项。image.png
  3. 快递最新状态字段。一个文本,用来存放最新信息。
  4. 全部动态字段。一个多行文本,用来存放全部返回信息。

如何配置工作流?

我用了两个工作流。第一个是从快递 API 请求数据,第二个是处理数据。 当然你也可以做成一个工作流哈。

第一步,请求快递数据

直接看图(我这里是工作表触发方式,你也可以改成定时触发方式):
image.png

新增数据或者修改单号触发, 然后判断快递公司,不同快递公司执行不同的 webhook。因为我这里用的 dhl 接口是官方的, 所以我就写成了两个。 实际上,只需要一个接口就可以判断。
你注意观察你的 API 接口的请求示例,他们的请求连接里面放上快递公司简写就可以实现一个链接请求不同快递公司的数据。 就不用像我一样分开。

webhook 配置示例:
image.png

链接里面的单号参数是动态获取的, 当然后面那个快递公司的参数你也可以动态获取。当然你获取的时候,注意你设置的值和官方文档的值一样。 比如 fedex,人家官方给的是 fedex, 你如果动态值是 fedeex,或者 feedex 都是没法成功的哟~~

也就是你要按人家接口规范传递参数过去,人家才知道你要的是什么。
webhook 获取到后,将结果存入到多行文本字段,如图:
image.png

注意,这里 webhook 给我返回了 7 个值(7 个数组), 然后我只取了一个 list 存入我的多文本字段。

存入后,就成了这样:

image.png

第二部,处理数据。

当我的多文本字段 值被更新的时候,就需要去这个字段里面把我需要的最新动态提取出来。
工作流如下:

image.png

多行被更新后触发, 然后执行判断快递公司(其实我这样分开写好像是多余的,其实两个代码块内容都一样,哈哈哈,你完全可以只写成一个

代码块:

var locations = JSON.parse(input.locations);
var latestLocation =  locations[0];
output = { latestLocation: latestLocation  };

如图:

image.png

然后将返回的结果,更新给那个单行文本就行了。

image.png

第三,如果单行文本里面含有 delivered 就将交单状态改为已交单。

打完收工!

感谢金彪对 JavaScript 代码块的贡献! 第一次金彪帮我写的 dhl 那个,后来我新增了 fedex 就自己去照猫画虎,居然成功了。 哈哈哈