sentry-create-alert

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Create Sentry Alert

创建Sentry告警

Create alerts via Sentry's workflow engine API.
通过Sentry的工作流引擎API创建告警。

Invoke This Skill When

触发此技能的场景

  • User asks to "create a Sentry alert" or "set up notifications"
  • User wants to be emailed or notified when issues match certain conditions
  • User mentions priority alerts, de-escalation alerts, or workflow automations
  • User wants to configure Slack, PagerDuty, or email notifications for Sentry issues
  • 用户要求“创建Sentry告警”或“设置通知”
  • 用户希望当问题匹配特定条件时收到邮件或通知
  • 用户提及优先级告警、降级告警或工作流自动化
  • 用户希望为Sentry问题配置Slack、PagerDuty或邮件通知

Prerequisites

前置条件

  • curl
    available in shell
  • Sentry org auth token with
    alerts:write
    scope
  • 环境中已安装
    curl
  • 拥有
    alerts:write
    权限的Sentry组织认证令牌

Phase 1: Gather Configuration

阶段1:收集配置信息

Ask the user for any missing details:
DetailRequiredExample
Org slugYes
sentry
,
my-org
Auth tokenYes
sntryu_...
(needs
alerts:write
scope)
RegionYes (default:
us
)
us
us.sentry.io
,
de
de.sentry.io
Alert nameYes
"High Priority De-escalation Alert"
Trigger eventsYesWhich issue events fire the workflow
ConditionsOptionalFilter conditions before actions execute
Action typeYes
email
,
slack
, or
pagerduty
Action targetYesUser email, team, channel, or service
向用户询问缺失的详细信息:
详细信息是否必填示例
组织Slug
sentry
,
my-org
认证令牌
sntryu_...
(需具备
alerts:write
权限)
区域是(默认:
us
us
us.sentry.io
,
de
de.sentry.io
告警名称
"High Priority De-escalation Alert"
触发事件触发工作流的问题事件类型
过滤条件可选执行操作前的过滤条件
操作类型
email
,
slack
, 或
pagerduty
操作目标用户邮箱、团队、频道或服务

Phase 2: Look Up IDs

阶段2:查询ID

Use these API calls to resolve names to IDs as needed.
bash
API="https://{region}.sentry.io/api/0/organizations/{org}"
AUTH="Authorization: Bearer {token}"
根据需要使用以下API调用将名称解析为ID。
bash
API="https://{region}.sentry.io/api/0/organizations/{org}"
AUTH="Authorization: Bearer {token}"

Find user ID by email

通过邮箱查询用户ID

curl -s "$API/members/" -H "$AUTH" | python3 -c " import json,sys for m in json.load(sys.stdin): if m.get('email')=='USER_EMAIL' or m.get('user',{}).get('email')=='USER_EMAIL': print(m['user']['id']); break"
curl -s "$API/members/" -H "$AUTH" | python3 -c " import json,sys for m in json.load(sys.stdin): if m.get('email')=='USER_EMAIL' or m.get('user',{}).get('email')=='USER_EMAIL': print(m['user']['id']); break"

List teams

列出团队

curl -s "$API/teams/" -H "$AUTH" | python3 -c " import json,sys for t in json.load(sys.stdin): print(t['id'], t['slug'])"
curl -s "$API/teams/" -H "$AUTH" | python3 -c " import json,sys for t in json.load(sys.stdin): print(t['id'], t['slug'])"

List integrations (for Slack/PagerDuty)

列出集成(适用于Slack/PagerDuty)

curl -s "$API/integrations/" -H "$AUTH" | python3 -c " import json,sys for i in json.load(sys.stdin): print(i['id'], i['provider']['key'], i['name'])"
undefined
curl -s "$API/integrations/" -H "$AUTH" | python3 -c " import json,sys for i in json.load(sys.stdin): print(i['id'], i['provider']['key'], i['name'])"
undefined

Phase 3: Build Payload

阶段3:构建请求体

Trigger Events

触发事件

Pick which issue events fire the workflow. Use
logicType: "any-short"
(triggers must always use this).
TypeFires when
first_seen_event
New issue created
regression_event
Resolved issue recurs
reappeared_event
Archived issue reappears
选择触发工作流的问题事件类型。必须使用
logicType: "any-short"
(触发器始终需配置此参数)。
类型触发时机
first_seen_event
新问题创建时
regression_event
已解决的问题复发时
reappeared_event
已归档的问题重新出现时

Filter Conditions

过滤条件

Conditions that must pass before actions execute. Use
logicType: "all"
,
"any-short"
, or
"none"
.
TypecomparisonDescription
issue_priority_greater_or_equal
25
/
50
/
75
/
100
Priority >= Low/Medium/High/Critical
issue_priority_deescalating
true
Priority dropped below peak
event_frequency_count
<number>
Event count exceeds threshold
event_unique_user_frequency_count
<number>
Affected users exceed threshold
tagged_event
"key:value"
Event has specific tag
assigned_to
"<user_or_team_id>"
Issue assigned to target
Priority scale: Low=25, Medium=50, High=75, Critical=100.
Set
conditionResult
to
false
to invert (fire when condition is NOT met).
执行操作前必须满足的条件。可使用
logicType: "all"
,
"any-short"
"none"
类型比较值描述
issue_priority_greater_or_equal
25
/
50
/
75
/
100
优先级 >= 低/中/高/严重
issue_priority_deescalating
true
优先级低于峰值时
event_frequency_count
<number>
事件数量超过阈值时
event_unique_user_frequency_count
<number>
受影响用户数量超过阈值时
tagged_event
"key:value"
事件包含特定标签时
assigned_to
"<user_or_team_id>"
问题已分配给目标对象时
优先级对应关系:低=25,中=50,高=75,严重=100。
设置
conditionResult
false
可反转条件(当条件不满足时触发)。

Actions

操作

TypeKey Config
email
targetType
:
"user"
/
"team"
/
"issue_owners"
,
targetIdentifier
:
<id>
slack
integrationId
:
<id>
,
channel
:
"#name"
,
channel_id
:
<id>
pagerduty
integrationId
:
<id>
,
service
:
<id>
,
severity
:
"critical"
类型核心配置
email
targetType
:
"user"
/
"team"
/
"issue_owners"
,
targetIdentifier
:
<id>
slack
integrationId
:
<id>
,
channel
:
"#name"
,
channel_id
:
<id>
pagerduty
integrationId
:
<id>
,
service
:
<id>
,
severity
:
"critical"

Full Payload Structure

完整请求体结构

json
{
  "name": "<Alert Name>",
  "enabled": true,
  "environment": null,
  "config": { "frequency": 0 },
  "triggers": {
    "logicType": "any-short",
    "conditions": [
      { "type": "first_seen_event", "comparison": true, "conditionResult": true }
    ]
  },
  "actionFilters": [{
    "logicType": "all",
    "conditions": [
      { "type": "issue_priority_greater_or_equal", "comparison": 75, "conditionResult": true }
    ],
    "actions": [{
      "type": "email",
      "integrationId": null,
      "data": {},
      "config": {
        "targetType": "user",
        "targetIdentifier": "<user_id>",
        "targetDisplay": null
      }
    }]
  }]
}
frequency
: seconds between repeated notifications.
0
= no throttling,
1800
= 30 min.
json
{
  "name": "<Alert Name>",
  "enabled": true,
  "environment": null,
  "config": { "frequency": 0 },
  "triggers": {
    "logicType": "any-short",
    "conditions": [
      { "type": "first_seen_event", "comparison": true, "conditionResult": true }
    ]
  },
  "actionFilters": [{
    "logicType": "all",
    "conditions": [
      { "type": "issue_priority_greater_or_equal", "comparison": 75, "conditionResult": true }
    ],
    "actions": [{
      "type": "email",
      "integrationId": null,
      "data": {},
      "config": {
        "targetType": "user",
        "targetIdentifier": "<user_id>",
        "targetDisplay": null
      }
    }]
  }]
}
frequency
: 重复通知的间隔秒数。
0
= 不限制频率,
1800
= 30分钟。

Phase 4: Create the Alert

阶段4:创建告警

bash
curl -s -w "\n%{http_code}" -X POST \
  "https://{region}.sentry.io/api/0/organizations/{org}/workflows/" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{payload}'
Expect HTTP
201
. The response contains the workflow
id
.
bash
curl -s -w "\n%{http_code}" -X POST \
  "https://{region}.sentry.io/api/0/organizations/{org}/workflows/" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{payload}'
预期返回HTTP
201
状态码。响应结果中包含工作流
id

Phase 5: Verify

阶段5:验证

Confirm the alert was created and provide the UI link:
https://{org_slug}.sentry.io/monitors/alerts/{workflow_id}/
If the org lacks the
workflow-engine-ui
feature flag, the alert appears at:
https://{org_slug}.sentry.io/alerts/rules/
确认告警已创建,并提供UI链接:
https://{org_slug}.sentry.io/monitors/alerts/{workflow_id}/
若组织未启用
workflow-engine-ui
功能标志,告警将显示在以下地址:
https://{org_slug}.sentry.io/alerts/rules/

Managing Alerts

管理告警

bash
undefined
bash
undefined

List all workflows

列出所有工作流

curl -s "$API/workflows/" -H "$AUTH"
curl -s "$API/workflows/" -H "$AUTH"

Get one workflow

查询单个工作流

curl -s "$API/workflows/{id}/" -H "$AUTH"
curl -s "$API/workflows/{id}/" -H "$AUTH"

Delete a workflow

删除工作流

curl -s -X DELETE "$API/workflows/{id}/" -H "$AUTH"
curl -s -X DELETE "$API/workflows/{id}/" -H "$AUTH"

Expect 204

预期返回204状态码

undefined
undefined

Troubleshooting

故障排查

IssueSolution
401 UnauthorizedToken needs
alerts:write
scope
403 ForbiddenToken must belong to the target org
404 Not FoundCheck org slug and region (
us
vs
de
)
400 Bad RequestValidate payload JSON structure, check required fields
User ID not foundVerify email matches a member of the org
问题解决方案
401 Unauthorized令牌需要具备
alerts:write
权限
403 Forbidden令牌必须属于目标组织
404 Not Found检查组织Slug和区域(
us
de
400 Bad Request验证请求体JSON结构,检查必填字段
用户ID未找到确认邮箱属于组织成员