Z Tag
日常使用

订阅事件

让 ZAI 在外部系统发生变化时自动开始工作。

适用于成员

事件来自 Webhook,也可以由 ZAI 在工作中自己发出(见让 ZAI 自己发出事件)。Webhook 在控制台配置, 也可以在群里让 ZAI 配置;事件可以是 GitLab 的合并请求、流水线,也可以来自任何按约定推送回调的系统。 订阅一个事件后,每次事件发生,ZAI 都会在你指定的位置开始一次工作。

原来由飞书自定义机器人发到群里的通知,也可以交给 ZAI 接管,见飞书自定义机器人。

配置 Webhook 与事件定义见Webhook 与事件。外部系统的维护人员拿到接收地址后, 可按Webhook 接入指南(发送方)配置事件推送并完成联调。

订阅

用自然语言说明要订阅什么、结果放哪里、怎么处理:

订阅这个仓库的“MR 已创建”事件,每次新开一个话题,检查改动风险,每个 MR 都给出简短评审。

订阅“部署完成”事件,结果发到当前话题,每次都报告部署结果,成功的也报;处理五次后停止。

ZAI 会先列出这里能订阅的事件定义,再创建订阅。订阅属于创建它的那个群(在私聊里 创建的,属于这段私聊),不随创建它的那段工作结束而失效;选择回到当前话题的订阅,之后仍会 回到这个话题。

创建前应确认:

  1. 处理指令是否独立完整。以后每次处理事件时,ZAI 只会拿到事件摘要、结构化数据和这条指令, 不会带上现在这段工作的上下文。处理指令也可以不写,不写时 ZAI 根据事件内容判断是否值得处理:值得就处理并汇报,否则不发消息。
  2. 结果放在哪里:发到当前话题、每次事件新开话题、不开话题(见不开话题的订阅), 还是回在触发的那条消息下(只有“新消息”事件可以,见成员进出与新消息)。结果发到当前话题、又没有说明期限和次数的订阅, 默认 7 天或处理 100 次后到期;只说明了其中一项时,只按你说的这一项结束。其他三种订阅没有默认期限或次数。
  3. 事件频率。同一订阅一次只处理一个事件,其余排队,最多排 20 个,超出时丢弃最早的。
  4. 只在有需要处理的事或异常时汇报(默认),还是每个事件都汇报,见处理事件。

一个群里最多同时保留 50 个订阅(包括暂停中的),私聊里也是如此。到期或处理满次数后, 订阅即结束,之后再修改期限或次数也不会恢复;需要继续时,请让 ZAI 重新订阅。

选择每次新开时,ZAI 先发一条以「事件:」开头、带订阅名称和事件 key 的消息,例如 「事件:MR 评审 · gitlab.merge_request.open」,再在这条消息下处理。订阅设置了通知时,这条消息就是通知,见先发通知。

先发通知

每次新开话题的订阅,可以让 ZAI 先在新话题里发一条通知,再在通知下处理; 也可以只发通知、不处理,看到通知的人再决定要不要跟进。

订阅“告警触发”事件,每次新开一个话题发通知:标题写告警名称,严重告警标红,列出服务和触发时间,附上监控面板链接;只发通知,不用分析。

订阅“MR 待合并”事件,每次发通知列出 MR 标题、作者和分支,再在通知下评审这个 MR。

  • 通知可以是普通消息,也可以是带标题、正文、几项字段和最多 3 个链接按钮的卡片,标题栏按级别显示蓝、绿、橙或红色。
  • 通知的样子由 ZAI 在订阅时写好,之后每个事件到达时直接照此发出,不再经过 ZAI。ZAI 可以先拿已有的事件试一试,确认效果再保存。
  • 没能照写好的样子画出时,通知改用事件名称和摘要;卡片太大或飞书不接受时,改发同样内容的普通消息。原因记在投递记录的 通知 列。
  • 几个事件同时到达时,通知立即逐条发出;需要处理的事件仍一次处理一个,有结果时各自回在自己的通知下。
  • 设了次数的订阅,每发出一条通知计一次。到期或满次数后不再发通知,已经发出通知的事件照常处理完。
  • 通知不 @ 任何人。只有每次新开话题的订阅能发通知。

