Echolot
教程

用流程实现自动化

在画布上构建一个流程:登录、列出订单、判断并通知你;运行它、设置计划,并由 Webhook 启动。

流程在画布上把请求和其他步骤串联起来,让原本手动完成的工作可以一键运行、按计划运行,或在其他系统调用时运行。在本教程中,你会构建 Orders to ship:它登录演示商店,列出 Heidi 的订单,并在有订单已付款但尚未发货时发送通知。

  • 用时: 20 分钟。
  • 你需要: 选择了无环境的 Alpenglow 工作区。它的流程 Morning stock check 是同样结构的完整示例。
  • 你将学到: 块和连线、“如果”块和“通知”块、运行日志、计划、Webhook,以及 echolot flow run。

1. 创建流程

  1. 切换到流程(⌘5)。
  2. 打开边栏的 + 菜单(新流程),选取空白流程。会打开一个名为新流程的流程,其中的开始块连着一个输出块。
  3. 点按画布空白处,使任何块都没有被选中。在检查器中,把名称设为 Orders to ship,把描述设为 Says when an order is paid but not shipped.

打开流程时,边栏会列出工作区的请求,可以把它们拖到画布上。+ 菜单的从模板部分则从现成的流程开始,例如分页并导出;参见模板。

2. 添加请求

  1. 把指针停在开始和输出之间的连线上,选取它的断开此连线按钮。
  2. 把边栏中的 Auth › Sign in 拖到画布上。它会成为一个标题为 Sign in 的请求块,带有输入 send 和输出 success、fail。
  3. 把 Orders › List orders 拖到画布上它的右侧。
  4. 把它们连起来:从开始的 run 端口拖到 Sign in 的 send 端口,再从 Sign in 的 success 端口拖到 List orders 的 send 端口。

Sign in 每次成功都会把令牌存入 {{token}},因此 List orders 发送的是新令牌。请求块的 success 输出带有响应:status、headers、body、time 和 url。请求没有收到响应或检查失败时,会触发 fail。

3. 用“如果”块做判断

  1. 选取工具栏中的块(⇧⌘B),在搜索块或请求中输入 If,然后按 ↩。

  2. 在检查器中,把标题设为 Waiting to ship?,把条件设为:

    value.body.items.some(o => o.status === 'paid')

    条件是 JavaScript。value 是传入的内容:这里是 List orders 的响应。

  3. 把 List orders 的 success 连到“如果”块的 value。

4. 通知你自己

  1. 从“如果”块的 true 端口拖出,在画布空白处松开。块选择器会在那里打开。选取通知:它会自动连到 true。

  2. 在块的设置下,把标题设为 Orders to ship,把消息设为:

    {{value.body.total}} orders, at least one paid and waiting.

    {{value…}} 会填入传入内容的各个部分;工作区变量同样可用。

  3. 同时把 List orders 的 success 连到输出块的 value。Webhook 返回的是到达输出的内容(第 7 步)。

选取整理可按运行顺序排列各个块,选取适应窗口(⌥⌘0)可查看全部。

运行之后画布上的流程:开始、一个请求块、一个“如果”块,以及从其 true 端口连出的“通知”块,每个都标有“完成”

5. 运行

  1. 选取运行(⌘R)。
  2. 每个块在运行时都会显示徽章,然后是完成。画布下方的运行日志列出每个块及其耗时。
  3. 一条通知显示 Orders to ship:3 个订单,至少一个已付款并在等待。演示中的订单 ord_8Jm4Qx 是已付款的。第一次运行时,macOS 会询问 Echolot 是否可以显示通知。
  4. 选中 List orders。检查器的上次运行显示传入和传出的内容;可在显示中切换输入和输出。

把条件改成 o.status === 'cancelled' 再运行:“如果”块会把值送到 false,而它没有连到任何地方,所以不会有通知。再把它改回来。

运行失败时,失败的块会显示错误。在 Mac 的设备端模型可用的情况下,运行日志中的解释失败原因会说明出了什么问题。之前的运行保留在工具栏的运行菜单中。详见运行与触发器。

6. 按计划运行

  1. 选中开始块。它的检查器中有触发器部分。
  2. 开启计划。选择间隔时,把每设为 60 分钟;或者选取设置时间(cron),输入一行 cron 表达式(分钟、小时、日、月、星期),例如 0 7 * * 1-5 表示工作日早上七点。
  3. 选取允许。在没有你参与的情况下由任何东西启动流程之前,Echolot 会要求你允许这个流程,并在流程更改后再次询问(再次允许)。撤销许可可使其停止。

检查器会显示下一次运行。计划在工作区窗口打开期间运行。要在没有 App 的情况下运行它们,请在一台保持开机的 Mac 或服务器上使用 echolot flow serve -w Alpenglow.echolot。

7. 由 Webhook 启动

  1. 在开始块的触发器中开启 Webhook。保持方法为 POST,并把路径设为 /orders-to-ship。

  2. 选取允许。检查器会显示 127.0.0.1 上的地址,并提供拷贝 URL 和拷贝令牌。

  3. 在“终端”中,用该令牌作为 Bearer 令牌来调用它:

    curl -X POST 'http://127.0.0.1:PORT/orders-to-ship' -H 'Authorization: Bearer TOKEN'

    粘贴你拷贝的 URL 和令牌。流程会运行,响应是到达输出的内容:订单。

查询字符串和 JSON 正文会填入流程的输入。Webhook 只在这台 Mac 上、窗口打开期间应答;echolot flow serve 可在没有 App 的情况下提供 Webhook,默认端口为 4100。Alpenglow 的 Order status on webhook 是另一个示例。流程也可以作为工具提供给 AI 智能体(智能体(MCP 工具));参见智能体。

8. 在“终端”中运行

echolot flow list -w Alpenglow.echolot
echolot flow run "Orders to ship" -w Alpenglow.echolot

它会在每个块完成时打印该块及其耗时,然后是通知的文本和结果:

✓ start  Start  0 ms
✓ …      Sign in  168 ms
✓ …      List orders  116 ms
✓ …      Waiting to ship?  4 ms
notification: Orders to ship — 3 orders, at least one paid and waiting.
✓ …      Notify  0 ms
Orders to ship: passed in 304 ms

在 CI 中,请加上 --no-input,这样需要人工参与的流程会失败,而不是一直等待。流程是工作区 flows 文件夹中的一个文件,因此会和它用到的请求一起进入 Git。参见 echolot flow。

后续步骤

本页内容