AI PLAY玩法更新持续收录
← 回到更新流

2026-10-14 · 原文发布日

站会阻塞项自动转 Jira 工单并跟进

TeamRetro 站会结束时触发,用 n8n Data Table 记录阻塞项与工单的对应关系,自动区分新增、遗留和已解决三类:新增项交给 OpenAI 判断可执行性并生成分类和工单标题,可执行的建 Jira 工单并把链接发到 Slack;遗留项每隔几次站会到 Jira 催办评论,解决后自动销项并留言。

原文要点

原模板在TeamRetro站会完成时触发,用TeamRetro deliveryId忽略重复webhook投递;从n8n Data Table按会议系列加载开放的阻塞项到工单映射,把每条更新分成新增、遗留、已解决。遗留项更新映射并按每隔几次站会到Jira加催办评论;已解决删除映射并在Jira留言;新增项交给OpenAI判断是否可执行并生成分类与Jira可用标题,可执行才建Jira工单、存issueKey与updateId映射,再把链接发到Slack。设置项含jiraUrl、teamChannel、staleAfter、blockerTopic。

这次做成什么

把站会里口头阻塞收敛成可追踪闭环:同一会系只认一张映射表,新增由AI先过筛再建Jira,遗留按节奏催办,解决自动销项。全程用隔离Jira项目、测试Slack频道与合成webhook演练,不接真实团队数据。

准备什么

  • 可配置integration webhook的TeamRetro工作区,并能复制Standup Completed的signing secret
  • 可创建Data Table与生产webhook的n8n实例,凭据与表结构不要写进导出JSON
  • OpenAI Chat Completions凭据,具体模型与参数以原模板为准,本站不指定
  • 隔离Jira项目的建单与评论权限、可选issue type,以及测试Slack频道

具体怎么做

  1. 建映射表并固定五列

    创建名为standup_blockers的n8n Data Table,列严格用updateId、issueKey、meetingSeriesId、personId、text;工作流引用这张表,后续靠updateId与meetingSeriesId判断同一阻塞是否跨站会延续。

  2. 接TeamRetro完成事件并去重

    在TeamRetro添加Standup Completed的integration webhook,目标用工作流生产webhook URL,把signing secret粘进TeamRetro Trigger节点;触发后先按deliveryId去重,重复投递直接丢弃,避免一次站会建两张工单。

  3. 按映射把更新分三类

    载入该meetingSeriesId的开放映射,结合发帖人personId与文本匹配:没有映射是新增;已有映射且仍在阻塞是遗留;本轮消失或标记解决是已解决。blockerTopic用来定位站会里哪一问算作阻塞来源。

  4. 新增过AI再决定是否建单

    仅新增项把文本交给OpenAI做可执行性判断,要求返回actionable、category、title;actionable为真才在所选Jira项目与issue type建单,写入issueKey与updateId映射,再把工单链接发到teamChannel;不可执行只记录不打扰。

  5. 遗留催办与解决销项

    遗留项把映射更新到最新updateId与text,并用计数按staleAfter控制的间隔在Jira加催办评论;已解决项删除映射并在对应Jira工单留言说明已清除,形成闭环。

可直接复制的材料

OpenAI阻塞项过筛提示词

本站独立编写提示词,可粘贴;模型名、temperature等参数原文未给,请在原模板核对,不要自行假设。

你是工程站会的阻塞项分诊助手。输入是一条团队成员在站会中填写的阻塞描述。只输出一个JSON对象,不要输出任何解释文字。字段定义:actionable为布尔,仅当描述包含可由本团队推进的具体下一步时为true;category为短中文类别,从 依赖方、环境权限、代码缺陷、需求不清、资源冲突、其他 中选一个;title为不超过40字、可直接作为Jira工单标题的中文祈使句;reason为不超过60字的中文理由。若描述只是情绪抱怨、缺少对象与动作、或需要外部客户先提供信息,则actionable必须为false。阻塞描述:{{$json.blockerText}}

Settings与字段映射示例

本站练习配置;jiraUrl、频道、项目与issue type需替换为隔离环境,staleAfter表示每隔几次站会催办一次。

{
  "jiraUrl": "https://practice.atlassian.net",
  "teamChannel": "#standup-blockers-test",
  "staleAfter": 2,
  "blockerTopic": "blocker",
  "dataTable": "standup_blockers",
  "columns": ["updateId", "issueKey", "meetingSeriesId", "personId", "text"],
  "jiraProject": "TEST",
  "jiraIssueType": "Task"
}

合成Data Table与webhook测试数据

上半是五列CSV,下半是本站虚构webhook payload;字段名需按TeamRetro实际投递核对,勿放真实密钥。

updateId,issueKey,meetingSeriesId,personId,text
u-1001,TEST-11,series-a,p-01,等待设计系统按钮规范
u-1002,TEST-12,series-a,p-02,测试环境缺少导出权限
---WEBHOOK---
{"deliveryId":"d-9f-01","event":"Standup Completed","meetingSeriesId":"series-a","updates":[{"updateId":"u-1002","personId":"p-02","text":"测试环境缺少导出权限,今天仍无法跑回归"},{"updateId":"u-1003","personId":"p-03","text":"支付网关沙盒回调超时,需要后端排查重试"}]}

输入与输出示例

本站虚构演示,未真实调用OpenAI、Jira或Slack,输出字段与上文合成输入一一对应。

输入

series-a本轮站会payload含deliveryId为d-9f-01;映射表已有u-1002对应TEST-12的开放映射且本轮文本仍是缺少导出权限,同时新增u-1003描述支付网关沙盒回调超时需要后端排查重试。

对应输出

u-1002判为carried over:映射text更新为今天仍无法跑回归,因距上次催办已满staleAfter为2次,在TEST-12添加评论“阻塞仍存在:测试环境缺少导出权限”。u-1003判为new,OpenAI返回{"actionable":true,"category":"代码缺陷","title":"排查支付网关沙盒回调超时重试","reason":"有明确对象与下一步"},建TEST-13,写入映射u-1003与TEST-13,并发Slack到#standup-blockers-test。

做完检查这些

  • 同一deliveryId重复投递时流程只处理一次,不会重复建单或重复评论
  • standup_blockers五列齐全且名称一致,新增、遗留、已解决能走到三条不同分支
  • actionable为false时不创建Jira、不写issueKey映射,也不发Slack链接
  • 遗留项达到staleAfter间隔才在Jira催办,已解决项删除映射并留下清除留言

容易卡住的地方

  • 必须粘贴TeamRetro的signing secret且用生产webhook URL,签名校验失败会让触发直接不可用
  • Data Table列名拼写不一致会导致映射读不到,新增会被反复当成全新阻塞
  • OpenAI可能把情绪化抱怨误判可执行,提示词要强制只输出JSON并限制actionable条件
  • 手动执行不会收到真实Standup Completed事件,需用合成payload模拟并先小流量验证
  • issue type与项目权限不足会在建单或评论时报错,先用隔离项目验证再接入正式会系

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Turn TeamRetro standup blockers into Jira issues with OpenAI and Slack
原作者
TeamRetro
原始发布日期
2026-10-14T15:36:01.745Z
来源
https://n8n.io/workflows/20961