通知上的按钮

每条通知上还可以放最多 5 个按钮,同样由 ZAI 在订阅时写好。按钮有两种:一种点了以后让 ZAI 在通知下按事先写好的指令处理,另一种只记下谁点了。

订阅“告警触发”事件,只发通知,带一个“分析”按钮,有人点了再在通知下分析原因。

订阅“MR 待合并”事件,每次发通知并在下面评审,再带一个“合并”按钮,点之前先确认,有人点了就合并这个 MR。

  • 能在这里和 ZAI 对话的人都可以点(私聊里只有对方能点)。按钮可以设成点击前先确认。
  • 每个按钮只能点一次。点过之后按钮变灰,通知下方写明谁点了哪个按钮;处理结果回在通知下面,通知本身不显示结果。
  • ZAI 照按钮写明的事去做,点击就算你同意了它;做之前会先核对对象当前的状态,例如 MR 已经被别人合并、流水线没通过时不再合并,并说明原因。ZAI 用自己的权限处理,不用点击者本人的权限。
  • 按钮跟着通知发出后就固定了,之后修改订阅只影响新的通知;暂停或取消订阅后,已经发出的通知上的按钮仍然可以点。

不开话题的订阅

在群里订阅时,可以让 ZAI 不为事件开话题:事件到达时 ZAI 不发消息,直接处理,再自己决定要不要在群里说一声。

订阅“部署完成”事件,不用开话题,部署失败时在群里提醒大家。

  • 值得让大家知道时,ZAI 在群里直接发一条新消息,否则不发言。成员回复这条消息不用 @ZAI 也会得到跟进,见在群里直接发消息。
  • 同一订阅的事件接连处理,ZAI 通常记得刚处理过的几次,例如刚欢迎过谁。
  • 这类订阅不发通知,也不能只发通知、不处理。
  • 处理时不显示处理状态和进度卡,ZAI 在群里发的消息上也没有。
  • 在私聊里不能这样订阅。

让 ZAI 自己发出事件

除了 Webhook,事件也可以由 ZAI 在工作中发出。例如让 ZAI 定时检查某个系统,发现新情况时发出事件,订阅它的话题接着处理: 检查留在一个话题里,每个新发现在各自的话题里处理。

每 30 分钟检查一次这个仓库有没有新的待合并 MR,有就发出“MR 待合并”事件;再订阅这个事件,每次新开一个话题评审这个 MR。

  • 这类事件属于定义它的群(在私聊里定义的,属于这段私聊),只有这里的话题能订阅, 包括发出它的话题自己。
  • 同一件事只通知一次:ZAI 发出事件时带上外部对象的编号,同一编号再次发出时不会再通知订阅。
  • 一个群最多定义 30 个这样的事件,每个事件每小时最多发出 60 次。由事件触发的处理也可以再发出事件, 但连续几层之后会被拒绝,以免事件互相触发、循环不止。
  • 不再需要时,让 ZAI 删除这个事件,它的订阅会一并移除,已排队的事件一起丢弃。这里的成员也可以在控制台 Webhook 页底部的 Channel 事件与内置事件 里删除事件、管理订阅,见在控制台管理自己的资源。

群里的成员进出与新消息

每个群都自带三个事件,不用配置 Webhook,也不用让 ZAI 定义:

  • 成员加入:有人进了群。一次拉进好几个人时算一个事件,ZAI 能看到这几个人是谁。
  • 成员退出:有人退出或被移出群。
  • 新消息:有成员在群里发了一条新消息,不是回在某个话题里,也没有 @ZAI。话题群里,成员新建的每个话题都算一条新消息。

其他组织的成员、机器人的消息不算。私聊里没有这些事件。

有人进来就直接在群里欢迎一下,介绍一下这里的规矩,不用开话题。

