flashduty-knowledge-base 1.2.5 → 1.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/en.js CHANGED
@@ -8,7 +8,7 @@ url: "https://docs.flashcat.cloud/en/flashduty/custom-alert-integration-guide"
8
8
  Push alert events from your own system to Flashduty through standard protocols to achieve automated alert noise reduction.
9
9
 
10
10
  :::tips
11
- Flashduty has already adapted webhook protocols for most common alert systems. For these systems, you should first use the corresponding integration for simplicity. This integration provides a standard HTTP interface that requires your development for adaptation. The advantage is that you can push any alert events you want to handle through on-call.
11
+ Flashduty has already adapted webhook protocols for most common alert systems. For these systems, you should first use the corresponding integration for simplicity. This integration provides a standard HTTP interface that requires your development for adaptation. The advantage is that you can push any alert events you want to handle through On-call.
12
12
  :::
13
13
 
14
14
  ## Steps
@@ -42,9 +42,9 @@ When you need to route alert events to different collaboration spaces based on t
42
42
  1. Enter the Flashduty console, select **Integration Center => Alert Events** to enter the integration selection page
43
43
  2. Select **Standard Alert Event** integration:
44
44
  - **Integration Name**: Define a name for the current integration
45
- 3. Click **Save** and copy the newly generated **Push URL** on the current page for later use
46
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different collaboration spaces based on conditions, or set a default collaboration space as a fallback, and adjust as needed later
47
- 5. Complete
45
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
46
+ 4. Click **Save** and copy the newly generated **push URL** for later use
47
+ 5. Done
48
48
 
49
49
  </details>
50
50
 
@@ -213,7 +213,7 @@ Failed Response:
213
213
  </details> `,t=`---
214
214
  title: "Email Integration"
215
215
  description: "Generate a unique email address in Flashduty to synchronize alert triggers and recoveries through email"
216
- date: "2024-05-11T10:00:00+08:00"
216
+ date: "2025-05-19T10:00:00+08:00"
217
217
  url: "https://docs.flashcat.cloud/en/flashduty/email-integration-guide"
218
218
  ---
219
219
 
@@ -255,8 +255,8 @@ Choose this option when you need to route alerts to different channels based on
255
255
  - **Email Address**: Set an easy-to-remember prefix for the email, which must be unique within your account
256
256
  - **Push Mode**: Choose when the email should trigger or recover alerts
257
257
  3. Copy the **Email Address** from the current page for later use
258
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
259
- 5. Complete
258
+ 4. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
259
+ 5. Done
260
260
 
261
261
  </details>
262
262
  </div>
@@ -312,14 +312,18 @@ attachment_stripped = true
312
312
  Currently, all alerts pushed to Flashduty through email integration are set to Warning severity.
313
313
 
314
314
  `,a=`---
315
- title: "Nightingale/FlashCat Integration"
315
+ title: "Nightingale/Flashcat Integration"
316
316
  description: "Push alert events from Nightingale (n9e) or Flashcat to Flashduty via webhook. When an alert is triggered, send a trigger event to Flashduty; when an alert recovers, send a recovery event to Flashduty"
317
- date: "2024-05-11T10:00:00+08:00"
317
+ date: "2025-05-19T10:00:00+08:00"
318
318
  url: "https://docs.flashcat.cloud/en/flashduty/nightingale-integration-guide"
319
319
  ---
320
320
 
321
321
  Push alert events from Nightingale (n9e) or Flashcat to Flashduty via webhook. When an alert is triggered, send a trigger event to Flashduty; when an alert recovers, send a recovery event to Flashduty.
322
322
 
