参考活动
执行状态
一条执行记录是某个活动的图针对一个人的一次遍历,它始终处于五种状态之一:运行中、等待回复、等待延迟、已完成,或已失败。一条运行中的执行记录会逐个节点遍历图,直到某个节点让它停留或结束。已完成和已失败是终态——执行记录永远不会重新开始,不过之后的事件可以启动一条新的。
画布的执行面板不会直接打印这五个名称。它显示一条执行记录是否活跃、它所在的节点、它经过的路径,以及有错误时的错误消息;下面的名称描述了这些字段共同的含义。
| 状态 | 执行记录在做什么 | 转移到什么状态,以及触发条件 |
|---|---|---|
| 运行中 | 遍历图,执行它到达的每个节点 | 等待、已完成或已失败——取决于下一个节点产生的结果 |
| 等待回复 | 停留在一个开启了 wait_for_reply 的 condition 上 | 收到回复后转为运行中;沉默 7 天后转为已失败 |
| 等待延迟 | 停留在一个已调度恢复时间的 delay 节点上 | 等待结束后转为运行中;若回复取消了等待则转为已完成;若恢复从未执行则转为已失败 |
| 已完成 | 已结束。不会再运行任何节点 | 终态 |
| 已失败 | 已停止,并记录了针对它的错误 | 终态 |
- 是否活跃: 是
- 记录内容: 当前所在的节点,以及已经经过的每个节点
- 结束条件: 一个
stop节点、一个下游没有连接的输出,或一个被重新访问的节点
一条运行中的执行记录会一次性经过整个图:先是触发器,然后依次经过每个连接的节点。操作节点发送私信、发布评论,或更改联系人的标签,然后将控制权交给下一个节点。没有任何内容是被调度的——一条执行记录只会在 delay 节点或等待回复的 condition 上暂停。
一个引发错误的操作会阻止执行记录继续前进,但不会结束它。执行记录会保持活跃状态,并将错误记录在该节点上,这就是为什么面板可能显示一条哪儿都不去的活跃执行记录;之后的清理会将其关闭为已失败。
重新访问一个节点会结束该执行记录,并记录一个指出该节点的循环错误。图中的每个节点在每条执行记录中最多运行一次。
- 是否活跃: 是
- 记录内容: 针对它停留的
condition节点记录一条”等待回复”条目 - 存活时长: 无回复状态下 7 天
开启了 wait_for_reply 的 condition 会将执行记录停留,而不是立即评估。那个人的下一条私信、同一串上的评论回复,或按钮点击会唤醒它,而该回复的文本就是条件所匹配的内容:Match 会让执行记录走第一个输出,No Match 走第二个。
一条等待 7 天仍无回复的执行记录会被关闭为已失败,并附带一条说明该人从未回复的消息。这同样适用于测试执行——一条停留在等待条件上的测试执行不会有真实的回复到来,会以同样的方式过期。
- 是否活跃: 是
- 记录内容: 一条以秒为单位命名等待时长的”已调度延迟”条目
- 存活时长: 整个调度的等待时长;恢复时间超过一小时未执行则会被判定为失败
一个 delay 节点会调度一次恢复,并停止前进。配置的 delay_seconds 会被限制在 1 秒到 31,536,000 秒(365 天)之间;超出该范围的值会被裁剪而不报错。
only_if_no_reply 开启的延迟,会在等待结束时检查是否有回复。如果那个人在等待期间的任何时候回复过,执行记录会完成,而不是继续沿分支走下去。
一个从未到来的恢复,会在其到期时间超过一小时后被每小时一次的清理捕获,该执行记录会被关闭为已失败。
- 是否活跃: 否
- 记录内容: 完成时间,以及该执行记录经过的完整节点路径
- 错误消息: 无
当执行记录到达一个 stop 节点、当它所走的输出没有连接任何内容,或当一个回复取消了设置为仅在无回复时才继续的延迟时,执行记录会完成。在 stop 节点结束的执行记录,其最后记录的步骤会携带一条”流程已停止”条目,用以区分有意的结束和一个本就没有连接任何内容的分支。
已完成并不代表活动做到了你想要的效果:一条没有匹配任何关键词、并从未连接的 No Match 输出离开的执行记录,仍然是一条已完成的执行记录。
- 是否活跃: 否
- 记录内容: 一条错误消息,以及执行记录停止时所在的节点
- 重试: 延迟之后的调度恢复,最多三次;其他内容不重试
执行记录有四种失败方式:一个节点被重新访问、一个操作节点引发错误且停滞的执行记录被清理、一个等待条件超过 7 天没有回复,或一次调度的恢复从未运行。
一条停滞的执行记录——处于活跃状态,且其最后访问的节点上有错误——如果仍有未完成的调度步骤,会在一小时内被关闭;如果没有,则会在闲置 7 天后被关闭。在此之前,面板会将其显示为活跃,所以一条活跃执行记录上的错误消息,实际上就是它已经结束的信号。
一次失败会记录什么
Section titled “一次失败会记录什么”| 记录内容 | 你在哪里看到它 |
|---|---|
| 来自失败调用的错误文本——被拒绝的私信、已不存在的评论、被撤销的主页令牌 | 在执行记录上,以及在路径中引发它的节点上 |
| 执行记录停止时所在的节点 | 画布叠加层中的当前节点标记 |
| 到达该节点为止所走的路径 | 该执行记录所固定的图版本上的已访问节点高亮 |
| 清理关闭该执行记录的原因 | 在执行记录上:7 天内无回复,或一个未运行的调度步骤 |
重试的范围很窄。delay 之后的调度恢复最多尝试三次,间隔从五秒开始逐渐扩大,第三次尝试后执行记录会被标记为失败。在执行记录遍历图时失败的操作不会被重试,也没有任何执行记录会从头重新运行。
执行记录失败的人不会被排除在活动之外。每人一条执行记录的规则只计算仍在运行中的执行记录,所以他们的下一个匹配事件会启动一条全新的执行记录。
- 每条执行记录都固定在它开始时所在的图版本上。在执行记录进行中保存活动,会让该执行记录保留在它自己的版本上,面板会依据它使用的版本回放它。
- 测试执行会运行整个图,但不会调用 Facebook 或 Instagram,也不会更改标签。
delay节点会结束测试执行,而不是调度它,并将该延迟记录为已跳过。 - 面板列出该活动最近的 20 条执行记录,最新的在前,测试执行标记为测试,且不会自动更新——刷新它才能查看一条执行记录进行到了哪里。