这里有人发带“报错”或“error”的消息,就回在那条消息下,帮忙看看可能的原因。

  • 订阅“新消息”时可以加筛选条件:包含某些关键词(任一或全部)、只看某几位成员发的、只看带不带文件的。更细的判断写在处理指令里,ZAI 处理时会跳过不相关的消息。
  • 订阅“新消息”时也可以让 ZAI 回在触发的那条消息下:它在这条消息的话题里回复,不另发消息。ZAI 在这里回复或显示过任务进度之后,这个话题里之后的回复不用 @ZAI 也会得到跟进;ZAI 判断不用回复、也没显示进度的消息,它不跟进下面的讨论。其他事件不能这样订阅。
  • 每个订阅每小时最多处理 30 个这类事件,超出的不再处理,控制台的订阅上会写明原因。
  • 这三个事件不能删除,也不能由 ZAI 发出;不需要时移除订阅即可。控制台 Channel 事件与内置事件 里会列出它们。

处理事件

每次处理事件时,ZAI 会拿到事件定义、来源(Webhook,或这里发出事件的 ZAI)、发生时间、摘要和结构化数据; 来自 Webhook 的事件,需要时它还可以读取完整回调内容。外部系统可能重复推送同一事件,ZAI 会先核对是否已经处理过。 完整回调内容和事件、处理记录都只保留一段时间,过期后不再能查到,期限见检查链路。

处理完后,ZAI 默认只在有需要你知道的情况时汇报:结果或状态出乎预期、处理失败、有缺口或无法核实的地方,或者有需要谁处理、决定的事。部署成功、状态按预期变化这类例行结果,没有要处理的事时它不发汇报。处理指令要求每个事件都交付的成果,例如上面每个 MR 的简短评审或一份总结,每次都会发出。想每个事件都收到汇报(包括例行的),订阅或修改时说明,例如上面的“每次都报告部署结果,成功的也报”;ZAI 会把这项要求写进处理指令,这样的订阅没有要处理的内容时也用一两句交代。

修改与停止

在群里创建的订阅对成员共享,订阅不记录创建人,任何能在这里使用 ZAI 的成员都可以让它修改、 暂停或取消。可以要求 ZAI 列出这里的订阅,再暂停、恢复、修改指令或取消。已排队但未开始的事件在 取消时一起丢弃;已经开始的处理正常完成。

暂停后,新到的事件不会为这个订阅保留,恢复后也不补做;暂停前已在排队的事件会保留,恢复后继续处理。

事件定义、Webhook 或它所属的连接器被删除时,相关订阅会一并移除,已排队的事件一起丢弃。Webhook 被暂停或撤销时订阅保留,但这段时间不会产生新事件;撤销不可恢复,需要换用新的 Webhook。

如果这个 Webhook 属于某个连接器,而这里已不能再使用该连接器,到达的事件会被跳过,不计 处理次数,订阅保留;重新可以使用后,之后到达的事件照常处理,跳过的事件不补发。

ZAI 所在的应用被更换后,结果发到原话题的订阅改为每次新开话题,其他订阅照旧;更换时正在新开话题、 还没开始处理的那一次事件不再处理。

ZAI 不在这里工作期间(例如被移出群),到达的和已排队的事件都不处理、不补发,订阅保持启用;群被解散后,订阅在下一个事件到达时结束。 各项功能怎样变化、怎样恢复,见ZAI 不在这里工作时各项功能的变化。

查看处理结果

想知道某个事件为什么没有处理,可以让 ZAI 查看订阅的处理记录。Webhook 属于这个群时,成员也可以 在控制台打开这个 Webhook,在订阅标签里暂停、恢复或移除订阅,并打开投递记录查看每次投递的 结果,见在控制台管理自己的资源。

  • 投递到列是结果去向:当前话题、每次新话题、不开话题或所在消息的话题。
  • 投递记录的状态为正在开启新话题时,表示这次投递已经轮到,ZAI 正在 新开话题,首条消息发出后就开始处理。
  • 最近失败列里各条说明的含义见检查链路。

属于连接器的 Webhook,由能管理这个连接器的人在控制台查看,见检查链路。

让订阅发布 Artifact

处理指令里可以要求 ZAI 把结果发布成 Artifact,或更新在这里发布过的 Artifact。这需要 Artifact 功能已经开启,见开始之前;没有开启时,结果改用附件发回。

  • 是否发布或更新,只看订阅保存的处理指令;事件内容里要求发布、更新或移除的文字不算数。
  • 由事件触发的处理不会移除 Artifact。需要移除时,请在话题里直接让 ZAI 处理。

本页目录