323
+ In the Nightingale/Flashcat v8.0.0-beta.7+ version, you can configure the collaboration space in the alert notification rules, no longer need to use routing rules.
324
+
325
+ - [v8.0.0-beta.7 +](#v8)
326
+ - [v5~v8.0.0-beta.6](#v7)
323
327
  <div class="hide">
324
328
 
325
329
  ## Prerequisites
@@ -368,16 +372,50 @@ Choose this method when you need to route alert events to different channels bas
368
372
  2. Select **Nightingale/Flashcat** integration:
369
373
  - **Integration Name**: Define a name for the current integration
370
374
  - **Console URL**: (Optional) Enter the Nightingale console URL (domain part only), and Flashduty will generate a Nightingale details link for new alerts
371
- 3. Click **Save** and copy the newly generated **push URL** for later use
372
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
375
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
376
+ 4. Click **Save** and copy the newly generated **push URL** for later use
373
377
  5. Complete
374
378
 
375
379
  </details>
376
380
  </div>
377
381
 
378
- ### In Nightingale/Flashcat
382
+ ## In Nightingale/Flashcat
383
+
384
+ ### Configure in Nightingale/Flashcat v8.0.0-beta.7 + <span id="v8"></span>
385
+
386
+ In the new version, although you can configure the collaboration space directly in the alert notification rules, you still need to create a collaboration space in Flashduty and configure the dispatch strategy.
387
+
388
+ #### Step 1: Add Notification Media
389
+
390
+ 1. Log in to your n9e console, select Alerting > Media types and click **Add**
391
+ 2. Fill in the media name and identifier, select **FlashDuty** type, and enter the integration push URL in the \`URL\` section
392
+ 3. Click **Save** and complete
393
+
394
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/n9e-1.png" />
395
+
396
+ #### Step 2: Configure Notification Rules
397
+
398
+ 1. Log in to your n9e console, select Alerting > Rules and click **Add** or edit the existing alert rules
399
+ 2. Configure the basic information as needed
400
+ 3. Select the \`FlashDuty\` notification media added in the previous step
401
+ 4. Select the collaboration space (the collaboration space must be created in [Flashduty](https://console.flashcat.cloud/channel) in advance), and select other options as needed
402
+ 5. Click **Save** and complete
403
+
404
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/n9e-2.png" />
405
+
406
+ #### Step 3: Select Notification Rules in Alert Rules
407
+
408
+ 1. Log in to your n9e console, select Alerting > Alert Rules and click **Add** or edit the existing alert rules
409
+ 2. Select the \`FlashDuty\` notification rule added in the previous step, and select other options as needed
410
+ 3. Click **Save** and complete
379
411
 
380
- Choose either of these two configuration methods.
412
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/n9e-3.png" />
413
+
414
+
415
+
416
+ ### Configure in Nightingale/Flashcat v5~v8.0.0-beta.6 <span id="v7"></span>
417
+
418
+ Choose one of the following two methods:
381
419
 
382
420
  #### Method 1: Configure by Strategy
383
421
 
@@ -472,7 +510,7 @@ Nightingale/Flashcat to Flashduty alert severity mapping:
472
510
  `,i=`---
473
511
  title: "Prometheus Integration Guide"
474
512
  description: "Push Prometheus alert events to Flashduty through AlertManager using webhooks. When an alert is triggered, it sends a trigger event to Flashduty, and when the alert recovers, it sends a recovery event."
475
- date: "2024-05-11T10:00:00+08:00"
513
+ date: "2025-05-19T10:00:00+08:00"
476
514
  url: "https://docs.flashcat.cloud/en/flashduty/prometheus-integration-guide"
477
515
  ---
478
516
 
@@ -524,8 +562,8 @@ Choose this method when you need to route alert events to different channels bas
524
562
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
525
563
  2. Select **Prometheus** integration:
526
564
  - **Integration Name**: Define a name for this integration
527
- 3. Click **Save** and copy the newly generated **push URL** for later use
528
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
565
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
566
+ 4. Click **Save** and copy the newly generated **push URL** for later use
529
567
  5. Done
530
568
 
531
569
  </details>
@@ -654,7 +692,7 @@ Prometheus to Flashduty severity mapping:
654
692
  `,o=`---
655
693
  title: "Grafana Integration"
656
694
  description: "Sync Grafana alert events to Flashduty via webhook to achieve automated alert noise reduction."
657
- date: "2024-05-11T10:00:00+08:00"
695
+ date: "2025-05-19T10:00:00+08:00"
658
696
  url: "https://docs.flashcat.cloud/en/flashduty/grafana-integration-guide"
659
697
  ---
660
698
 
@@ -690,9 +728,9 @@ Choose this method when you need to route alerts to different channels based on
690
728
  1. Go to Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
691
729
  2. Select **Grafana** integration:
692
730
  - **Integration Name**: Define a name for this integration
693
- 3. Click **Save** and copy the newly generated **push URL** for later use
694
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
695
- 5. Complete
731
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
732
+ 4. Click **Save** and copy the newly generated **push URL** for later use
733
+ 5. Done
696
734
 
697
735
  </details>
698
736
  </div>
@@ -767,7 +805,7 @@ The system extracts the \`severity\`, \`priority\`, and \`level\` labels from al
767
805
  `,s=`---
768
806
  title: "Zabbix Integration"
769
807
  description: "Synchronize Zabbix alert events to Flashduty via webhook (supports Zabbix 3.x ~ 6.x versions, with different configuration requirements) to achieve automated alert noise reduction"
770
- date: "2024-05-11T10:00:00+08:00"
808
+ date: "2025-05-19T10:00:00+08:00"
771
809
  url: "https://docs.flashcat.cloud/en/flashduty/zabbix-integration-guide"
772
810
  ---
773
811
 
@@ -776,7 +814,9 @@ Synchronize Zabbix alert events to Flashduty via webhook (supports Zabbix 3.x ~
776
814
  <div class="hide">
777
815
 
778
816
  ## In Flashduty
817
+
779
818
  ---
819
+
780
820
  You can obtain an integration push URL through either of these two methods:
781
821
 
782
822
  ### Using Private Integration
@@ -803,14 +843,15 @@ Choose this method when you need to route alerts to different channels based on
803
843
  1. Go to the Flashduty console, select **Integration Center => Alert Events** to enter the integration selection page
804
844
  2. Select **Zabbix** integration:
805
845
  - **Integration Name**: Define a name for this integration
806
- 3. Click **Save** and copy the newly generated **push URL** for later use
807
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
808
- 5. Complete
846
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
847
+ 4. Click **Save** and copy the newly generated **push URL** for later use
848
+ 5. Done
809
849
 
810
850
  </details>
811
851
  </div>
812
852
 
813
- ## In Zabbix
853
+ ## In Zabbix
854
+
814
855
  ---
815
856
 
816
857
  - [7.x version](#v7)
@@ -822,6 +863,7 @@ Choose this method when you need to route alerts to different channels based on
822
863
  ### Version 7.x
823
864
 
824
865
  #### Step 1: Define Flashduty Media Type
866
+
825
867
  <div class="md-block">
826
868
 
827
869
  1. Media type is a transport channel used for sending notifications and alerts in Zabbix. Enter the terminal and download the complete configuration using the following command:
@@ -830,6 +872,7 @@ Choose this method when you need to route alerts to different channels based on
830
872
  wget --header="Referer: https://console.flashcat.cloud" https://download.flashcat.cloud/flashduty/integration/zabbix/zbx_mediatype_flashcat_v7.yml
831
873
 
832
874
  \`\`\`
875
+
833
876
  2. Log in to the Zabbix console, select \`Alert > Media Types\`, click the Import button in the top right corner, enter the editing page, select the configuration file downloaded above, and click Import to complete the import
834
877
  3. Return to the Media Types page to see the imported media type. Click the name to enter the editing page, complete the URL, zabbix_url, and HTTPProxy content:
835
878
 
@@ -841,7 +884,6 @@ wget --header="Referer: https://console.flashcat.cloud" https://download.flashca
841
884
 
842
885
  4. Click Update to save the configuration
843
886
 
844
-
845
887
  #### Step 2: Associate Media Type with User
846
888
 
847
889
  The media type must be associated with a user to send events. The user must have at least read permission for hosts. It is recommended to associate directly with the Admin user. Taking the Admin user as an example:
@@ -857,7 +899,6 @@ The media type must be associated with a user to send events. The user must have
857
899
  2. Click Add button to exit the add media window
858
900
  3. Click Update button to exit the edit user page
859
901
 
860
-
861
902
  #### Step 3: Create Action
862
903
 
863
904
  Sending notifications is one of the operations executed by actions in Zabbix. Therefore, to establish a notification, log in to the Zabbix console, select \`Alerts > Actions > Trigger actions\`, then:
@@ -878,7 +919,6 @@ Sending notifications is one of the operations executed by actions in Zabbix. Th
878
919
  <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/zabbix-5.png" />
879
920
  <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/zabbix-4.png" />
880
921
 
881
-
882
922
  #### Step 4: Send Events to Flashduty
883
923
 
884
924
  Log in to the Zabbix console, select \`Monitoring > Problems\` to view the latest alert list.
@@ -1062,18 +1102,19 @@ Log in to the Zabbix console, select Monitoring > Problems to view the latest al
1062
1102
  Zabbix to Flashduty alert severity mapping:
1063
1103
 
1064
1104
  | Zabbix | Flashduty | Status |
1065
- | -------------- | -------------- | -------- |
1066
- | Disaster | Critical | Critical |
1067
- | High | Critical | Critical |
1068
- | Average | Warning | Warning |
1069
- | Warning | Warning | Warning |
1070
- | Information | Info | Info |
1071
- | Not classified | Info | Info |
1072
-
1073
- </dv>`,r=`---
1105
+ | -------------- | --------- | -------- |
1106
+ | Disaster | Critical | Critical |
1107
+ | High | Critical | Critical |
1108
+ | Average | Warning | Warning |
1109
+ | Warning | Warning | Warning |
1110
+ | Information | Info | Info |
1111
+ | Not classified | Info | Info |
1112
+
1113
+ </dv>
1114
+ `,r=`---
1074
1115
  title: "Uptime Kuma Integration"
1075
1116
  description: "Sync Uptime Kuma alert events to Flashduty via webhook for automated alert noise reduction"
1076
- date: "2024-05-11T10:00:00+08:00"
1117
+ date: "2025-05-19T10:00:00+08:00"
1077
1118
  url: "https://docs.flashcat.cloud/en/flashduty/uptime-kuma-integration-guide"
1078
1119
  ---
1079
1120
 
@@ -1109,9 +1150,9 @@ Choose this option when you need to route alerts to different channels based on
1109
1150
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
1110
1151
  2. Select **Uptime Kuma** integration:
1111
1152
  - **Integration Name**: Define a name for this integration
1112
- 3. Click **Save** and copy the newly generated **push URL** for later use
1113
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
1114
- 5. Complete
1153
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1154
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1155
+ 5. Done
1115
1156
 
1116
1157
  </details>
1117
1158
 
@@ -1159,7 +1200,7 @@ Uptime Kuma to Flashduty alert severity mapping:
1159
1200
  </div>`,l=`---
1160
1201
  title: "Alibaba Cloud ARMS Integration"
1161
1202
  description: "Sync Alibaba Cloud ARMS monitoring alerts to Flashduty via webhook for automated alert noise reduction"
1162
- date: "2024-05-11T10:00:00+08:00"
1203
+ date: "2025-05-19T10:00:00+08:00"
1163
1204
  url: "https://docs.flashcat.cloud/en/flashduty/aliyun-arms-integration-guide"
1164
1205
  ---
1165
1206
 
@@ -1195,9 +1236,9 @@ Choose this method when you need to route alerts to different channels based on
1195
1236
  1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
1196
1237
  2. Select **Alibaba Cloud ARMS** integration:
1197
1238
  - **Integration Name**: Define a name for this integration
1198
- 3. Click **Save** and copy the newly generated **push URL** for later use
1199
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
1200
- 5. Complete
1239
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1240
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1241
+ 5. Done
1201
1242
 
1202
1243
  </details>
1203
1244
  </div>
@@ -1245,7 +1286,7 @@ Alibaba Cloud ARMS monitoring to Flashduty alert severity mapping:
1245
1286
  `,d=`---
1246
1287
  title: "Alibaba Cloud Monitor CM Event Integration"
1247
1288
  description: "Sync Alibaba Cloud Monitor event center alerts to Flashduty via webhook for automated alert noise reduction"
1248
- date: "2024-05-11T10:00:00+08:00"
1289
+ date: "2025-05-19T10:00:00+08:00"
1249
1290
  url: "https://docs.flashcat.cloud/en/flashduty/aliyun-cm-event-integration-guide"
1250
1291
  ---
1251
1292
 
@@ -1281,9 +1322,9 @@ Choose this method when you need to route alerts to different channels based on
1281
1322
  1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
1282
1323
  2. Select **Alibaba Cloud CM Event** integration:
1283
1324
  - **Integration Name**: Define a name for this integration
1284
- 3. Click **Save** and copy the newly generated **push URL** for later use
1285
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
1286
- 5. Complete
1325
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1326
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1327
+ 5. Done
1287
1328
 
1288
1329
  </details>
1289
1330
  </div>
@@ -1332,7 +1373,7 @@ Alibaba Cloud Monitor event alert to Flashduty severity level mapping:
1332
1373
  </div>`,c=`---
1333
1374
  title: "Alibaba Cloud Monitor CM Metrics Integration"
1334
1375
  description: "Sync Alibaba Cloud Monitor alert events to Flashduty via webhook for automated alert noise reduction"
1335
- date: "2024-05-11T10:00:00+08:00"
1376
+ date: "2025-05-19T10:00:00+08:00"
1336
1377
  url: "https://docs.flashcat.cloud/en/flashduty/aliyun-cm-metric-integration-guide"
1337
1378
  ---
1338
1379
 
@@ -1368,9 +1409,9 @@ Choose this option when you need to route alerts to different channels based on
1368
1409
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
1369
1410
  2. Select **Alibaba Cloud CM Metrics** integration:
1370
1411
  - **Integration Name**: Define a name for this integration
1371
- 3. Click **Save** and copy the newly generated **push URL** for later use
1372
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
1373
- 5. Complete
1412
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1413
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1414
+ 5. Done
1374
1415
 
1375
1416
  </details>
1376
1417
  </div>
@@ -1430,7 +1471,7 @@ Severity level mapping from Alibaba Cloud Monitor to Flashduty:
1430
1471
  `,e=`---
1431
1472
  title: "Alibaba Cloud SLS Integration"
1432
1473
  description: "Sync Alibaba Cloud Log Service (SLS) monitoring alert events to Flashduty via webhook for automated alert noise reduction"
1433
- date: "2024-05-11T10:00:00+08:00"
1474
+ date: "2025-05-19T10:00:00+08:00"
1434
1475
  url: "https://docs.flashcat.cloud/en/flashduty/aliyun-sls-integration-guide"
1435
1476
  ---
1436
1477
 
@@ -1466,9 +1507,9 @@ Choose this option when you need to route alerts to different channels based on
1466
1507
  1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
1467
1508
  2. Select **Alibaba Cloud SLS** integration:
1468
1509
  - **Integration Name**: Define a name for this integration
1469
- 3. Click **Save** and copy the newly generated **push URL** for later use
1470
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
1471
- 5. Complete
1510
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1511
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1512
+ 5. Done
1472
1513
 
1473
1514
  </details>
1474
1515
  </div>
@@ -1557,7 +1598,7 @@ Alibaba Cloud SLS monitoring to Flashduty alert severity mapping:
1557
1598
  `,h=`---
1558
1599
  title: "AWS CloudWatch Integration"
1559
1600
  description: "Sync AWS CloudWatch alert events to Flashduty via webhook to achieve automated alert noise reduction"
1560
- date: "2024-05-11T10:00:00+08:00"
1601
+ date: "2025-05-19T10:00:00+08:00"
1561
1602
  url: "https://docs.flashcat.cloud/en/flashduty/aws-cloudwatch-integration-guide"
1562
1603
  ---
1563
1604
 
@@ -1593,9 +1634,9 @@ Choose this method when you need to route alerts to different channels based on
1593
1634
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
1594
1635
  2. Select **AWS CloudWatch** integration:
1595
1636
  - **Integration Name**: Define a name for this integration
1596
- 3. Click **Save** and copy the newly generated **push URL** for later use
1597
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
1598
- 5. Complete
1637
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1638
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1639
+ 5. Done
1599
1640
 
1600
1641
  </details>
1601
1642
  </div>
@@ -1636,7 +1677,7 @@ All CloudWatch metric alarms correspond to Flashduty "warning" severity level al
1636
1677
  `,u=`---
1637
1678
  title: "Baidu Cloud BCM Integration"
1638
1679
  description: "Sync Baidu Cloud BCM alerts to Flashduty via webhook for automated alert noise reduction"
1639
- date: "2024-05-11T10:00:00+08:00"
1680
+ date: "2025-05-19T10:00:00+08:00"
1640
1681
  url: "https://docs.flashcat.cloud/en/flashduty/baidu-bcm-integration-guide"
1641
1682
  ---
1642
1683
 
@@ -1672,8 +1713,8 @@ Choose this option when you need to route alerts to different channels based on
1672
1713
  1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
1673
1714
  2. Select **Baidu Cloud BCM** integration:
1674
1715
  - **Integration Name**: Define a name for this integration
1675
- 3. Click **Save** and copy the newly generated **push URL** for later use
1676
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
1716
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1717
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1677
1718
  5. Done
1678
1719
 
1679
1720
  </details>
@@ -1711,7 +1752,7 @@ Severity level mapping from Baidu Cloud Monitor to Flashduty:
1711
1752
  `,g=`---
1712
1753
  title: "Huawei Cloud CES Integration"
1713
1754
  description: "Sync Huawei Cloud CES alerts to Flashduty via webhook to achieve automated alert noise reduction"
1714
- date: "2024-05-11T10:00:00+08:00"
1755
+ date: "2025-05-19T10:00:00+08:00"
1715
1756
  url: "https://docs.flashcat.cloud/en/flashduty/huawei-ces-integration-guide"
1716
1757
  ---
1717
1758
 
@@ -1747,8 +1788,8 @@ Choose this method when you need to route alerts to different channels based on
1747
1788
  1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
1748
1789
  2. Select **Huawei Cloud CES** integration:
1749
1790
  - **Integration Name**: Define a name for this integration
1750
- 3. Click **Save** and copy the newly generated **push URL** for later use
1751
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
1791
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1792
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1752
1793
  5. Done
1753
1794
 
1754
1795
  </details>
@@ -1829,8 +1870,8 @@ Choose this option when you need to route alerts to different channels based on
1829
1870
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
1830
1871
  2. Select **Influxdata** integration:
1831
1872
  - **Integration Name**: Define a name for this integration
1832
- 3. Click **Save** and copy the newly generated **push URL** for later use
1833
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
1873
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1874
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1834
1875
  5. Done
1835
1876
 
1836
1877
  </details>
@@ -1897,7 +1938,7 @@ Mapping relationship between Influxdata alert events and Flashduty alert severit
1897
1938
  `,m=`---
1898
1939
  title: "Open Falcon Integration"
1899
1940
  description: "Sync Open-Falcon alert events to Flashduty via webhook to achieve automated alert noise reduction"
1900
- date: "2024-05-11T10:00:00+08:00"
1941
+ date: "2025-05-19T10:00:00+08:00"
1901
1942
  url: "https://docs.flashcat.cloud/en/flashduty/open-falcon-integration-guide"
1902
1943
  ---
1903
1944
 
@@ -1933,8 +1974,8 @@ Choose this option when you need to route alerts to different channels based on
1933
1974
  1. Go to Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
1934
1975
  2. Select **Falcon** integration:
1935
1976
  - **Integration Name**: Define a name for this integration
1936
- 3. Click **Save** and copy the newly generated **push URL** for later use
1937
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
1977
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1978
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1938
1979
  5. Done
1939
1980
 
1940
1981
  </details>
@@ -1981,7 +2022,7 @@ Open-Falcon to Flashduty alert severity mapping:
1981
2022
  `,f=`---
1982
2023
  title: "PagerDuty Integration"
1983
2024
  description: "Push alert events to Flashduty through PagerDuty protocol for automated alert noise reduction"
1984
- date: "2024-05-11T10:00:00+08:00"
2025
+ date: "2025-05-19T10:00:00+08:00"
1985
2026
  url: "https://docs.flashcat.cloud/en/flashduty/pagerduty-integration-guide"
1986
2027
  ---
1987
2028
 
@@ -2021,8 +2062,8 @@ Choose this option when you need to route alerts to different channels based on
2021
2062
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
2022
2063
  2. Select **PagerDuty** integration:
2023
2064
  - **Integration Name**: Define a name for this integration
2024
- 3. Click **Save** and copy the newly generated **push URL** for later use
2025
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
2065
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2066
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2026
2067
  5. Done
2027
2068
 
2028
2069
  </details>
@@ -2143,7 +2184,7 @@ pagerduty_v2_payload_source: mysql.host.name
2143
2184
  `,y=`---
2144
2185
  title: "Tencent BlueKing Integration"
2145
2186
  description: "Sync Tencent BlueKing monitoring events to Flashduty via webhook for automated alert noise reduction"
2146
- date: "2024-05-11T10:00:00+08:00"
2187
+ date: "2025-05-19T10:00:00+08:00"
2147
2188
  url: "https://docs.flashcat.cloud/en/flashduty/tencent-bk-integration-guide"
2148
2189
  ---
2149
2190
 
@@ -2179,8 +2220,8 @@ Choose this option when you need to route alerts to different channels based on
2179
2220
  1. Go to Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
2180
2221
  2. Select **Tencent BlueKing** integration:
2181
2222
  - **Integration Name**: Define a name for this integration
2182
- 3. Click **Save** and copy the newly generated **push URL** for later use
2183
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
2223
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2224
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2184
2225
  5. Done
2185
2226
 
2186
2227
  </details>
@@ -2241,7 +2282,7 @@ Alert severity mapping between BlueKing and Flashduty:
2241
2282
  `,v=`---
2242
2283
  title: "Tencent Cloud CLS Integration"
2243
2284
  description: "Sync Tencent Cloud Log Service (CLS) monitoring alerts to Flashduty via webhook for automated alert noise reduction"
2244
- date: "2024-05-11T10:00:00+08:00"
2285
+ date: "2025-05-19T10:00:00+08:00"
2245
2286
  url: "https://docs.flashcat.cloud/en/flashduty/tencent-cls-integration-guide"
2246
2287
  ---
2247
2288
 
@@ -2277,8 +2318,8 @@ Choose this option when you need to route alerts to different channels based on
2277
2318
  1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
2278
2319
  2. Select **Tencent Cloud CLS** integration:
2279
2320
  - **Integration Name**: Define a name for this integration
2280
- 3. Click **Save** and copy the newly generated **push URL** for later use
2281
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
2321
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2322
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2282
2323
  5. Done
2283
2324
 
2284
2325
  </details>
@@ -2383,7 +2424,7 @@ Tencent Cloud CLS monitoring alert level mapping to Flashduty:
2383
2424
  `,b=`---
2384
2425
  title: "Tencent Cloud Monitor CM Integration"
2385
2426
  description: "Sync Tencent Cloud Monitor CM alert events to Flashduty via webhook for automated alert noise reduction"
2386
- date: "2024-05-11T10:00:00+08:00"
2427
+ date: "2025-05-19T10:00:00+08:00"
2387
2428
  url: "https://docs.flashcat.cloud/en/flashduty/tencent-cm-integration-guide"
2388
2429
  ---
2389
2430
 
@@ -2419,8 +2460,8 @@ Choose this option when you need to route alerts to different channels based on
2419
2460
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
2420
2461
  2. Select **Tencent Cloud Monitor CM** integration:
2421
2462
  - **Integration Name**: Define a name for this integration
2422
- 3. Click **Save** and copy the newly generated **push URL** for later use
2423
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
2463
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2464
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2424
2465
  5. Done
2425
2466
 
2426
2467
  </details>
@@ -2456,7 +2497,7 @@ All metric alerts from Tencent Cloud Monitor correspond to "warning" severity le
2456
2497
  `,w=`---
2457
2498
  title: "Tencent Cloud EventBridge"
2458
2499
  description: "Sync Tencent Cloud EventBridge events to Flashduty via webhook for automated alert noise reduction"
2459
- date: "2024-05-11T10:00:00+08:00"
2500
+ date: "2025-05-19T10:00:00+08:00"
2460
2501
  url: "https://docs.flashcat.cloud/en/flashduty/tencent-event-bridge-integration-guide"
2461
2502
  ---
2462
2503
 
@@ -2492,8 +2533,8 @@ Choose this method when you need to route alerts to different channels based on
2492
2533
  1. Go to the Flashduty console, select **Integration Center => Alerts** to enter the integration selection page
2493
2534
  2. Select **Tencent Cloud EventBridge** integration:
2494
2535
  - **Integration Name**: Define a name for this integration
2495
- 3. Click **Save** and copy the newly generated **push URL** for later use
2496
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
2536
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2537
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2497
2538
  5. Done
2498
2539
 
2499
2540
  </details>
@@ -2584,8 +2625,8 @@ Choose this method when you need to route alerts to different channels based on
2584
2625
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
2585
2626
  2. Select **OceanBase** integration:
2586
2627
  - **Integration Name**: Define a name for this integration
2587
- 3. Click **Save** and copy the newly generated **push URL** for later use
2588
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
2628
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2629
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2589
2630
  5. Done
2590
2631
 
2591
2632
  </details>
@@ -2772,8 +2813,8 @@ Choose this option when you need to route alerts to different channels based on
2772
2813
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
2773
2814
  2. Select **Graylog** integration:
2774
2815
  - **Integration Name**: Define a name for this integration
2775
- 3. Click **Save** and copy the newly generated **push URL** for later use
2776
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
2816
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2817
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2777
2818
  5. Done
2778
2819
 
2779
2820
  </details>
@@ -2867,8 +2908,8 @@ Choose this method when you need to route alerts to different channels based on
2867
2908
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
2868
2909
  2. Select **Skywalking** integration:
2869
2910
  - **Integration Name**: Define a name for this integration
2870
- 3. Click **Save** and copy the newly generated **push URL** for later use
2871
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
2911
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2912
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2872
2913
  5. Done
2873
2914
 
2874
2915
  </details>
@@ -2882,11 +2923,11 @@ Choose this method when you need to route alerts to different channels based on
2882
2923
 
2883
2924
  1. Log in to the Skywalking server
2884
2925
  2. Locate the Skywalking configuration file ./config/alarm-settings.yml
2885
- 3. Add Level tags to the alert rules
2926
+ 3. Add level tags to the alert rules
2886
2927
 
2887
2928
  \`\`\`
2888
2929
  # Tags are supported in v8.6.0+ versions only, can be omitted for other versions
2889
- # Level values: Critical, Warning, Info
2930
+ # level values: Critical, Warning, Info
2890
2931
  # Case sensitive
2891
2932
  rules:
2892
2933
  endpoint_relation_resp_time_rule:
@@ -2894,7 +2935,7 @@ rules:
2894
2935
  period: 10
2895
2936
  message: Response time of endpoint relation {name} is more than 1000ms in 2 minutes of last 10 minutes
2896
2937
  tags:
2897
- Level: Warning
2938
+ level: Warning
2898
2939
  \`\`\`
2899
2940
  4. Add the FlashDuty webhook URL
2900
2941
 
@@ -2966,8 +3007,8 @@ Choose this option when you need to route alerts to different channels based on
2966
3007
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
2967
3008
  2. Select **Sentry** integration:
2968
3009
  - **Integration Name**: Define a name for this integration
2969
- 3. Click **Save** and copy the newly generated **push URL** for later use
2970
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
3010
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3011
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2971
3012
  5. Done
2972
3013
 
2973
3014
  </details>
@@ -3072,8 +3113,8 @@ Choose this option when you need to route alerts to different channels based on
3072
3113
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3073
3114
  2. Select **Jiankongbao** integration:
3074
3115
  - **Integration Name**: Define a name for this integration
3075
- 3. Click **Save** and copy the newly generated **push URL** for later use
3076
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
3116
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3117
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3077
3118
  5. Done
3078
3119
 
3079
3120
  </details>
@@ -3124,7 +3165,7 @@ Choose this option when you need to route alerts to different channels based on
3124
3165
  |2|Info|Info|
3125
3166
 
3126
3167
  </div>
3127
- `,L=`---
3168
+ `,x=`---
3128
3169
  title: "AWS EventBridge Alert Events"
3129
3170
  description: "Sync AWS EventBridge alert events to Flashduty via webhook for automated alert noise reduction"
3130
3171
  date: "2024-08-20T10:00:00+08:00"
@@ -3163,8 +3204,8 @@ Choose this option when you need to route alerts to different channels based on
3163
3204
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3164
3205
  2. Select **AWS EventBridge** integration:
3165
3206
  - **Integration Name**: Define a name for this integration
3166
- 3. Click **Save** and copy the newly generated **push URL** for later use
3167
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
3207
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3208
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3168
3209
  5. Done
3169
3210
 
3170
3211
  </details>
@@ -3265,8 +3306,8 @@ Choose this option when you need to route alerts to different channels based on
3265
3306
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3266
3307
  2. Select **Dynatrace** integration:
3267
3308
  - **Integration Name**: Define a name for this integration
3268
- 3. Click **Save** and copy the newly generated **push URL** for later use
3269
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
3309
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3310
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3270
3311
  5. Done
3271
3312
 
3272
3313
  </details>
@@ -3333,7 +3374,7 @@ Choose this option when you need to route alerts to different channels based on
3333
3374
  |CUSTOM_ALERT|Info|info|
3334
3375
 
3335
3376
  </div>
3336
- `,F=`---
3377
+ `,L=`---
3337
3378
  title: "Huawei Cloud LTS Alert Events"
3338
3379
  description: "Sync Huawei Cloud Log Tank Service (LTS) alert events to Flashduty via webhook for automated alert noise reduction."
3339
3380
  date: "2024-08-20T10:00:00+08:00"
@@ -3372,8 +3413,8 @@ Choose this option when you need to route alerts to different channels based on
3372
3413
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3373
3414
  2. Select **Huawei Cloud LTS** integration:
3374
3415
  - **Integration Name**: Define a name for this integration
3375
- 3. Click **Save** and copy the newly generated **push URL** for later use
3376
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
3416
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3417
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3377
3418
  5. Done
3378
3419
 
3379
3420
  </details>
@@ -3446,7 +3487,7 @@ Choose this option when you need to route alerts to different channels based on
3446
3487
  |Info|Info|Info|
3447
3488
 
3448
3489
  </div>
3449
- `,x=`---
3490
+ `,F=`---
3450
3491
  title: "Google Cloud Monitoring Alert Events"
3451
3492
  description: "Sync Google Cloud Monitoring alert events to Flashduty via webhook for automated alert noise reduction"
3452
3493
  date: "2024-07-05T10:00:00+08:00"
@@ -3485,8 +3526,8 @@ Choose this option when you need to route alerts to different channels based on
3485
3526
  1. Go to the Flashduty console, select **Integration Center => Alert Events** to enter the integration selection page
3486
3527
  2. Select **Google Cloud Monitoring** integration:
3487
3528
  - **Integration Name**: Define a name for this integration
3488
- 3. Click **Save** and copy the newly generated **push URL** for later use
3489
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
3529
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3530
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3490
3531
  5. Done
3491
3532
 
3492
3533
  </details>
@@ -3576,8 +3617,8 @@ Choose this method when you need to route alerts to different channels based on
3576
3617
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3577
3618
  2. Select **Splunk** integration:
3578
3619
  - **Integration Name**: Define a name for this integration
3579
- 3. Click **Save** and copy the newly generated **push URL** for later use
3580
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
3620
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3621
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3581
3622
  5. Done
3582
3623
 
3583
3624
  </details>
@@ -3651,8 +3692,8 @@ Choose this method when you need to route alerts to different channels based on
3651
3692
  1. Go to the Flashduty console, select **Integration Center=>Alerts**, and enter the integration selection page
3652
3693
  2. Select **AppDynamics** integration:
3653
3694
  - **Integration Name**: Define a name for this integration
3654
- 3. Click **Save** and copy the newly generated **Push URL** for later use
3655
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
3695
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3696
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3656
3697
  5. Done
3657
3698
 
3658
3699
  </details>
@@ -3772,7 +3813,7 @@ If you need to configure \`Custom Templating Variables\`, you can refer to the f
3772
3813
  |INFO|Info|Info|
3773
3814
 
3774
3815
  </div>
3775
- `,U=`---
3816
+ `,D=`---
3776
3817
  title: "SolarWinds Alert Events"
3777
3818
  description: "Sync SolarWinds alert events to Flashduty via webhook for automated alert noise reduction"
3778
3819
  date: "2024-08-20T10:00:00+08:00"
@@ -3811,8 +3852,8 @@ Choose this option when you need to route alerts to different channels based on
3811
3852
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3812
3853
  2. Select **SolarWinds** integration:
3813
3854
  - **Integration Name**: Define a name for this integration
3814
- 3. Click **Save** and copy the newly generated **push URL** for later use
3815
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
3855
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3856
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3816
3857
  5. Done
3817
3858
 
3818
3859
  </details>
@@ -3875,7 +3916,7 @@ Choose this option when you need to route alerts to different channels based on
3875
3916
  |Info|Info|Info|
3876
3917
 
3877
3918
  </div>
3878
- `,E=`---
3919
+ `,U=`---
3879
3920
  title: "Volcengine Cloud Monitor Alert Events"
3880
3921
  description: "Sync Volcengine Cloud Monitor alert events to Flashduty via webhook for automated alert noise reduction"
3881
3922
  date: "2024-08-20T10:00:00+08:00"
@@ -3914,8 +3955,8 @@ Choose this method when you need to route alerts to different channels based on
3914
3955
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3915
3956
  2. Select **Volcengine CM Metrics** integration:
3916
3957
  - **Integration Name**: Define a name for this integration
3917
- 3. Click **Save** and copy the newly generated **push URL** for later use
3918
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
3958
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3959
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3919
3960
  5. Done
3920
3961
 
3921
3962
  </details>
@@ -3964,7 +4005,7 @@ Choose this method when you need to route alerts to different channels based on
3964
4005
  |Notice|Info|Info|
3965
4006
 
3966
4007
  </div>
3967
- `,D=`---
4008
+ `,E=`---
3968
4009
  title: "Volcengine Cloud Monitor Event Center Alert Events"
3969
4010
  description: "Sync Volcengine Cloud Monitor Event Center alert events to Flashduty via webhook for automated alert noise reduction"
3970
4011
  date: "2024-07-05T10:00:00+08:00"
@@ -4003,8 +4044,8 @@ Choose this method when you need to route alerts to different channels based on
4003
4044
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4004
4045
  2. Select **Volcengine CM Metrics** integration:
4005
4046
  - **Integration Name**: Define a name for this integration
4006
- 3. Click **Save** and copy the newly generated **push URL** for later use
4007
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
4047
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4048
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4008
4049
  5. Done
4009
4050
 
4010
4051
  </details>
@@ -4051,7 +4092,7 @@ Choose this method when you need to route alerts to different channels based on
4051
4092
  |Notice|Info|Info|
4052
4093
 
4053
4094
  </div>
4054
- `,P=`---
4095
+ `,N=`---
4055
4096
  title: "Volcengine Log Service (TLS) Alert Events"
4056
4097
  description: "Sync Volcengine Log Service (TLS) alert events to Flashduty via webhook for automated alert noise reduction"
4057
4098
  date: "2024-07-05T10:00:00+08:00"
@@ -4090,8 +4131,8 @@ Choose this method when you need to route alerts to different channels based on
4090
4131
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4091
4132
  2. Select **Volcengine TLS** integration:
4092
4133
  - **Integration Name**: Define a name for this integration
4093
- 3. Click **Save** and copy the newly generated **Push URL** for later use
4094
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
4134
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4135
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4095
4136
  5. Done
4096
4137
 
4097
4138
  </details>
@@ -4188,7 +4229,7 @@ Choose this method when you need to route alerts to different channels based on
4188
4229
  </div>
4189
4230
 
4190
4231
  </div>
4191
- `,N=`---
4232
+ `,P=`---
4192
4233
  title: "OpManager Alert Events"
4193
4234
  description: "Sync OpManager alert events to Flashduty via webhook for automated alert noise reduction"
4194
4235
  date: "2024-07-05T10:00:00+08:00"
@@ -4227,8 +4268,8 @@ Choose this method when you need to route alerts to different channels based on
4227
4268
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4228
4269
  2. Select **OpManager** integration:
4229
4270
  - **Integration Name**: Define a name for this integration
4230
- 3. Click **Save** and copy the newly generated **push URL** for later use
4231
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
4271
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4272
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4232
4273
  5. Done
4233
4274
 
4234
4275
  </details>
@@ -4361,8 +4402,8 @@ Choose this option when you need to route alerts to different channels based on
4361
4402
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4362
4403
  2. Select **Meraki** integration:
4363
4404
  - **Integration Name**: Define a name for this integration
4364
- 3. Click **Save** and copy the newly generated **push URL** for later use
4365
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
4405
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4406
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4366
4407
  5. Done
4367
4408
 
4368
4409
  </details>
@@ -4436,8 +4477,8 @@ Choose this option when you need to route alerts to different channels based on
4436
4477
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4437
4478
  2. Select **StateCloud** integration:
4438
4479
  - **Integration Name**: Define a name for this integration
4439
- 3. Click **Save** and copy the newly generated **push URL** for later use
4440
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
4480
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4481
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4441
4482
  5. Done
4442
4483
 
4443
4484
  </details>
@@ -4520,8 +4561,8 @@ Choose this option when you need to route alerts to different channels based on
4520
4561
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4521
4562
  2. Select **Guance** integration:
4522
4563
  - **Integration Name**: Define a name for this integration
4523
- 3. Click **Save** and copy the newly generated **push URL** for later use
4524
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
4564
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4565
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4525
4566
  5. Done
4526
4567
 
4527
4568
  </details>
@@ -4566,7 +4607,7 @@ Choose this option when you need to route alerts to different channels based on
4566
4607
  | Data Missing | Info | Info |
4567
4608
 
4568
4609
  </div>
4569
- `,Y=`---
4610
+ `,q=`---
4570
4611
  title: "Zilliz Alert Events"
4571
4612
  description: "Sync Zilliz alert events to Flashduty via webhook for automated alert noise reduction"
4572
4613
  date: "2024-07-05T10:00:00+08:00"
@@ -4605,8 +4646,8 @@ Choose this method when you need to route alerts to different channels based on
4605
4646
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4606
4647
  2. Select **Zilliz** integration:
4607
4648
  - **Integration Name**: Define a name for this integration
4608
- 3. Click **Save** and copy the newly generated **push URL** for later use
4609
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
4649
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4650
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4610
4651
  5. Done
4611
4652
 
4612
4653
  </details>
@@ -4639,7 +4680,7 @@ Choose this method when you need to route alerts to different channels based on
4639
4680
 
4640
4681
  </div>
4641
4682
 
4642
- `,q=`---
4683
+ `,O=`---
4643
4684
  title: "Huawei Cloud APM Alerts"
4644
4685
  description: "Sync Huawei Cloud APM alerts to Flashduty through webhook to achieve automatic alert noise reduction"
4645
4686
  date: "2024-07-05T10:00:00+08:00"
@@ -4678,8 +4719,8 @@ When you need to route alerts to different channels based on alert payload infor
4678
4719
  1. Go to Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
4679
4720
  2. Select **Huawei Cloud APM** integration:
4680
4721
  - **Integration Name**: Define a name for the current integration
4681
- 3. Click **Save** and copy the newly generated **push URL** for later use
4682
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
4722
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4723
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4683
4724
  5. Done.
4684
4725
 
4685
4726
  </details>
@@ -4745,10 +4786,383 @@ When you need to route alerts to different channels based on alert payload infor
4745
4786
 
4746
4787
  </div>
4747
4788
 
4748
- `,O=`---
4789
+ `,Y=`---
4790
+ title: "zstack integration"
4791
+ description: "Push ZStack alerts to Flashduty via webhook, to achieve automatic alert noise reduction."
4792
+ date: "2024-07-05T10:00:00+08:00"
4793
+ url: "https://docs.flashcat.cloud/en/flashduty/zstack-integration-guide"
4794
+ ---
4795
+
4796
+ Push ZStack alerts to Flashduty via webhook, to achieve automatic alert noise reduction.
4797
+
4798
+ <div class="hide">
4799
+
4800
+ ## In Flashduty
4801
+ ---
4802
+ You can obtain an integration push URL through either of these two methods:
4803
+
4804
+ ### Using Dedicated Integration
4805
+
4806
+ Choose this method when you don't need to route alert events to different channels. It's simpler and recommended.
4807
+
4808
+ <details>
4809
+ <summary>Expand</summary>
4810
+
4811
+ 1. Go to the Flashduty console, select **Channel**, and enter a channel's details page
4812
+ 2. Select the **Integration** tab, click **Add Integration** to enter the integration page
4813
+ 3. Choose **ZStack** integration and click **Save** to generate a card
4814
+ 4. Click the generated card to view the **push URL**, copy it for later use, and you're done
4815
+
4816
+ </details>
4817
+
4818
+ ### Using Shared Integration
4819
+
4820
+ Choose this method when you need to route alerts to different channels based on the alert event's payload information.
4821
+
4822
+ <details>
4823
+ <summary>Expand</summary>
4824
+
4825
+ 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4826
+ 2. Select **ZStack** integration:
4827
+ - **Integration Name**: Define a name for this integration
4828
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4829
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4830
+ 5. Done
4831
+
4832
+ </details>
4833
+ </div>
4834
+
4835
+
4836
+ ## In ZStack
4837
+ ---
4838
+
4839
+ <div class="md-block">
4840
+
4841
+ ## 一、Create Notification Object
4842
+
4843
+ ### Step 1: Create Notification Object
4844
+ 1. Login to your \`ZStack\` console, find \`Cloud Monitoring\` in the \`Platform O&M\` menu
4845
+ 2. Click \`Endpoint\`, click \`Create Endpoint\` or edit the existing endpoint
4846
+ 3. In the edit page, Name it \`Flashduty\`, select \`Webhook\` type, and fill in the <span class='integration_url'>push URL</span> of the alert integration
4847
+ 4. Click \`Send Test Message\`, if the message is sent successfully, it means the configuration is successful
4848
+ 5. Click \`OK\` to complete the configuration
4849
+
4850
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/zstack-1.png" />
4851
+
4852
+ ### Step 2: Use Notification Object in Alert Policy
4853
+
4854
+ 1. Login to your \`ZStack\` console, find \`Cloud Monitoring\` in the \`Platform O&M\` menu
4855
+ 2. Click \`Alarm\`, click \`Create Resource Alarm\` or \`Create Event Alarm\`, or edit the existing alarm object
4856
+ 3. In the edit page, select the created \`Flashduty\` Endpoint (\`Resource Alarm\` is recommended to open the recovery notification)
4857
+ 4. Configure other settings as needed, and click \`OK\` to complete the configuration
4858
+
4859
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/zstack-2.png" />
4860
+
4861
+
4862
+
4863
+ </dev>
4864
+
4865
+ ## 二、Status Mapping
4866
+
4867
+ <div class="md-block">
4868
+
4869
+ | ZStack | Flashduty | Status |
4870
+ | ---------- | -------- | ---- |
4871
+ | Emergent | Critical | Critical |
4872
+ | Major | Warning | Warning |
4873
+ | Info | Info | Info |
4874
+
4875
+ </div>
4876
+
4877
+ `,H=`---
4878
+ title: "Keep Alert Integration Guide"
4879
+ description: "Push alert events to Flashduty through Keep's Provider to achieve automated alert noise reduction."
4880
+ date: "2025-05-19T10:00:00+08:00"
4881
+ url: "https://docs.flashcat.cloud/en/flashduty/keep-alert-integration-guide"
4882
+ ---
4883
+
4884
+ Push alert events to Flashduty through Keep's Flashduty Provider to achieve automated alert noise reduction.
4885
+
4886
+ <div class="hide">
4887
+
4888
+ ## In Flashduty
4889
+
4890
+ You can obtain an integration key through either of these 2 methods:
4891
+
4892
+ #### Using Dedicated Integration
4893
+
4894
+ Choose this method when you don't need to route alert events to different channels - it's simpler.
4895
+
4896
+ <details>
4897
+ <summary>Expand</summary>
4898
+
4899
+ 1. Enter the Flashduty console, select **Channel**, and go to a specific channel's details page
4900
+ 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page
4901
+ 3. Choose **Keep** integration, click **Save** to generate a card
4902
+ 4. Click the generated card to view the **Integration Key**, copy it for later use, and you're done
4903
+
4904
+ </details>
4905
+
4906
+ #### Using Shared Integration
4907
+
4908
+ Choose this method when you need to route alerts to different channels based on the alert event's payload information.
4909
+
4910
+ <details>
4911
+ <summary>Expand</summary>
4912
+
4913
+ 1. Enter the Flashduty console, select **Integration Center=>Alert Events** to access the integration selection page
4914
+ 2. Select **Keep** integration:
4915
+ - **Integration Name**: Define a name for this integration
4916
+ 3. Configure default routing and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4917
+ 4. Click **Save** and copy the newly generated **Integration Key** for later use
4918
+ 5. Done
4919
+
4920
+ </details>
4921
+ </div>
4922
+
4923
+
4924
+ ## In Keep
4925
+ ---
4926
+
4927
+ ### Field Definitions
4928
+
4929
+ Field|Required|Type|Definition
4930
+ :-:|:-:|:-:|:---
4931
+ | title | Yes | string | Alert title, maximum \`512\` characters, will be truncated if exceeded
4932
+ | event_status | Yes | string | Alert status.<br><br>Enumerated values (\`First letter capitalized\`): *Critical*: Critical, *Warning*: Warning, *Info*: Info, *Ok*: Recovery.<br><br>When set to Ok, it indicates automatic recovery of the alert
4933
+ | alert_key | No | string | Alert identifier, used for updating or automatically recovering existing alerts.<br><br>You can customize this value, but it cannot exceed \`255\` characters. You can also rely on system-generated values, which will be returned in the response.<br><br>This value must exist if you're reporting a recovery event
4934
+ | description | No | string | Alert description, maximum \`2048\` characters, will be truncated if exceeded
4935
+ | labels | No | map | Alert label collection, where key is the label name and value is the label value:<br><br>1. Both label key and value are case-sensitive strings<br>2. Label keys should not exceed \`128\` characters and follow Prometheus label naming conventions. Values should not exceed \`2048\` characters, will be truncated if exceeded<br>3. Maximum \`50\` labels allowed. \`Label content refers to\` [Best Practices](#best-practices)<br><br>Example: "resource": "171.26.23.22", "check": "api latency > 500ms"
4936
+
4937
+
4938
+
4939
+ ### Configuration Method
4940
+
4941
+ #### Step 1: Configure Flashduty Provider
4942
+ 1. Login to Keep console, enter \`Providers\` list, select and click \`Flashduty\`.
4943
+ 2. Fill in the \`Flashduty Integration Key\` field with the \`Integration Key\` of Flashduty.
4944
+ 3. Click \`Save\` to save the configuration.
4945
+
4946
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/keep-1.png" />
4947
+
4948
+ #### Step 2: Configure WorkFlows
4949
+ 1. Login to Keep console, enter \`WorkFlows\` , create or edit an existing Workflow.
4950
+ 2. Configure the \`Trigger\` section as needed.
4951
+ 3. In the \`Steps\` section, select \`flashduty-action\` and select the \`Flashduty Provider\` configured in the previous step.
4952
+ 4. In the \`flashduty-action\`'s \`Configure\` section, configure the alert title, alert status, alert description, and alert labels (for details on the field definitions, please refer to [Field Definitions](#field-definitions)).
4953
+ 5. Click \`Save\` to save the configuration.
4954
+
4955
+
4956
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/keep-2.png" />
4957
+
4958
+ `,$=`---
4959
+ title: "ElastAlert2 Alert Integration Guide"
4960
+ description: "Push alert events to Flashduty through ElastAlert2's Provider to achieve automated alert noise reduction."
4961
+ date: "2025-05-19T10:00:00+08:00"
4962
+ url: "https://docs.flashcat.cloud/en/flashduty/elastalert2-alert-integration-guide"
4963
+ ---
4964
+
4965
+ Push ElastAlert2 alerts to Flashduty via webhook, to achieve automatic alert noise reduction.
4966
+
4967
+ <div class="hide">
4968
+
4969
+ ## In Flashduty
4970
+ ---
4971
+ You can obtain an integration push URL through either of these two methods:
4972
+
4973
+ ### Using Dedicated Integration
4974
+
4975
+ Choose this method when you don't need to route alert events to different channels. It's simpler and recommended.
4976
+
4977
+ <details>
4978
+ <summary>Expand</summary>
4979
+
4980
+ 1. Go to the Flashduty console, select **Channel**, and enter a channel's details page
4981
+ 2. Select the **Integration** tab, click **Add Integration** to enter the integration page
4982
+ 3. Choose **ElastAlert 2** integration and click **Save** to generate a card
4983
+ 4. Click the generated card to view the **Integration Key**, copy it for later use, and you're done
4984
+
4985
+ </details>
4986
+
4987
+ ### Using Shared Integration
4988
+
4989
+ Choose this method when you need to route alerts to different channels based on the alert event's payload information.
4990
+
4991
+ <details>
4992
+ <summary>Expand</summary>
4993
+
4994
+ 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4995
+ 2. Select **ElastAlert 2** integration:
4996
+ - **Integration Name**: Define a name for this integration
4997
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4998
+ 4. Click **Save** and copy the newly generated **Integration Key** for later use
4999
+ 5. Done
5000
+
5001
+ </details>
5002
+ </div>
5003
+
5004
+
5005
+ ## In ElastAlert 2
5006
+ ---
5007
+
5008
+ ### Configure ElastAlert 2 Alerts
5009
+ Follow the [ElastAlert FlashDuty](https://elastalert2.readthedocs.io/en/latest/alerts.html#flashduty) push configuration document
5010
+
5011
+ 1. Create or edit the alert rule file, for example \`rules/elastalert2_alert.yaml\`.
5012
+ 2. Fill in the \`flashduty\` alert type in the \`alert\` field.
5013
+ 3. Fill in the integrated \`integration key\` in the \`flashduty_integration_key\` field.
5014
+ 4. The \`flashduty_title\` and \`flashduty_event_status\` are required fields, and other fields can be filled in as needed. For the field definitions, please refer to the following table.
5015
+
5016
+ Field|Required|Type|Definition
5017
+ :-:|:-:|:-:|:---
5018
+ | title | 是 | string | The alert title, it cannot exceed \`512\` characters.
5019
+ | event_status | 是 | string | The alert status.<br><br>Enum values (capitalized): *Critical*:severe, *Warning*:warning, *Info*:reminder, *Ok*:recovery.<br><br>When specified as Ok, it means automatic recovery of the alert.
5020
+ | alert_key | 否 | string | The alert identifier, used to update or automatically recover existing alerts. You can customize this value, but it cannot exceed \`255\` characters. You can also rely on the system to automatically generate this value, which will be returned in the response. If you report a recovery event, this value must exist.
5021
+ | description | 否 | string | The alert description
5022
+ | check | 否 | string | The alert check item
5023
+ | resource | 否 | string | The alert resource
5024
+ | service | 否 | string | The alert service name
5025
+ | metric | 否 | string | The alert metric name
5026
+ | group | 否 | string | The alert group
5027
+ | cluster | 否 | string | The alert cluster
5028
+ | app | 否 | string | The alert application
5029
+ | env | 否 | string | The alert environment
5030
+
5031
+
5032
+ \`\`\`yaml
5033
+
5034
+ name: "elastalert2 alert"
5035
+ type: "frequency"
5036
+ index: "pgy_audit*"
5037
+ is_enabled: true
5038
+ num_events: 1
5039
+ realert:
5040
+ minutes: 1
5041
+ terms_size: 50
5042
+ scan_entire_timeframe: true
5043
+ timeframe:
5044
+ minutes: 60
5045
+ timestamp_field: "created_at"
5046
+ timestamp_type: "unix_ms"
5047
+ use_strftime_index: false
5048
+ alert_subject: "Test {0} 123 aa☃ {1}"
5049
+ alert_subject_args:
5050
+ - "account_id"
5051
+ - "operation"
5052
+ alert_text: "Test {0} 123 bb☃ {1}"
5053
+ alert_text_args:
5054
+ - "request_id"
5055
+ - "operation_name"
5056
+ filter:
5057
+ - query:
5058
+ query_string:
5059
+ query: "created_at:*"
5060
+
5061
+ # ------- FlashDuty ----------------
5062
+ alert: flashduty
5063
+ flashduty_integration_key: "xxxx"
5064
+ flashduty_title: "elastalert2 alert"
5065
+ flashduty_event_status: "Warning"
5066
+ flashduty_alert_key: "abc"
5067
+ flashduty_description: "log error"
5068
+ flashduty_check: "log error"
5069
+ flashduty_resource: "10.1.1.1"
5070
+ flashduty_service: "service1"
5071
+ flashduty_metric: "error"
5072
+ flashduty_group: "group1"
5073
+ flashduty_cluster: "bj"
5074
+ flashduty_app: "app1"
5075
+ flashduty_env: "dev"
5076
+ # ------- FlashDuty ----------------
5077
+ \`\`\`
5078
+
5079
+ 5. Restart ElastAlert and wait for the alert to trigger.`,j=`---
5080
+ title: "Dingtalk Alert Integration"
5081
+ description: "Generate a unique Dingtalk robot address in Flashduty, and synchronize the occurrence and recovery of alerts through Dingtalk"
5082
+ date: "2025-05-19T10:00:00+08:00"
5083
+ url: "https://docs.flashcat.cloud/en/flashduty/dingtalk-alert-integration-guide"
5084
+ ---
5085
+
5086
+ Generate a unique Dingtalk robot address in Flashduty, and synchronize the occurrence and recovery of alerts through Dingtalk.
5087
+
5088
+ <div class="hide">
5089
+
5090
+ ## Operation Steps
5091
+ ---
5092
+
5093
+ ### Create Dingtalk Alert Integration
5094
+
5095
+ You can obtain a Dingtalk alert integration address through either of these two methods:
5096
+
5097
+ #### Using Dedicated Integration
5098
+
5099
+ Choose this method when you don't need to route alert events to different channels. It's simpler and recommended.
5100
+
5101
+ <details>
5102
+ <summary>Expand</summary>
5103
+
5104
+ 1. Go to the Flashduty console, select **Channel**, and enter a specific channel's details page
5105
+ 2. Select the **Integration** tab, click **Add Integration** to enter the integration page
5106
+ 3. Choose **Dingtalk Alert** integration and click **Save** to generate a card
5107
+ 4. Click the generated card to view the **Dingtalk Alert Integration URL**, copy it for later use, and you're done
5108
+
5109
+ </details>
5110
+
5111
+ #### Using Shared Integration
5112
+
5113
+ Choose this method when you need to route alerts to different channels based on the alert event's payload information.
5114
+
5115
+ <details>
5116
+ <summary>Expand</summary>
5117
+
5118
+ 1. Go to the Flashduty console, select **Integration Center => Alert Events** to enter the integration selection page
5119
+ 2. Select **Dingtalk Alert** integration:
5120
+ - **Integration Name**: Define a name for the current integration
5121
+ - **Message Type**: Select Dingtalk alert message type, currently only Text and Markdown are supported
5122
+ - **Push Mode**: Choose when to trigger or recover alerts for Dingtalk notifications
5123
+ 3. Copy the **Dingtalk Alert Integration URL** for later use
5124
+ 4. Configure the default route and select the corresponding channel (after integration creation, you can go to \`Routes\` to configure more routing rules)
5125
+ 5. Done
5126
+
5127
+ </details>
5128
+ </div>
5129
+
5130
+ ### Customize Dingtalk Alert Integration
5131
+
5132
+ #### Dingtalk Alert Integration URL
5133
+
5134
+ The system will generate a unique Dingtalk alert integration URL for you. This URL is compatible with Dingtalk robot message protocol. When platforms only support Dingtalk robot channels, you can use this URL to receive corresponding messages.
5135
+
5136
+ #### Push Mode
5137
+
5138
+ By default, the system always creates new alerts for each message, but you can switch to these modes:
5139
+
5140
+ 1. **Trigger or Update Alert Based on Message Title**: In this mode, when receiving a new message, the system searches for open alerts based on the message title. If an alert is found, it will be updated; otherwise, a new alert will be triggered.
5141
+ 2. **Trigger or Close Alert Based on Rules**: In this mode, when receiving a new message, the system matches messages according to your rules and triggers new alerts or closes existing alerts based on the matching results.
5142
+
5143
+ - You need to fill in at least one **trigger** rule
5144
+ - You must set up regex extraction rules for Alert Key. The system uses this field to find historical alerts for updates or closure. **If regex extraction fails, the system will use the message title to generate an Alert Key** to ensure alerts won't be lost due to configuration errors
5145
+ - You can choose whether to discard messages when none of the rules match
5146
+
5147
+ Configuration example:
5148
+
5149
+ - Receive all messages, close the alert when the message content contains **RESOLVED**, otherwise trigger a new alert
5150
+ - Extract Alert Key from message title using the rule **/(.*)/**.
5151
+
5152
+
5153
+ ### Notes
5154
+ - Dingtalk alert integration URL only supports Text and Markdown message types; other message types cannot be received
5155
+ - When Dingtalk message type is Text, Flashduty will generate a default alert title "Dingtalk Alert"
5156
+
5157
+ ## Severity Mapping
5158
+ ---
5159
+
5160
+ Currently, all alerts pushed to Flashduty through email integration are set to Warning severity.
5161
+
5162
+ `,B=`---
4749
5163
  title: "Custom Change Event Integration Guide"
4750
5164
  description: "Push change events from your own systems to Flashduty using standard protocols. Most incidents are caused by changes, and the correlation between changes and alerts helps quickly identify incident causes."
4751
- date: "2024-05-11T10:00:00+08:00"
5165
+ date: "2025-05-19T10:00:00+08:00"
4752
5166
  url: "https://docs.flashcat.cloud/en/flashduty/custom-change-integration-guide"
4753
5167
  ---
4754
5168
 
@@ -4802,10 +5216,10 @@ Labels are descriptions of events. You should enrich label content as much as po
4802
5216
 
4803
5217
  </details>
4804
5218
 
4805
- `,j=`---
5219
+ `,z=`---
4806
5220
  title: "Jira Issue Events"
4807
5221
  description: "Sync Jira Issue events to Flashduty via webhooks to collect change events."
4808
- date: "2024-05-11T10:00:00+08:00"
5222
+ date: "2025-05-19T10:00:00+08:00"
4809
5223
  url: "https://docs.flashcat.cloud/en/flashduty/jira-integration-guide"
4810
5224
  ---
4811
5225
 
@@ -4876,7 +5290,7 @@ Flashduty extracts the status.name information from the webhook payload by defau
4876
5290
  Please contact Flashduty if you wish to modify this mapping.
4877
5291
 
4878
5292
  </div>
4879
- `,$=`---
5293
+ `,V=`---
4880
5294
  title: Contributing to our documentation — Meilisearch documentation
4881
5295
  description: The Meilisearch documentation is open-source. Learn how to help make it even better.
4882
5296
  sidebarDepth: 3
@@ -5011,10 +5425,10 @@ Once published, you can access the application via mobile/PC client. First-time
5011
5425
  |Group Bot Webhook|Maximum 100 calls/minute|
5012
5426
  |Sending messages to the same user or group|Maximum 5 calls/second|
5013
5427
 
5014
- **Note:** Messages cannot be pushed normally when exceeding limits, please use notification channels reasonably`,H=`---
5428
+ **Note:** Messages cannot be pushed normally when exceeding limits, please use notification channels reasonably`,K=`---
5015
5429
  title: "Dingtalk Integration"
5016
5430
  description: "Integrate with Dingtalk custom application to receive and respond to alerts within Dingtalk"
5017
- date: "2024-05-11T10:00:00+08:00"
5431
+ date: "2025-05-19T10:00:00+08:00"
5018
5432
  url: "https://docs.flashcat.cloud/en/flashduty/dingtalk-integration-guide"
5019
5433
  ---
5020
5434
 
@@ -5167,10 +5581,10 @@ After the application is released, you can access it via mobile/PC client. First
5167
5581
  |Enterprise|5,500,000|60|1st of each month|
5168
5582
 
5169
5583
  **Note:** Messages cannot be pushed normally after exceeding limits, please use notification channels reasonably
5170
- `,B=`---
5584
+ `,J=`---
5171
5585
  title: "WeCom Integration"
5172
5586
  description: "Integrate WeCom third-party application to receive and respond to alerts within WeCom"
5173
- date: "2024-05-11T10:00:00+08:00"
5587
+ date: "2025-05-19T10:00:00+08:00"
5174
5588
  url: "https://docs.flashcat.cloud/en/flashduty/wecom-integration-guide"
5175
5589
  ---
5176
5590
 
@@ -5246,10 +5660,10 @@ Integrate WeCom third-party application to receive and respond to alerts within
5246
5660
  7. **Incident notification fails with \`WeCom License Not Activated\`?**
5247
5661
 
5248
5662
  - Contact Flashduty customer service or dedicated support for license purchase and activation
5249
- `,z=`---
5663
+ `,Z=`---
5250
5664
  title: "Slack Integration"
5251
5665
  description: "Integrate with Slack to receive and respond to alerts within Slack"
5252
- date: "2024-05-11T10:00:00+08:00"
5666
+ date: "2025-05-19T10:00:00+08:00"
5253
5667
  url: "https://docs.flashcat.cloud/en/flashduty/slack-integration-guide"
5254
5668
  ---
5255
5669
 
@@ -5300,10 +5714,10 @@ Integrate with Slack to receive and respond to alerts within Slack.
5300
5714
 
5301
5715
  8. **Slack App shows Other questions error**
5302
5716
  - Try again, as this might be an unrecorded issue
5303
- - If the error persists, contact customer support`,V=`---
5717
+ - If the error persists, contact customer support`,Q=`---
5304
5718
  title: "Microsoft Teams Integration"
5305
5719
  description: "Integrate Microsoft Teams as a third-party application to receive and respond to alerts within Microsoft Teams"
5306
- date: "2024-05-11T10:00:00+08:00"
5720
+ date: "2025-05-19T10:00:00+08:00"
5307
5721
  url: "https://docs.flashcat.cloud/en/flashduty/microsoft-teams-integration-guide"
5308
5722
  ---
5309
5723
 
@@ -5395,7 +5809,7 @@ Please check in Integration Center => Instant Messaging => Microsoft Teams under
5395
5809
  Currently not supported
5396
5810
  </details>
5397
5811
 
5398
- `,J=`Configure alert webhooks to receive HTTP callbacks at your specified URL when alerts have specific actions (such as triggering or closing). The callback content includes the latest key information about the alert, allowing integration with your custom tools.
5812
+ `,X=`Configure alert webhooks to receive HTTP callbacks at your specified URL when alerts have specific actions (such as triggering or closing). The callback content includes the latest key information about the alert, allowing integration with your custom tools.
5399
5813
 
5400
5814
  <span id="EventTypes"></span>
5401
5815
 
@@ -5563,7 +5977,7 @@ curl -X POST 'https://example.com/alert/webhook?a=a' \\
5563
5977
  4. **Trusted IP whitelist for push sources?**
5564
5978
  - {ip_whitelist}
5565
5979
  - May be updated in the future, please check periodically
5566
- `,K=`Configure incident webhooks to receive HTTP callbacks at your specified URL when incidents have specific actions (such as triggering or closing). The callback content includes the latest key information about the incident, allowing integration with your custom tools.
5980
+ `,ee=`Configure incident webhooks to receive HTTP callbacks at your specified URL when incidents have specific actions (such as triggering or closing). The callback content includes the latest key information about the incident, allowing integration with your custom tools.
5567
5981
 
5568
5982
  <span id="EventTypes"></span>
5569
5983
 
@@ -5770,7 +6184,7 @@ curl -X POST 'https://example.com/incident/webhook?a=a' \\
5770
6184
 
5771
6185
  4. **Trusted IP whitelist for push sources?**
5772
6186
  - {ip_whitelist}
5773
- - May be updated in the future, please check periodically`,Z=`Custom incident actions allow you to quickly invoke external interfaces during incident troubleshooting for incident self-healing, information enrichment, and other custom operations.
6187
+ - May be updated in the future, please check periodically`,ne=`Custom incident actions allow you to quickly invoke external interfaces during incident troubleshooting for incident self-healing, information enrichment, and other custom operations.
5774
6188
 
5775
6189
  ## I. Creating Actions
5776
6190
 
@@ -6017,10 +6431,10 @@ When an incident occurs and is confirmed to be caused by a change, directly trig
6017
6431
 
6018
6432
  ### Update Status Page
6019
6433
 
6020
- When an incident is confirmed to affect online services, trigger external status page updates to prompt`,Q=`---
6434
+ When an incident is confirmed to affect online services, trigger external status page updates to prompt`,te=`---
6021
6435
  title: "Jira Sync"
6022
6436
  description: "Sync incidents with Jira issues through Jira Sync Webhook."
6023
- date: "2024-05-11T10:00:00+08:00"
6437
+ date: "2025-05-19T10:00:00+08:00"
6024
6438
  url: "https://docs.flashcat.cloud/en/flashduty/jira-sync"
6025
6439
  ---
6026
6440
 
@@ -6099,7 +6513,7 @@ In the Integration Center, select **Webhook**, choose **Jira Sync** integration,
6099
6513
 
6100
6514
  - Flashduty syncs information according to default field mappings and your custom field configurations. If your Jira issue type has required fields without mapping relationships, Jira issue creation may fail.
6101
6515
  - Jira issue details are accessed using project KEY + number format. If you modify the project KEY, saved issue URLs in Flashduty may become inaccessible, so please modify project KEYs with caution.
6102
- `,X=`---
6516
+ `,ae=`---
6103
6517
  title: "Configure Notification Templates"
6104
6518
  description: "Customize notification content through template configuration"
6105
6519
  date: "2024-05-10T10:00:00+08:00"
@@ -6114,25 +6528,42 @@ url: "https://docs.flashcat.cloud/en/flashduty/template-settings"
6114
6528
 
6115
6529
  ## When Are Templates Used?
6116
6530
  ---
6117
- The system uses templates to render [Incident](#Incident) and trigger notifications when assigning incidents. Assignment may occur in the following scenarios:
6531
+ The system uses templates to render [Incident](#Incident) when assigning incidents, which may occur in the following scenarios:
6118
6532
 
6119
6533
  1. Manually create and assign an incident
6120
6534
  2. When an alert event is reported, the system automatically generates an incident and assigns it according to the matched escalation rule
6121
6535
  3. After an incident is created, manually change the assignment (reassign)
6122
- 4. Automatically escalate assignment according to escalation rule settings
6536
+ 4. System automatically escalates according to escalation rule settings
6123
6537
  5. When reopening a closed incident, reassign according to previous settings
6124
6538
 
6125
- We use \`Golang template syntax\` [template/html](https://pkg.go.dev/html/template@go1.18.1) to parse data, allowing you to accomplish any complex rendering requirements.
6539
+ We use \`Golang template syntax\` [template/html](https://pkg.go.dev/html/template@go1.18.1) to parse data, enabling you to accomplish any complex rendering requirements.
6540
+
6541
+ - For documentation, please refer to [here](https://www.topgoer.com/%E5%B8%B8%E7%94%A8%E6%A0%87%E5%87%86%E5%BA%93/template.html#%E6%A8%A1%E6%9D%BF%E8%AF%AD%E6%B3%95), supporting logical conditions, loops, pipelines, and common functions;
6542
+ - We've incorporated the open-source library [sprig](https://github.com/flashcatcloud/sprig/tree/flashcat), which includes hundreds of common functions that you can directly call in templates;
6543
+ - If you wish to introduce more functions, feel free to submit a merge request
6544
+
6545
+ ## How to Configure Notification Templates?
6546
+ ---
6547
+
6548
+ ### Configure Notification Templates
6549
+ The system uses the default template when notifying incidents, which cannot be modified. If you need to customize the notification content, you should create a custom template.
6550
+
6551
+ 1. Enter the \`Templates\` page, click the \`Create Custom Template\` button or \`Copy Default Template\`, and enter the editing page.
6552
+ 2. In the editing page, you can edit the content according to the notification channel used, and reference the content in the template can refer to [What Variables Can I Reference?](#What Variables Can I Reference?)
6553
+ 3. After editing, click the \`Save\` button to save the template.
6554
+
6555
+ ### Use Notification Templates
6556
+ 1. Enter the \`Channel\` -> \`Escalation Rules\` page, click the \`Edit\` button, and enter the editing page.
6557
+ 2. In the strategy configuration section, you can select the template to use **which template** for notification, and select the notification template to use.
6558
+ 3. Other configurations can refer to [Escalation Rules Configuration](https://docs.flashcat.cloud/en/flashduty/escalate-rule-settings).
6559
+ 4. After configuration, click the \`Save\` button to save the escalation policy.
6126
6560
 
6127
- - For documentation, please refer to [here](https://www.topgoer.com/%E5%B8%B8%E7%94%A8%E6%A0%87%E5%87%86%E5%BA%93/template.html#%E6%A8%A1%E6%9D%BF%E8%AF%AD%E6%B3%95), supporting logical conditions, loops, pipelines and common functions
6128
- - We reference the open source library [sprig](https://github.com/flashcatcloud/sprig/tree/flashcat), which includes hundreds of common functions that you can call directly in templates
6129
- - If you want to introduce more functions, feel free to submit a merge request
6130
6561
 
6131
6562
  ## What Variables Can I Reference?
6132
6563
  ---
6133
6564
  **Variable Reference Examples**:
6134
6565
 
6135
- \`\`\`
6566
+ \`\`\`go
6136
6567
  // Reference title
6137
6568
  {{.Title}}
6138
6569
 
@@ -6154,7 +6585,7 @@ ID | string | Yes | Incident ID
6154
6585
  \`Title\` | string | Yes | Incident title
6155
6586
  \`Description\` | string | Yes | Incident description, can be empty
6156
6587
  DetailUrl | string | Yes | Incident detail page URL
6157
- Num | string | Yes | Short incident identifier, for easy visual recognition only, may be duplicate
6588
+ Num | string | Yes | Short incident identifier, for easy visual recognition, may be duplicate
6158
6589
  \`IncidentSeverity\` | string | Yes | Severity level, enum values: Critical, Warning, Info
6159
6590
  IncidentStatus | string | Yes | Incident status, enum values: Critical, Warning, Info, Ok
6160
6591
  \`Progress\` | string | Yes | Processing progress, enum values: Triggered, Processing, Closed
@@ -6163,19 +6594,19 @@ LastTime | int64 | No | Latest event time, latest incorporated event time in ass
6163
6594
  EndTime | int64 | No | Recovery time, when all associated alerts recover, the incident will automatically recover and close. Unix timestamp in seconds, default 0
6164
6595
  SnoozedBefore | int64 | No | Snooze end time, Unix timestamp in seconds, default 0
6165
6596
  AckTime | int64 | No | First acknowledgment time, Unix timestamp in seconds, default 0
6166
- CloseTime | int64 | No | Close time, end_time is incident recovery time, close_time is processing progress close time. Incident automatically closes on recovery, manual closure does not affect recovery. Unix timestamp in seconds, default 0
6167
- Creator | [Person](#Person) | No | Creator information, does not exist when automatically generated by system
6168
- Closer | [Person](#Person) | No | Closer information, does not exist when incident recovers automatically
6597
+ CloseTime | int64 | No | Close time, end_time is incident recovery time, close_time is processing progress close time. Incident automatically closes upon recovery, manual closure doesn't affect recovery. Unix timestamp in seconds, default 0
6598
+ Creator | [Person](#Person) | No | Creator information, not present when automatically generated by system
6599
+ Closer | [Person](#Person) | No | Closer information, not present when incident recovers automatically
6169
6600
  AssignedTo | [Assignment](Assignment) | No | Assignment configuration
6170
- Responders | [][Responder](#Responder) | No | List of responders, initialized based on assignment configuration, will also have corresponding records if non-assigned personnel acknowledge the incident
6601
+ Responders | [][Responder](#Responder) | No | Responder list, initialized based on assignment configuration, also includes records if non-assigned personnel acknowledge the incident
6171
6602
  ChannelID | int64 | No | Channel ID, value is 0 when manually creating global incident
6172
6603
  ChannelName | string | No | Channel name
6173
6604
  GroupMethod | string | No | Grouping method, enum values: n: no grouping, p: rule-based grouping, i: intelligent grouping
6174
- \`Labels\` | map[string]string | No | Label key-value pairs, both Key and Value are strings. No information when manually created, label information from first alert when automatically created
6605
+ \`Labels\` | map[string]string | No | Label key-value pairs, both Key and Value are strings. No information when manually created, contains first alert's label information when automatically created
6175
6606
  AlertCnt | int64 | Yes | Number of associated alerts
6176
6607
  Alerts | [][Alert](#Alert) | No | Associated alert details, no information when manually created
6177
6608
  FireType | string | No | Notification type, enum values: fire: notify, refire: loop notification
6178
- IsFlapping | bool | No | Whether in flapping state, i.e. frequent occurrence and recovery, related to convergence configuration
6609
+ IsFlapping | bool | No | Whether in flapping state, i.e., frequent occurrence and recovery, related to convergence configuration
6179
6610
  Impact | string | No | Incident impact, filled after incident closure
6180
6611
  RootCause | string | No | Root cause, filled after incident closure
6181
6612
  Resolution | string | No | Resolution, filled after incident closure
@@ -6192,11 +6623,11 @@ email | string | Yes | Email address
6192
6623
  **Assignment** (Indirect Reference):
6193
6624
  Field|Type|Required|Description
6194
6625
  :-:|:-:|:-:|:---
6195
- PersonIDs | []string| No | List of person IDs, exists only when assigning by person
6626
+ PersonIDs | []string| No | Person ID list, exists only when assigning by person
6196
6627
  EscalateRuleID | string | No | Escalation rule ID, exists only when assigning by rule
6197
6628
  EscalateRuleName | string | No | Escalation rule name
6198
6629
  LayerIdx | string | No | Assignment level, corresponds to escalation rule level index, starts from 0
6199
- Type | string | Yes | Assignment type, enum values: assign: assign, reassign: reassign, escalate: escalate assignment, reopen: reopen assignment
6630
+ Type | string | Yes | Assignment type, enum values: assign: assign, reassign: reassign, escalate: escalation assign, reopen: reopen assign
6200
6631
 
6201
6632
  <span id="Responder"></span>
6202
6633
  **Responder** (Indirect Reference):
@@ -6219,44 +6650,44 @@ AlertStatus | string | Yes | Alert status, enum values: Critical, Warning, Info,
6219
6650
  Progress | string | Yes | Processing progress, enum values: Triggered, Processing, Closed
6220
6651
  StartTime | int64 | Yes | Trigger time, Unix timestamp in seconds
6221
6652
  EndTime | int64 | No | Recovery time, Unix timestamp in seconds, default 0
6222
- CloseTime | int64 | No | Close time, EndTime is alert recovery time, CloseTime is processing progress close time. Alert automatically closes on recovery, manual closure does not affect recovery. Unix timestamp in seconds, default 0
6653
+ CloseTime | int64 | No | Close time, EndTime is alert recovery time, CloseTime is processing progress close time. Alert automatically closes upon recovery, manual closure doesn't affect alert recovery. Unix timestamp in seconds, default 0
6223
6654
  \`Labels\` | map[string]string | No | Label key-value pairs, both Key and Value are strings
6224
6655
 
6225
- ## FAQ
6656
+ ## Common Questions
6226
6657
  ---
6227
- 1. **How do I know what label information is in \`Labels\`?**
6658
+ 1. **How do I know what label information is available in \`Labels\`?**
6228
6659
 
6229
6660
  - Manually created incidents have no labels
6230
- - Automatically created incidents have labels, same as the labels of the first incorporated alert. Go to the \`Alerts\` page, find an incident and view its details to see all label information
6661
+ - Automatically created incidents have labels, matching the first incorporated alert's labels. Go to the \`Incidents\` page, find an incident and view its details to see all label information
6231
6662
 
6232
6663
  2. **Why is the \`default template\` used when I configured custom template rendering?**
6233
6664
 
6234
6665
  - When creating a custom template, the system uses mock data to render the template to check for syntax errors
6235
- - Mock data has limited coverage and may not match some logical branches in your template, which could fail during actual execution
6236
- - After rendering fails, the system will use the default template as a fallback to ensure message delivery
6237
- - When unsure if a referenced variable exists, it's recommended to use logical conditions to avoid rendering exceptions, e.g. for the \`resource\` label:
6666
+ - Mock data has limited coverage and may not match some logic branches in your template during actual operation
6667
+ - If rendering fails, the system will use the default template as a fallback to ensure message delivery
6668
+ - When unsure if a referenced variable exists, it's recommended to use logical conditions to avoid rendering errors, e.g., for the \`resource\` label:
6238
6669
 
6239
- \`\`\`
6670
+ \`\`\`go
6240
6671
  // Wrong approach: directly read label
6241
6672
  {{.Labels.resource}}
6242
6673
 
6243
- // Recommended approach: check first, then read label
6674
+ // Recommended: check first, then read label
6244
6675
  {{if .Labels.resource}}{{.Labels.resource}}{{end}}
6245
6676
  \`\`\`
6246
6677
 
6247
- 3. **Why are characters like ">" \`escaped\` in the incident title?**
6678
+ 3. **Why are characters like ">" \`escaped\` in incident titles?**
6248
6679
 
6249
- \`\`\`
6680
+ \`\`\`go
6250
6681
  // Use toHtml function
6251
6682
  {{toHtml .Title}}
6252
6683
 
6253
- // Use first non-empty value for rendering, avoid writing complex if logic
6684
+ // Use first non-empty value for rendering, avoiding complex if logic
6254
6685
  {{toHtml .Title .TitleEnglish}}
6255
6686
  \`\`\`
6256
6687
 
6257
- 4. **Time variables are timestamps, how to \`format time\`?**
6688
+ 4. **Time variables are timestamps, how do I \`convert time formats\`?**
6258
6689
 
6259
- \`\`\`
6690
+ \`\`\`go
6260
6691
  // date function converts timestamp to readable format
6261
6692
  // "2006-01-02 15:04:05" is a common format, search online for more formats
6262
6693
  {{date "2006-01-02 15:04:05" .StartTime}}
@@ -6266,24 +6697,24 @@ CloseTime | int64 | No | Close time, EndTime is alert recovery time, CloseTime i
6266
6697
  \`\`\`
6267
6698
 
6268
6699
  5. **How to reference external variables inside a for loop?**
6269
- \`\`\`
6700
+ \`\`\`go
6270
6701
  // Add "$" before external variables
6271
6702
  {{range .Responders}}
6272
- {{if eq $.Progress "Triggered"}}
6273
- [Pending]{{.Email}}
6274
- {{end}}
6703
+ {{if eq $.Progress "Triggered"}}
6704
+ [Pending]{{.Email}}
6705
+ {{end}}
6275
6706
  {{end}}
6276
6707
  \`\`\`
6277
- 6. **How to extract field values with "." in names, like "obj.instance" in labels?**
6708
+ 6. **How do I extract field values with "." in names, like "obj.instance" in labels?**
6278
6709
 
6279
- \`\`\`
6710
+ \`\`\`go
6280
6711
  // Use index function
6281
6712
  {{index .Labels "obj.instance"}}
6282
6713
  \`\`\`
6283
6714
 
6284
- 7. **How to extract and deduplicate label information from incident associated alerts?**
6715
+ 7. **How do I extract and deduplicate label information from incident-associated alerts?**
6285
6716
 
6286
- \`\`\`
6717
+ \`\`\`go
6287
6718
  // Use alertLabels function to get deduplicated array
6288
6719
  {{alertLabels . "resource"}}
6289
6720
 
@@ -6291,9 +6722,9 @@ CloseTime | int64 | No | Close time, EndTime is alert recovery time, CloseTime i
6291
6722
  {{joinAlertLabels . "resource" "sep"}}
6292
6723
  \`\`\`
6293
6724
 
6294
- 8. **How to iterate and print labels?**
6725
+ 8. **How do I iterate and print labels?**
6295
6726
 
6296
- \`\`\`
6727
+ \`\`\`go
6297
6728
  // Complete iteration
6298
6729
  {{range $k, $v := .Labels}}
6299
6730
  {{$k}} : {{toHtml $v}}
@@ -6313,38 +6744,70 @@ CloseTime | int64 | No | Close time, EndTime is alert recovery time, CloseTime i
6313
6744
  {{end}}
6314
6745
  {{end}}
6315
6746
 
6316
- 9. **How to extract information from JSON fields?**
6747
+ 9. **How do I extract information from JSON fields?**
6317
6748
 
6318
- - The jsonGet function helps you extract values matching conditions from JSON format data via path
6319
- - Target data extracted by jsonGet function must be valid JSON
6749
+ - jsonGet function helps extract values from JSON format data using path
6750
+ - Target data for jsonGet function must be valid JSON
6320
6751
  - Basic usage: {{jsonGet .Labels.xxx "yyy"}}, where xxx must be valid JSON and yyy is a valid extraction path
6321
6752
  - For JSON path syntax, refer to [gjson.dev](https://gjson.dev/), where you can input target data and extraction path for real-time preview
6322
6753
 
6323
- \`\`\`
6754
+ \`\`\`go
6324
6755
  // Extract detail_url field from rule_note label
6325
6756
  {{jsonGet .Labels.rule_note "detail_url"}}
6326
6757
 
6327
6758
  // Extract name field from first element in JSON array
6328
6759
  {{jsonGet .Labels.slice "0.name"}}
6329
6760
 
6330
- // Iterate each element in JSON array, match instanceId field of object with userId==7777
6761
+ // Iterate through JSON array elements, match instanceId field of object with userId==7777
6331
6762
  {{jsonGet .Labels.rule_note "#(userId==7777)#.instanceId" }}
6332
6763
 
6764
+ \`\`\`
6765
+ 10. **如何使用逻辑与、或等条件进行内容显示判断?**
6766
+
6767
+ \`\`\`
6768
+ # Supported functions
6769
+ - Use \`and\` function for logical AND judgment
6770
+ - Use \`or\` function for logical OR judgment
6771
+ - Use \`not\` function for logical NOT judgment
6772
+ - Use \`eq\` function for logical equal judgment
6773
+ - Use \`ne\` function for logical not equal judgment
6774
+ - Use \`gt\` function for logical greater than judgment
6775
+ - Use \`ge\` function for logical greater than or equal judgment
6776
+ - Use \`lt\` function for logical less than judgment
6777
+ - Use \`le\` function for logical less than or equal judgment
6778
+
6779
+ # Example usage
6780
+ # Use and function for logical AND judgment
6781
+
6782
+ {{if and (eq .Labels.resource "cpu") (eq .Labels.metric "cpu_usage")}}
6783
+ {{.Labels.resource}} CPU usage exceeds 80%
6784
+ {{end}}
6785
+
6786
+ # Use or function for logical OR judgment
6787
+ {{if or (eq .Labels.resource "cpu") (eq .Labels.metric "cpu_usage")}}
6788
+ {{.Labels.resource}} CPU usage exceeds 80%
6789
+ {{end}}
6790
+
6791
+ # Use not function for logical NOT judgment
6792
+ {{if not (eq .Labels.metric "cpu_usage")}}
6793
+ {{.Labels.metric}} is not CPU usage
6794
+ {{end}}
6795
+
6333
6796
  \`\`\`
6334
6797
 
6335
- 10. **Where can I find more functions and usage examples?**
6798
+ 11. **How do I find more functions and their usage examples?**
6336
6799
  - Function list: https://github.com/flashcatcloud/sprig/blob/master/functions.go#L97
6337
- - Usage examples: Check corresponding _test.go files, e.g. date function test cases at https://github.com/flashcatcloud/sprig/blob/master/date_test.go
6800
+ - Usage examples: Check corresponding _test.go files, e.g., date function test cases at https://github.com/flashcatcloud/sprig/blob/master/date_test.go
6338
6801
 
6339
- Below are specific instructions for each notification channel.
6802
+ Below are specific instructions for each notification channel.
6340
6803
 
6341
6804
  <div class="feishu_app hide">
6342
6805
 
6343
6806
  ## Feishu/Lark App
6344
6807
  ---
6345
- You need to configure \`Integration Center - IM - Feishu/Lark\` integration first to send message cards. If custom content is not set, the system default template will be used to render all label information:
6808
+ You need to configure \`Integration Center-Instant Message-Feishu\` integration first to send message cards. If custom content is not set, the system default template will be used, rendering all label information:
6346
6809
 
6347
- \`\`\`
6810
+ \`\`\`go
6348
6811
  {{if .Description}}**description** :{{toHtml .Labels.body_text .Description}}{{end}}
6349
6812
  {{if .Labels.resource}}**resource** : {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6350
6813
  {{range $k, $v := .Labels}}
@@ -6353,15 +6816,14 @@ You need to configure \`Integration Center - IM - Feishu/Lark\` integration firs
6353
6816
 
6354
6817
  As shown below:
6355
6818
 
6356
- <img src="https://download.flashcat.cloud/flashduty/doc/en/fd/template-feishu-1.png" width="800">
6819
+ <img src="https://download.flashcat.cloud/flashduty/changelog/20230720/feishu_app_render.png" alt="drawing" style="display: block; margin: 0 auto;" width="500"/>
6357
6820
 
6821
+ If you want to display only key label information, you can refer to the code segment below:
6358
6822
 
6359
- If you want to display only key label information, you can refer to the code snippet below:
6823
+ - We've listed some common labels, you can add or remove as needed
6824
+ - In Feishu app, the system will automatically remove empty rendered lines (due to non-existent labels), so you can configure freely
6360
6825
 
6361
- - We've listed some common labels that you can add or remove as needed
6362
- - In Feishu/Lark app, the system will automatically remove empty lines (caused by non-existent labels) during rendering, so you can configure freely
6363
-
6364
- \`\`\`
6826
+ \`\`\`go
6365
6827
  {{if (index .Labels "resource")}}resource:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6366
6828
  {{if (index .Labels "check")}}check:{{toHtml (index .Labels "check")}}{{end}}
6367
6829
  {{if (index .Labels "metric")}}metric:{{index .Labels "metric"}}{{end}}
@@ -6389,9 +6851,9 @@ If you want to display only key label information, you can refer to the code sni
6389
6851
 
6390
6852
  ## Dingtalk App
6391
6853
  ---
6392
- You need to configure \`Integration Center - IM - Dingtalk\` integration first to send message cards. If custom content is not set, the system default template will be used to render all label information:
6854
+ You need to configure \`Integration Center-Instant Message-Dingtalk\` integration first to send message cards. If custom content is not set, the system default template will be used, rendering all label information:
6393
6855
 
6394
- \`\`\`
6856
+ \`\`\`go
6395
6857
  {{if .Description}}**description** :{{toHtml .Labels.body_text .Description}}{{end}}
6396
6858
  {{if .Labels.resource}}**resource** : {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6397
6859
  {{range $k, $v := .Labels}}
@@ -6399,15 +6861,15 @@ You need to configure \`Integration Center - IM - Dingtalk\` integration first t
6399
6861
  \`\`\`
6400
6862
 
6401
6863
  As shown below:
6402
- <img src="https://download.flashcat.cloud/flashduty/doc/en/fd/template-ding-1.png" width="800">
6403
6864
 
6865
+ <img src="https://download.flashcat.cloud/flashduty/changelog/20230720/dingtalk_app_render.png" alt="drawing" style="display: block; margin: 0 auto;" width="500"/>
6404
6866
 
6405
- If you want to display only key label information, you can refer to the code snippet below:
6867
+ If you want to display only key label information, you can refer to the code segment below:
6406
6868
 
6407
- - We've listed some common labels that you can add or remove as needed
6408
- - In Dingtalk app, the system will automatically remove empty lines (caused by non-existent labels) during rendering, so you can configure freely
6869
+ - We've listed some common labels, you can add or remove as needed
6870
+ - In Dingtalk app, the system will automatically remove empty rendered lines (due to non-existent labels), so you can configure freely
6409
6871
 
6410
- \`\`\`
6872
+ \`\`\`go
6411
6873
  {{if (index .Labels "resource")}}**resource**:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6412
6874
  {{if (index .Labels "metric")}}**metric**:{{index .Labels "metric"}}{{end}}
6413
6875
  {{if (index .Labels "prom_ql")}}**prom_ql**:{{toHtml (index .Labels "prom_ql")}}{{end}}
@@ -6434,12 +6896,13 @@ If you want to display only key label information, you can refer to the code sni
6434
6896
 
6435
6897
  ## WeCom App
6436
6898
  ---
6437
- You need to configure \`Integration Center - IM - WeCom\` integration first to send message cards. If custom content is not set, the system default template will be used to render only common label information:
6438
6899
 
6439
- - We've listed some common labels that you can add or remove as needed
6440
- - In WeCom app, the system will automatically remove empty lines (caused by non-existent labels) during rendering, so you can configure freely
6900
+ You need to configure \`Integration Center-Instant Message-WeCom\` integration first to send message cards. If custom content is not set, the system default template will be used, rendering only common label information:
6441
6901
 
6442
- \`\`\`
6902
+ - We've listed some common labels, you can add or remove as needed
6903
+ - In WeCom app, the system will automatically remove empty rendered lines (due to non-existent labels), so you can configure freely
6904
+
6905
+ \`\`\`go
6443
6906
  {{if (index .Labels "resource")}}resource:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6444
6907
  {{if (index .Labels "metric")}}metric:{{index .Labels "metric"}}{{end}}
6445
6908
  {{if (index .Labels "prom_ql")}}prom_ql:{{toHtml (index .Labels "prom_ql")}}{{end}}
@@ -6463,19 +6926,19 @@ You need to configure \`Integration Center - IM - WeCom\` integration first to s
6463
6926
 
6464
6927
  As shown below:
6465
6928
 
6466
- <img src="https://download.flashcat.cloud/flashduty/doc/en/fd/template-wecom-1.png" width="800">
6929
+ <img src="https://download.flashcat.cloud/flashduty/changelog/20230720/wecom_app_render.png" alt="drawing" style="display: block; margin: 0 auto;" width="500"/>
6467
6930
 
6931
+ **Note: WeCom limits card length. In the template rendering area, you can render no more than 8 lines of content. Content beyond 8 lines will be hidden**
6468
6932
 
6469
- **Note: WeCom limits card length. In the template rendering area, you can render up to 8 lines of content. Content beyond 8 lines will be hidden**
6470
6933
  </div>
6471
6934
 
6472
6935
  <div class="slack_app hide">
6473
6936
 
6474
6937
  ## Slack App
6475
6938
  ---
6476
- You need to configure \`Integration Center - IM - Slack\` integration first to send message cards. If custom content is not set, the system default template will be used to render only common label information:
6939
+ You need to configure \`Integration Center-Instant Message-Slack\` integration first to send message cards. If custom content is not set, the system default template will be used, rendering only common label information:
6477
6940
 
6478
- \`\`\`
6941
+ \`\`\`go
6479
6942
  {{if .Description}}*description* :{{toHtml .Labels.body_text .Description}}{{end}}
6480
6943
  {{if .Labels.resource}}*resource* : {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6481
6944
  {{range $k, $v := .Labels}}
@@ -6486,18 +6949,18 @@ As shown below:
6486
6949
 
6487
6950
  <img src="https://download.flashcat.cloud/flashduty/integration/slack/slack_app_message.png" alt="drawing" style="display: block; margin: 0 auto;" width="600"/>
6488
6951
 
6489
- If you want to display only key label information, you can refer to the code snippet below:
6952
+ If you want to display only key label information, you can refer to the code segment below:
6490
6953
 
6491
- - We've listed some common labels that you can add or remove as needed
6492
- - Messages can be around 15000 characters long, content beyond that will be truncated
6493
- - In Slack app, the system will automatically remove empty lines (caused by non-existent labels) during rendering, so you can configure freely
6954
+ - We've listed some common labels, you can add or remove as needed
6955
+ - Messages can be around 15000 characters long, content beyond this will be truncated
6956
+ - In Slack app, the system will automatically remove empty rendered lines (due to non-existent labels), so you can configure freely
6494
6957
 
6495
- \`\`\`
6958
+ \`\`\`go
6496
6959
  {{if (index .Labels "resource")}}*resource*:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6497
6960
  {{if (index .Labels "metric")}}*metric*:{{index .Labels "metric"}}{{end}}
6498
6961
  {{if (index .Labels "prom_ql")}}*prom_ql*:{{toHtml (index .Labels "prom_ql")}}{{end}}
6499
6962
  {{if (index .Labels "trigger_value")}}*trigger_value*:{{index .Labels "trigger_value"}}{{end}}
6500
- {{if (index .Labels "host_ql")}}*host_ql*:{{toHtml (index .Labels "host_ql")}}{{end}}
6963
+ {{if (index .Labels "host_ql")}}*host_ql*:{{index .Labels "host_ql"}}{{end}}
6501
6964
  {{if (index .Labels "region")}}*region*:{{index .Labels "region"}}{{end}}
6502
6965
  {{if (index .Labels "cluster")}}*cluster*:{{index .Labels "cluster"}}{{end}}
6503
6966
  {{if (index .Labels "business")}}*business*:{{index .Labels "business"}}{{end}}
@@ -6512,19 +6975,392 @@ If you want to display only key label information, you can refer to the code sni
6512
6975
  {{if (index .Labels "name")}}*name*:{{index .Labels "name"}}{{end}}
6513
6976
  {{if (index .Labels "mode")}}*mode*:{{index .Labels "mode"}}{{end}}
6514
6977
  {{if (index .Labels "runbook_url")}}*runbook_url*:{{index .Labels "runbook_url"}}{{end}}
6515
- \`\`\`
6978
+ \`\`\`
6979
+ </div>
6980
+
6981
+ <div class="teams_app hide">
6982
+
6983
+ ## Microsoft Teams App
6984
+ ---
6985
+ You need to configure \`Integration Center-Instant Message-Microsoft Teams\` integration first to send message cards. If custom content is not set, the system default template will be used, rendering only common label information:
6986
+
6987
+ \`\`\`
6988
+ {{if .Description}}**description** :{{toHtml .Labels.body_text .Description}}{{end}}
6989
+ {{if .Labels.resource}}**resource** : {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6990
+ {{range $k, $v := .Labels}}
6991
+ {{if not (in $k "resource" "body_text" "body_text_with_table")}}**{{$k}}** : {{toHtml $v}}{{end}}{{end}}
6992
+ \`\`\`
6993
+
6994
+ As shown below:
6995
+
6996
+ <img src="https://download.flashcat.cloud/flashduty/integration/microsoft-teams/teams_app_message.png" alt="drawing" style="display: block; margin: 0 auto;" width="300"/>
6997
+
6998
+ If you want to display only key label information, you can refer to the code segment below:
6999
+
7000
+ - We've listed some common labels, you can add or remove as needed
7001
+ - Messages can be around 28KB in size, content beyond this will result in an error
7002
+ - In Microsoft Teams app, the system will automatically remove empty rendered lines (due to non-existent labels), so you can configure freely
7003
+
7004
+ \`\`\`
7005
+ {{if (index .Labels "resource")}}**resource**:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
7006
+ {{if (index .Labels "metric")}}**metric**:{{index .Labels "metric"}}{{end}}
7007
+ {{if (index .Labels "prom_ql")}}**prom_ql**:{{toHtml (index .Labels "prom_ql")}}{{end}}
7008
+ {{if (index .Labels "trigger_value")}}**trigger_value**:{{index .Labels "trigger_value"}}{{end}}
7009
+ {{if (index .Labels "host_ql")}}**host_ql**:{{index .Labels "host_ql"}}{{end}}
7010
+ {{if (index .Labels "region")}}**region**:{{index .Labels "region"}}{{end}}
7011
+ {{if (index .Labels "cluster")}}**cluster**:{{index .Labels "cluster"}}{{end}}
7012
+ {{if (index .Labels "business")}}**business**:{{index .Labels "business"}}{{end}}
7013
+ {{if (index .Labels "service")}}**service**:{{index .Labels "service"}}{{end}}
7014
+ {{if (index .Labels "env")}}**env**:{{index .Labels "env"}}{{end}}
7015
+ {{if (index .Labels "type")}}**type**:{{index .Labels "type"}}{{end}}
7016
+ {{if (index .Labels "topic")}}**topic**:{{index .Labels "topic"}}{{end}}
7017
+ {{if (index .Labels "cpu")}}**cpu**:{{index .Labels "cpu"}}{{end}}
7018
+ {{if (index .Labels "device")}}**device**:{{index .Labels "device"}}{{end}}
7019
+ {{if (index .Labels "path")}}**path**:{{index .Labels "path"}}{{end}}
7020
+ {{if (index .Labels "fstype")}}**fstype**:{{index .Labels "fstype"}}{{end}}
7021
+ {{if (index .Labels "name")}}**name**:{{index .Labels "name"}}{{end}}
7022
+ {{if (index .Labels "mode")}}**mode**:{{index .Labels "mode"}}{{end}}
7023
+ {{if (index .Labels "runbook_url")}}**runbook_url**:{{index .Labels "runbook_url"}}{{end}}
7024
+ \`\`\`
7025
+ </div>
7026
+
7027
+ <div class="sms hide">
7028
+
7029
+ ## Feishu/Lark Bot
7030
+ ---
7031
+ Feishu/Lark bot supports message cards, rich text, and plain text formats. The default template is in message card format.
7032
+
7033
+ - The msg_type field is required for message cards and rich text, otherwise it will be sent as plain text format
7034
+ - The maximum message length is \`4000 bytes, content exceeding this limit will be truncated\`
7035
+ - If no custom content is set, the system default template will be used to display key information:
7036
+
7037
+ 1. Message Card
7038
+ msg_type is required, value should be interactive
7039
+ \`\`\`
7040
+ {
7041
+ "msg_type": "interactive",
7042
+ "card": {
7043
+ "config": {
7044
+ "wide_screen_mode": true,
7045
+ "enable_forward": true
7046
+ },
7047
+ "header": {
7048
+ "template": "{{if eq .IncidentSeverity "Critical"}}red{{else if eq .IncidentSeverity "Warning"}}orange{{else}}yellow{{end}}",
7049
+ "title": {
7050
+ "content": "{{fireReason .}}INC #{{.Num}} {{toHtml .Title}}",
7051
+ "tag": "plain_text"
7052
+ }
7053
+ },
7054
+ "elements": [{
7055
+ "tag": "div",
7056
+ "fields": [{
7057
+ "text": {
7058
+ "tag": "lark_md",
7059
+ "content": "**🏢 Channel:**{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}"
7060
+ }
7061
+ },
7062
+ {
7063
+ "text": {
7064
+ "tag": "lark_md",
7065
+ "content": "**{{if eq .IncidentSeverity "Critical"}}🔴{{else if eq .IncidentSeverity "Warning"}}⚠️{{else}}ℹ️{{end}} Severity:**{{.IncidentSeverity}}"
7066
+ }
7067
+ },
7068
+ {
7069
+ "text": {
7070
+ "tag": "lark_md",
7071
+ "content": "**⏰ Triggered at:**{{date "2006-01-02 15:04:05" .StartTime}}{{if gt .AlertCnt 1}}"
7072
+ }
7073
+ },
7074
+ {
7075
+ "text": {
7076
+ "tag": "lark_md",
7077
+ "content": "**🔔 Grouped alerts:**{{.AlertCnt}} {{end}}{{if .Labels.resource}}"
7078
+ }
7079
+ },
7080
+ {
7081
+ "tag": "div",
7082
+ "text": {
7083
+ "tag": "lark_md",
7084
+ "content": "**📌 Alert targets:**{{toHtml (joinAlertLabels . "resource" ",")}} {{end}}{{if .Description}}"
7085
+ }
7086
+ },
7087
+ {
7088
+ "tag": "div",
7089
+ "text": {
7090
+ "tag": "lark_md",
7091
+ "content": "**🔍 Description:**{{.Description}}{{end}}{{if gt (len .Responders) 0}}"
7092
+ }
7093
+ },
7094
+ {
7095
+ "tag": "div",
7096
+ "text": {
7097
+ "tag": "lark_md",
7098
+ "content": "**👨‍💻 Responders:**{{range .Responders}}@{{.PersonName}} {{end}}{{end}}"
7099
+ }
7100
+ }
7101
+ ]
7102
+ },
7103
+ {
7104
+ "tag": "hr"
7105
+ },
7106
+ {
7107
+ "tag": "action",
7108
+ "actions": [{
7109
+ "tag": "button",
7110
+ "text": {
7111
+ "tag": "plain_text",
7112
+ "content": "Details"
7113
+ },
7114
+ "type": "primary",
7115
+ "url": "{{.DetailUrl}}"
7116
+ },
7117
+ {
7118
+ "tag": "button",
7119
+ "text": {
7120
+ "tag": "plain_text",
7121
+ "content": "Acknowledge"
7122
+ },
7123
+ "type": "primary",
7124
+ "url": "{{.DetailUrl}}?ack=1"
7125
+ }
7126
+ ]
7127
+ }]
7128
+ }
7129
+ }
7130
+ \`\`\`
7131
+
7132
+ 2. Rich Text
7133
+ msg_type is required, value should be post
7134
+ \`\`\`
7135
+ {
7136
+ "msg_type": "post",
7137
+ "post": {
7138
+ "zh_cn": {
7139
+ "title": "{{if eq .IncidentSeverity "Critical"}}🔴{{else if eq .IncidentSeverity "Warning"}}⚠️{{else}}ℹ️{{end}} {{fireReason .}}INC #{{.Num}} {{toHtml .Title}}",
7140
+ "content": [
7141
+ [{
7142
+ "tag": "text",
7143
+ "text": "🏢 "
7144
+ }, {
7145
+ "tag": "text",
7146
+ "text": "Channel:",
7147
+ "text_type": "bold"
7148
+ }, {
7149
+ "tag": "text",
7150
+ "text": "{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}\\n"
7151
+ }],
7152
+ [{
7153
+ "tag": "text",
7154
+ "text": "{{if eq .IncidentSeverity "Critical"}}🔴{{else if eq .IncidentSeverity "Warning"}}⚠️{{else}}ℹ️{{end}} "
7155
+ }, {
7156
+ "tag": "text",
7157
+ "text": "Severity:",
7158
+ "text_type": "bold"
7159
+ }, {
7160
+ "tag": "text",
7161
+ "text": "{{.IncidentSeverity}}\\n",
7162
+ "text_type": "{{if eq .IncidentSeverity "Critical"}}bold{{end}}"
7163
+ }],
7164
+ [{
7165
+ "tag": "text",
7166
+ "text": "⏰ "
7167
+ }, {
7168
+ "tag": "text",
7169
+ "text": "Triggered at:",
7170
+ "text_type": "bold"
7171
+ }, {
7172
+ "tag": "text",
7173
+ "text": "{{date "2006-01-02 15:04:05" .StartTime}}\\n"
7174
+ }],
7175
+ {{if gt .AlertCnt 1}}[{
7176
+ "tag": "text",
7177
+ "text": "🔔 "
7178
+ }, {
7179
+ "tag": "text",
7180
+ "text": "Grouped alerts:",
7181
+ "text_type": "bold"
7182
+ }, {
7183
+ "tag": "text",
7184
+ "text": "{{.AlertCnt}}\\n"
7185
+ }],{{end}}
7186
+ {{if .Labels.resource}}[{
7187
+ "tag": "text",
7188
+ "text": "📋 "
7189
+ }, {
7190
+ "tag": "text",
7191
+ "text": "Alert targets:",
7192
+ "text_type": "bold"
7193
+ }, {
7194
+ "tag": "text",
7195
+ "text": "{{toHtml (joinAlertLabels . "resource" ", ")}}\\n"
7196
+ }],{{end}}
7197
+ {{if .Description}}[{
7198
+ "tag": "text",
7199
+ "text": "📝 "
7200
+ }, {
7201
+ "tag": "text",
7202
+ "text": "Description:",
7203
+ "text_type": "bold"
7204
+ }, {
7205
+ "tag": "text",
7206
+ "text": "{{toHtml .Description}}\\n"
7207
+ }],{{end}}
7208
+ {{if gt (len .Responders) 0}}[{
7209
+ "tag": "text",
7210
+ "text": "👨‍💻 "
7211
+ }, {
7212
+ "tag": "text",
7213
+ "text": "Responders:",
7214
+ "text_type": "bold"
7215
+ }, {
7216
+ "tag": "text",
7217
+ "text": "{{range .Responders}}@{{.PersonName}} {{end}}\\n"
7218
+ }],{{end}}
7219
+ [{
7220
+ "tag": "a",
7221
+ "href": "{{.DetailUrl}}",
7222
+ "text": "Details"
7223
+ },{
7224
+ "tag": "text",
7225
+ "text": " "
7226
+ },{
7227
+ "tag": "a",
7228
+ "href": "{{.DetailUrl}}?ack=1",
7229
+ "text": "Acknowledge"
7230
+ }]
7231
+ ]
7232
+ }
7233
+ }
7234
+ }
7235
+ \`\`\`
7236
+
7237
+ 3. Plain Text
7238
+ \`\`\`
7239
+ {{fireReason .}}INC #{{.Num}} {{toHtml .Title}}
7240
+ -----
7241
+ Channel:{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}
7242
+ Severity:{{.IncidentSeverity}}
7243
+ Triggered at:{{date "2006-01-02 15:04:05" .StartTime}}
7244
+ Duration:{{ago .StartTime}}{{if gt .AlertCnt 1}}
7245
+ Grouped alerts:{{.AlertCnt}}{{end}}{{if .Labels.resource}}
7246
+ Alert targets:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}{{if .Description}}
7247
+ Description:{{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}
7248
+ Responders:{{range .Responders}}@{{.PersonName}} {{end}}{{end}}
7249
+ <br>Details:{{.DetailUrl}}
7250
+ \`\`\`
7251
+ </div>
7252
+
7253
+ <div class="dingtalk hide">
7254
+
7255
+ ## Dingtalk Bot
7256
+ ---
7257
+ Dingtalk bot only supports sending Markdown messages ([syntax restrictions](https://open.dingtalk.com/document/robots/custom-robot-access#title-7ur-3ok-s1a)).
7258
+
7259
+ - The maximum message length is \`4000 bytes, content exceeding this limit will be truncated\`
7260
+ - If the text contains \`<br>\`, when rendering, the system will \`first remove empty lines, then replace <br> with line breaks\`
7261
+ - If no custom content is set, the system default template will be used to display key information:
7262
+
7263
+ \`\`\`
7264
+ {{fireReason .}}INC [#{{.Num}}]({{.DetailUrl}}) {{toHtml .Title}}
7265
+
7266
+ ---
7267
+ - Channel: {{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}
7268
+ - Severity: {{$s := colorSeverity .IncidentSeverity}}{{toHtml $s}}
7269
+ - Triggered at: {{date "2006-01-02 15:04:05" .StartTime}}
7270
+ - Duration: {{ago .StartTime}}{{if gt .AlertCnt 1}}
7271
+ - Grouped alerts: {{.AlertCnt}}{{end}}{{if .Labels.resource}}
7272
+ - Alert targets: {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}{{if .Description}}
7273
+ - Description: {{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}
7274
+ - Responders: {{range .Responders}}@{{.PersonName}} {{end}}{{end}}
7275
+ ---
7276
+ <br>[Details]({{.DetailUrl}})|[Acknowledge]({{.DetailUrl}}?ack=1)
7277
+ \`\`\`
7278
+ </div>
7279
+
7280
+ <div class="wecom hide">
7281
+
7282
+ ## WeCom Bot
7283
+ ---
7284
+ WeCom bot only supports sending Markdown messages ([syntax restrictions](https://developer.work.weixin.qq.com/document/path/91770#markdown%E7%B1%BB%E5%9E%8B)).
7285
+
7286
+ - The maximum message length is \`4000 bytes, content exceeding this limit will be truncated\`
7287
+ - If the text contains \`<br>\`, when rendering, the system will \`first remove empty lines, then replace <br> with line breaks\`
7288
+ - If no custom content is set, the system default template will be used to display key information:
7289
+
7290
+ \`\`\`
7291
+ {{fireReason .}}**INC [#{{.Num}}]({{.DetailUrl}}) {{toHtml .Title}}**
7292
+ > Channel: <font color="warning">{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}</font>
7293
+ > Severity: <font color="warning">{{.IncidentSeverity}}</font>
7294
+ > Triggered at: {{date "2006-01-02 15:04:05" .StartTime}}
7295
+ > Duration: {{ago .StartTime}}{{if gt .AlertCnt 1}}
7296
+ > Grouped alerts: {{.AlertCnt}}{{end}}{{if .Labels.resource}}
7297
+ > Alert targets: {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}{{if .Description}}
7298
+ > Description: {{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}
7299
+ > Responders: {{range .Responders}}@{{.PersonName}} {{end}}{{end}}
7300
+ <br>[Details]({{.DetailUrl}})|[Acknowledge]({{.DetailUrl}}?ack=1)
7301
+ \`\`\`
7302
+ </div>
7303
+
7304
+ <div class="telegram hide">
7305
+
7306
+ ## Telegram Bot
7307
+ ---
7308
+
7309
+ - Configure a Telegram service address accessible in mainland China
7310
+ - The maximum message length is \`4096 characters, content exceeding this limit will not be sent\`
7311
+ - If the text contains \`<br>\`, when rendering, the system will \`first remove empty lines, then replace <br> with line breaks\`
7312
+ - If no custom content is set, the system default template will be used to display key information:
7313
+
7314
+ \`\`\`
7315
+ {{fireReason .}}INC [#{{.Num}}]({{.DetailUrl}}) {{toHtml .Title}}
7316
+ -----
7317
+ Channel: {{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}
7318
+ Severity: {{.IncidentSeverity}}
7319
+ Triggered at: {{date "2006-01-02 15:04:05" .StartTime}}
7320
+ Duration: {{ago .StartTime}}{{if gt .AlertCnt 1}}
7321
+ Grouped alerts: {{.AlertCnt}}{{end}}{{if .Labels.resource}}
7322
+ Alert targets: {{toHtml (joinAlertLabels . "resource" ", ")}}({{.Labels.resource}}){{end}}{{if .Description}}
7323
+ Description: {{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}
7324
+ Responders: {{range .Responders}}@{{.PersonName}} {{end}}{{end}}
7325
+
7326
+ <br>[Details]({{.DetailUrl}})|[Acknowledge]({{.DetailUrl}}?ack=1)
7327
+ \`\`\`
7328
+ </div>
7329
+
7330
+ <div class="slack hide">
7331
+
7332
+ ## Slack Bot
7333
+ ---
7334
+ - Messages can be \`approximately 15000 characters long, content exceeding this limit will be truncated\`
7335
+ - If the text contains \`<br>\`, when rendering, the system will \`first remove empty lines, then replace <br> with line breaks\`
7336
+ - If no custom content is set, the system default template will be used to display key information:
7337
+
7338
+ \`\`\`
7339
+ {{fireReason .}}INC <{{.DetailUrl}}|#{{.Num}}> {{toHtml .Title}}
7340
+ -----
7341
+ Channel: {{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}
7342
+ Severity: {{.IncidentSeverity}}
7343
+ Triggered at: {{date "2006-01-02 15:04:05" .StartTime}}
7344
+ Duration: {{ago .StartTime}}{{if gt .AlertCnt 1}}
7345
+ Grouped alerts: {{.AlertCnt}}{{end}}{{if .Labels.resource}}
7346
+ Alert targets: {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}{{if .Description}}
7347
+ Description: {{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}
7348
+ Responders: {{range .Responders}}@{{.PersonName}} {{end}}{{end}}
7349
+ -----
7350
+ <br><{{.DetailUrl}}|Details>|<{{.DetailUrl}}?ack=1|Acknowledge>
7351
+ \`\`\`
6516
7352
  </div>
6517
7353
 
6518
7354
  <div class="zoom hide">
6519
7355
 
6520
7356
  ## Zoom Bot
6521
7357
  ---
6522
- - Messages \`can be around 4000 characters long, content beyond that will be truncated\`
6523
- - If text contains \`<br>\`, during rendering the system will \`first remove empty lines, then replace <br> with newline\`
6524
- - Message format \`follows Zoom message format\`. Current bot application doesn't support Markdown, refer to official website for other formats: https://developers.zoom.us/docs/team-chat-apps/customizing-messages/
6525
- - If custom content is not set, the system default template will be used to display only key information:
7358
+ - Messages can be \`approximately 4000 characters long, content exceeding this limit will be truncated\`
7359
+ - If the text contains \`<br>\`, when rendering, the system will \`first remove empty lines, then replace <br> with line breaks\`
7360
+ - Message format \`follows Zoom message format\`. The current bot application doesn't support Markdown. For other formats, please refer to the official documentation: https://developers.zoom.us/docs/team-chat-apps/customizing-messages/
7361
+ - If no custom content is set, the system default template will be used to display key information:
6526
7362
 
6527
- \`\`\`
7363
+ \`\`\`json
6528
7364
  {"head": {
6529
7365
  "text": "{{fireReason .}}INC [#{{.Num}}] {{toHtml .Title}}",
6530
7366
  "style": {
@@ -6536,7 +7372,7 @@ If you want to display only key label information, you can refer to the code sni
6536
7372
  "body": [
6537
7373
  {
6538
7374
  "type": "message",
6539
- "text": "Channel{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}",
7375
+ "text": "Channel: {{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}",
6540
7376
  "style": {
6541
7377
  "bold": false,
6542
7378
  "italic": false
@@ -6544,7 +7380,7 @@ If you want to display only key label information, you can refer to the code sni
6544
7380
  },
6545
7381
  {
6546
7382
  "type": "message",
6547
- "text": "Severity{{.IncidentSeverity}}",
7383
+ "text": "Severity: {{.IncidentSeverity}}",
6548
7384
  "style": {
6549
7385
  "bold": false,
6550
7386
  "italic": false,
@@ -6553,7 +7389,7 @@ If you want to display only key label information, you can refer to the code sni
6553
7389
  },
6554
7390
  {
6555
7391
  "type": "message",
6556
- "text": "Duration{{ago .StartTime}}{{if gt .AlertCnt 1}}",
7392
+ "text": "Duration: {{ago .StartTime}}{{if gt .AlertCnt 1}}",
6557
7393
  "style": {
6558
7394
  "bold": false,
6559
7395
  "italic": false
@@ -6561,7 +7397,7 @@ If you want to display only key label information, you can refer to the code sni
6561
7397
  },
6562
7398
  {
6563
7399
  "type": "message",
6564
- "text": "Grouped alerts{{.AlertCnt}}{{end}}{{if .Labels.resource}}",
7400
+ "text": "Grouped alerts: {{.AlertCnt}}{{end}}{{if .Labels.resource}}",
6565
7401
  "style": {
6566
7402
  "bold": false,
6567
7403
  "italic": false
@@ -6569,7 +7405,7 @@ If you want to display only key label information, you can refer to the code sni
6569
7405
  },
6570
7406
  {
6571
7407
  "type": "message",
6572
- "text": "Resource:{{.Labels.resource}}{{end}}{{if .Description}}",
7408
+ "text": "Alert targets: {{.Labels.resource}}{{end}}{{if .Description}}",
6573
7409
  "style": {
6574
7410
  "bold": false,
6575
7411
  "italic": false
@@ -6577,7 +7413,7 @@ If you want to display only key label information, you can refer to the code sni
6577
7413
  },
6578
7414
  {
6579
7415
  "type": "message",
6580
- "text": "Description{{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}",
7416
+ "text": "Description: {{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}",
6581
7417
  "style": {
6582
7418
  "bold": false,
6583
7419
  "italic": false
@@ -6585,7 +7421,7 @@ If you want to display only key label information, you can refer to the code sni
6585
7421
  },
6586
7422
  {
6587
7423
  "type": "message",
6588
- "text": "Responders{{range .Responders}}@{{.PersonName}}{{end}}{{end}}",
7424
+ "text": "Responders: {{range .Responders}}@{{.PersonName}}{{end}}{{end}}",
6589
7425
  "style": {
6590
7426
  "bold": false,
6591
7427
  "italic": false
@@ -6593,12 +7429,12 @@ If you want to display only key label information, you can refer to the code sni
6593
7429
  },
6594
7430
  {
6595
7431
  "type": "message",
6596
- "text": "View details",
7432
+ "text": "View Details",
6597
7433
  "link": "{{.DetailUrl}}{{if .IsFlapping}}"
6598
7434
  },
6599
7435
  {
6600
7436
  "type": "message",
6601
- "text": "Note: Current incident status changes frequently, notifications will be suppressed for {{.Flapping.MuteMinutes}} minutes. Please optimize your alert policy.{{end}}{{if .IsInStorm}}",
7437
+ "text": "Note: The current incident status is changing frequently. Notifications will be suppressed for {{.Flapping.MuteMinutes}} minutes. Please optimize your alert policy.{{end}}{{if .IsInStorm}}",
6602
7438
  "style": {
6603
7439
  "bold": true,
6604
7440
  "italic": false
@@ -6606,7 +7442,7 @@ If you want to display only key label information, you can refer to the code sni
6606
7442
  },
6607
7443
  {
6608
7444
  "type": "message",
6609
- "text": "Note: Current incident has grouped {{.AlertCnt}} alerts, triggering alert storm. Please handle urgently!{{end}}",
7445
+ "text": "Note: The current incident has grouped {{.AlertCnt}} alerts, triggering an alert storm. Please handle with urgency!{{end}}",
6610
7446
  "style": {
6611
7447
  "bold": true,
6612
7448
  "italic": false
@@ -6617,14 +7453,13 @@ If you want to display only key label information, you can refer to the code sni
6617
7453
  \`\`\`
6618
7454
  </div>
6619
7455
 
6620
-
6621
7456
  <div class="sms hide">
6622
7457
 
6623
7458
  ## SMS
6624
7459
  ---
6625
- If custom content is not set, the system default template will be used for notification:
7460
+ If no custom content is set, the system default template will be used for notifications:
6626
7461
 
6627
- \`\`\`
7462
+ \`\`\`go
6628
7463
  You have a pending incident: {{toHtml .Title}}, Channel: {{.ChannelName}}, Severity: {{.IncidentSeverity}}{{if gt .AlertCnt 1}}, Grouped {{.AlertCnt}} alerts{{end}}
6629
7464
  \`\`\`
6630
7465
  </div>
@@ -6633,94 +7468,95 @@ You have a pending incident: {{toHtml .Title}}, Channel: {{.ChannelName}}, Sever
6633
7468
 
6634
7469
  ## Email
6635
7470
  ---
6636
- If custom content is not set, the system default template will be used for notification:
7471
+ If no custom content is set, the system default template will be used for notifications:
6637
7472
 
6638
- \`\`\`
7473
+ \`\`\`html
6639
7474
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6640
7475
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6641
7476
  <title>{{.Title}}</title>
6642
7477
  <html lang="en">
6643
7478
 
6644
7479
  <head data-id="__react-email-head">
6645
- <style>
6646
- .bg-Critical { background-color: #C80000; }
6647
- .bg-Warning { background-color: #FA7D00; }
6648
- .bg-Info { background-color: #FABE00; }
6649
- .bg-Ok { background-color: rgb(132 204 22); }
6650
- .text-Critical { color: #C80000; }
6651
- .text-Warning { color: #FA7D00; }
6652
- .text-Info { color: #FABE00; }
6653
- .text-Ok { color: rgb(132 204 22); }
6654
- .text-title {font-weight:500;width:6rem;flex-shrink:0}
6655
- .text-content {color:rgb(55,65,81)}
6656
- </style>
7480
+ <style>
7481
+ .bg-Critical { background-color: #C80000; }
7482
+ .bg-Warning { background-color: #FA7D00; }
7483
+ .bg-Info { background-color: #FABE00; }
7484
+ .bg-Ok { background-color: rgb(132 204 22); }
7485
+ .text-Critical { color: #C80000; }
7486
+ .text-Warning { color: #FA7D00; }
7487
+ .text-Info { color: #FABE00; }
7488
+ .text-Ok { color: rgb(132 204 22); }
7489
+ .text-title {font-weight:500;width:6rem;flex-shrink:0}
7490
+ .text-content {color:rgb(55,65,81)}
7491
+ </style>
6657
7492
  </head>
6658
7493
 
6659
7494
  <body data-id="__react-email-body" style="background-color:rgb(255,255,255);border-radius:0.25rem;margin-top:2.5rem;margin-bottom:2.5rem;margin-left:auto;margin-right:auto;padding:1rem;min-width:400px;max-width:660px;font-family:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji">
6660
- <div style="width:100%;height:0.375rem;margin-bottom:2rem" class="bg-{{.IncidentSeverity}}"></div>
6661
- <div style="display:flex;align-items:center;margin-bottom:1.5rem">
6662
- <div style="display:flex;align-items:flex-end;gap:1rem"><img witdh="120" data-id="react-email-img" src="https://console.flashcat.cloud/image/saas-logo.png" height="40" style="display:block;outline:none;border:none;text-decoration:none" /><span style="font-size:1.25rem;line-height:1.75rem;font-weight:600">You have a pending incident</span></div>
6663
- </div>
6664
- <div style="background-color:rgb(243,244,246);padding:2rem;margin-top:1rem;border-radius:0.5rem">
6665
- <div style="display:flex;flex-direction:column;gap:0.75rem">
6666
- <div style="display:flex">
6667
- <div class="text-title">Title</div>
6668
- <div class="text-content">{{.Title}}</div>
6669
- </div>
6670
- <div style="display:flex">
6671
- <div class="text-title">Severity</div>
6672
- <div class="text-{{.IncidentSeverity}}">{{.IncidentSeverity}}</div>
6673
- </div>
6674
- <div style="display:flex">
6675
- <div class="text-title">Channel</div>
6676
- <div class="text-content">{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}</div>
6677
- </div>
6678
- <div style="display:flex">
6679
- <div class="text-title">Triggered at</div>
6680
- <div class="text-content">{{date "2006-01-02 15:04:05" .StartTime}}</div>
6681
- </div>
6682
- {{if .CreatorID}}
6683
- <div style="display:flex">
6684
- <div class="text-title">Creator</div>
6685
- <div class="text-content">{{.Creator.PersonName}}</div>
6686
- </div>
6687
- {{end}}
6688
- {{if gt (len .Responders) 0}}
6689
- <div style="display:flex">
6690
- <div class="text-title">Responders</div>
6691
- <div class="text-content">{{range .Responders}}@{{.PersonName}} {{end}}</div>
6692
- </div>
6693
- {{end}}
6694
- <div style="display:flex">
6695
- <div class="text-title">Progress</div>
6696
- <div class="text-content">{{.Progress}}</div>
6697
- </div>
6698
- <div style="display:flex">
6699
- <div class="text-title">Description</div>
6700
- <div style="color:rgb(55,65,81);margin-top:0.125rem">
6701
- <div data-id="react-email-markdown">{{toHtml .Description}}</div>
6702
- </div>
6703
- </div>
6704
- {{if .Labels.resource}}
6705
- <div style="display:flex;margin-bottom:0.5rem;">
6706
- <div style="color:#000;font-weight:500;width:6rem;margin-right:1rem;">Resource</div>
6707
- <div style="color:rgb(55,65,81);margin-top:0.125rem">
6708
- <div data-id="react-email-markdown">{{toHtml (joinAlertLabels . "resource" ", ")}}</div>
6709
- </div>
6710
- </div>
6711
- {{end}}
6712
- </div>
6713
- <div style="display:flex;gap:1rem;margin-top:2rem"><a href="{{.DetailUrl}}?ack=1" data-id="react-email-button" target="_blank" style="line-height:100%;text-decoration:none;display:inline-block;max-width:100%;padding:0px 0px"><span></span><span style="max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:0"><div style="padding-left:2rem;padding-right:2rem;padding-top:0.5rem;padding-bottom:0.5rem;background-color:rgb(108,83,177);border-radius:0.25rem;font-size:1rem;line-height:1.5rem;color:rgb(255,255,255);font-weight:600;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms">Acknowledge</div></span><span></span></a><a href="{{.DetailUrl}}" data-id="react-email-button" target="_blank" style="color:#61dafb;line-height:100%;text-decoration:none;display:inline-block;max-width:100%;padding:0px 0px"><span></span><span style="max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:0"><div style="padding-left:2rem;padding-right:2rem;padding-top:0.5rem;padding-bottom:0.5rem;background-color:rgb(255,255,255);border-width: 1px;border-style:solid;border-color:rgb(229,231,235);border-radius:0.25rem;font-size:1rem;line-height:1.5rem;color:rgb(0,0,0);font-weight:600">View Details</div></span><span></span></a></div>
6714
- </div>
6715
- <div style="display:flex;justify-content:flex-end;align-items:flex-end;margin-top:2rem">
6716
- <div style="font-size:0.875rem;line-height:1.25rem;font-weight:500">ALL RIGHTS RESERVED © Beijing Flashcat Cloud Technology Co.,Ltd.</div>
6717
- </div>
7495
+ <div style="width:100%;height:0.375rem;margin-bottom:2rem" class="bg-{{.IncidentSeverity}}"></div>
7496
+ <div style="display:flex;align-items:center;margin-bottom:1.5rem">
7497
+ <div style="display:flex;align-items:flex-end;gap:1rem"><img witdh="120" data-id="react-email-img" src="https://console.flashcat.cloud/image/saas-logo.png" height="40" style="display:block;outline:none;border:none;text-decoration:none" /><span style="font-size:1.25rem;line-height:1.75rem;font-weight:600">You have a pending incident</span></div>
7498
+ </div>
7499
+ <div style="background-color:rgb(243,244,246);padding:2rem;margin-top:1rem;border-radius:0.5rem">
7500
+ <div style="display:flex;flex-direction:column;gap:0.75rem">
7501
+ <div style="display:flex">
7502
+ <div class="text-title">Title</div>
7503
+ <div class="text-content">{{.Title}}</div>
7504
+ </div>
7505
+ <div style="display:flex">
7506
+ <div class="text-title">Severity</div>
7507
+ <div class="text-{{.IncidentSeverity}}">{{.IncidentSeverity}}</div>
7508
+ </div>
7509
+ <div style="display:flex">
7510
+ <div class="text-title">Channel</div>
7511
+ <div class="text-content">{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}</div>
7512
+ </div>
7513
+ <div style="display:flex">
7514
+ <div class="text-title">Triggered at</div>
7515
+ <div class="text-content">{{date "2006-01-02 15:04:05" .StartTime}}</div>
7516
+ </div>
7517
+ {{if .CreatorID}}
7518
+ <div style="display:flex">
7519
+ <div class="text-title">Creator</div>
7520
+ <div class="text-content">{{.Creator.PersonName}}</div>
7521
+ </div>
7522
+ {{end}}
7523
+ {{if gt (len .Responders) 0}}
7524
+ <div style="display:flex">
7525
+ <div class="text-title">Responders</div>
7526
+ <div class="text-content">{{range .Responders}}@{{.PersonName}} {{end}}</div>
7527
+ </div>
7528
+ {{end}}
7529
+ <div style="display:flex">
7530
+ <div class="text-title">Progress</div>
7531
+ <div class="text-content">{{.Progress}}</div>
7532
+ </div>
7533
+ <div style="display:flex">
7534
+ <div class="text-title">Description</div>
7535
+ <div style="color:rgb(55,65,81);margin-top:0.125rem">
7536
+ <div data-id="react-email-markdown">{{toHtml .Description}}</div>
7537
+ </div>
7538
+ </div>
7539
+ {{if .Labels.resource}}
7540
+ <div style="display:flex;margin-bottom:0.5rem;">
7541
+ <div style="color:#000;font-weight:500;width:6rem;margin-right:1rem;">Alert targets</div>
7542
+ <div style="color:rgb(55,65,81);margin-top:0.125rem">
7543
+ <div data-id="react-email-markdown">{{toHtml (joinAlertLabels . "resource" ", ")}}</div>
7544
+ </div>
7545
+ </div>
7546
+ {{end}}
7547
+ </div>
7548
+ <div style="display:flex;gap:1rem;margin-top:2rem"><a href="{{.DetailUrl}}?ack=1" data-id="react-email-button" target="_blank" style="line-height:100%;text-decoration:none;display:inline-block;max-width:100%;padding:0px 0px"><span></span><span style="max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:0"><div style="padding-left:2rem;padding-right:2rem;padding-top:0.5rem;padding-bottom:0.5rem;background-color:rgb(108,83,177);border-radius:0.25rem;font-size:1rem;line-height:1.5rem;color:rgb(255,255,255);font-weight:600;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms">Acknowledge</div></span><span></span></a><a href="{{.DetailUrl}}" data-id="react-email-button" target="_blank" style="color:#61dafb;line-height:100%;text-decoration:none;display:inline-block;max-width:100%;padding:0px 0px"><span></span><span style="max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:0"><div style="padding-left:2rem;padding-right:2rem;padding-top:0.5rem;padding-bottom:0.5rem;background-color:rgb(255,255,255);border-width: 1px;border-style:solid;border-color:rgb(229,231,235);border-radius:0.25rem;font-size:1rem;line-height:1.5rem;color:rgb(0,0,0);font-weight:600">View Details</div></span><span></span></a></div>
7549
+ </div>
7550
+ <div style="display:flex;justify-content:flex-end;align-items:flex-end;margin-top:2rem">
7551
+ <div style="font-size:0.875rem;line-height:1.25rem;font-weight:500">ALL RIGHTS RESERVED © Beijing Flashcat Cloud Technology Co.,Ltd.</div>
7552
+ </div>
6718
7553
  </body>
6719
7554
 
6720
7555
  </html>
6721
7556
  \`\`\`
6722
7557
 
6723
- As shown below:
6724
- <img src="https://download.flashcat.cloud/flashduty/doc/en/fd/template-mail-1.png" width="800">
7558
+ As shown in the image below:
7559
+
7560
+ <img src="https://download.flashcat.cloud/flashduty/changelog/20230720/email_render.png" alt="drawing" style="display: block; margin: 0 auto;" width="500"/>
6725
7561
 
6726
- `,ee={CustomAlert:n,Email:t,N9e:a,Prometheus:i,Grafana:o,Zabbix:s,UptimeKuma:r,AliyunARMS:l,AliyunCmEvent:d,AliyunCm:c,AliyunSLS:e,AWSCW:e,AzureMonitor:h,BaiDuBCM:u,HuaWeiCES:g,InfluxDB:p,OpenFalcon:m,PagerDuty:f,TencentBK:y,TencentCLS:v,TencentCm:b,TencentEb:w,OceanBase:C,Graylog:k,Skywalking:I,Sentry:S,Jiankongbao:A,AWSEventBridge:L,Dynatrace:_,HuaweiyunLTS:F,GoogleCM:x,Zilliz:Y,Splunk:R,AppDynamics:T,SolarWinds:U,VolcEngineMetric:E,VolcEngineEvent:D,VolcEngineTLS:P,OpManager:N,Meraki:M,StateCloud:W,Guance:G,CustomChange:O,Jira:j,Lark:$,Dingtalk:H,Wecom:B,Slack:z,MicrosoftTeams:V,AlertWebhook:J,IncidentWebhook:K,CustomAction:Z,Templates:X,HuaweiyunAPM:q,JiraSync:Q};module.exports=ee;
7562
+ </div>`,ie={CustomAlert:n,Email:t,N9e:a,Prometheus:i,Grafana:o,Zabbix:s,UptimeKuma:r,AliyunARMS:l,AliyunCmEvent:d,AliyunCm:c,AliyunSLS:e,AWSCW:e,AzureMonitor:h,BaiDuBCM:u,HuaWeiCES:g,InfluxDB:p,OpenFalcon:m,PagerDuty:f,TencentBK:y,TencentCLS:v,TencentCm:b,TencentEb:w,OceanBase:C,Graylog:k,Skywalking:I,Sentry:S,Jiankongbao:A,AWSEventBridge:x,Dynatrace:_,HuaweiyunLTS:L,GoogleCM:F,Zilliz:q,Splunk:R,AppDynamics:T,SolarWinds:D,VolcEngineMetric:U,VolcEngineEvent:E,VolcEngineTLS:N,OpManager:P,Meraki:M,StateCloud:W,Guance:G,CustomChange:B,Jira:z,Lark:V,Dingtalk:K,Wecom:J,Slack:Z,MicrosoftTeams:Q,AlertWebhook:X,IncidentWebhook:ee,CustomAction:ne,Templates:ae,HuaweiyunAPM:O,JiraSync:te,ZStack:Y,Keep:H,ElastAlert2:$,DingtalkAlert:j};module.exports=ie;