flashduty-knowledge-base 1.2.0-beta.3 → 1.2.0

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/en.js CHANGED
@@ -1,3 +1,897 @@
1
1
  (function(global) {
2
2
  "use strict";
3
+ const CustomAlert = '---\ntitle: "Standard Alert Event Integration Guide"\ndescription: "Push alert events from your own system to Flashduty through standard protocols to achieve automated alert noise reduction."\ndate: "2025-01-20T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/custom-alert-integration-guide"\n---\n\nPush alert events from your own system to Flashduty through standard protocols to achieve automated alert noise reduction.\n\n:::tips\nFlashduty 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.\n:::\n\n## Steps\n---\n\n### In Flashduty\n\nYou can obtain an integration push URL through either of the following two methods:\n\n#### Using Dedicated Integration\n\nWhen you don\'t need to route alert events to different collaboration spaces, this method is preferred as it\'s simpler.\n\n<details>\n <summary>Expand</summary>\n \n 1. Enter the Flashduty console, select **Collaboration Space**, and enter the details page of a space\n 2. Select the **Integrations** tab, click **Add Integration**, and enter the add integration page\n 3. Select **Standard Alert Event** integration, click **Save** to generate a card\n 4. Click the generated card to view the **Push URL**, copy it for later use, and you\'re done\n \n</details>\n\n#### Using Shared Integration\n\nWhen you need to route alert events to different collaboration spaces based on the alert event\'s Payload information, this method is preferred.\n\n<details>\n <summary>Expand</summary>\n \n 1. Enter the Flashduty console, select **Integration Center => Alert Events** to enter the integration selection page\n 2. Select **Standard Alert Event** integration:\n - **Integration Name**: Define a name for the current integration\n 3. Click **Save** and copy the newly generated **Push URL** on the current page for later use\n 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\n 5. Complete\n \n</details>\n\n## I. Request Description\n---\n\n### Request Method\n\n<div class="md-block">\n\nPOST, Content-Type:"application/json"\n\n</div>\n\n### Request Parameters:\n\n<div class="md-block">\n\n#### Headers:\nField|Required|Type|Description\n:-:|:-:|:-:|:---\n| Content-Type | Yes | string | Fixed value: `application/json`\n\n#### Query Strings:\nField|Required|Type|Description\n:-:|:-:|:-:|:---\n| integration_key | Yes | string | Integration key for access control. Obtained after adding integration.\n\n#### Payload:\n\nField|Required|Type|Description\n:-:|:-:|:-:|:---\n| title_rule | Yes | string | Alert title, no more than `512` characters, will be truncated if exceeded.<br><br>Supports dynamic title generation based on alert content, see [Customizing Incidents](https://docs.flashcat.cloud/en/flashduty/customize-incident-attrs) for generation rules.\n| event_status | Yes | string | Alert status.<br><br>Enumerated values (case-sensitive): *Critical*, *Warning*, *Info*, *Ok*.<br><br>When specified as Ok, it means automatic recovery of the alert.\n| alert_key | No | string | Alert identifier, used to update or automatically recover existing alerts.<br><br>You can customize this value, but it cannot exceed `255` characters. You can also rely on system auto-generation, this value will be returned in the response.<br><br>If you\'re reporting a recovery event, this value must exist.\n| description | No | string | Alert description, no more than `2048` characters, will be truncated if exceeded.\n| labels | No | map | Alert label collection, key is the label name, value is the label value:<br><br>1. Both key and value of labels are string type, case-sensitive.<br>2. Label key should not exceed `128` characters, following Prometheus label naming conventions. Value should not exceed `2048` characters, will be truncated if exceeded.<br>3. Maximum of `50` labels. See `Label Content Reference` in [Best Practices](#best-practices).<br><br>Example: "resource": "171.26.23.22", "check": "api latency > 500ms"\n \n</div>\n\n### Response\n\nField Name|Required|Type|Description\n:-:|:-:|:-:|:---\nrequest_id|Yes|string|Request ID for trace tracking\nerror|No|[Error](#Error)|Error description, returned only when an error occurs\ndata|No|[Data](#Data)|Report information\n\n<span id="Data"></span>\nData:\n\n| Field Name | Required | Type | Description |\n:-:|:-:|:-:|:---\n| alert_key | No | string | Alert identifier, can be used to report recovery events. If you specified an alert_key when reporting the event, this value remains unchanged. Otherwise, it\'s automatically generated by the system. |\n\n<span id="Error"></span>\nError:\n\n| Field Name | Required | Type | Description |\n:-:|:-:|:-:|:---\n| code | Yes | string | Error code, see [Code](#Code) for enumerated values |\n| message | No | string | Error description |\n\n<span id="Code"></span>\nCode:\n\n| Error Code | HTTP Status | Description |\n| :-:|:-:| ------------------ |\n| InvalidParameter | 400 | Parameter error |\n| InvalidContentType | 400 | Content-Type not supported |\n| MethodNotAllowed | 400 | HTTP Method not supported |\n| Unauthorized | 401 | Login authentication failed |\n| AccessDenied | 403 | Permission authentication failed |\n| RequestTooFrequently | 429 | Request too frequent |\n| RouteNotFound | 404 | Request Method+Path not matched |\n| ResourceNotFound | 400 | Account hasn\'t purchased resources, please go to the cost center to place an order |\n| NoLicense | 400 | Account has insufficient subscription licenses, please upgrade or purchase subscription in the cost center |\n| InternalError | 500 | Internal or unknown error |\n\n### II. Request Example\n---\n\nRequest:\n\n```\ncurl -X POST \'{api_host}/event/push/alert/standard?integration_key={integration_key}\' \\\n-H \'Content-Type: application/json\' \\\n-d \'{\n "event_status": "Warning",\n "title_rule": "cpu idle low than 20%",\n "labels": {\n "service": "engine",\n "cluster":"nj",\n "resource":"es.nj.01",\n "check":"cpu.idle<20%",\n "metric":"node_cpu_seconds_total"\n }\n}\' -v\n```\n\nSuccessful Response:\n\n```\n{\n "request_id": "0ace00116215ab4ca0ec5244b8fc54b0",\n "data": {\n "alert_key": "9qJ798NJoXS4UMVB5SHsNj"\n }\n}\n```\n\nFailed Response:\n\n```\n{\n "request_id": "0ace00116215abc0ba4e52449bd305b0",\n "error": {\n "code": "InvalidParameter",\n "message": "integration_key is not a valid one"\n }\n}\n```\n\n## III. Best Practices <span id="best-practices"></span>\n---\n\n1. Send events to Flashduty when alert status changes\n2. When an alert recovers, send an event with status Ok to close the alert. Otherwise, the alert will remain open. If your alert system doesn\'t have recovery events, we recommend manually sending recovery events\n3. Labels are event descriptions, and label content should be as rich as possible (specified when sending, or generated through enrichment rules), such as:\n - Alert source, like host, cluster, check, or metric\n - Alert ownership information, like team, owner\n - Alert category information, like class (api, db, net)\n\n## IV. FAQ\n---\n\n<details>\n <summary>Why haven\'t I received alerts in Flashduty?</summary>\n\n #### In Flashduty\n \n 1. Check if the integration shows **Latest Event Time**? If not, it means Flashduty hasn\'t received the push, prioritize checking your system.\n 2. If you\'re using **Shared Integration**, first confirm if you\'ve configured **Routing Rules**. Without routing rules, the system will directly reject new pushes as there\'s no collaboration space to handle your alerts. In this case, simply configure routing rules to your desired space.\n\n #### In Your System\n\n 1. Confirm that your request URL exactly matches the URL in the integration details.\n 2. Confirm that your service can access the external domain api.flashcat.cloud. If not, you need to enable external network access for the server or specifically for Flashduty\'s domain.\n 3. Print Flashduty service\'s response to check for clear information.\n\n If you still can\'t find the root cause after these steps, please contact us with the **request_id** from the request response.\n \n</details>\n\n<details>\n <summary>Why was the push request successful but no new alerts or incidents were generated?</summary>\n\n Flashduty uses a 2-layer noise reduction mechanism:\n\n 1. First, it checks for duplicate alert events. If your pushed event is identical to a previously pushed event, the new event will be discarded.\n 2. If the new event\'s status and description match the status, title, and description of the last event of its corresponding alert, the new event will be discarded while updating the alert\'s attributes.\n 3. The new event might be discarded due to matching exclusion, discard, suppression, or silence rules.\n 4. When a new event triggers a new alert, the system enters the second layer of noise reduction check, determining if the new alert can be merged into an active incident. If possible, it will only merge into the existing incident without generating a new one.\n\n For more information, please refer to [Alert Noise Reduction](https://docs.flashcat.cloud/en/flashduty/what-is-noise-reduction).\n</details> ';
4
+ const Email = '---\ntitle: "Email Integration"\ndescription: "Generate a unique email address in Flashduty to synchronize alert triggers and recoveries through email"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/email-integration-guide"\n---\n\nGenerate a unique email address in Flashduty to synchronize alert triggers and recoveries through email.\n\n<div class="hide">\n\n## Steps\n---\n\n### Create Email Integration\n\nYou can obtain an email address through either of these two methods:\n\n#### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alerts to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integration** tab, click **Add Integration**, and enter the integration page\n 3. Choose **Email** integration, click **Save** to generate a card\n 4. Click the generated card to view the **Email Address**, copy it for later use, and you\'re done\n \n</details>\n\n#### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alerts**, and enter the integration selection page\n 2. Select **Email** integration:\n - **Integration Name**: Define a name for the current integration\n - **Email Address**: Set an easy-to-remember prefix for the email, which must be unique within your account\n - **Push Mode**: Choose when the email should trigger or recover alerts\n 3. Copy the **Email Address** from the current page for later use\n 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\n 5. Complete\n \n</details>\n</div>\n\n### Customize Email Integration\n\n#### Email Address\n\nBy default, the system generates a unique email address for you. You can modify it, but note that **the email prefix can only contain letters and numbers** and must remain unique within your account.\n\n#### Push Mode\n\nBy default, the system creates a new alert for every email, but you can switch the mode to:\n\n1. **Trigger or Update Alert Based on Email Subject**: In this mode, when receiving a new email, the system searches for open alerts based on the email subject. If found, it updates the alert; otherwise, it triggers a new alert.\n2. **Trigger or Close Alert Based on Rules**: In this mode, when receiving a new email, the system matches emails according to your rules and either triggers new alerts or closes existing ones based on the matches.\n\n - You must fill in at least one **trigger** rule\n - You must set 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 email subject to generate an Alert Key** to ensure alerts aren\'t lost due to configuration errors\n - You can choose whether to discard emails when no rules match\n\n Configuration example:\n\n - Receive all emails, close the alert when the email content contains **RESOLVED**, otherwise trigger a new alert\n - Extract Alert Key from email subject using the rule **/(.\\*)/**\n\n <img src="https://download.flashcat.cloud/flashduty/integration/email/send-mode.png" alt="drawing" width="800"/>\n\n### Important Notes\n\n1. The system will reject emails larger than 5MB\n2. If the email text content exceeds 32KB, the system will truncate it and add a label in the incident details:\n\n```\nbody_cut = true\n```\n\n3. If the email contains attachments, the system will discard them and add a label in the incident details:\n\n```\nattachment_stripped = true\n```\n\n4. For new alerts triggered by email, **the title is the email subject, and the description is the email content**\n\n5. If you modify your account domain, this email address will also change, so remember to update the push URL\n\n\n\n## Severity Mapping\n---\n\nCurrently, all alerts pushed to Flashduty through email integration are set to Warning severity.\n\n';
5
+ const N9e = '---\ntitle: "Nightingale/FlashCat Integration"\ndescription: "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"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/nightingale-integration-guide"\n---\n\nPush 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.\n\n<div class="hide">\n\n## Prerequisites\n---\n\n### In Nightingale\n\n- You must have permission to modify **System Settings=>Global Notifications** or **Alert Management=>Alert Rules**.\n- Your Nightingale server must be able to access the domain api.flashcat.cloud to push alerts to the external network.\n\n## Supported Versions\n---\n\nThis guide is compatible with **Nightingale V5 and V6** versions.\n\n## Setup Steps\n---\n\n### In Flashduty\n\nYou can obtain an integration push URL through either of these two methods:\n\n#### Using Private Integration\n\nChoose this method when you don\'t need to route alert events to different channels - it\'s simpler.\n\n<details>\n <summary>Expand</summary>\n \n 1. Enter the Flashduty console, select **Channels**, and enter a channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration**, and enter the add integration page\n 3. Select **Nightingale/Flashcat** integration, click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use\n 5. (Optional) Click the generated card, click the **Edit** button, select **Console URL**, enter the Nightingale console URL (domain part only), and Flashduty will generate a Nightingale details link for new alerts\n \n</details>\n\n#### Using Shared Integration\n\nChoose this method when you need to route alert events to different channels based on the alert Payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Enter the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Nightingale/Flashcat** integration:\n - **Integration Name**: Define a name for the current integration\n - **Console URL**: (Optional) Enter the Nightingale console URL (domain part only), and Flashduty will generate a Nightingale details link for new alerts\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Complete\n \n</details>\n</div>\n\n### In Nightingale/Flashcat\n\nChoose either of these two configuration methods.\n\n#### Method 1: Configure by Strategy\n\n<div class="md-block">\n \nSelect multiple alert rules and configure webhook in batch.\n\n1. Log in to your n9e console, select Alert Management > Alert Rules to enter the alert rules list page\n2. Select the alert rules you want to import in batch, choose batch update alert rules in the upper right corner\n3. In the popup, select the "Callback URL" field and enter the integration push URL in the new input box, as shown below:\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/fc/fc-1.png" alt="drawing" width="500"/>\n\n4. Return to the integration list, if the latest event time is displayed, the configuration is successful and events are being received\n5. Complete\n\n</div>\n\n#### Method 2: Global Configuration\n\n<div class="md-block">\nNightingale supports configuring global webhook URLs in both the interface and configuration file to push all alert events. Choose one of the following two methods.\n\n##### V6 and Above\n\n1. Log in to your n9e console\n2. Go to `System Settings-Notification Settings-Callback URL` page\n3. As shown below, enable a new webhook, fill in the integration push URL in the `URL` section\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/fc/fc-2.png" alt="drawing" width="500"/>\n\n4. Complete\n\n##### V5.4~5.15 Versions\n\n1. Log in to your n9e server instance\n2. Find and open the configuration file, usually etc/server.conf\n3. Modify the Alerting configuration section, add Webhook configuration as follows:\n\n ```receiver config\n [Alerting.Webhook]\n Enable = true\n Url = "{api_host}/event/push/alert/n9e?integration_key=$integration_key"\n BasicAuthUser = ""\n BasicAuthPass = ""\n Timeout = "5s"\n Headers = ["Content-Type", "application/json", "X-From", "N9E"]\n ```\n\n Replace the Url parameter value with your integration push URL.\n\n4. Save the configuration file\n5. Restart n9e server to apply the configuration\n6. Return to the integration list, if the latest event time is displayed, the configuration is successful and events are being received\n7. Complete\n\n</div>\n\n## Severity Mapping\n---\n\nNightingale/Flashcat to Flashduty alert severity mapping:\n\n| n9e | Flashduty | Status |\n| --- | --------- | ------ |\n| 1 | Critical | Critical |\n| 2 | Warning | Warning |\n| 3 | Info | Info |\n\n## FAQ\n---\n\n<details>\n <summary>Why am I not receiving alerts in Flashduty?</summary>\n\n #### In Flashduty\n \n 1. Check if the integration shows the **Latest Event Time**? If not, Flashduty hasn\'t received any pushes, prioritize checking the Nightingale side.\n 2. If you\'re using a **Shared Integration**, first confirm if you\'ve configured **Routing Rules**. Without routing rules, the system will reject new pushes as there\'s no channel to receive your alerts. In this case, simply configure routing rules to your desired channel.\n\n #### In Nightingale/Flashcat\n\n 1. First confirm if Nightingale has generated new alerts: Go to **Alert Management=>Alert History**, check if new alerts were generated after configuring the webhook, note that new alerts must be in **Triggered** status. If no new alerts were generated, please wait for new alerts to trigger and verify again.\n 2. After finding the alert, go to alert details and check the **Callback URL** section. Verify if the actual callback URL exactly matches the integration push URL. If they don\'t match, modify the **Alert Rules** and verify again.\n 3. If they match, you need to log into the Nightingale server and confirm it can access the external domain api.flashcat.cloud. If not, you first need to enable external network access for the server, or specifically enable access for Flashduty\'s domain.\n 4. If the network is fine, you need to continue investigating the server and look for related error logs.\n\n If you still can\'t find the root cause after following these steps, please contact us directly.\n \n</details>\n\n';
6
+ const Prometheus = "---\ntitle: \"Prometheus Integration Guide\"\ndescription: \"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.\"\ndate: \"2024-05-11T10:00:00+08:00\"\nurl: \"https://docs.flashcat.cloud/en/flashduty/prometheus-integration-guide\"\n---\n\nPush 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.\n\n<div class=\"hide\">\n\n## Requirements\n---\n\n### In AlertManager\n\n- You must have permission to modify the AlertManager configuration file.\n- Your AlertManager server must be able to access api.flashcat.cloud domain to push alerts to the internet.\n\n## Supported Versions\n---\n\nThis guide is compatible with **Alertmanager 0.16.0 and above**.\n\n## Setup Steps\n---\n\n### In Flashduty\n\nYou can obtain an integration push URL through either of these two methods:\n\n#### Using Private Integration\n\nChoose this method when you don't need to route alert events to different channels. It's simpler.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **channel**, and enter a channel's details page\n 2. Select the **Integrations** tab, click **Add Integration**, and enter the integration page\n 3. Select **Prometheus** integration, click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you're done\n \n</details>\n\n#### Using Shared Integration\n\nChoose this method when you need to route alert events to different channels based on the alert payload.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Prometheus** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n### In AlertManager\n\n#### Step 1: Configure Alertmanager\n\n<div class=\"md-block\">\n\n1. Log in to your Alertmanager instance\n2. Locate and open the configuration file, typically alertmanager.yml in the Alertmanager deployment root directory\n3. In the receivers configuration section, add a Flashduty webhook type receiver as follows:\n\n ```\n receivers:\n - name: 'flashcat'\n webhook_configs:\n - url: '<Your Integration Push URL>'\n send_resolved: true\n\n ```\n\n Replace the url parameter value with your integration push URL, ensuring the integration_key is included in the query string parameters.\n\n If you need to request Flashduty through a proxy, you can additionally set the http_config proxy_url parameter:\n \n ```\n receivers:\n - name: 'flashcat'\n webhook_configs:\n - url: '<Your Integration Push URL>'\n send_resolved: true\n http_config:\n proxy_url: 'http://proxyserver:port'\n\n ```\n\n4. In the route configuration section, change the default route to specify the newly configured webhook receiver:\n\n ```route config\n route:\n receiver: 'flashcat'\n ```\n\n If you don't want to affect existing push channels, you can add the receiver to a route's subroute:\n \n ```route config\n route:\n receiver: 'feishu'\n - routes:\n receiver: 'flashcat'\n ```\n\n5. Save the configuration file\n6. Reload the configuration (by sending a SIGHUP signal to the process or POST request to /-/reload api)\n7. Done\n\n</div>\n\n#### Step 2: Configure Timestamp\n\nBy default, the system uses the current time as the event trigger time. If you want to customize the time, you can set an additional timestamp field to identify the exact time of each alert.\n\n<div class=\"md-block\">\n\n1. Log in to your Prometheus Server instance\n2. Open the alert rules configuration file\n3. For each alert rule, modify the annotations section by adding a timestamp field:\n\n ```\n annotations:\n timestamp: '{{ with query \"time()\" }}{{ . | first | value }}{{ end }}'\n ...\n ```\n\n4. Save the configuration file\n5. Reload the configuration (by sending a SIGHUP signal to the process or POST request to /-/reload api)\n6. Done\n\n</div>\n\n## Severity Mapping\n---\n\nThe system extracts `severity`, `priority`, and `level` from alert event labels in that order. The corresponding value will be used as Prometheus's own alert severity. If none are found, the system automatically sets the Prometheus alert severity to `Warning`.\n\nPrometheus to Flashduty severity mapping:\n\n| Prometheus | Flashduty | Status |\n| ------------ | -------- | ---- |\n| critical | Critical | Critical |\n| warning | Warning | Warning |\n| warn | Warning | Warning |\n| info | Info | Info |\n| acknowledged | Info | Info |\n| unknown | Info | Info |\n| unk | Info | Info |\n| ok | Ok | Ok |\n\n## FAQ\n---\n\n<details>\n <summary>Why am I not receiving alerts in Flashduty?</summary>\n\n #### In Flashduty\n \n 1. Check if the integration shows **Latest Event Time**. If not, Flashduty hasn't received any pushes - prioritize checking the AlertManager section.\n 2. If you're using a **Shared Integration**, first confirm if you've configured **Routing Rules**. Without routing rules, the system will reject new pushes as there's no channel to receive your alerts. In this case, simply configure routing rules to your desired channel.\n\n #### In AlertManager\n\n 1. First, confirm if AlertManager has generated new alerts. If not, wait for new alerts to trigger and verify again.\n 2. Open the AlertManager configuration file. If you've set up subroutes, ensure your routing is correct (e.g., if previous routes set continue, AlertManager will skip matching subsequent subroutes. We recommend setting only one default route to Flashduty). Also verify that the callback URL matches the integration push URL exactly. If they don't match, modify the **Alert Rules** and verify again.\n 3. If they match, confirm that your AlertManager instance can access api.flashcat.cloud domain. If not, you need to enable internet access or specifically allow access to Flashduty's domain.\n 4. If network access is fine, continue troubleshooting AlertManager by checking for relevant error logs.\n\n If you still can't identify the root cause after following these steps, please contact us directly.\n \n</details>\n\n\n\n";
7
+ const Grafana = '---\ntitle: "Grafana Integration"\ndescription: "Sync Grafana alert events to Flashduty via webhook to achieve automated alert noise reduction."\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/grafana-integration-guide"\n---\n\nSync Grafana alert events to Flashduty via webhook to achieve automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alert events to different channels. It\'s simpler.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **Grafana** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Grafana** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Complete\n \n</details>\n</div>\n\n## In Grafana \n---\nGrafana V4~V8 versions enable Legacy Alerting by default, while V9 and later versions enable Grafana Alerting by default. For feature distinctions and activation methods, please refer to the [official documentation](https://grafana.com/docs/grafana/v8.4/alerting/unified-alerting/opt-in/#opt-in-to-grafana-alerting). Follow these steps based on your deployed version.\n\n### Legacy Alerting\n\n<div class="md-block">\n\n1. Open your Grafana console and navigate to Alerting > Notification channels\n2. Click Add Channel to open the channel configuration dialog\n3. Configure the name, select webhook as Type, enter the integration push URL in the Url field, and select POST as Method, as shown below:\n\n<img src="https://download.flashcat.cloud/grafana-legacy-alerting.png" alt="drawing" width="600"/>\n\n4. Save and return to the integration list. After an alert occurs, if the latest event time is displayed, the configuration is successful and events are being received\n5. Complete\n\n</div>\n\n### Grafana Alerting\n\n<div class="md-block">\n\n1. Open your Grafana console and navigate to Alerting > Contact points\n2. Click New contact point to open the configuration dialog\n3. Configure the name, select webhook as Type, enter the integration push URL in the Url field, and select POST as Method, as shown below:\n\n<img src="https://download.flashcat.cloud/grafana-contact-point.png" alt="drawing" width="600"/>\n\n4. Open the Notification policies page, edit or add a policy as needed, and select the contact point created in the previous step as the delivery channel, as shown below:\n\n<img src="https://download.flashcat.cloud/grafana-notification-policy.png" alt="drawing" width="600"/>\n\n5. Save and return to the integration list. After an alert occurs, if the latest event time is displayed, the configuration is successful and events are being received\n6. The default alert severity is warning. To customize it, you can configure the severity label in the alert details page (refer to the status mapping below), as shown in the following image:\n\n<img src="https://download.flashcat.cloud/grafana-alert-rule.png" alt="drawing" width="600"/>\n\n7. Complete\n\n## Status Mapping\n---\n \nLegacy Alerting to Flashduty severity mapping:\n\n| Legacy Alerting | Flashduty | Status |\n| --------------- | -------- | ---- |\n| alerting | Warning | Warning |\n| no_data | Critical | Critical |\n| ok | Ok | Resolved |\n\nGrafana Alerting to Flashduty severity mapping:\n\nThe system extracts the `severity`, `priority`, and `level` labels from alert events in sequence. The corresponding value will be used as Prometheus\'s own alert severity. If none are found, the system automatically sets the Prometheus alert severity to `warning`.\n\n| Grafana Alerting | Flashduty | Status |\n| ---------------- | -------- | ---- |\n| critical | Critical | Critical |\n| warning | Warning | Warning |\n| warn | Warning | Warning |\n| info | Info | Info |\n| acknowledged | Info | Info |\n| unknown | Info | Info |\n| unk | Info | Info |\n| ok | Ok | Resolved |\n\n</div>\n';
8
+ const Zabbix = '---\ntitle: "Zabbix Integration"\ndescription: "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"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/zabbix-integration-guide"\n---\n\nSynchronize Zabbix alert events to Flashduty via webhook (supports Zabbix 3.x ~ 7.x versions, with different configuration requirements) to achieve automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alert events to different channels - it\'s simpler.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a specific channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **Zabbix** integration, click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on alert event payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center => Alert Events** to enter the integration selection page\n 2. Select **Zabbix** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Complete\n \n</details>\n</div>\n\n## In Zabbix \n---\n\n- [7.x version](#v7)\n- [5.x~6.x version](#v5)\n- [3.x~4.x version](#v4)\n\n<span id="v7"></span>\n\n### Version 7.x\n\n#### Step 1: Define Flashduty Media Type\n<div class="md-block">\n\n1. 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:\n\n```\nwget --header="Referer: https://console.flashcat.cloud" https://download.flashcat.cloud/flashduty/integration/zabbix/zbx_mediatype_flashcat_v7.yml\n\n```\n2. 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\n3. 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:\n\n - `URL`: webhook push request address, simply copy the integration push URL\n - `zabbix_url`: Zabbix console address, copy directly (if your page is configured with tomcat/nginx forwarding path, please include it), the system will append trigger_id and other parameters to generate alert detail page links\n - `HTTPProxy`: If your Zabbix Server cannot directly access Flashduty services, you can set this parameter to a proxy address\n\n <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/zabbix-2.png" />\n\n4. Click Update to save the configuration\n\n\n#### Step 2: Associate Media Type with User\n\nThe 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:\n\n1. Log in to the Zabbix console, select `Users > Users`, select Admin user, select media, select Add to enter the editing window:\n\n- Type: Select the Flashduty media type created above\n- Send To: Fill in FlashDuty\n- Keep other configurations unchanged using default settings\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/zabbix-3.png" />\n\n2. Click Add button to exit the add media window\n3. Click Update button to exit the edit user page\n\n\n#### Step 3: Create Action\n\nSending 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:\n\n1. Click `Create action` to enter the action editing page\n\n- Name: Fill in "Send To FlashDuty"\n\n2. Select `Operations`, add notification sending configurations for three scenarios respectively:\n\n- In the Operations configuration item, click Add button to enter the configuration window\n- Send to users: Select the user newly created or configured above\n- Send only to: Select Flashduty media type\n- Keep other configurations as default\n- Click Add button to complete this configuration item\n- Repeat the above steps to complete the configuration of `Recovery operations` and `Update operations`\n\n <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/zabbix-5.png" />\n <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/zabbix-4.png" />\n\n\n#### Step 4: Send Events to Flashduty\n\nLog in to the Zabbix console, select `Monitoring > Problems` to view the latest alert list.\n\n1. Click Actions, you can see the message notification results in the popup\n2. Find the Flashduty corresponding log, if the Status is `Sent`, it means the notification was successful. Otherwise, troubleshoot according to the prompts\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/zabbix-6.png" />\n\n3. Return to the integration list, if the latest event time is displayed, it means the configuration is successful and events are being received\n4. Done\n\n<span id="v5"></span>\n\n### Version 5.x~6.x\n\n#### Step 1: Define Flashduty Media Type\n\n1. 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:\n\n```\n// 5.x version XML configuration:\nwget --header="Referer: https://console.flashcat.cloud" https://download.flashcat.cloud/flashduty/integration/zabbix/zbx_mediatype_flashcat_v5.xml\n\n// 6.x version YAML configuration:\nwget --header="Referer: https://console.flashcat.cloud" https://download.flashcat.cloud/flashduty/integration/zabbix/zbx_mediatype_flashcat_v6.yml\n```\n\n2. Log in to the Zabbix console, select `Administration > 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\n3. 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:\n\n - `URL`: webhook push request address, simply copy the integration push URL\n - `zabbix_url`: Zabbix console address, copy directly (if your page is configured with tomcat/nginx forwarding path, please include it), the system will append trigger_id and other parameters to generate alert detail page links\n - `HTTPProxy`: If your Zabbix Server cannot directly access Flashduty services, you can set this parameter to a proxy address\n\n <img alt="drawing" width="600" src="https://download.flashcat.cloud/media.png" />\n\n4. Click Update to save the configuration\n\n#### Step 2: Associate Media Type with User\n\nThe 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:\n\n1. Log in to the Zabbix console, select `Administration > Users`, select Admin user, select media, select Add to enter the editing window:\n\n- Type: Select the Flashduty media type created above\n- Send To: Fill in N/A\n- Keep other configurations unchanged using default settings\n\n <img alt="drawing" width="600" src="https://download.flashcat.cloud/user.png" />\n\n2. Click Add button to exit the add media window\n3. Click Update button to exit the edit user page\n\n#### Step 3: Create Action\n\nSending notifications is one of the operations executed by actions in Zabbix. Therefore, to establish a notification, log in to the Zabbix console, select `Configuration > Actions`, then:\n\n1. Click `Create action` to enter the action editing page\n\n- Name: Fill in "Send To FlashDuty"\n\n2. Select `Operations`, add notification sending configurations for three scenarios respectively:\n\n- In the Operations configuration item, click Add button to enter the configuration window\n- Send to users: Select the user newly created or configured above\n- Send only to: Select Flashduty media type\n- Keep other configurations as default\n- Click Add button to complete this configuration item\n- Repeat the above steps to complete the configuration of `Recovery operations` and `Update operations`\n\n <img alt="drawing" width="600" src="https://download.flashcat.cloud/action-1.png" />\n <img alt="drawing" width="600" src="https://download.flashcat.cloud/action-2.png" />\n\n#### Step 4: Send Events to Flashduty\n\nLog in to the Zabbix console, select `Monitoring > Problems` to view the latest alert list.\n\n1. Click Actions, you can see the message notification results in the popup\n2. Find the Flashduty corresponding log, if the Status is `Sent`, it means the notification was successful. Otherwise, troubleshoot according to the prompts\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/problem.png" />\n\n3. Return to the integration list, if the latest event time is displayed, it means the configuration is successful and events are being received\n4. Done\n\n<span id="v4"></span>\n\n### Version 3.x~4.x\n\n#### Step 1: Define Flashduty Media Type\n\n1. Log in to the Zabbix console, select `Administration > Media Types`, click `Create media type` button in the top right corner to enter the editing page\n2. On the editing page, select `Script` for Type, fill in the following content for Parameter in order (do not adjust the order, leave empty if no value, the script gets parameter values in sequence):\n\n- `{ALERT.SUBJECT}`: Alert title, keep as first parameter\n- `{ALERT.MESSAGE}`: Alert message, keep as second parameter\n- `FlashDuty webhook push URL`, simply copy the integration push URL, keep as third parameter\n- `Zabbix console address`, copy directly (if your page is configured with tomcat/nginx forwarding path, please include it), used to generate alert detail page links. Leave empty if none, keep as fourth parameter\n- `HTTPProxy`: If your Zabbix Server cannot directly access Flashduty services, you can set this parameter to a proxy address. Leave empty if none, keep as fifth parameter\n\n <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/integration/zabbix/v4_create_fd_media_type.jpg"/>\n\n3. Fill in `send-to-flashduty.sh` for `Script name`\n4. Click Update to save the configuration\n5. Log in to the Zabbix server host, execute the following commands:\n\n```\n#1. Enter alert script loading directory (specific address configured in Zabbix Server configuration file `AlertScriptsPath` variable, usually `/usr/lib/zabbix/alertscripts`)\ncd /usr/lib/zabbix/alertscripts\n\n#2. Download script\nwget --header="Referer: https://console.flashcat.cloud" https://download.flashcat.cloud/flashduty/integration/zabbix/send-to-flashduty.sh\n\n#3. Change script to executable status\nchmod +x send-to-flashduty.sh\n```\n\n6. Note that `the script uses curl and jq commands`, ensure that the Zabbix server process can find and execute these two commands, if not you need to install them as needed\n\n#### Step 2: Associate Media Type with User\n\nThe 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:\n\n1. Log in to the Zabbix console, select `Administration > Users`, select Admin user, select media, select Add to enter the editing window:\n\n - Type: Select the Flashduty media type created above\n - Send To: Fill in N/A\n - Keep other configurations unchanged using default settings\n\n <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/integration/zabbix/v4_bind_media_type.jpg" />\n\n2. Click Add button to exit the add media window\n3. Click Update button to exit the edit user page\n\n#### Step 3: Create Action\n\nSending notifications is one of the operations executed by actions in Zabbix. Therefore, to establish a notification, log in to the Zabbix console, select `Configuration > Actions`, then:\n\n1. Click `Create action` to enter the action editing page\n\n - Name: Fill in "Send To FlashDuty"\n\n2. Select `Operations`, update notification user configurations for three scenarios respectively:\n\n - In the Operations configuration item, click Add button to enter the configuration window\n - Send to users: Select the user newly created or configured above\n - Send only to: Select Flashduty media type\n - Keep other configurations as default\n - Click Add button to complete this configuration item\n - Repeat the above steps to complete the configuration of `Recovery operations` and `Update operations`\n\n <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/integration/zabbix/v4_create_action_operation_add.jpg" />\n\n3. Select `Operations`, update notification content configurations for three scenarios respectively:\n\n - **In the Default Message configuration item, completely copy the following content and paste it after the default content**. FlashDuty will parse corresponding text after receiving events to find alert attribute information:\n\n```\n-----FlashDuty Required Starts-----event_severity={TRIGGER.SEVERITY}||event_name={TRIGGER.NAME}||event_id={EVENT.ID}||event_tags={EVENT.TAGS}||event_ack={EVENT.ACK.STATUS}||event_value={EVENT.VALUE}||trigger_id={TRIGGER.ID}||trigger_desc={TRIGGER.DESCRIPTION}||trigger_expr={TRIGGER.EXPRESSION}||host_group={TRIGGER.HOSTGROUP.NAME}||host_ip={HOST.IP}||host_name={HOST.NAME}||item_name={ITEM.NAME}||item_value={ITEM.VALUE}-----FlashDuty Required Ends-----\n```\n\n- Repeat the above steps to complete the configuration of `Recovery operations` and `Update operations`\n\n <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/integration/zabbix/v4_create_action_trigger_operation.jpg" />\n\n#### Step 4: Send Events to Flashduty\n\nLog in to the Zabbix console, select Monitoring > Problems to view the latest alert list.\n\n1. Click Actions, you can see the message notification results in the popup\n2. Find the Flashduty corresponding log, if the Status is Sent, it means the notification was successful. Otherwise, troubleshoot according to the prompts\n\n <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/integration/zabbix/v4_test_actions.jpg" />\n\n3. Return to the integration list, if the latest event time is displayed, it means the configuration is successful and events are being received\n4. Done\n\n## II. Status Mapping\n\nZabbix to Flashduty alert severity mapping:\n\n| Zabbix | Flashduty | Status |\n| -------------- | -------------- | -------- |\n| Disaster | Critical | Critical |\n| High | Critical | Critical |\n| Average | Warning | Warning |\n| Warning | Warning | Warning |\n| Information | Info | Info |\n| Not classified | Info | Info |\n\n</dv>';
9
+ const UptimeKuma = '---\ntitle: "Uptime Kuma Integration"\ndescription: "Sync Uptime Kuma alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/uptime-kuma-integration-guide"\n---\n\nSync Uptime Kuma alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alert events to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integration** tab, click **Add Integration** to enter the integration page\n 3. Select **Uptime Kuma** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Uptime Kuma** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Complete\n \n</details>\n\n</div>\n\n## In Uptime Kuma\n---\n\n**Step 1: Set up Notification Channel**\n\n1. Go to `Settings -> Notifications` page, click Setup to edit, as shown below;\n2. Select `FlashDuty (Flashduty)` as the `Notification Type`;\n3. Copy and paste the integration_key parameter value from the integration push URL into `Integration Key`;\n4. Select `Severity` as needed;\n5. Submit and save\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/upk/upk-1.png" alt="drawing" width="500"/>\n\n**Step 2: Configure Monitoring Items**\n\n<div class="md-block">\n\n1. Click `Add New Monitor` or edit existing monitors, configure monitoring settings as needed;\n2. As shown, enable the notification method created in the previous step in the `Notifications` section;\n3. If needed, add `Tags`. Note that only tags with both Key/Value will be pushed to FlashDuty;\n4. Submit and save, then wait for alerts to trigger.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/upk/upk-2.png" alt="drawing" width="500"/>\n\n</div>\n\n## Status Mapping\n---\n\n<div class="md-block">\n \nUptime Kuma to Flashduty alert severity mapping:\n\n| Uptime Kuma | Flashduty | Status |\n| ------------ | -------- | ---- |\n| Critical | Critical | Critical |\n| Warning | Warning | Warning |\n| Info | Info | Info |\n\n</div>';
10
+ const AliyunARMS = '---\ntitle: "Alibaba Cloud ARMS Integration"\ndescription: "Sync Alibaba Cloud ARMS monitoring alerts to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/aliyun-arms-integration-guide"\n---\n\nSync Alibaba Cloud ARMS monitoring alerts to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alerts to different channels. It\'s simpler and recommended.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a specific channel\'s details page\n 2. Select the **Integration** tab, click **Add Integration** to enter the integration page\n 3. Choose **Alibaba Cloud ARMS** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page\n 2. Select **Alibaba Cloud ARMS** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Complete\n \n</details>\n</div>\n\n## In Alibaba Cloud ARMS \n---\n**Step 1: Configure Notification Target**\n\n<div class="md-block">\n\n1. Log in to your Alibaba Cloud Console and select ARMS monitoring product\n2. Go to `Alert Management -> Notification Target` page, select `Webhook Integration`, and click the New Webhook button to start editing\n3. As shown in the image, set the target name, select `Post`, and copy-paste the integration push URL\n4. Add `Header`, enter `Content-Type` and `application/json`\n5. Enter `$alertmanager_content` in the notification template\n6. Click the Confirm button to save\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/aliyun/arms-1.png" alt="drawing" width="500"/>\n\n\n**Step 2: Configure Notification Policy**\n\n1. Go to `Alert Management -> Notification Policy` page, click New Notification Policy or select an existing policy to edit\n2. As shown below, select the created `Generic Webhook` target on the `Notification Target` page\n3. Save and wait for alerts to trigger\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/aliyun/arms-2.png" alt="drawing" width="500"/>\n\n</div>\n\n## Status Mapping\n---\n<div class="md-block">\n \nAlibaba Cloud ARMS monitoring to Flashduty alert severity mapping:\n\n| Alibaba Cloud ARMS | Flashduty | Status |\n| ------------ | -------- | ---- |\n| P1 | Critical | Critical |\n| P2 | Warning | Warning |\n| P3 | Warning | Warning |\n| P4 | Info | Info |\n\n</div>\n';
11
+ const AliyunCmEvent = `---
12
+ title: "Alibaba Cloud Monitor CM Event Integration"
13
+ description: "Sync Alibaba Cloud Monitor event center alerts to Flashduty via webhook for automated alert noise reduction"
14
+ date: "2024-05-11T10:00:00+08:00"
15
+ url: "https://docs.flashcat.cloud/en/flashduty/aliyun-cm-event-integration-guide"
16
+ ---
17
+
18
+ Sync Alibaba Cloud Monitor event center alerts to Flashduty via webhook for automated alert noise reduction.
19
+
20
+ <div class="hide">
21
+
22
+ ## In Flashduty
23
+ ---
24
+ You can obtain an integration push URL through either of these two methods:
25
+
26
+ ### Using Private Integration
27
+
28
+ Choose this simpler method when you don't need to route alerts to different channels.
29
+
30
+ <details>
31
+ <summary>Expand</summary>
32
+
33
+ 1. Go to the Flashduty console, select **Channel**, and enter a channel's details page
34
+ 2. Select the **Integration** tab, click **Add Integration** to enter the integration page
35
+ 3. Choose **Alibaba Cloud CM Event** integration and click **Save** to generate a card
36
+ 4. Click the generated card to view the **push URL**, copy it for later use, and you're done
37
+
38
+ </details>
39
+
40
+ ### Using Shared Integration
41
+
42
+ Choose this method when you need to route alerts to different channels based on the alert payload information.
43
+
44
+ <details>
45
+ <summary>Expand</summary>
46
+
47
+ 1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
48
+ 2. Select **Alibaba Cloud CM Event** integration:
49
+ - **Integration Name**: Define a name for this integration
50
+ 3. Click **Save** and copy the newly generated **push URL** for later use
51
+ 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
52
+ 5. Complete
53
+
54
+ </details>
55
+ </div>
56
+
57
+ ## In Alibaba Cloud Monitor CM Event
58
+ ---
59
+ **Step 1: Add Push Channel**
60
+
61
+ <div class="md-block">
62
+
63
+ 1. Log in to your Alibaba Cloud Console and select Cloud Monitor
64
+ 2. Go to **Event Center -> Event Subscription** page, switch to the **Push Channels** tab, click Create Push Channel button to start editing
65
+ 3. As shown, select **POST** as the **Request Method**, and fill in the integration push URL in the **Address** field
66
+ 4. Click Confirm button to submit the update
67
+
68
+ <img src="https://download.flashcat.cloud/flashduty/doc/en/aliyun/event-2.png" alt="drawing" width="500"/>
69
+
70
+ </div>
71
+
72
+ **Step 2: Add Subscription Policy**
73
+
74
+ <div class="md-block">
75
+
76
+ 1. Log in to your Alibaba Cloud Console and select Cloud Monitor
77
+ 2. Go to **Event Center -> Event Subscription** page, switch to the **Subscription Policies** tab, click Create Subscription Policy button to start editing
78
+ 3. Fill in the subscription name, select event type and scope, and configure the push channel as the Flashduty channel created earlier at the bottom
79
+ 4. Click Confirm button to submit the update
80
+ 5. The image below shows subscription results for both threshold and system event types
81
+
82
+ <img src="https://download.flashcat.cloud/flashduty/doc/en/aliyun/event-3.png" alt="drawing" width="500"/>
83
+
84
+ </div>
85
+
86
+ ## Status Mapping
87
+ ---
88
+ <div class="md-block">
89
+
90
+ Alibaba Cloud Monitor event alert to Flashduty severity level mapping:
91
+
92
+ | Alibaba Cloud Monitor | Flashduty | Status |
93
+ | -------------------- | --------- | ------ |
94
+ | CRITICAL | Critical | Critical |
95
+ | WARNING | Warning | Warning |
96
+ | INFO | Info | Info |
97
+
98
+ </div>`;
99
+ const AliyunCm = `---
100
+ title: "Alibaba Cloud Monitor CM Metrics Integration"
101
+ description: "Sync Alibaba Cloud Monitor alert events to Flashduty via webhook for automated alert noise reduction"
102
+ date: "2024-05-11T10:00:00+08:00"
103
+ url: "https://docs.flashcat.cloud/en/flashduty/aliyun-cm-metric-integration-guide"
104
+ ---
105
+
106
+ Sync Alibaba Cloud Monitor alert events to Flashduty via webhook for automated alert noise reduction.
107
+
108
+ <div class="hide">
109
+
110
+ ## In Flashduty
111
+ ---
112
+ You can obtain an integration push URL through either of these two methods:
113
+
114
+ ### Using Private Integration
115
+
116
+ Choose this simpler option when you don't need to route alert events to different channels.
117
+
118
+ <details>
119
+ <summary>Expand</summary>
120
+
121
+ 1. Go to the Flashduty console, select **Channel**, and enter a specific channel's details page
122
+ 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page
123
+ 3. Choose **Alibaba Cloud CM Metrics** integration and click **Save** to generate a card
124
+ 4. Click the generated card to view the **push URL**, copy it for later use, and you're done
125
+
126
+ </details>
127
+
128
+ ### Using Shared Integration
129
+
130
+ Choose this option when you need to route alerts to different channels based on the alert event's payload information.
131
+
132
+ <details>
133
+ <summary>Expand</summary>
134
+
135
+ 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
136
+ 2. Select **Alibaba Cloud CM Metrics** integration:
137
+ - **Integration Name**: Define a name for this integration
138
+ 3. Click **Save** and copy the newly generated **push URL** for later use
139
+ 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
140
+ 5. Complete
141
+
142
+ </details>
143
+ </div>
144
+
145
+ ## In Alibaba Cloud Monitor
146
+ ---
147
+ Choose one of the following two methods:
148
+
149
+ **Method 1: Rule-based Configuration**
150
+
151
+ <div class="md-block">
152
+
153
+ 1. Log in to your Alibaba Cloud Console and select Cloud Monitor
154
+ 2. Go to Alert Service -> Alert Rules page, select a rule, and click the Modify button to edit the rule content
155
+ 3. As shown in the image, under Advanced Settings, enter the integration push URL as the callback address
156
+ 4. Click Confirm to submit the update
157
+
158
+ <img src="https://download.flashcat.cloud/flashduty/doc/en/aliyun/metric-1.png" alt="drawing" width="500"/>
159
+
160
+ 5. Repeat these steps for all alert rules you want to sync
161
+ 6. Return to the integration list; if the latest event time is displayed, the configuration is successful and events are being received
162
+ 7. Complete
163
+
164
+ </div>
165
+
166
+ **Method 2: Contact-based Configuration**
167
+
168
+ <div class="md-block">
169
+
170
+ 1. Log in to your Alibaba Cloud Console and select Cloud Monitor
171
+ 2. Go to Alert Service -> Alert Contacts page and select a contact to modify
172
+ 3. As shown in the image, enter the integration push URL under Webhook
173
+ 4. Click Confirm to submit the update
174
+
175
+ <img src="https://download.flashcat.cloud/flashduty/doc/en/aliyun/metric-2.png" alt="drawing" width="500"/>
176
+
177
+ 5. Repeat these steps for all contacts you want to sync events for
178
+ 6. Return to the integration list; if the latest event time is displayed, the configuration is successful and events are being received
179
+ 7. Complete
180
+
181
+ </div>
182
+
183
+ ## Status Mapping
184
+ ---
185
+ <div class="md-block">
186
+
187
+ Severity level mapping from Alibaba Cloud Monitor to Flashduty:
188
+
189
+ | Alibaba Cloud Monitor | Flashduty | Status |
190
+ | -------------------- | --------- | ------ |
191
+ | CRITICAL | Critical | Critical |
192
+ | WARN | Warning | Warning |
193
+ | INFO | Info | Info |
194
+ | NODATA | Info | Info |
195
+
196
+ </div>
197
+ `;
198
+ const AWSCW = '---\ntitle: "Alibaba Cloud SLS Integration"\ndescription: "Sync Alibaba Cloud Log Service (SLS) monitoring alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/aliyun-sls-integration-guide"\n---\n\nSync Alibaba Cloud Log Service (SLS) monitoring alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alerts to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a specific channel\'s details page\n 2. Select the **Integration** tab, click **Add Integration** to enter the integration page\n 3. Choose **Alibaba Cloud SLS** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page\n 2. Select **Alibaba Cloud SLS** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Complete\n \n</details>\n</div>\n\n## In Alibaba Cloud SLS\n---\n**Step 1: Configure Webhook**\n\n<div class="md-block">\n\n1. Log in to your Alibaba Cloud Console, select Log Service (SLS), and choose a Project\n2. Navigate to `Alert`->`Alert Management`->`Webhook Integration` page, click the `Create` button to start editing\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/aliyun/sls-1.png" alt="drawing" width="500"/>\n\n3. As shown, select "Generic Webhook" for `Type`, choose POST for `Request Method`, and enter the integration push URL (obtained after saving) for `Request URL`\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/aliyun/sls-2.png" alt="drawing" width="500"/>\n\n4. Click the `Confirm` button to save\n\n</div>\n\n**Step 2: Configure Content Template**\n\n<div class="md-block">\n\n1. Switch to the `Content Template` page and click the `Add` button to start editing\n2. Enter the `Webhook-Custom` configuration, select "Send Individually" for `Send Method`, and copy the following content for `Send Content`:\n\n```\n{{ alert | to_json}}\n```\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/aliyun/sls-3.png" alt="drawing" width="500"/>\n\n3. Click the `Confirm` button to save\n\n</div>\n\n**Step 3: Configure Action Policy**\n\n<div class="md-block">\n\n1. Switch to the `Action Policy` page and click the `Add` button to start editing\n2. Enter the `First Action List` configuration and click to add an `Action Group` node\n3. Select "Generic Webhook" for `Channel`, use previously created objects for `Select Webhook` and `Content Template`, and choose "Any" for `Send Period`\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/aliyun/sls-4.png" alt="drawing" width="500"/>\n\n4. Click `Finish` to complete the first action list creation\n5. Click the `Confirm` button to save\n\n</div>\n\n**Step 4: Configure Monitoring Rules**\n\n<div class="md-block">\n\n1. Switch to the `Rules/Transactions` page and click `Create Alert` button or select an existing alert to update\n2. Enter the `Alert Rule` editing page, `Alert Policy`\n3. Select "Normal Mode" for `Alert Policy` and use the previously created object for `Action Policy`\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/aliyun/sls-5.png" alt="drawing" width="500"/>\n\n4. Click the `Confirm` button to save\n5. Repeat these steps for all other rules to push all alerts to FlashDuty\n\n</div>\n\n## Status Mapping\n---\n<div class="md-block">\n \nAlibaba Cloud SLS monitoring to Flashduty alert severity mapping:\n\n| Alibaba Cloud SLS | Flashduty | Status |\n| ---------------- | --------- | ------ |\n| 10 | Critical | Critical |\n| 8 | Critical | Critical |\n| 6 | Warning | Warning |\n| 4 | Warning | Warning |\n| 2 | Info | Info |\n\n</div>\n';
199
+ const AzureMonitor = '---\ntitle: "AWS CloudWatch Integration"\ndescription: "Sync AWS CloudWatch alert events to Flashduty via webhook to achieve automated alert noise reduction"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/aws-cloudwatch-integration-guide"\n---\n\nSync AWS CloudWatch alert events to Flashduty via webhook to achieve automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alert events to different channels. It\'s simpler.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a specific channel\'s details page\n 2. Select the **Integration** tab, click **Add Integration** to enter the integration page\n 3. Choose **AWS CloudWatch** integration, click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **AWS CloudWatch** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Complete\n \n</details>\n</div>\n\n## In AWS CloudWatch\n---\n<div class="md-block">\n\n1. Log in to your AWS Console, search for `Simple Notification Service` product and enter its console\n2. Go to the `Topics` page, click the `Create topic` button to start creating a topic\n3. Select `Standard` for `Type`, enter `FlashDuty` as the name\n4. Click the `Create Topic` button to complete topic creation\n5. Go to the `Subscriptions` page, click the `Create subscription` button to create a subscription for the topic\n6. Select `FlashDuty` for `Topic ARN`, choose `HTTPS` for `Protocol`, enter the integration push URL for `Endpoint` (enter the integration name on the current page, the URL will be generated after saving)\n7. Click the `Create subscription` button to complete subscription creation\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/aws-cloudwatch-subscribe.png" />\n\n8. Return to the `Subscriptions` page. When the subscription status shows `Confirmed`, the subscription URL verification is successful; otherwise, please contact Flashduty\n9. Search for the `CloudWatch` product and enter its console\n10. Go to the `All alarms` page, choose to create or edit existing alarm policies\n11. For the `Notification` step, select `FlashDuty` as the `SNS topic` for all three states: `In alarm`, `OK`, and `Insufficient data`, as shown below:\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/aws-cloudwatch-alram.png" />\n\n12. Return to the integration list. If the latest event time is displayed, the configuration is successful and events are being received\n13. Complete\n\n</div>\n\n## Status Mapping\n---\n<div class="md-block">\n \nAll CloudWatch metric alarms correspond to Flashduty "warning" severity level alerts.\n\n</div>\n';
200
+ const BaiDuBCM = '---\ntitle: "Baidu Cloud BCM Integration"\ndescription: "Sync Baidu Cloud BCM alerts to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/baidu-bcm-integration-guide"\n---\n\nSync Baidu Cloud BCM alerts to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alerts to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a specific channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **Baidu Cloud BCM** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page\n 2. Select **Baidu Cloud BCM** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Baidu Cloud BCM\n---\n<div class="md-block">\n\n1. Log in to your Baidu Cloud Console, search for the `Cloud Monitor` product, and enter its console\n2. Baidu Cloud provides multiple ways to configure alert callbacks, refer to the [official documentation](https://cloud.baidu.com/doc/BCM/s/bkdzl6d69) for details. Below demonstrates the configuration through the `Alert Management-Alert Policy` entry\n3. Go to the `Alert Management-Alert Policy` page, choose to edit an existing policy or create a new one\n4. In the alert policy, fill in the integration push URL in the `Callback URL` field (enter the integration name on the current page, and the URL will be generated after saving)\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/baidu/bcm-1.png" alt="drawing" width="500"/>\n\n5. Done\n\n</div>\n\n## Status Mapping\n---\n<div class="md-block">\n \nSeverity level mapping from Baidu Cloud Monitor to Flashduty:\n\n| BCM | Flashduty | Status |\n| -------- | --------- | -------- |\n| Severe | Critical | Critical |\n| Important| Critical | Critical |\n| Warning | Warning | Warning |\n| Notice | Info | Info |\n\n</div>\n';
201
+ const HuaWeiCES = '---\ntitle: "Huawei Cloud CES Integration"\ndescription: "Sync Huawei Cloud CES alerts to Flashduty via webhook to achieve automated alert noise reduction"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/huawei-ces-integration-guide"\n---\n\nSync Huawei Cloud CES alerts to Flashduty via webhook to achieve automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alerts to different channels. It\'s simpler.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **Huawei Cloud CES** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page\n 2. Select **Huawei Cloud CES** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Huawei Cloud CES\n---\n<div class="md-block">\n\n1. Log in to your Huawei Cloud console, search for `Cloud Eye Service` product, and enter its console\n2. Go to `Alarm-Alarm Notifications-Notification Objects` page, click `Create Notification Object` button\n3. Select `HTTPS` as protocol, enter `flashduty` as name, and fill in the integration URL (enter integration name on current page, URL will be generated after saving)\n4. Click `OK` button to complete notification object creation\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/hw/hw-1.png" alt="drawing" width="500"/>\n\n5. Go to `Alarm-Alarm Notifications-Notification Groups` page, click `Create Notification Group` button\n6. Enter `FlashDuty` as group name, check the `flashduty` notification object created earlier\n7. Click `OK` button to complete notification group creation\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/hw/hw-2.png" alt="drawing" width="500"/>\n\nNote: When creating a notification group, Huawei Cloud will send a request to Flashduty to verify the push URL. Check the notification group\'s object list - alerts will only be pushed normally when the notification object status is `Confirmed`\n\n8. Go to `Alarm-Alarm Rules` page, edit existing alarm rules or create new ones to open the `Alarm Rule Details` page\n9. Select `FlashDuty` as the notification group, check both `Alarm Triggered` and `Cleared` conditions. Click `OK` button to save changes\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/hw/hw-3.png" alt="drawing" width="500"/>\n\n10. Return to Flashduty console\'s integration list page. If the latest event time is displayed, the configuration is successful and events are being received\n11. Done\n\n</div>\n\n## Status Mapping\n---\n<div class="md-block">\n\nHuawei Cloud CES to Flashduty alert severity mapping:\n\n| CES | Flashduty | Status |\n| -------- | --------- | -------- |\n| Critical | Critical | critical |\n| Major | Critical | critical |\n| Minor | Warning | warning |\n| Info | Info | info |\n\n</div>\n';
202
+ const InfluxDB = 'Sync Influxdata alert events to Flashduty via webhook to achieve automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alert events to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **Influxdata** integration, click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert event payload.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Influxdata** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Influxdata\n---\nSupports Influxdata versions 1.x ~ 2.x, with different configurations for each version as detailed below.\n\n- [Version 2.x](#v2)\n- [Version 1.x](#v1)\n\n## I. Influxdata Configuration\n\n<span id="v2"></span>\n\n### Version 2.x\n#### Step 1: Create Alert Channel\n1. Log in to your `Influxdata` console and navigate to the `Alerts > Notification Endpoints` page.\n2. Click `Create` to create an alert notification channel.\n3. Select `HTTP` for `Destination` and enter `FlashDuty` for `Name`.\n4. Choose `POST` for `HTTP Method` and enter the integration push URL.\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/influxdb-1.png" />\n\n#### Step 2: Use the Channel Created in Step 1 in Notification Rules\n1. Log in to your `Influxdata` console and navigate to the `Alerts > Notification Rules` page.\n2. Click `Create` to create an alert notification rule.\n3. Configure `About` and `Conditions` as needed.\n4. Select `FlashDuty` created in Step 1 for `Message`.\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/influxdb-2.png" />\n\n5. Done.\n\n<span id="v1"></span>\n\n### Version 1.x\n<div class="md-block">\n\n1. Log in to your `Influxdata` console and navigate to the `Alerting > Alert Rules` page\n2. Click on the alert rule you want to synchronize events for, enter the `Alert Rule Builder` page to start editing the rule\n3. In the `Alert Handlers` section, select `Add Another Handler`, choose `post` type, and enter the integration push URL in `HTTP endpoint` as shown below:\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/influxdb-alert-rule.png" />\n\n4. Click the `Save Rule` button to save. Wait for event triggering. If the latest event time is displayed in the integration list, the configuration is successful and events are being received\n5. Done\n\n## II. Status Mapping\n\n<div class="md-block">\n \nMapping relationship between Influxdata alert events and Flashduty alert severity:\n\n| Influxdata | Flashduty | Status |\n| ---------- | -------------- | ------ |\n| CRITICAL | Critical | Critical |\n| WARNING | Warning | Warning |\n| INFO | Info | Info |\n| unknow | Info | Info |\n\n</div>\n';
203
+ const OpenFalcon = `---
204
+ title: "Open Falcon Integration"
205
+ description: "Sync Open-Falcon alert events to Flashduty via webhook to achieve automated alert noise reduction"
206
+ date: "2024-05-11T10:00:00+08:00"
207
+ url: "https://docs.flashcat.cloud/en/flashduty/open-falcon-integration-guide"
208
+ ---
209
+
210
+ Sync Open-Falcon alert events to Flashduty via webhook to achieve automated alert noise reduction.
211
+
212
+ <div class="hide">
213
+
214
+ ## In Flashduty
215
+ ---
216
+ You can obtain an integration push URL through either of these two methods:
217
+
218
+ ### Using Private Integration
219
+
220
+ Choose this simpler option when you don't need to route alert events to different channels.
221
+
222
+ <details>
223
+ <summary>Expand</summary>
224
+
225
+ 1. Go to Flashduty console, select **Channel**, and enter a channel's details page
226
+ 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page
227
+ 3. Choose **Falcon** integration, click **Save** to generate a card
228
+ 4. Click the generated card to view the **push URL**, copy it for later use. Done.
229
+
230
+ </details>
231
+
232
+ ### Using Shared Integration
233
+
234
+ Choose this option when you need to route alerts to different channels based on the alert event's payload information.
235
+
236
+ <details>
237
+ <summary>Expand</summary>
238
+
239
+ 1. Go to Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
240
+ 2. Select **Falcon** integration:
241
+ - **Integration Name**: Define a name for this integration
242
+ 3. Click **Save** and copy the newly generated **push URL** for later use
243
+ 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
244
+ 5. Done
245
+
246
+ </details>
247
+ </div>
248
+
249
+ ## In Falcon
250
+ ---
251
+ Configure webhooks for each alert rule.
252
+
253
+ <div class="md-block">
254
+
255
+ 1. Log in to your Falcon console, select Templates to enter the alert rule template list page
256
+ 2. Open any alert rule template, fill in the callback address with the integration's push URL
257
+ 3. Click the Save button to save the alert rule
258
+ 4. Repeat steps 2 and 3 for all alert rule templates that need to send events
259
+
260
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/open-falcon-tmpls.png" />
261
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/saas-open-falcon-rule.png" />
262
+
263
+ Similarly, you can configure the same push URL for Expressions alert rules.
264
+
265
+ 5. Return to the integration list, if the latest event time is displayed, the configuration is successful and events are being received
266
+ 6. Done
267
+
268
+ </div>
269
+
270
+ ## Status Mapping
271
+ ---
272
+ <div class="md-block">
273
+
274
+ Open-Falcon to Flashduty alert severity mapping:
275
+
276
+ | Open-Falcon | Flashduty | Status |
277
+ | ----------- | -------- | ---- |
278
+ | 0 | Critical | Critical |
279
+ | 1 | Critical | Critical |
280
+ | 2 | Warning | Warning |
281
+ | 3 | Warning | Warning |
282
+ | 4 | Info | Info |
283
+ | 5 | Info | Info |
284
+ | 6 | Info | Info |
285
+
286
+ </div>
287
+ `;
288
+ const PagerDuty = '---\ntitle: "PagerDuty Integration"\ndescription: "Push alert events to Flashduty through PagerDuty protocol for automated alert noise reduction"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/pagerduty-integration-guide"\n---\n\nSynchronize via webhook\n\nFlashduty implements PagerDuty Events API with full input and response compatibility. This allows you to push alert events to Flashduty using the PagerDuty protocol for automated alert noise reduction.\n\nSimilarly, for alert systems that already support pushing events to PagerDuty (such as ElastAlert), you only need to modify the destination push URL to utilize the PagerDuty protocol for pushing events to Flashduty.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alert events to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **channel**, and enter a specific channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **PagerDuty** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **PagerDuty** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In PagerDuty\n---\n### Request URL\n\n```\n{api_host}/event/push/alert/pagerduty\n```\n\nThis URL supports both PagerDuty V1 and V2 Events API. **You must modify the PagerDuty URL to this address.**\n\n### PagerDuty V2 Events\n\n<div class="md-block">\n\n#### Reference Documentation:\n\n[PagerDuty V2 Events](https://developer.pagerduty.com/api-reference/368ae3d938c9e-send-an-event-to-pager-duty)\n\n#### Authentication Methods:\n\nChoose one of these two methods:\n\n- Method 1: Include integration_key parameter in QueryString\n- Method 2: Pass integration_key as routing_key parameter in Payload\n\n</div>\n\n### PagerDuty V1 Events\n\n<div class="md-block">\n\n#### Reference Documentation:\n\n[PagerDuty V1 Events](https://developer.pagerduty.com/api-reference/f0037990796c8-send-an-event-to-pager-duty)\n\n#### Authentication Methods:\n\nChoose one of these two methods:\n\n- Method 1: Include integration_key parameter in QueryString\n- Method 2: Pass integration_key as service_key parameter in Payload\n\n</div>\n\n### Configuration Example\n\nUsing [ElastAlert2](https://github.com/jertel/elastalert2) as an example:\n\n<div class="md-block">\n\n1. Step 1: Obtain Push URL\n\nEnter integration name on the current page and save. Reopen integration details and copy the push URL, such as:\n\n```\n{api_host}/event/push/alert/pagerduty?integration_key=xxx\n```\n\n2. Step 2: Modify Push URL\n\nModify the corresponding source code of your deployed ElastAlert instance, [view diff](https://github.com/jertel/elastalert2/commit/e815a62a6b1eecef6e1fef13afd99d905b67fc34):\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/pagerduty-replace-endpoint.png" />\n\n3. Step 3: Report Alert Events\n\nFollow the [ElastAlert PagerDuty push configuration documentation](https://elastalert2.readthedocs.io/en/latest/ruletypes.html#pagerduty) steps to configure alerts:\n\n```\nname: "b"\ntype: "frequency"\nindex: "pgy_audit*"\nis_enabled: true\nnum_events: 1\nrealert:\n minutes: 1\nterms_size: 50\nscan_entire_timeframe: true\ntimeframe:\n minutes: 60\ntimestamp_field: "created_at"\ntimestamp_type: "unix_ms"\nuse_strftime_index: false\nalert_subject: "Test {0} 123 aa☃ {1}"\nalert_subject_args:\n - "account_id"\n - "operation"\nalert_text: "Test {0} 123 bb☃ {1}"\nalert_text_args:\n - "request_id"\n - "operation_name"\nfilter:\n - query:\n query_string:\n query: "created_at:*"\n\n# ------- FlashDuty ----------------\nalert: pagerduty\npagerduty_service_key: xxx\npagerduty_client_name: wahaha\npagerduty_api_version: v2\npagerduty_v2_payload_class: ping failure\npagerduty_v2_payload_component: mysql\npagerduty_v2_payload_group: app-stack\npagerduty_v2_payload_severity: error\npagerduty_v2_payload_source: mysql.host.name\n# ------- FlashDuty ----------------\n```\n\n4. Step 4: Restart ElastAlert and wait for alerts to trigger\n\n</div>\n';
289
+ const TencentBK = '---\ntitle: "Tencent BlueKing Integration"\ndescription: "Sync Tencent BlueKing monitoring events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/tencent-bk-integration-guide"\n---\n\nSync Tencent BlueKing monitoring events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alerts to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **Tencent BlueKing** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re Done\n \n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page\n 2. Select **Tencent BlueKing** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Tencent BlueKing\n---\nThe following content has been verified on `BlueKing V6/7 versions`. V5 and below versions are no longer officially supported, and upgrading is recommended.\n\nBlueKing alert policies can trigger `Action Plans`, which can integrate with external systems for complex functionalities. First, create an Action Plan and configure the Flashduty callback URL, then edit the alert policy to associate actions with this plan, enabling automatic alert changes to be pushed to Flashduty. Here are the specific steps:\n\n#### Step 1: Create Action Plan\n\n<div class="md-block">\n\n1. Log in to your BlueKing desktop and enter the `Monitor Platform`;\n2. Go to `Configuration-Action Plans` page, click the `Add Plan` button to start creating an action plan;\n3. Enter the name as `Send To FlashDuty`, select `HTTP Callback` as the plan type, choose `POST` as the push method, and fill in the integration push URL (obtained after saving the integration), as shown below:\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/integration/tencent-bk/create_package.jpg" />\n\n4. Switch to `Body`, select `JSON` type, copy and paste the following information (when an actual alert occurs, BlueKing will render the variable content as the payload to push to the target callback URL):\n\n```\n{{alarm.callback_message}}\n```\n\n5. Save the plan to complete creation.\n</div>\n\n#### Step 2: Edit Alert Policy\n\n<div class="md-block">\n\n1. Go to `Configuration-Alert Policies` page, select an existing policy to edit or create a new one;\n2. Scroll down to the `Alert Processing` section, select the `Send To FlashDuty` action plan for all three scenarios, and disable `Defense Rules`, as shown below:\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/integration/tencent-bk/update_alert_rule.jpg" />\n\n3. Submit and save to complete;\n4. Repeat these steps for other alerts you want to push to FlashDuty.\n\n</div>\n\n## Status Mapping\n---\n<div class="md-block">\n\nAlert severity mapping between BlueKing and Flashduty:\n\n| BlueKing | Flashduty | Status |\n| -------- | --------- | ------ |\n| Fatal | Critical | critical |\n| Warning | Warning | warning |\n| Notice | Info | info |\n\n</div>\n';
290
+ const TencentCLS = '---\ntitle: "Tencent Cloud CLS Integration"\ndescription: "Sync Tencent Cloud Log Service (CLS) monitoring alerts to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/tencent-cls-integration-guide"\n---\n\nSync Tencent Cloud Log Service (CLS) monitoring alerts to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alerts to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **channel**, and enter a specific channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **Tencent Cloud CLS** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page\n 2. Select **Tencent Cloud CLS** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Tencent Cloud CLS\n---\n\n**Step 1: Configure Notification Channel Group**\n\n<div class="md-block">\n\n1. Log in to your Tencent Cloud Console, select CLS service, and go to Monitoring Alerts - Notification Channel Groups\n2. Click `Create` to start\n\n<img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/integration/tencent-cls/tencent-cls-notify.png" />\n\n3. As shown, enter a specific channel group name in `Name`, select "Custom API Callback" for `Channel Type`, fill in the integration push URL in `Callback URL`, and select POST for `Request Method`\n\n4. Click `OK` to save, `Add` to add multiple channels\n\n</div>\n\n**Step 2: Configure Alert Policy**\n\n<div class="md-block">\n\n1. Log in to your Tencent Cloud Console, select CLS service, and go to Monitoring Alerts - Alert Policies\n2. Click `Create` to start\n\n<img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/integration/tencent-cls/tencent-cls-alert.png" />\n\n3. As shown, enter a specific alert name in `Alert Name`, select the specific log topic\n\n4. Fill in specific query statements in `Execution Statement`, select time range for query period, click Preview to check execution results, enter specific trigger conditions\n\n5. For `Alert Level`, choose between Critical, Warning, and Info based on alert severity, select execution cycle as needed\n\n6. `Multi-dimensional Analysis` allows additional log analysis when alerts trigger, attaching results to notifications to help identify alert causes. This analysis doesn\'t affect alert trigger conditions.\n\n7. For alert notifications, `Notification Channel Group` can be linked to specific channel groups\n\n</div>\n\n**Step 3: Configure Custom Callback**\n\n<div class="md-block">\n\n1. After linking the channel group, you can see callback content configuration\n\n2. Request headers can be added as needed\n\n3. Request content format reference:\n\n```json\n{\n "uin": "{{escape .UIN}}",\n "nickname": "{{escape .Nickname}}",\n "region": "{{escape .Region}}",\n "alarm": "{{escape .Alarm}}",\n "alarm_id": "{{escape .AlarmID}}",\n "condition": "{{escape .Condition}}",\n "happen_threshold": "{{escape .HappenThreshold}}",\n "alert_threshold": "{{escape .AlertThreshold}}",\n "topic": "{{escape .Topic}}",\n "topic_id": "{{escape .TopicId}}",\n "level": "{{escape .Level}}",\n "label": {{.Label}},\n "start_time": "{{escape .StartTime}}",\n "start_time_unix": "{{escape .StartTimeUnix}}",\n "notify_time": "{{escape .NotifyTime}}",\n "notify_time_unix": "{{escape .NotifyTimeUnix}}",\n "notify_type": "{{escape .NotifyType}}",\n "consecutive_alert_nums": "{{escape .ConsecutiveAlertNums}}",\n "duration": "{{escape .Duration}}",\n "trigger_params": "{{escape .TriggerParams}}",\n "record_group_id": "{{escape .RecordGroupId}}",\n "detail_url": "{{escape .DetailUrl}}",\n "query_url": "{{escape .QueryUrl}}",\n "message": {{.Message}},\n "query_result": {{.QueryResult}},\n "query_log": {{.QueryLog}},\n "analysis_result": {{.AnalysisResult}}\n}\n```\n\n</div>\n\n## Status Mapping\n---\n<div class="md-block">\n\nTencent Cloud CLS monitoring alert level mapping to Flashduty:\n\n| Tencent Cloud CLS | Flashduty | Status |\n| ------------- | --------- | --- |\n| Info | Info | Info\n| Warn | Warning | Warning\n| Critical | Critical | Critical\n\n</div>\n';
291
+ const TencentCm = `---
292
+ title: "Tencent Cloud Monitor CM Integration"
293
+ description: "Sync Tencent Cloud Monitor CM alert events to Flashduty via webhook for automated alert noise reduction"
294
+ date: "2024-05-11T10:00:00+08:00"
295
+ url: "https://docs.flashcat.cloud/en/flashduty/tencent-cm-integration-guide"
296
+ ---
297
+
298
+ Sync Tencent Cloud Monitor CM alert events to Flashduty via webhook for automated alert noise reduction.
299
+
300
+ <div class="hide">
301
+
302
+ ## In Flashduty
303
+ ---
304
+ You can obtain an integration push URL through either of these two methods:
305
+
306
+ ### Using Private Integration
307
+
308
+ Choose this simpler option when you don't need to route alert events to different channels.
309
+
310
+ <details>
311
+ <summary>Expand</summary>
312
+
313
+ 1. Go to the Flashduty console, select **Channel**, and enter a channel's details page
314
+ 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page
315
+ 3. Select **Tencent Cloud Monitor CM** integration and click **Save** to generate a card
316
+ 4. Click the generated card to view the **push URL**, copy it for later use. Done.
317
+
318
+ </details>
319
+
320
+ ### Using Shared Integration
321
+
322
+ Choose this option when you need to route alerts to different channels based on the alert event's payload information.
323
+
324
+ <details>
325
+ <summary>Expand</summary>
326
+
327
+ 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
328
+ 2. Select **Tencent Cloud Monitor CM** integration:
329
+ - **Integration Name**: Define a name for this integration
330
+ 3. Click **Save** and copy the newly generated **push URL** for later use
331
+ 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
332
+ 5. Done
333
+
334
+ </details>
335
+ </div>
336
+
337
+ ## In Tencent Cloud Monitor CM
338
+ ---
339
+ <div class="md-block">
340
+
341
+ 1. Log in to your Tencent Cloud Console and select Cloud Monitor
342
+ 2. Go to Alert Management -> Notification Templates page, click the New button to start editing a notification template
343
+ 3. Fill in the callback URL with the integration push URL, and select English as the notification language
344
+ 4. Click the Save button to save the template
345
+
346
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/saas-tecent-cm-template.png" />
347
+
348
+ 5. Go to Alert Configuration -> Alert Policies page, select the alert policies for which you want to send events, enter details, and add the newly created notification template
349
+
350
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/tecent-cm-rule.png" />
351
+
352
+ 6. Return to the integration list, if the latest event time is displayed, the configuration is successful and events are being received
353
+ 7. Done
354
+
355
+ </div>
356
+
357
+ ## Status Mapping
358
+ ---
359
+ <div class="md-block">
360
+
361
+ All metric alerts from Tencent Cloud Monitor correspond to "warning" severity level alerts in Flashduty.
362
+
363
+ </div>
364
+ `;
365
+ const TencentEb = '---\ntitle: "Tencent Cloud EventBridge"\ndescription: "Sync Tencent Cloud EventBridge events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/tencent-event-bridge-integration-guide"\n---\n\nSync Tencent Cloud EventBridge events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alerts to different channels. It\'s simpler and recommended.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **Tencent Cloud EventBridge** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re Done\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center => Alerts** to enter the integration selection page\n 2. Select **Tencent Cloud EventBridge** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Tencent Cloud EventBridge\n---\n<div class="md-block">\n\n1. Log in to your Tencent Cloud Console and select EventBridge service\n2. Go to the Event Rules page, click the New button to start editing rules\n3. Enter the name as FlashDuty, as shown below:\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/tencent-eb-new-rule.png" />\n\n4. For event matching, you can either select specific events through the form mode or customize by entering the following JSON content to match all events:\n\n```\n{\n "source": [\n {\n "suffix": ".cloud.tencent"\n }\n ]\n}\n```\n\nAs shown below:\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/tencent-eb-match-rule.png" />\n\n5. Next, configure the event target by selecting "Message Push", "General Notification Template", "English", "API Callback", and "Custom webhook". Enter the integration push URL in the webhook address field\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/tencent-eb-target-webhook.png" />\n\n6. Click the Save button, return to the Event Set page, select an event set, and click Send Event to test\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/tencent-eb-test-send.png" />\n\n7. Return to the integration list. If the latest event time is displayed, the configuration is successful and events are being received\n8. Done\n\n</div>\n\n## Status Mapping\n---\n<div class="md-block">\n \nAll Tencent Cloud EventBridge events correspond to "warning" severity level alerts in Flashduty.\n\n</div>\n';
366
+ const OceanBase = '---\ntitle: "OceanBase Alert Events"\ndescription: "Synchronize OceanBase alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-05-23T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/oceanbase-integration-guide"\n---\n\nSync OceanBase alert events to Flashduty via webhook for automated alert noise reduction\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alert events to different channels. It\'s simpler and recommended.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a specific channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **OceanBase** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **OceanBase** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In OceanBase\n---\n\n<div class="md-block">\n\n## I. OceanBase Alert Push Configuration\n\n### Step 1: Configure Alert Channel\n1. Log in to your OceanBase console and select Alert Center\n2. Go to **Alert Channels**, click **New Channel** to start creating\n3. Select **Custom Script** as the channel type\n4. Configure the basic settings as shown below:\n\n<img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/oceanbase-1.png" />\n\n5. Copy the following script content into the channel configuration, and **please add the integration_key value from your FlashDuty push URL to the integration_key parameter in the script**\n\n```\n#!/usr/bin/env bash\n\nfunction sendToFlashDuty() {\n URL="${address}/event/push/alert/standard?integration_key=${integration_key}"\n curl -s -X POST ${URL} -H \'Content-Type: application/json\' -d \'{\n "event_status": "\'${alert_level}\'",\n "alert_key": "\'${alarm_id}\'",\n "description": "\'"${alarm_description//\\"/\\\\\\"}"\'",\n "title_rule": "$app_types::$name::$alarm_targets",\n "event_time":\'${timestamp}\',\n "labels": {\n "app_types":"\'${app_type}\'",\n "id":"\'${alarm_id}\'",\n "name":"\'${alarm_name}\'",\n "alarm_level":"\'${alarm_level}\'",\n "alarm_status":"\'${alarm_status}\'",\n "alarm_active_at":"\'${alarm_active_at}\'",\n "alarm_threshold":"\'${alarm_threshold}\'",\n "alarm_type":"\'${alarm_type}\'",\n "alarm_targets":"\'${alarm_target}\'",\n "ob_cluster_group":"\'${ob_cluster_group}\'",\n "ob_cluster":"\'${ob_cluster}\'",\n "hostIP":"\'${host_ip}\'",\n "app_cluster":"\'${app_cluster}\'",\n "alarm_description":"\'"${alarm_description//\\"/\\\\\\"}"\'",\n "alarm_url":"\'${alarm_url}\'"\n }\n }\'\n\n return $?\n}\n\nalarm_name=$(echo ${alarm_name} | sed "s/ /_/g")\nalarm_target=$(echo ${alarm_target} | sed "s/ /_/g")\n\ntimestamp=$(TZ=UTC date -d "${alarm_updated_at}" +%s)\n\nlevelMd5=$(echo ${alarm_level} | md5sum | awk \'{print$1}\')\nstatusMd5=$(echo ${alarm_status} | md5sum | awk \'{print$1}\')\n\nactive="048d106318302b41372b4292b5696ad4"\nInactive="bf7da164d431439fe9668fbc964110c4"\n\ndown="2e1558b0a152fae2dd15884561b1508d"\ncritical="59b9b38574ca2ee4f5e264b56f49a83f"\nalert="723931b03a5d1cec59eac40cf0703580" \ncaution="abf4d55ba8926eff32cb44065e634ed3"\ninfo="6aae3f4254789d72aa0cc8ed55b8f11f"\n\naddress="https://api.flashcat.cloud"\nintegration_key=""\n\nif [[ ${statusMd5} == ${Inactive} ]];then\n alert_level="Ok"\n timestamp=$(TZ=UTC date -d "${alarm_resolved_at}" +%s)\nelif [[ ${statusMd5} == "${active}" ]];then\n if [[ ${levelMd5} == ${down} || ${levelMd5} == ${critical} ]];then\n alert_level="Critical"\n elif [[ ${levelMd5} == ${alert} ]];then\n alert_level="Warning"\n elif [[ ${levelMd5} == ${caution} || ${levelMd5} == ${info} ]];then\n alert_level="Info"\n fi\nfi\n\nif [[ ${statusMd5} == ${active} || ${statusMd5} == ${Inactive} ]];then\n sendToFlashDuty\nfi\n```\n\n6. Fill in {} for Response validation\n7. Select Markdown for the alert message format in Message Configuration\n8. Select **English** for the alert message template, fill in the following content, and submit:\n\n```\nOCP Alert Notification - Single Alert\n- Alert ID: ${alarm_id}\n- Name: ${alarm_name}\n- Severity: ${alarm_level}\n- Alert Target: ${alarm_target}\n- Service: ${service}\n- Summary: ${alarm_summary}\n- Triggered at: ${alarm_active_at}\n- Updated at: ${alarm_updated_at}\n- Resolved at: ${alarm_resolved_at}\n- Details: ${alarm_description}\n- Status: ${alarm_status}\n- Alert Type: ${alarm_type}\n- Alert Threshold: ${alarm_threshold}\n- Cluster Group: ${ob_cluster_group}\n- Cluster: ${ob_cluster}\n- Host: ${host_ip}\n- App Cluster: ${app_cluster}\n- OCP Link: ${alarm_url}\n```\n\n### Step 2: Configure Alert Push\n\n1. Create a new push configuration at: **Alert Center=>Alert Push=>New Push Configuration**\n2. Configure push type and specified objects as needed\n\n<img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/oceanbase-2.png" />\n\n3. Select **English** for push language\n4. Select **FlashDuty** for alert channel\n5. Enable **Recovery Notification**\n6. Submit\n\n<img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/oceanbase-3.png" />\n</div>\n\n## II. Status Mapping\n\n<div class="md-block">\n \n|OceanBase|Flashduty|Status|\n|---|---|---|\n|Down|Critical|Critical|\n|Critical|Warning|Critical|\n|Warning|Warning|Warning|\n|Caution|Info|Info|\n|Notice|Info|Info|\n\n</div>\n';
367
+ const Graylog = `---
368
+ title: "Graylog Alert Events"
369
+ description: "Sync Graylog alert events to Flashduty via webhook for automated alert noise reduction"
370
+ date: "2024-06-18T10:00:00+08:00"
371
+ url: "https://docs.flashcat.cloud/en/flashduty/graylog-integration-guide"
372
+ ---
373
+
374
+ Sync Graylog alert events to Flashduty via webhook for automated alert noise reduction.
375
+
376
+ <div class="hide">
377
+
378
+ ## In Flashduty
379
+ ---
380
+ You can obtain an integration push URL through either of these two methods:
381
+
382
+ ### Using Private Integration
383
+
384
+ Choose this simpler option when you don't need to route alert events to different channels.
385
+
386
+ <details>
387
+ <summary>Expand</summary>
388
+
389
+ 1. Go to the Flashduty console, select **Channel**, and enter a specific channel's details page
390
+ 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page
391
+ 3. Choose **Graylog** integration and click **Save** to generate a card
392
+ 4. Click the generated card to view the **push URL**, copy it for later use, and you're done
393
+
394
+ </details>
395
+
396
+ ### Using Shared Integration
397
+
398
+ Choose this option when you need to route alerts to different channels based on the alert event's payload information.
399
+
400
+ <details>
401
+ <summary>Expand</summary>
402
+
403
+ 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
404
+ 2. Select **Graylog** integration:
405
+ - **Integration Name**: Define a name for this integration
406
+ 3. Click **Save** and copy the newly generated **push URL** for later use
407
+ 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
408
+ 5. Done
409
+
410
+ </details>
411
+ </div>
412
+
413
+ ## In Graylog
414
+ ---
415
+ <div class="md-block">
416
+
417
+ ## I. Graylog Alert Push Configuration
418
+
419
+ ### Step 1: Configure Alert Channel
420
+ 1. Log in to the Graylog console
421
+ 2. Find Alerts in the menu and select Notifications
422
+ 3. Create Notification
423
+ 4. Enter Title and Description
424
+ 5. Select **HTTP Notification** as Notification Type, as shown below
425
+
426
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/graylog-2.png" />
427
+
428
+ 6. Enter the FlashDuty URL you obtained (URL whitelist required for first-time use)
429
+
430
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/graylog-3.png" />
431
+
432
+ 7. Click Save to whitelist the URL
433
+
434
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/graylog-1.png" />
435
+
436
+ 8. After saving, submit Create
437
+
438
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/graylog-5.png" />
439
+
440
+ ### Step 2: Use FlashDuty Alert Channel in Alert Events
441
+ 1. Create or edit existing Event Definition
442
+ 2. Skip other alert configurations here (configure alert conditions according to business requirements)
443
+ 3. Configure channel in Notifications
444
+ 4. Add Notification and select FlashDuty channel
445
+ 5. Click Done
446
+ 6. Complete the next step to finish
447
+
448
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/graylog-4.png" />
449
+ </div>
450
+
451
+ ## II. Status Mapping
452
+
453
+ <div class="md-block">
454
+
455
+ |Graylog|Flashduty|Status|
456
+ |---|---|---|
457
+ |3|Critical|Critical|
458
+ |2|Warning|Warning|
459
+ |1|Info|Info|
460
+
461
+ </div>
462
+ `;
463
+ const Skywalking = '---\ntitle: "Skywalking Alert Events"\ndescription: "Sync Skywalking alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-06-20T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/skywallking-integration-guide"\n---\n\nSync Skywalking alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alert events to different channels. It\'s simpler and recommended.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a specific channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **Skywalking** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Skywalking** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Skywalking\n---\n<div class="md-block">\n\n## I. Modify Skywalking Service Configuration File\n\n1. Log in to the Skywalking server\n2. Locate the Skywalking configuration file ./config/alarm-settings.yml\n3. Add Level tags to the alert rules\n\n```\n# Tags are supported in v8.6.0+ versions only, can be omitted for other versions\n# Level values: Critical, Warning, Info\n# Case sensitive\nrules:\n endpoint_relation_resp_time_rule:\n expression: sum(endpoint_relation_resp_time > 1000) >= 2\n period: 10\n message: Response time of endpoint relation {name} is more than 1000ms in 2 minutes of last 10 minutes\n tags:\n Level: Warning\n```\n4. Add the FlashDuty webhook URL\n\n```\n# Add at the bottom of the configuration file\n# For v8.8.0 ~ v9.5.0\nwebhooks:\n - url: https://api.flashcat.cloud/event/push/alert/skywalking?integration_key=18c7f1551df55fa28a1a87f0846d9d1e131\n\n# For v10.0.0\nhooks:\n webhook:\n default:\n is-default: true\n urls:\n - https://api.flashcat.cloud/event/push/alert/skywalking?integration_key=18c7f1551df55fa28a1a87f0846d9d1e131\n```\n\n5. After editing, save and restart the Skywalking service to apply the configuration\n\n## II. Status Mapping\n\n<div class="md-block">\n \n|Skywalking|Flashduty|Status|\n|---|---|---|\n|Critical|Critical|Critical|\n|Warning|Warning|Warning|\n|Info|Info|Info|\n|Others or Empty|Info|Info|\n\n</div>\n';
464
+ const Sentry = `---
465
+ title: "Sentry Alert Events"
466
+ description: "Sync Sentry alert events to Flashduty via webhook for automated alert noise reduction"
467
+ date: "2024-07-05T10:00:00+08:00"
468
+ url: "https://docs.flashcat.cloud/en/flashduty/sentry-integration-guide"
469
+ ---
470
+
471
+ Sync Sentry alert events to Flashduty via webhook for automated alert noise reduction.
472
+
473
+ <div class="hide">
474
+
475
+ ## In Flashduty
476
+ ---
477
+ You can obtain an integration push URL through either of these two methods:
478
+
479
+ ### Using Private Integration
480
+
481
+ Choose this simpler option when you don't need to route alert events to different channels.
482
+
483
+ <details>
484
+ <summary>Expand</summary>
485
+
486
+ 1. Go to the Flashduty console, select **Channel**, and enter a specific channel's details page
487
+ 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page
488
+ 3. Select **Sentry** integration and click **Save** to generate a card
489
+ 4. Click the generated card to view the **push URL**, copy it for later use, and you're done
490
+
491
+ </details>
492
+
493
+ ### Using Shared Integration
494
+
495
+ Choose this option when you need to route alerts to different channels based on the alert event's payload information.
496
+
497
+ <details>
498
+ <summary>Expand</summary>
499
+
500
+ 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
501
+ 2. Select **Sentry** integration:
502
+ - **Integration Name**: Define a name for this integration
503
+ 3. Click **Save** and copy the newly generated **push URL** for later use
504
+ 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
505
+ 5. Done
506
+
507
+ </details>
508
+ </div>
509
+
510
+ ## In Sentry
511
+ ---
512
+ <div class="md-block">
513
+
514
+ ## I. Prerequisites
515
+ Sentry provides two types of alert mechanisms: Issue Alerts and Metric Alerts. While Issue Alerts support notifications through WebHooks in Integrations, Metric Alerts are limited to using Internal Integration for alert notifications. Notably, Internal Integration works with both Metric Alerts and Issue Alerts. Given the versatility of Internal Integration, we've chosen to standardize on this approach rather than relying on WebHooks separately, thus simplifying alert notification configuration.
516
+
517
+ ## II. Sentry Alert Push Configuration
518
+
519
+ ### Step 1: Add FlashDuty Custom Integrations
520
+
521
+ 1. Log in to the Sentry management console
522
+ 2. In the left navigation bar, locate **Settings => Custom Integrations**
523
+ 3. Click Create New Integration and select **Internal Integration**
524
+ 4. On the editing page, **enter FlashDuty for Name and paste the integration push URL into WebhookURL**
525
+ 5. Enable **Alert Rule Action**, configure as shown below:
526
+
527
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/sentry-1.png" />
528
+
529
+ 5. In PERMISSIONS configuration, set **Read permission for Issue & Event**
530
+ 6. In WEBHOOKS configuration, check **issue**, **do not check error and comment**
531
+ 7. After configuration, click Save Changes to complete the setup
532
+
533
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/sentry-2.png" />
534
+
535
+ **Special notes about WEBHOOKS configuration:**
536
+ 1. After checking **issue**, FlashDuty can receive resolved events for issues, meaning when manually triggering resolved for an issue in the issue list, we will automatically recover the associated incident in FlashDuty
537
+ 2. Other issue events such as create, assigned, archived, and unresolved are not supported
538
+ 3. If error and comment are also checked, FlashDuty will not receive or process these types of events
539
+
540
+ ### Step 2: Use FlashDuty Integration in Alerts
541
+ 1. In the left navigation bar, locate **Alerts => Create Alert**
542
+ 2. Select the type of Alert to create, such as Issue
543
+
544
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/sentry-3.png" />
545
+
546
+ 3. Configure trigger conditions as needed
547
+
548
+ 4. Under **THEN perform these actions**, **Add action** and select **Send a notification via**
549
+
550
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/sentry-4.png" />
551
+
552
+ 5. Select **FlashDuty** added above as the notification channel
553
+
554
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/sentry-5.png" />
555
+
556
+ 6. Configure other options as needed and click **Save Rule** to complete
557
+
558
+ ## III. Status Mapping
559
+
560
+ <div class="md-block">
561
+
562
+ |Sentry|Flashduty|Status|
563
+ |---|---|---|
564
+ |critical|Critical|Critical|
565
+ |warning|Warning|Warning|
566
+ |triggered|Warning|Warning|
567
+ |resolved|Ok|Resolved|
568
+
569
+ </div>
570
+ `;
571
+ const Jiankongbao = `---
572
+ title: "Jiankongbao Alert Events"
573
+ description: "Sync Jiankongbao alert events to Flashduty via webhook for automated alert noise reduction"
574
+ date: "2024-08-20T10:00:00+08:00"
575
+ url: "https://docs.flashcat.cloud/en/flashduty/jiankongbao-integration-guide"
576
+ ---
577
+
578
+ Sync Jiankongbao alert events to Flashduty via webhook for automated alert noise reduction.
579
+
580
+ <div class="hide">
581
+
582
+ ## In Flashduty
583
+ ---
584
+ You can obtain an integration push URL through either of these two methods:
585
+
586
+ ### Using Private Integration
587
+
588
+ Choose this simpler option when you don't need to route alert events to different channels.
589
+
590
+ <details>
591
+ <summary>Expand</summary>
592
+
593
+ 1. Go to the Flashduty console, select **Channel**, and enter a specific channel's details page
594
+ 2. Select the **Integration** tab, click **Add Integration** to enter the integration page
595
+ 3. Choose **Jiankongbao** integration and click **Save** to generate a card
596
+ 4. Click the generated card to view the **push URL**, copy it for later use, and you're Done
597
+
598
+ </details>
599
+
600
+ ### Using Shared Integration
601
+
602
+ Choose this option when you need to route alerts to different channels based on the alert event's payload information.
603
+
604
+ <details>
605
+ <summary>Expand</summary>
606
+
607
+ 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
608
+ 2. Select **Jiankongbao** integration:
609
+ - **Integration Name**: Define a name for this integration
610
+ 3. Click **Save** and copy the newly generated **push URL** for later use
611
+ 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
612
+ 5. Done
613
+
614
+ </details>
615
+ </div>
616
+
617
+ ## In Jiankongbao
618
+ ---
619
+
620
+ <div class="md-block">
621
+
622
+ ## I. Jiankongbao Alert Push Configuration
623
+
624
+ ### Step 1: Configure Alert Channel
625
+ 1. Log in to the Jiankongbao console
626
+ 2. Click Personal Configuration in the upper right corner
627
+
628
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/jkb-1.png" />
629
+
630
+ 3. Click Webhooks Settings in the left navigation bar, then click Add and select URL Callback
631
+
632
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/jkb-2.png" />
633
+
634
+ 4. Enter FlashDuty as the custom name, and input the copied integration push URL
635
+ 5. Select **POST** as the callback method and **JSON** as the data format
636
+ 6. Check **Enable URL Callback**, configure other options as needed, refer to the image below
637
+
638
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/jkb-3.png" />
639
+
640
+ 7. Click Save
641
+
642
+ ### Step 2: Use FlashDuty Alert Channel in Monitoring Tasks
643
+ 1. Create or edit an existing monitoring task
644
+ 2. Other alert configurations are omitted here
645
+ 3. Under Webhook notification, select the FlashDuty channel
646
+
647
+ <img alt="drawing" width="600" src="https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/doc/jkb-4.png" />
648
+
649
+ 4. Save the monitoring task to complete
650
+ </div>
651
+
652
+ ## II. Status Mapping
653
+
654
+ <div class="md-block">
655
+
656
+ |Jiankongbao|Flashduty|Status|
657
+ |---|---|---|
658
+ |1|Warning|Warning|
659
+ |2|Info|Info|
660
+
661
+ </div>
662
+ `;
663
+ const AWSEventBridge = '---\ntitle: "AWS EventBridge Alert Events"\ndescription: "Sync AWS EventBridge alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-08-20T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/aws-eventbridge-integration-guide"\n---\n\nSync AWS EventBridge alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alert events to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **AWS EventBridge** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert event payload.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **AWS EventBridge** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In AWS EventBridge\n---\n\n<div class="md-block">\n\n## I. AWS EventBridge Alert Push Configuration\n<span id="1"></span>\n\n### Step 1: Create Connection in API destinations\n1. Log in to your AWS Console, search for `Amazon EventBridge` product, and enter the corresponding product console\n2. Select `Integration=>API destinations` from the left navigation bar\n3. Click `Connections`, then click `Create connection`\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/aws-eb-3.png" />\n\n4. In the `Connection details` section, enter `FlashDuty` for `Connection name`\n5. In the `Authorization` section, select `Other` for `Destination type`\n6. Select `API Key` for `Authorization type`\n7. Enter `FlashDuty` for `API key name`, and enter the `integration_key` from the integration push URL for `Value`\n8. Click `Create` to save\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/aws-eb-4.png" />\n\n### Step 2: Create API destination\n\n1. Return to the `API destinations` interface and click `Create API destination`\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/aws-eb-5.png" />\n\n2. Fill in the information in the `API destination detail` editing interface, enter `FlashDuty` for `Name`\n3. Enter the integration push URL for `API destination endpoint`\n4. Select `POST` for `HTTP method`\n5. Select `Use an existing connection` for `Connection type` and choose the `FlashDuty` Connection added in Step 1\n6. Click `Create` to save\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/aws-eb-6.png" />\n\n### Step 3: Use the API destination created in Step 2 in EventBridge Rules\n1. Log in to your AWS Console, search for `Amazon EventBridge` product, and enter the corresponding product console\n2. Select `Buses=>Rules` from the left navigation bar, create or edit existing rules\n3. Other configurations are omitted here\n4. For `Target types`, select `EventBridge API destination` as the target type\n5. Under `API destination`, select `Use an existing API destination` and choose the `FlashDuty` API destination created in Step 2 from the dropdown\n6. Click `Next`, configure as needed, and save\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/aws-eb-7.png" />\n\n## II. Status Mapping\n\n<div class="md-block">\n \n1. Since AWS EventBridge events don\'t have severity levels, all events pushed to FlashDuty will have a Warning severity\n2. AWS EventBridge events only have triggers without recovery states, so events received by FlashDuty won\'t automatically associate with recovery\n\n</div>\n\n';
664
+ const Dynatrace = '---\ntitle: "Dynatrace Alert Events"\ndescription: "Sync Dynatrace alert events to Flashduty via webhook to achieve automated alert noise reduction."\ndate: "2024-08-20T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/dynatrace-integration-guide"\n---\n\nSync Dynatrace alert events to Flashduty via webhook to achieve automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alert events to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a specific channel\'s details page\n 2. Select the **Integration** tab, click **Add Integration** to enter the integration page\n 3. Select **Dynatrace** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Dynatrace** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Dynatrace\n---\n\n<div class="md-block">\n\n## I. Dynatrace Alert Push Configuration\n\n1. Log in to your Dynatrace console\n2. Select `Apps` in the left navigation bar and find `Settings` in the `Manage` area\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/dyn-1.png" />\n\n3. Find `Integration` and select `Problem notifications`\n<dev style="text-align: center;"/>\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/dyn-2.png" />\n\n</div>\n\n4. Click `Add notification`\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/dyn-3.png" />\n\n5. Under `Notification type`, select `Custom Integration`\n6. Fill in `Display name` with `FlashDuty`\n7. In `Webhook URL`, enter the integration push URL (generated after saving the integration name on the current page)\n8. Keep `Call webhook if problem is closed` enabled\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/dyn-4.png" />\n\n9. Under `Custom payload`, enter the following content:\n\n```\n{\n "State":"{State}",\n "PID":"{PID}",\n "ProblemTitle":"{ProblemTitle}",\n "ProblemImpact":"{ProblemImpact}",\n "ProblemDetails":"{ProblemDetailsText}",\n "ProblemURL":"{ProblemURL}",\n "ProblemSeverity":"{ProblemSeverity}",\n "ImpactedEntityNames":"{ImpactedEntityNames}",\n "Tags":"{Tags}"\n}\n```\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/dyn-5.png" />\n\n10. Click `Save changes` to complete the setup\n\n## II. Status Mapping\n\n\n|Dynatrace|Flashduty|Status|\n|---|---|---|\n|AVAILABILITY|Critical|critical|\n|ERROR|Warning|warning|\n|PERFORMANCE|Info|info|\n|RESOURCE_CONTENTION|Info|info|\n|CUSTOM_ALERT|Info|info|\n\n</div>\n';
665
+ const HuaweiyunLTS = '---\ntitle: "Huawei Cloud LTS Alert Events"\ndescription: "Sync Huawei Cloud Log Tank Service (LTS) alert events to Flashduty via webhook for automated alert noise reduction."\ndate: "2024-08-20T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/huaweilts-integration-guide"\n---\n\nSync Huawei Cloud Log Tank Service (LTS) alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alert events to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **Huawei Cloud LTS** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re Done\n \n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Huawei Cloud LTS** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Huawei Cloud\n---\n\n<div class="md-block">\n\n## I. Huawei Cloud LTS Alert Push Configuration\n\n### Step 1: Create FlashDuty Alert Channel\n1. Log in to your Huawei Cloud Console, search for `SMN` (Simple Message Notification) service and enter its console\n2. Select `Topic Management=>Topics` from the left navigation bar\n3. Click `Create Topic`, enter `FlashDuty` as the topic name in the edit page and confirm\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/hw/lts-1.png" alt="drawing" width="500"/>\n\n4. Return to the topic list and click `Add Subscription` in the newly created FlashDuty topic\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/hw/lts-2.png" alt="drawing" width="500"/>\n\n5. In the edit page, select `HTTPS` as the protocol, enter the **push URL** as the subscription endpoint and confirm\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/hw/lts-3.png" alt="drawing" width="500"/>\n\n6. After adding, check if the subscription status shows **Confirmed** in the subscription list\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/hw/lts-4.png" alt="drawing" width="500"/>\n\n### Step 2: Configure Log Alert Action Rules\n\n1. Log in to your Huawei Cloud Console, search for `LTS` (Log Tank Service) and enter its console\n2. Select `Log Alert=>Alert Action Rules=>Message Templates` from the left navigation bar and click `Create`\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/hw/lts-5.png" alt="drawing" width="500"/>\n\n3. In the template edit page, enter **FlashDuty** as the name, select `English` as the message header language\n4. Select `HTTP/HTTPS` as notification type and `JSON` as data type\n5. Click `Confirm` to save\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/hw/lts-6.png" alt="drawing" width="500"/>\n\n6. Return to the `Alert Action Rules` list and click `Create`\n7. Enter **FlashDuty** as the rule name, select the previously created **FlashDuty** topic and template\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/hw/lts-7.png" alt="drawing" width="500"/>\n\n### Step 3: Use the Action Rule Created in Step 2 in Alert Rules\n\n1. Return to the `Alert Rules` list\n2. Create or edit existing alert rules\n3. Other configurations are omitted here\n4. In `Advanced Settings`, check both `Alert Trigger` and `Alert Recovery` in notification scenarios\n5. Enable action rules and select the **FlashDuty** rule created in `Step 2`\n6. Select `English` as language, click `Confirm` to save after configuration is complete\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/hw/lts-8.png" alt="drawing" width="500"/>\n\n## II. Status Mapping\n\n<div class="md-block">\n \n|LTS|Flashduty|Status|\n|---|---|---|\n|Critical|Critical|Critical|\n|Major|Warning|Warning|\n|Minor|Info|Info|\n|Info|Info|Info|\n\n</div>\n';
666
+ const GoogleCM = '---\ntitle: "Google Cloud Monitoring Alert Events"\ndescription: "Sync Google Cloud Monitoring alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-07-05T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/gcpcm-integration-guide"\n---\n\nSync Google Cloud Monitoring alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alert events to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **Google Cloud Monitoring** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center => Alert Events** to enter the integration selection page\n 2. Select **Google Cloud Monitoring** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Google Cloud\n---\n\n<div class="md-block">\n\n## I. Google Cloud Monitoring Alert Push Configuration\n\n### Step 1: Configure Alert Channel\n1. Log in to the Google Cloud Console, search for the `Monitoring` product, and enter its console\n2. Find `Alerting` in the left menu and click `EDIT NOTIFICATION CHANNELS` to create a channel\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/google-cm-1.png" />\n\n3. Find `Webhooks` on the Notification channels page and click `ADD NEW`\n4. Enter the integration push URL in the `Endpoint URL` field (the URL will be generated after saving the integration name on the current page)\n5. Enter **FlashDuty** in the `Display Name` field\n6. Click `TEST CONNECTION` and then `SAVE` to complete\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/google-cm-2.png" />\n\n### Step 2: Use FlashDuty Alert Channel in Alert Policy\n\n1. Return to the `Alerting` page\n2. Create or edit an existing policy\n3. Skip other policy configurations (configure alert conditions according to business requirements)\n4. On the `Notifications and name` page, keep `Use notification channel` enabled\n5. Select the **FlashDuty** channel created in **Step 1** from the `Notification channels` dropdown, and check `Notify on incident closure`\n6. Complete other configurations and save the policy\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/google-cm-3.png" />\n\n</div>\n\n## II. Status Mapping\n\n<div class="md-block">\n \n|Google Cloud Monitoring|Flashduty|Status|\n|---|---|---|\n|Critical|Critical|Critical|\n|Error|Warning|Warning|\n|Warning|Warning|Warning|\n|No severity|Info|Info|\n\n</div>\n';
667
+ const Splunk = '---\ntitle: "Splunk Alert Events"\ndescription: "Sync Splunk alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-08-20T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/splunk-integration-guide"\n---\n\nSync Splunk alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alert events to different channels. It\'s simpler and recommended.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a specific channel\'s details page\n 2. Select the **Integration** tab, click **Add Integration** to enter the integration page\n 3. Choose **Splunk** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re Done\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Splunk** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Splunk\n---\n\n<div class="md-block">\n\n## I. Splunk Alert Push Configuration\n\n1. Log in to your Splunk console\n2. In the `Search and Report` application, search for keywords you want to monitor, such as "error"\n3. In the upper right corner\'s save menu, select `Alerts` to configure the search keywords as monitoring items\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/splunk-1.png" />\n\n4. In the configuration popup, enter relevant information. Configure the `set up` and `Triggering conditions` sections according to your needs\n5. In the `Trigger Action` section, click `Add Action` and select `Webhook`\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/splunk-2.png" />\n\n6. In the `Webhook` section, enter the integration push URL in the `URL` field (the URL will be generated after saving the integration name on the current page) and save to complete the alert configuration\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/splunk-3.png" />\n\n</dev>\n\n## II. Status Mapping\n\n<div class="md-block">\nSince Splunk alert events don\'t differentiate severity levels, all alert events pushed from Splunk to Flashduty will have a Warning status and won\'t include recovery events.\n</div>\n';
668
+ const AppDynamics = '---\ntitle: "AppDynamics Alert Integration"\ndescription: "Sync AppDynamics alerts to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-07-05T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/appdynamics-integration-guide"\n---\n\nSync AppDynamics alerts to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alerts to different channels. It\'s simpler.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integration** tab, click **Add Integration**, and enter the integration page\n 3. Choose **AppDynamics** integration and click **Save** to generate a card\n 4. Click the generated card to view the **Push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alerts**, and enter the integration selection page\n 2. Select **AppDynamics** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **Push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In AppDynamics\n---\n\n<div class="md-block">\n\n## I. AppDynamics Alert Push Configuration\n\n### Step 1: Configure FlashDuty Alert Channel\n\n1. Log in to your AppDynamics console\n2. Find `Alert Respond`, select `HTTP Request Templates`, and click `New` to create an alert channel\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/appdyn-1.png" />\n\n3. In the template configuration, enter **FlashDuty** as the `Name`\n4. In the `Request URL` section, select **POST** as the `Method`, and enter the integration push URL in `Raw URL` (enter the integration name on this page, and the URL will be generated after saving)\n \n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/appdyn-2.png" />\n\n5. In the `Payload` section, select `application/json` as `MIME Type` and `UTF-8` as `Payload Encoding`\n6. Paste the following content in the `Payload` text box:\n\n```\n{\n "policy_name":"${policy.name}",\n "message": "${latestEvent.eventMessage}",\n "application_name": "${latestEvent.application.name}",\n "link": "${latestEvent.deepLink}",\n "incident_id": "${latestEvent.incident.id}",\n "details": {\n "event_id": "${latestEvent.id}",\n "event_name": "${latestEvent.displayName}",\n "event_time": "${latestEvent.eventTime}",\n "event_type": "${latestEvent.eventType}",\n "health_rule_name":"${latestEvent.healthRule.name}",\n "node_name": "${latestEvent.node.name}",\n "severity": "${latestEvent.severity}"\n }\n}\n```\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/appdyn-3.png" />\n\n**Special Note (Optional Configuration)**\n\nConfiguration: `Custom Templating Variables`\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/appdyn-5.png" />\n\nIf you need to configure `Custom Templating Variables`, you can refer to the following JSON template. Here, custom_variables is a fixed format, and the variables within custom_variables are custom `Variables`. The names defined on the page should match the variable names referenced in the JSON template.\n\n```\n{\n "policy_name":"${policy.name}",\n "message": "${latestEvent.eventMessage}",\n "application_name": "${latestEvent.application.name}",\n "link": "${latestEvent.deepLink}",\n "incident_id": "${latestEvent.incident.id}",\n "details": {\n "event_id": "${latestEvent.id}",\n "event_name": "${latestEvent.displayName}",\n "event_time": "${latestEvent.eventTime}",\n "event_type": "${latestEvent.eventType}",\n "health_rule_name":"${latestEvent.healthRule.name}",\n "event_type_key": "${latestEvent.eventTypeKey}",\n "node_name": "${latestEvent.node.name}",\n "severity": "${latestEvent.severity}"\n },\n "custom_variables":{\n "host":"${host}"\n }\n}\n```\n\n7. In the `Response Handling Criteria` section, set the `Failure Criteria` status code to 400 and the `Success Criteria` status code to 201\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/appdyn-4.png" />\n\n8. Click `Save` to complete\n\n### Step 2: Create Action\n\n1. Select `Actions` in the left navigation bar, choose the application type you want to create for, and click `Create`\n2. In the `Create Action` popup, select `Make an HTTP Request` and click `OK`\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/appdyn-6.png" />\n\n3. In the `Create HTTP Action` popup, enter a Name, select **FlashDuty** created in `Step 1` as the `HTTP Request Template`, and click `SAVE`\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/appdyn-7.png" />\n\n### Step 3: Use the Action Created in Step 2 in Alert Policies\n\n1. Select `Policies` in the left navigation bar\n2. Create or edit existing policies (configure alert rules as needed, alert rule configuration is omitted here)\n3. In the `Actions` section of the policy configuration page, click add and select the Action created in `Step 2`\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/appdyn-8.png" />\n\n4. After completing other configurations, click `Save` to finish\n\n</div>\n\n## II. Status Mapping\n\n<div class="md-block">\n\n|AppDynamics|Flashduty|Status|\n|---|---|---|\n|ERROR|Critical|Critical|\n|WARN|Warning|Warning|\n|INFO|Info|Info|\n\n</div>\n';
669
+ const SolarWinds = '---\ntitle: "SolarWinds Alert Events"\ndescription: "Sync SolarWinds alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-08-20T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/solarwinds-integration-guide"\n---\n\nSync SolarWinds alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alert events to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a specific channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **SolarWinds** integration, click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert event payload.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **SolarWinds** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In SolarWinds\n---\n\n<div class="md-block">\n\n## I. SolarWinds Alert Push Configuration\n\n### Step 1: Configure FlashDuty Alert Channel\n\n**Prerequisites**\n1. SolarWinds has five types of alerts (Anomaly, Entity, Event, Log, Metric Group), each requiring a different alert channel, so five alert channels need to be created\n2. When creating Webhook channels, it\'s recommended to name them using the format: Type_FlashDuty, for example: Anomaly_FlashDuty\n3. When selecting **Select Custom Body Template Based On The Alert Types**, the system will generate a default **HTTP POST Body**. **Please do not modify the generated template content**\n\n**Getting Started**\n1. Log in to your SolarWinds console\n2. Find `Settings` in the left navigation bar, select `Notification Services` and click `Webhook` to enter the new alert channel page\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/sw-1.png" />\n\n3. Click `CREATE CONFIGURATION` to create the corresponding alert channel\n4. Select **POST** for `Method`, name it according to the prerequisites, e.g., Anomaly_FlashDuty\n5. Fill in the integration push URL in `Destination URL` (enter the integration name on the current page, save to generate the URL)\n6. Select **application/json** for `Content Type`\n7. Choose the type you need to create in `Select Custom Body Template Based On The Alert Types`, e.g., Anomaly Based Alert\n8. Leave `HTTP POST Body` unchanged, use the system-generated default\n9. Click `CREATE` to save after configuration\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/sw-2.png" />\n\n10. Repeat the above steps to create other types of Webhook channels as needed\n\n### Step 2: Use the Alert Channel Created in Step 1 in Alert Policies\n\n1. Find `Alerts` in the left navigation bar, select `Alert Settings`\n2. Create or edit existing policies (configure alert rules as needed, alert rule configuration is omitted here)\n3. In the `Actions` section of the policy configuration page, select **Webhook** for `Services`\n4. Select the Anomaly_FlashDuty channel created in Step 1 for `Configuration`\n5. Keep `Send an additional notification when the Alert is cleared` enabled\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/sw-4.png" />\n\n6. Click `Save` after completing other configurations\n\n</div>\n\n## II. Status Mapping\n\n<div class="md-block">\n\n|SolarWinds|Flashduty|Status|\n|---|---|---|\n|Critical|Critical|Critical|\n|Warning|Warning|Warning|\n|Info|Info|Info|\n\n</div>\n';
670
+ const VolcEngineMetric = '---\ntitle: "Volcengine Cloud Monitor Alert Events"\ndescription: "Sync Volcengine Cloud Monitor alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-08-20T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/volcengine-metric-integration-guide"\n---\n\nSync Volcengine Cloud Monitor alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alert events to different channels - it\'s simpler.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Select **Volcengine CM Metrics** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Volcengine CM Metrics** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Volcengine\n---\n\n<div class="md-block">\n\n## I. Volcengine Cloud Monitor Alert Push Configuration\n\n### Step 1: Create FlashDuty Alert Channel\n1. Log in to your Volcengine console, search for `Cloud Monitor` product, and enter the corresponding product console\n2. Select `Notification Groups=>Callback` from the left navigation bar\n3. Click `Create Callback URL`\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/volcengine/event-1.png" alt="drawing" width="500"/>\n\n4. Fill in the information on the edit page, enter `FlashDuty_Metric` as the callback URL name\n5. Select `General Callback URL` as the callback URL type\n6. Enter the **integration push URL** (enter the integration name on the current page, save to generate the URL)\n7. Click `Confirm` to complete the creation (connectivity testing is not supported; even if the test shows connectivity failure, it won\'t affect alert reception)\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/volcengine/event-2.png" alt="drawing" width="500"/>\n\n### Step 2: Configure Alert Policy\n\n1. Select `Alert Center=>Alert Policies` from the left navigation bar\n2. Create or edit existing alert policies (configure policies as needed, skipped here)\n3. On the policy edit page, select `Rules and Resources` for `Send Aggregation Policy`\n4. Keep `Alert Recovery Notification` enabled\n5. Check `Alert Callback` in `Alert Channels`, and select the `FlashDuty_Metric` channel created in **Step 1** from the dropdown menu\n6. After completing other configurations, click `Confirm` to finish\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/volcengine/event-3.png" alt="drawing" width="500"/>\n\n## II. Status Mapping\n\n<div class="md-block">\n \n|Volcengine Cloud Monitor|Flashduty|Status|\n|---|---|---|\n|Critical|Critical|Critical|\n|Warning|Warning|Warning|\n|Notice|Info|Info|\n\n</div>\n';
671
+ const VolcEngineEvent = '---\ntitle: "Volcengine Cloud Monitor Event Center Alert Events"\ndescription: "Sync Volcengine Cloud Monitor Event Center alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-07-05T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/volcengine-event-integration-guide"\n---\n\nSync Volcengine Cloud Monitor Event Center alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alert events to different channels - it\'s simpler.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integration** tab, click **Add Integration** to enter the integration page\n 3. Choose **Volcengine CM Event** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Volcengine CM Metrics** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Volcengine\n---\n\n<div class="md-block">\n\n## I. Volcengine Cloud Monitor Event Center Alert Push Configuration\n\n### Step 1: Create FlashDuty Alert Channel\n1. Log in to your Volcengine console, search for `Cloud Monitor` product, and enter the corresponding product console\n2. Select `Notification Groups=>Callback` from the left navigation bar\n3. Click `Create Callback URL`\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/volcengine/event-1.png" alt="drawing" width="500"/>\n\n4. Fill in the information on the edit page, enter `FlashDuty_Event` as the callback URL name\n5. Select `General Callback URL` as the callback URL type\n6. Enter the **integration push URL** (enter the integration name on the current page, save to generate the URL)\n7. Click `Confirm` to complete the creation (connectivity testing is not supported; even if the test shows connectivity failure, it won\'t affect alert reception)\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/volcengine/event-2.png" alt="drawing" width="500"/>\n\n### Step 2: Configure Event Rules\n\n1. Select `Event Center=>Event Rules` from the left navigation bar\n2. Create or edit existing event rules (configure rules as needed, skipped here)\n3. On the rule editing page, check `Alert Callback` under delivery channels, and select the `FlashDuty_Event` channel created in **Step 1** from the alert callback dropdown\n4. After completing other configurations, click `Confirm` to finish\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/volcengine/metric-3.png" alt="drawing" width="500"/>\n\n## II. Status Mapping\n\n<div class="md-block">\n \n|Volcengine Cloud Monitor|Flashduty|Status|\n|---|---|---|\n|Critical|Critical|Critical|\n|Warning|Warning|Warning|\n|Notice|Info|Info|\n\n</div>\n';
672
+ const VolcEngineTLS = '---\ntitle: "Volcengine Log Service (TLS) Alert Events"\ndescription: "Sync Volcengine Log Service (TLS) alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-07-05T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/volcengine-tls-integration-guide"\n---\n\nSync Volcengine Log Service (TLS) alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alert events to different channels - it\'s simpler.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **Volcengine TLS** integration and click **Save** to generate a card\n 4. Click the generated card to view the **Push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert event payload.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Volcengine TLS** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **Push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Volcengine\n---\n\n<div class="md-block">\n\n## I. Volcengine Log Service (TLS) Alert Push Configuration\n\n### Step 1: Create FlashDuty Alert Channel\n1. Log in to your Volcengine console, search for `TLS` Log Service product, and enter the corresponding product console\n2. Select `Alert=>Notification Management` from the left navigation bar\n3. Choose `Webhook Alert Integration` and click `Create Webhook Alert Integration`\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/volcengine/tls-1.png" alt="drawing" width="500"/>\n\n4. Fill in the information in the pop-up editor, enter `FlashDuty` as the name\n5. Select `Custom Webhook` as type and `POST` as request method\n6. Enter the **Integration Push URL** as the request URL (generated after saving the integration name on the current page)\n7. Keep the request headers as default and click `Create`\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/volcengine/tls-2.png" alt="drawing" width="500"/>\n\n### Step 2: Create Content Template\n\n1. Return to the `Notification Management` page\n2. Select `Content Templates` and click `Create Content Template`\n3. Fill in the relevant information, enter `FlashDuty` as the template name\n4. Other channel content can be empty. In the `Custom Webhook` notification content, enter the following template:\n\n```\n{\n "AccountID":"{{AccountID}}",\n "ProjectName":"{{ProjectName}}",\n "AlarmTopicName":"{{AlarmTopicName}}",\n "Region":"{{Region}}",\n "Alarm":"{{Alarm}}",\n "AlarmID":"{{AlarmID}}",\n "Duration":"{{Duration}}",\n "Condition":"{{Condition}}",\n "HappenThreshold":"{{HappenThreshold}}",\n "Topics":"{{Topics|join:\',\'}}", \n "NotifyTimeUnix":"{{NotifyTimeUnix}}",\n "NotifyType":"{{NotifyType}}",\n "Severity":"{{Severity}}",\n "ConsecutiveAlertNums":"{{ConsecutiveAlertNums}}",\n "TriggerParams":{{toJson(TriggerParams)|safe}}, \n "ExecuteQuery":{{toJson(ExecuteQuery)|safe}},\n "DetailUrl":"{{DetailUrl}}",\n "FireResultsCount":"{{FireResultsCount}}"\n}\n```\n5. Click `Confirm` to complete the content template creation\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/volcengine/tls-3.png" alt="drawing" width="500"/>\n\n### Step 3: Create Notification Group\n\n1. Return to the `Notification Management` page\n2. Select `Notification Groups` and click `Create Notification Group`\n3. Fill in the relevant information, enter `FlashDuty` as the group name\n4. Configure notification rules and other settings as needed (skipped here)\n5. In notification channel configuration, keep `Custom Webhook` checked\n6. Select the **FlashDuty** channel created in **Step 1** for `Webhook`\n7. Select the **FlashDuty** template created in **Step 2** for `Content Template`\n8. Click `Save` after completing other configurations\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/volcengine/tls-4.png" alt="drawing" width="500"/>\n\n### Step 4: Configure Alert Policy\n\n1. Select `Alert=>Alert Policies` from the left navigation bar\n2. Create a new or edit an existing alert policy\n3. Configure alert rules as needed (skipped here)\n4. Click `Associate Notification Group` in the `Notification Group` section\n5. In the pop-up selection box, choose the **FlashDuty** notification group created in **Step 3**, then click `Associate`\n6. Click `Create/Save` after configuring other settings\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/volcengine/tls-5.png" alt="drawing" width="500"/>\n\n## II. Status Mapping\n\n<div class="md-block">\n \n|TLS|Flashduty|Status|\n|---|---|---|\n|Critical|Critical|Critical|\n|Warning|Warning|Warning|\n|Info|Info|Info|\n\n</div>\n\n</div>\n';
673
+ const OpManager = '---\ntitle: "OpManager Alert Events"\ndescription: "Sync OpManager alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-07-05T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/opmanager-integration-guide"\n---\n\nSync OpManager alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this method when you don\'t need to route alerts to different channels - it\'s simpler.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a specific channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Select **OpManager** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **OpManager** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In OpManager\n---\n<div class="md-block">\n\n## I. OpManager Alert Push Configuration\n\n1. Log in to your `OpManager` console, select `Settings => Notification Profiles` from the navigation menu\n2. On the `Notifications` page, click `Add` and select `Invoke a Webhook` to add a configuration profile\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/opm-1.png" />\n\n3. Begin configuring specific content on the Webhook editing page\n4. In `Hook URL`, select `POST` as the request method and fill in the **integration push URL** as the `URL`\n5. Select `raw` for `Data Type` and `JSON` for `Payload Type`\n6. Fill in the following content for `Body Content`:\n\n```\n{\n "alarmid":"$alarmid",\n "message":"$message",\n "displayName":"$displayName",\n "category":"$category",\n "severity":"$stringseverity",\n "strModTime":"$strModTime",\n "eventType":"$eventType",\n "entity":"$entity",\n "lastPolledValue":"$lastPolledValue",\n "Intf_ifDescr":"$IntfField(ifDescr)",\n "Intf_displayName":"$IntfField(displayName)",\n "Intf_ifAlias":"$IntfField(ifAlias)",\n "Intf_ifName":"$IntfField(ifName)",\n "Intf_ipAddress":"$IntfField(ipAddress)",\n "Intf_physMedia":"$IntfField(physMedia)",\n "Intf_ifIndex(ifIndex)":"$IntfField(ifIndex)",\n "Intf_ifCircuitID(ifCircuitID)":"$IntfField(ifCircuitID)",\n "Intf_ifSpeedIn(ifSpeedIn)":"$IntfField(ifSpeedIn)",\n "Intf_ifSpeedOut(ifSpeedOut)":"$IntfField(ifSpeedOut)",\n "Intf_lineID":"$IntfCustomField(Circuit ID)",\n "Intf_note":"$IntfCustomField(Comments)",\n "Intf_contacts":"$IntfCustomField(Contact Name)",\n "Intf_SLA":"$IntfCustomField(SLA)",\n "Custom_BuildingNo":"$CustomField(Building)",\n "Custom_cabinet":"$CustomField(Cabinet)",\n "Custom_note":"$CustomField(Comments)",\n "Custom_contacts":"$CustomField(Contact Name)",\n "Custom_department":"$CustomField(Department)",\n "Custom_RoomNo":"$CustomField(Floor)",\n "Custom_serial":"$CustomField(SerialNumbe)",\n "Monitor_monitorName":"$MonitorField(monitorName)",\n "Monitor_instance":"$MonitorField(instance)",\n "Monitor_protocol":"$MonitorField(protocol)",\n "Device_type":"$DeviceField(type)",\n "Device_ipAddress":"$DeviceField(ipAddress)",\n "Device_isSNMP":"$DeviceField(isSNMP)",\n "Device_dependent":"$DeviceField(dependent)",\n "Device_hardDiskSize":"$DeviceField(hardDiskSize)",\n "Device_ramSize":"$DeviceField(ramSize)"\n}\n```\n**Special Note**: Custom fields are not currently supported. Even if referenced in the Body Content, they will not take effect.\n\n7. Keep the `Request Headers` as default\n8. Fill in any value between 1-300 for `Time Out` and click next\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/opm-2.png" />\n\n9. On the `Choose the criteria` configuration page, check `Notify when the alarm is cleared` and configure other options as needed\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/opm-3.png" />\n\n10. Select the devices you want to apply this configuration to, move them to the selected devices window using the right arrow, then click next\n11. Configure Time Window/Delayed Trigger/Recurring Trigger as needed, then click next\n12. Add the name `FlashDuty` for this configuration profile, then click `Save` to complete the setup\n\n</dev>\n\n## II. Status Mapping\n\n<div class="md-block">\n\n| OpManager | Flashduty | Status |\n| ---------- | -------------- | ------ |\n| Critical | Critical | Critical |\n| Service Down | Critical | Critical |\n| Trouble | Warning | Warning |\n| Attention | Info | Info |\n\n</div>\n';
674
+ const Meraki = '---\ntitle: "Meraki Alert Events"\ndescription: "Sync Meraki alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-07-05T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/meraki-integration-guide"\n---\n\nSync Meraki alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Private Integration\n\nChoose this simpler option when you don\'t need to route alert events to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Choose **Meraki** integration, click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n \n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert event payload.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Meraki** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Meraki\n---\n\n<div class="md-block">\n\n## I. Meraki Alert Push Configuration\n\n1. Log in to your `Meraki` console and select the device you want to configure alerts for\n2. On the `Alerts` page, configure `Cellular gateway` and other sections as needed\n3. Under `Webhooks`, configure `HTTPS receivers`\n4. Enter `FlashDuty` for `Name`, and enter the **integration push URL** for `URL`\n5. Leave `Shared secret` empty, and keep `Payload template` as the default `Meraki(included)`\n6. Click `Save` to save the settings\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/meraki-5.png" />\n\n\n## II. Status Mapping\n\n| Meraki | Flashduty | Status |\n| ---------- | -------- | ---- |\n| critical | Critical | Critical |\n| warning | Warning | Warning |\n| informational | Info | Info |\n\n</div>\n';
675
+ const StateCloud = '---\ntitle: "StateCloud Alert Events"\ndescription: "Sync StateCloud alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-07-05T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/statecloud-integration-guide"\n---\n\nSync StateCloud monitoring alert events to Flashduty via webhook for automated alert noise reduction.\n\nFor resource monitoring events from StateCloud [secondary nodes](#secondary-nodes), please use Huawei Cloud integration. Refer to [Huawei Cloud Alert Integration Guide](https://docs.flashcat.cloud/en/flashduty/huawei-ces-integration-guide?nav=01JCQ7A4N4WRWNXW8EWEHXCMF5).\n\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Dedicated Integration\n\nChoose this simpler option when you don\'t need to route alert events to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integration** tab, click **Add Integration** to enter the integration page\n 3. Select **StateCloud** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n\n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **StateCloud** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In StateCloud\n---\n\n<div class="md-block">\n\n## I. StateCloud Alert Push Configuration\n\n1. Log in to your `StateCloud` console, search for the `Cloud Eye` product, and enter its console\n2. In `Alarm Service`, select `Alarm Contact/Group` and create corresponding alert contact/group\n3. In `Alarm Rules`, choose to create or modify Alarm rule\n4. In the alarm rule editing page, fill in the integration <span class=\'integration_url\'>push URL</span> under `Alert Callback` and click test\n5. After successful testing, click `Save`\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/state-1.png" />\n\n</dev>\n\n## II. Status Mapping\n\n<div class="md-block">\n\n| StateCloud | Flashduty | Status |\n| ---------- | --------- | ------ |\n| Urgent | Critical | critical |\n| Warning | Warning | warning |\n| Normal | Info | info |\n\n## III. StateCloud Secondary Node List<span id="secondary-nodes"></span>\n\n| Region | Cities |\n| ---------- | -------- | \n| East China | Hangzhou/Nanchang/Shanghai4/Suzhou/Wuhu | \n| South China | Changsha2/Fuzhou1/Guangzhou4/Haikou/Nanning/Wuhan2 | \n| Northwest | Lanzhou/Urumqi/Xi\'an2/Xining/Zhongwei | \n| Southwest | Chengdu3/Chongqing/Guizhou1/Kunming |\n| North | Beijing2/Changchun/Harbin/North China/Inner Mongolia3/Qingdao/Shenyang3/Shijiazhuang/Taiyuan/Tianjin/Zhengzhou |\n\n</div>\n';
676
+ const Guance = '---\ntitle: "Guance Alert Events"\ndescription: "Sync Guance alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-07-05T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/guance-integration-guide"\n---\n\nSync Guance monitoring alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Dedicated Integration\n\nChoose this simpler option when you don\'t need to route alert events to different channels.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a specific channel\'s details page\n 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page\n 3. Select **Guance** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n\n</details>\n\n### Using Shared Integration\n\nChoose this option when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Guance** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Guance\n---\n\n<div class="md-block">\n\n## I. Alert Push Configuration\n\n### Step 1: Create Notification Object\n1. Log in to your `Guance` console, select `Notification Targets` under `Monitoring`\n2. Click `Create` and select `Webhook`\n3. Fill in the name as `Flashduty` and enter the alert integration\'s <span class=\'integration_url\'>push URL</span> in the `Webhook URL` field\n4. Configure other options as needed and click `Confirm` to complete\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/guance-1.png" />\n\n### Step 2: Create Alert Strategies\n\n1. Log in to your `Guance` console, select `Alert Strategies` under `Monitoring`\n2. Create new or modify existing alert policies on the `Alert Strategies` page\n3. In the notification configuration section of the alert strategies editing page, select `severity` and choose `FlashDuty` created in Step 1 as the `Notification Tragets`\n4. Configure other options as needed and click `Save` to complete\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/guance-2.png" />\n\n</dev>\n\n## II. Status Mapping\n\n<div class="md-block">\n\n| Guance | Flashduty | Status |\n| ---------- | -------- | ---- |\n| Critical | Critical | Critical |\n| Error | Warning | Warning |\n| Warning | Warning | Warning |\n| Info | Info | Info |\n| Data Missing | Info | Info |\n\n</div>\n';
677
+ const Zilliz = '---\ntitle: "Zilliz Alert Events"\ndescription: "Sync Zilliz alert events to Flashduty via webhook for automated alert noise reduction"\ndate: "2024-07-05T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/zilliz-integration-guide"\n---\n\nSync Zilliz alert events to Flashduty via webhook for automated alert noise reduction.\n\n<div class="hide">\n\n## In Flashduty\n---\nYou can obtain an integration push URL through either of these two methods:\n\n### Using Dedicated Integration\n\nChoose this method when you don\'t need to route alert events to different channels. It\'s simpler and recommended.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Channel**, and enter a channel\'s details page\n 2. Select the **Integration** tab, click **Add Integration** to enter the integration page\n 3. Choose **Zilliz** integration and click **Save** to generate a card\n 4. Click the generated card to view the **push URL**, copy it for later use, and you\'re done\n\n</details>\n\n### Using Shared Integration\n\nChoose this method when you need to route alerts to different channels based on the alert event\'s payload information.\n\n<details>\n <summary>Expand</summary>\n \n 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page\n 2. Select **Zilliz** integration:\n - **Integration Name**: Define a name for this integration\n 3. Click **Save** and copy the newly generated **push URL** for later use\n 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\n 5. Done\n \n</details>\n</div>\n\n## In Zilliz\n---\n\n<div class="md-block">\n\n## I. Alert Push Configuration\n\n1. Log in to your `Zilliz` console, create or modify an `Alert` in `Project Alerts`\n2. In the `Send to` section of the `Alert` editing page, select `Webhook` and fill in the <span class=\'integration_url\'>push URL</span> from your alert integration\n3. Check `Alert Resolution Notification`, select other options as needed\n4. Click `Save` or `Create` to complete the configuration\n\n<img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/zh/fd/zilliz-1.png" />\n\n</dev>\n\n## II. Status Mapping\n\n<div class="md-block">\n\n| Zilliz | Flashduty | Status |\n| --------- | --------- | -------- |\n| CRITICAL | Critical | Critical |\n| WARNING | Warning | Warning |\n\n</div>\n\n';
678
+ const CustomChange = `---
679
+ title: "Custom Change Event Integration Guide"
680
+ 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."
681
+ date: "2024-05-11T10:00:00+08:00"
682
+ url: "https://docs.flashcat.cloud/en/flashduty/custom-change-integration-guide"
683
+ ---
684
+
685
+ 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.
686
+
687
+ :::tips
688
+ Flashduty has already adapted webhook protocols for several commonly used ticketing and deployment systems. For these systems, you should first use their corresponding integrations for simplicity. This integration provides a standard HTTP interface that requires development adaptation. The advantage is that you can integrate with any deployment system.
689
+ :::
690
+
691
+ ## Steps
692
+ ---
693
+
694
+ ### In Flashduty
695
+
696
+ 1. Go to the Flashduty console, select **Integration Center=>Change Events** to enter the integration selection page.
697
+ 2. Select **Custom Events** integration:
698
+ - **Integration Name**: Define a name for the current integration.
699
+ 3. Click **Save** and copy the newly generated **push URL** for later use.
700
+ 4. Done.
701
+
702
+
703
+ ## Implementation Protocol
704
+ ---
705
+
706
+ Please refer to the [Developer Documentation](https://developer.flashcat.cloud/en/flashduty/event-api/change-event) to complete the protocol development.
707
+
708
+ ## Best Practices
709
+ ---
710
+
711
+ Labels are descriptions of events. You should enrich label content as much as possible, such as:
712
+ 1. The scope of changes, like host, cluster, etc.
713
+ 1. Change ownership information, such as team, owner, etc.
714
+
715
+ ## FAQ
716
+ ---
717
+
718
+ <details>
719
+ <summary>Why haven't I received changes in Flashduty?</summary>
720
+
721
+ #### In Flashduty
722
+
723
+ 1. Check if the integration shows **Latest Event Time**? If not, it means Flashduty hasn't received any pushes, prioritize checking your system first.
724
+
725
+ #### In Your System
726
+
727
+ 1. Confirm that your request URL exactly matches the URL in the integration details.
728
+ 2. Verify that your service can access the internet domain api.flashcat.cloud. If not, you need to enable internet access for your server or specifically allow access to Flashduty's domain.
729
+ 3. Print the response from Flashduty service to check for any specific messages.
730
+
731
+ If you still can't identify the root cause after following these steps, please contact us with the **request_id** from the request response.
732
+
733
+ </details>
734
+
735
+ `;
736
+ const Jira = '---\ntitle: "Jira Issue Events"\ndescription: "Sync Jira Issue events to Flashduty via webhooks to collect change events."\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/jira-integration-guide"\n---\n\nSynchronize Jira Issue events to Flashduty via webhooks to collect change events.\n\n## Limitations\n---\n\n### In Jira\n\n- You must have permission to modify **Settings=>System=>Webhooks**.\n- (For self-hosted deployments) Your Jira server must be able to access the domain api.flashcat.cloud.\n\n## Supported Versions\n---\n\nThis guide is compatible with both **Jira Cloud and Self-hosted** versions.\n\n## Setup Steps\n---\n\n### In Flashduty\n\n 1. Go to the Flashduty console, select **Integration Center=>Change Events** to enter the integration selection page.\n 2. Select **Jira** integration:\n - **Integration Name**: Define a name for this integration.\n 3. Click **Save** and copy the newly generated **push URL** for later use.\n 4. Done.\n\n### In Jira\n\n<div class="md-block">\n\n1. Log in to your Jira\n2. Go to **Settings=>System=>Webhooks** page, click the Create button\n3. Enter the callback URL as the push URL from your integration, and check Issue Created/Updated/Deleted event types\n4. Optionally, enter JQL to further narrow down the scope of events to sync (such as specific Projects)\n5. Click the Save button to submit the configuration\n\n<img alt="drawing" src="http://download.flashcat.cloud/jira-webhook.png" />\n\n5. Done\n\n</div>\n\n## Status Mapping\n---\n\n<div class="md-block">\n \nFlashduty extracts the status.name information from the webhook payload by default and converts the status according to the following mapping:\n\n| Jira | Flashduty | Status |\n| ----------- | ---------- | ------------------- |\n| planned | planned | Created |\n| to do | planned | Created |\n| ready | ready | About to Start |\n| processing | processing | In Progress |\n| open | processing | In Progress |\n| reopen | processing | In Progress |\n| in progress | processing | In Progress |\n| canceled | canceled | Canceled/Rolled Back|\n| aborted | canceled | Canceled/Rolled Back|\n| done | done | Completed |\n| resolved | done | Completed |\n| closed | done | Completed |\n\nPlease contact Flashduty if you wish to modify this mapping.\n\n</div>\n';
737
+ const Lark = '---\ntitle: Contributing to our documentation — Meilisearch documentation\ndescription: The Meilisearch documentation is open-source. Learn how to help make it even better.\nsidebarDepth: 3\n---\n\nIntegrate with Feishu(Lark) custom application to receive and respond to alerts within Feishu/Lark.\n\n<!--\n## Video Tutorial\n---\n<Video src="https://download.flashcat.cloud/flashduty/video/feishu.mp4"></Video>\n-->\n\n## I. Create Feishu/Lark Application\n---\n\n### 1. Create Custom Application\n\nVisit [Feishu/Lark Developer Console](https://open.feishu.cn/app) to create an internal custom application. (For details, see Feishu/Lark development documentation - [Create Enterprise Custom Application](https://open.feishu.cn/document/uYjL24iN/uMTMuMTMuMTM/development-guide/step1#132c1aac))\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-1.png" alt="drawing" width="400"/>\n\nYou can use the [Flashduty official icon](https://download.flashcat.cloud/flashcat_logo_circular.png) as the application icon.\n\n### 2. Copy Credentials\n\nGo to the **Credentials & Basic Info** page, copy the `App ID` and `App Secret` for later use.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-2.png" alt="drawing" width="800"/>\n\n### 3. Copy Event Callback Token Information\n\nGo to **Development Configuration - Events & Callbacks - Encryption Configuration** page, copy the `Encrypt Key` (recommended for better security) and `Verification Token` for later use.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-2.png" alt="drawing" width="800"/>\n\n## II. Add Feishu/Lark Integration\n---\n\nReturn to Flashduty **Integration Center** page, select **Instant Messaging => Feishu/Lark**, fill in the `Name` and the previously copied `App ID`, `App Secret`, `Verification Token`, and `Encrypt Key`, then click save to create.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-4.png" alt="drawing" width="800"/>\n\nAfter creation, you\'ll see the newly added Feishu/Lark integration in the list. Click on the name to enter details, where you\'ll find the **Web Configuration** URL, **Redirect URL**, and **Message Card Request URL** information, which will be used in later steps.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-5.png" alt="drawing" width="800"/>\n\n## III. Configure Feishu/Lark Application\n---\n\n### 1. Enable and Configure Application Capabilities\n\n1). Return to the Feishu/Lark Developer Console, enter the newly created application, go to **Add Capabilities - Add by Capability** page, and enable both **Web Application** and **Bot** capabilities.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-6.png" alt="drawing" width="800"/>\n\n2). Go to **Web Application** page, configure both `Desktop Homepage` and `Mobile Homepage` with the **Web Configuration** URL from the integration details.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-7.png" alt="drawing" width="800"/>\n\n(See Feishu/Lark development documentation - [Configure Application Homepage URL](https://open.feishu.cn/document/uYjL24iN/uMTMuMTMuMTM/development-guide/step1#8366b844))\n\n3). Go to **Event Callbacks - Callback Configuration** page, configure the `Message Card Request URL` (using the **Message Card Request URL** from integration details) and add the callback.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-8.png" alt="drawing" width="800"/>\n<img src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-9.png" alt="drawing" width="800"/>\n\n### 2. Add Redirect URL to Feishu/Lark Application\n\nGo to **Security Settings** page, configure the `Redirect URL` using the **Redirect URL** from integration details.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-10.png" alt="drawing" width="800"/>\n\n(See Feishu/Lark development documentation - [Configure Redirect URL](https://open.feishu.cn/document/uYjL24iN/uYjN3QjL2YzN04iN2cDN?lang=zh-CN#c863e533))\n\n### 3. Request Application Permissions\n\nGo to **Permission Management** page, request `im:chat` and `im:message` permissions. These permissions will allow the application to access its group chat information and send messages to groups or individuals.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-11.png" alt="drawing" width="800"/>\n\n## IV. Application Publication and Usage\n---\n\nAfter completing the above steps, proceed with application publication and usage. The application can be used after administrator approval.\nNote: **Available Range** needs special configuration, recommended for **All Employees**.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-12.png" alt="drawing" width="800"/>\n\nSee Feishu/Lark development documentation - [Application Publication and Usage](https://open.feishu.cn/document/uYjL24iN/uMTMuMTMuMTM/development-guide/step-4).\n\nOnce published, you can access the application via mobile/PC client. First-time access requires login and account association (Feishu/Lark 《-》 Flashduty), subsequent uses will be login-free.\n\n1. Mobile: Access the web application through Feishu/Lark > Workspace > Search application name > Open application.\n2. PC: Access the web application through Feishu/Lark > Workspace > Search application name > Open application.\n\n## V. Common Issues\n---\n\n1. **Unable to deliver messages to individuals**, operation record shows `Application Not Associated`?\n\n - Go to Feishu/Lark > Workspace > Search application name > Open application, complete one login and account association (Feishu/Lark 《-》 Flashduty) for the system to obtain user identity for message pushing\n\n2. **Message card buttons not working or showing errors**?\n\n - Ensure account association is completed. Go to Feishu/Lark > Workspace > Search application name > Open application, complete one login and account association (Feishu/Lark 《-》 Flashduty). If already logged in, try clicking the top-right menu to switch accounts and re-login to bind the account\n - Ensure sufficient licenses are purchased. You can check license usage in Console > Billing Center\n\n3. **Empty Feishu/Lark group chat list in escalation rule**?\n\n - Go to Feishu/Lark, select group chat conversation, add the created Flashduty bot as shown below:\n - Return to the escalation rule configuration page, refresh and reselect the group chat list\n\n<img alt="drawing" width="800" src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-13.png" />\n<img src="https://download.flashcat.cloud/flashduty/doc/en/feishu/feishu-14.png" alt="drawing" width="800"/> \n\n4. **Feishu/Lark Custom Application API Limits:** [Feishu/Lark Documentation](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/platform-updates-/custom-app-api-call-limit)\n\n **Call Volume Limits:**\n\n | Feishu/Lark Version | Total Calls/Month | Reset Time | \n | :----------: | :--: | :----: |\n |Basic Free Version|10,000 calls|1st of each month|\n |Other Versions|Unlimited|-| \n\n **Frequency Control Limits:**\n\n | Scenario | Limit | \n | :----------: | :--: | \n |All APIs|Maximum 50 calls/second per application|\n |Message Sending API|Maximum 1000 calls/minute per application|\n |Group Bot Webhook|Maximum 100 calls/minute|\n |Sending messages to the same user or group|Maximum 5 calls/second|\n\n **Note:** Messages cannot be pushed normally when exceeding limits, please use notification channels reasonably';
738
+ const Dingtalk = '---\ntitle: "Dingtalk Integration"\ndescription: "Integrate with Dingtalk custom application to receive and respond to alerts within Dingtalk"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/dingtalk-integration-guide"\n---\n\nIntegrate with Dingtalk custom application to receive and respond to alerts within Dingtalk.\n\n**(This guide uses the new version of Dingtalk Open Platform as an example)**\n<!--\n## Video Tutorial\n---\n<Video src="https://download.flashcat.cloud/flashduty/video/dingding.mp4"></Video>\n-->\n## I. Create Dingtalk Application\n---\n\n### 1. Create Custom Application\n\nVisit [Dingtalk Developer Console](https://open-dev.dingtalk.com/fe/app) - Application Development - Internal Enterprise Development to create an application. (See Dingtalk development documentation - [Create Internal Enterprise Application - H5 Microapp](https://open.dingtalk.com/document/orgapp/microapplication-creation-and-release-process#title-ovn-666-1ty))\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-1.png" alt="drawing" width="400"/>\n\nYou can use the [Flashduty official icon](https://download.flashcat.cloud/flashcat_logo_circular.png) as the application icon.\n\n### 2. Copy Enterprise CorpId\n\nClick on the enterprise in the upper right corner of the page, copy the `CorpId` from the dropdown menu for later use.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-2.png" alt="drawing" width="500"/>\n\n### 3. Copy Application Credentials\n\nGo to the **Credentials and Basic Information** page, copy `AgentID`, `ClientID`, and `ClientSecret` for later use.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-3.png" alt="drawing" width="500"/>\n\n### 4. Copy Event Subscription Information\n\nGo to **Development Configuration - Events and Callbacks** page.\n\nGenerate `Encryption aes_key` and `Signature Token` for later use.\n\n**(Note: After generating aes_key and Token, please temporarily save the information elsewhere, as it will disappear after leaving the page)**\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-4.png" alt="drawing" width="500"/>\n\n## II. Add Dingtalk Integration\n---\n\nReturn to Flashduty **Integration Center** page, select Instant Messaging > Dingtalk, fill in the `Integration Name` and application information copied in the previous step, then click save to create.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-5.png" alt="drawing" width="400"/>\n\nAfter saving, you will see information such as **Web Configuration** address, **Server Outbound IP** address, and **Event Subscription Request URL**, which will be used in later steps.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-6.png" alt="drawing" width="400"/>\n\n## III. Configure Dingtalk Application\n---\n\n### 1. Add Cool App, Web App, and Bot\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-7.png" alt="drawing" width="500"/>\n\n1) Create Cool App: On the **Cool Apps - Cool App List** page, click **Create Cool App** button, select **Extend to Group Chat**\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-8.png" alt="drawing" width="500"/>\n\n2) Enter the **Edit Cool App** page, complete the following steps:\n\n2.1) First step, fill in basic information, you can use the [Flashduty official icon](https://download.flashcat.cloud/flashcat_logo_circular.png) as the icon.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-9.png" alt="drawing" width="500"/>\n\n2.2) Second step, configure functionality design, select **Group Quick Access** and **Message Card** on the left. For the group quick access icon, you can use the [Flashduty official icon](https://download.flashcat.cloud/flashcat_logo_circular.png). Copy the **Cool App Web URL** from the integration details for both desktop and mobile access URLs.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-10.png" alt="drawing" width="500"/>\n\n2.3) Skip the third step of function development, proceed to the fourth step **Preview and Release**, click the **Release** button and confirm.\n\n### 2. Configure Bot and Message Push\n\nEnter the **Application Capabilities - Bot** page, enable bot configuration, fill in the name and upload an icon. You can use the [Flashduty official icon](https://download.flashcat.cloud/flashcat_logo_circular.png), then save.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-11.png" alt="drawing" width="500"/>\n\n### 3. Configure Application URLs\n\nEnter the **Application Capabilities - Web Application** page\n\n1) Configure **Application Homepage URL** and **PC Homepage URL** with the content from the integration details\' **Application Homepage URL** and **PC Homepage URL**.\n\n2) Click **Save** in the upper right corner.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-12.png" alt="drawing" width="500"/>\n\n### 4. Configure Event Subscription\n\n1) On the **Development Configuration - Event Subscription** page, configure the **Request URL** with the content from the integration details\' **Event Subscription Request URL**, then **Save**.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-13.png" alt="drawing" width="500"/>\n\n2) Below the **Save** button, select three group chat events: `Group Chat Name Change`, `Cool App Installation in Group`, and `Cool App Uninstallation in Group`, then **Save**.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-14.png" alt="drawing" width="500"/>\n\n### 5. Apply for Application Permissions\n\nEnter the Permission Management page, apply for `qyapi_chat_manage` and `qyapi_robot_sendmsg` permissions. These two permissions will allow the current application to obtain its own group chat information and send messages to groups or individuals.\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-15.png" alt="drawing" width="500"/>\n\n## IV. Application Release and Usage\n---\n\nAfter completing the above steps, go to **Application Release - Version Management and Release**, create a new version, then proceed with the release (make sure to adjust the visibility to all employees, otherwise others cannot use it)\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-16.png" alt="drawing" width="500"/>\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-17.png" alt="drawing" width="500"/>\n\nAfter the application is released, you can access it via mobile/PC client. First-time access requires login and account association (Dingtalk 《-》 Flashduty), subsequent uses will be login-free.\n\n1. Mobile: Access the web application through Dingtalk > Workspace > Search application name > Open application.\n2. PC: Access the web application through Dingtalk > Workspace > Search application name > Open application.\n\n## V. Common Issues\n---\n1. **Cannot deliver messages to individuals**, operation record shows `Application Not Associated`?\n\n - Go to Dingtalk > Workspace > Search application name > Open application, complete one login and account association (Dingtalk 《-》 Flashduty), so the system can obtain user identity for message pushing\n\n2. **Message card buttons are ineffective or show errors?**\n\n - Go to Dingtalk > Workspace > Search application name > Open application, complete one login and account association (Dingtalk 《-》 Flashduty). If already logged in, try clicking the menu in the upper right corner, switch accounts, and log in again to bind the account\n - Ensure you have purchased sufficient licenses. You can check license usage in Console > Billing Center\n\n3. **Escalation rule Dingtalk group chat list is empty?**\n\n - Go to Dingtalk, select group chat and install the Cool App, otherwise the group chat list cannot be obtained\n - Return to the escalation rule configuration page, refresh and reselect the group chat list\n - If still unable to get the group chat list, try uninstalling the Cool App from the group and repeat the above steps. If it still doesn\'t work, please contact customer or dedicated technical support\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-18.png" alt="drawing" width="500"/>\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/ding/ding-19.png" alt="drawing" width="500"/>\n\n4. **Dingtalk Custom Application API Call Limits:** [Dingtalk Documentation](https://open.dingtalk.com/document/orgapp/descriptions-about-adjusting-limit-and-frequency-of-api-calls?spm=ding_open_doc.document.0.0.6f6b21d9WtkxJI)\n\n| Dingtalk Version | Total Calls/Month | QPS| Refresh Time | \n| :----------: | :--: | :----: | :----:|\n|Standard|10,000|20|1st of each month|\n|Professional|500,000|40|1st of each month|\n|Enterprise|5,500,000|60|1st of each month|\n\n**Note:** Messages cannot be pushed normally after exceeding limits, please use notification channels reasonably\n';
739
+ const Wecom = '---\ntitle: "WeCom Integration"\ndescription: "Integrate WeCom third-party application to receive and respond to alerts within WeCom"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/wecom-integration-guide"\n---\n\nIntegrate WeCom third-party application to receive and respond to alerts within WeCom.\n\n<!-- >\n## Video Guide\n---\n<Video src="https://download.flashcat.cloud/flashduty/video/wechat.mp4"></Video>\n-->\n\n## I. Install the Application\n---\n\n1. Visit [WeCom Admin Console](https://work.weixin.qq.com/wework_admin/frame#apps) - `App Management` - `Third-party`, and select Add Third-party App\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/wecom/wecom-1.png" alt="drawing" width="500"/>\n\n2. Search for `flashduty` in the search bar, locate the app, and click the `Add` button\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/wecom/wecom-2.png" alt="drawing" width="500"/>\n\n3. Modify the app\'s `Visibility`, recommend setting it to all members or specific departments to avoid modifying settings when adding new members. Click `Agree and Add` to complete installation\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/wecom/wecom-3.png" alt="drawing" width="500"/>\n\n4. Visit [WeCom Admin Console](https://work.weixin.qq.com/wework_admin/frame#apps) - `My Enterprise` page, copy the `Corp ID` and paste it into the integration configuration as `Corp ID`, click save to complete the setup\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/wecom/wecom-4.png" alt="drawing" width="500"/>\n\n5. **Please Note: As a WeCom service provider, Flashduty offers a long-term free version of the `FlashDuty` application. The app requires WeCom API access license for functionality (passwordless login + messaging). This license is free for up to `60 days`, after which we must purchase a WeCom license for continued use.**\n\n## II. FAQ\n---\n\n1. **Clicking the integration save button returns `authorize app first` error?**\n\n - Check if you\'ve completed the app installation steps, such as whether you can see the `FlashDuty` app in your workspace\n - Verify if you\'ve correctly configured the `Corp ID`\n\n2. **How to complete account linking? Or message sending shows `App Not Linked`?**\n\n - Log into WeCom client (desktop or mobile), go to `Workspace`, find and enter the `FlashDuty` app\n - First-time access requires login, choose member account - password or SSO, successful login completes account linking between `Flashduty` and `WeCom`\n - Subsequent access will be passwordless\n\n3. **How to send incident notifications?**\n\n - Must complete account linking as per Question 1 before sending notifications\n - Go to channel details page - escalation rule, select WeCom integration in personal channels to complete notification setup\n - Supports customizing WeCom notification content through template management page. Note: **Custom area supports maximum 8 lines**, excess content will be truncated by WeCom\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/wecom/wecom-5.png" alt="drawing" width="500"/>\n\n4. **How to handle alerts in WeCom?**\n\n - Click the card message to directly access alert details\n - Click `Start Processing` to set alert status to `In Progress`\n - Click `Close Directly` to set alert status to `Closed`\n - Click `Snooze 2h` to snooze the alert for 2 hours, click `...` in top-right corner for more snooze options\n\n5. **Why is there a `Refresh Status` button on card messages?**\n\n - WeCom limits card updates to once per 72 hours after interaction. Each button operation counts as an interaction\n - Flashduty requests card content updates when alert status changes\n - When alert status changes frequently, updates might fail due to update limit, use refresh button for one additional update opportunity\n\n6. **How to open card messages in `System Default Browser` on Mac desktop?**\n\n - Mac desktop client defaults to internal browser for links\n - Try keyboard shortcut `ctrl` + `command` + `shift` + `d` to enable debug mode, then select `Debug - Browser & WebView Related - Open in System Browser` to change link opening behavior. Use the same shortcut to exit debug mode and retain settings\n\n7. **Incident notification fails with `WeCom License Not Activated`?**\n\n - Contact Flashduty customer service or dedicated support for license purchase and activation\n';
740
+ const Slack = '---\ntitle: "Slack Integration"\ndescription: "Integrate with Slack to receive and respond to alerts within Slack"\ndate: "2024-05-11T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/slack-integration-guide"\n---\n\nIntegrate with Slack to receive and respond to alerts within Slack.\n\n## I. Install the App\n---\n\n1. Go to FlashDuty `Integration Center` - `Instant Messaging` - `Slack` - `Add`\n\n2. You will be redirected to Slack. Select your `Workspace` in the top right corner, then click `Allow`\n\n<img src="https://download.flashcat.cloud/flashduty/integration/slack/slack_app_options.png" alt="drawing" width="400"/>\n\n3. Enter the integration name and click `Save`\n\n\n## II. Common Issues\n---\n\n1. **Cannot find desired private channel in escalation rule channel list**\n - Adding the app to a channel requires Step 1 `Install App` to complete without errors\n - In the Slack channel, run `/invite @FlashDuty`. A message saying `has joined` or `has been added by xx to xxx` indicates successful addition\n\n2. **Cannot find desired public channel in escalation rule channel list**\n - Add the app authorizer to the public channel\n - Or follow `Common Issue 1` to add the app to the channel\n\n3. **Error when clicking Allow button in Step 2 of installation**\n - Try again, as there might be communication issues between the server and Slack causing authorization problems. Return to the add integration page and retry\n - If the error persists, contact customer support\n\n4. **Error when clicking Save button in Step 3 of installation**\n - Try again, as there might be communication issues when FlashDuty attempts to obtain the permanent authorization code. Return to the add integration page and retry\n - If the error persists, contact customer support\n\n5. **Slack App shows not_authed error**\n - Try again, as there might be issues with Slack service\n - If the error persists, contact customer support\n\n6. **Slack App shows Operation timed out error**\n - Try again, as there might be communication timeout issues between the server and Slack\n - If the error persists, contact customer support\n\n7. **Slack App shows This app responded with Status Code 500 error**\n - Try again, as there might be server errors, such as the integration being disabled\n - If the error persists, contact customer support\n\n8. **Slack App shows Other questions error**\n - Try again, as this might be an unrecorded issue\n - If the error persists, contact customer support';
741
+ const MicrosoftTeams = `---
742
+ title: "Microsoft Teams Integration"
743
+ description: "Integrate Microsoft Teams as a third-party application to receive and respond to alerts within Microsoft Teams"
744
+ date: "2024-05-11T10:00:00+08:00"
745
+ url: "https://docs.flashcat.cloud/en/flashduty/microsoft-teams-integration-guide"
746
+ ---
747
+
748
+ Integrate Microsoft Teams as a third-party application to receive and respond to alerts within Microsoft Teams.
749
+
750
+ ## I. Install the Application
751
+ ---
752
+
753
+ Microsoft Teams integration is currently in Beta. Before connecting, you need to complete the following steps:
754
+
755
+ ::: caution
756
+ These steps must be completed by a Microsoft Teams administrator
757
+ :::
758
+
759
+ ### 1. Download the Application Package
760
+ Download [FlashDutyBot.zip](https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/integration/microsoft-teams/FlashDutyBot.zip) to your local machine
761
+
762
+ ### 2. Upload the Application Package
763
+ Go to **Microsoft Teams, navigate to [+Apps] - [Manage your apps] - [Upload an app] - [Upload an app to your org's app catalog]** and upload the FlashDutyBot.zip package
764
+
765
+ ![](https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/integration/microsoft-teams/upload-app.png)
766
+
767
+ ### 3. Configure Application Visibility
768
+ Go to Microsoft Teams Admin Center, locate the FlashDuty app, and set the app visibility to everyone (or your custom scope)
769
+
770
+ ::: tip
771
+ If the app status shows [Blocked], please wait a moment and refresh the page or modify it manually
772
+ :::
773
+ ![](https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/integration/microsoft-teams/manage-app.png)
774
+
775
+ ### 4. Verify Installation
776
+ Wait a few minutes, and organization members should be able to find the app under [+Apps] - [Built for your org]
777
+
778
+ ![](https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/integration/microsoft-teams/find-app.png)
779
+
780
+ ## II. Associate Teams
781
+
782
+ ### 1. Add FlashDuty App to Target Team
783
+
784
+ #### 1.1 Find the FlashDuty App
785
+ If the app is not available, please contact your Microsoft Teams organization administrator
786
+ ![](https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/integration/microsoft-teams/find-app.png)
787
+
788
+ #### 1.2 Add to Target Team
789
+ ::: caution
790
+ Note: You must select the General Channel of the target Team, otherwise incidents cannot be sent to the Team
791
+ :::
792
+
793
+ ![](https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/integration/microsoft-teams/link-team-1.png)
794
+
795
+ ### 2. Send Association Command
796
+ @FlashDuty and send linkTeam {ID} to the added Team, then click Associate Now
797
+
798
+ ![](https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/integration/microsoft-teams/link-team-3.png)
799
+
800
+ ## III. Associate Users
801
+
802
+ ### 1. Add FlashDuty App
803
+
804
+ #### 1.1 Find the FlashDuty App
805
+ If the app is not available, please contact your Microsoft Teams organization administrator
806
+ ![](https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/integration/microsoft-teams/find-app.png)
807
+
808
+ #### 1.2 Click Add Button
809
+ ::: caution
810
+ Note: You must select the General Channel of the target Team, otherwise incidents cannot be sent to the Team
811
+ :::
812
+
813
+ ![](https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/integration/microsoft-teams/link-user-1.png)
814
+
815
+ ### 2. Send Association Command
816
+ Copy the command: linkUser {} and send it to the chat, then click Associate Now
817
+
818
+ ![](https://fcpub-1301667576.cos.ap-nanjing.myqcloud.com/flashduty/integration/microsoft-teams/link-user-2.png)
819
+
820
+ ## Common Issues
821
+ <details>
822
+ <summary>Team or individual not receiving messages</summary>
823
+ Please check if the team and users are successfully associated in Integration Center => Instant Messaging => Microsoft Teams
824
+ </details>
825
+
826
+ <details>
827
+ <summary>How to view associated teams and users</summary>
828
+ Please check in Integration Center => Instant Messaging => Microsoft Teams under Associated Teams and Associated Users
829
+ </details>
830
+
831
+ <details>
832
+ <summary>How to remove team and user associations</summary>
833
+ Currently not supported
834
+ </details>
835
+
836
+ `;
837
+ const AlertWebhook = '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.\n\n<span id="EventTypes"></span>\n\n## I. Event Types\n\nThe following event types are currently supported, with more potentially being added in the future.\n\n<div class="md-block">\n\n| Event Type | Description |\n| :--------: | :---------- |\n| a_new | Integration pushes new event, triggering a new alert |\n| a_update | Integration pushes new event, merging into an existing alert and updating its information (severity, status, labels, description, etc.) |\n| a_merge | Merge alert into incident |\n| a_close | Manually close alert |\n\n</div>\n\n## II. Push Description\n\n### Request Method\n\n<div class="md-block">\n\nPOST, Content-Type:"application/json"\n\n</div>\n\n### Request Payload:\n\n<div class="md-block">\n\n| Field | Type | Required | Description |\n| :---: | :---: | :---: | :--- |\n| event_time | int64 | Yes | Event occurrence time in `millisecond timestamp` |\n| event_type | string | Yes | Event type, see [Event Types](#EventTypes) for enumerated values |\n| event_id | string | Yes | Event ID, `same event may retry multiple times due to timeout etc., receivers need to deduplicate` |\n| person | [Person](#Person) | No | Operator, only present for manual actions |\n| alert | [Alert](#Alert) | Yes | Alert details |\n\n<span id="Person"></span>\n**Person**:\nField|Type|Required|Description\n:-:|:-:|:-:|:---\nperson_id | int64 | Yes | Person ID\nperson_name | string | Yes | Person name\nemail | string | Yes | Email address\n\n<span id="Alert"></span>\n**Alert**:\n\n| Field | Type | Required | Description |\n| :---: | :---: | :---: | :--- |\n| alert_id | string | Yes | Alert ID |\n| data_source_id | int64 | Yes | Integration ID |\n| data_source_name | string | Yes | Integration name |\n| data_source_type | string | Yes | Integration type |\n| channel_id | int64 | Yes | Channel ID |\n| channel_name | string | Yes | Channel name |\n| title | string | Yes | Alert title |\n| title_rule | string | No | Title generation rule |\n| description | string | No | Alert description |\n| alert_key | string | Yes | Alert correlation basis |\n| alert_severity | string | Yes | Severity level, enum: Critical, Warning, Info |\n| alert_status | string | Yes | Alert status, enum: Critical, Warning, Info, Ok |\n| progress | string | Yes | Processing progress, enum: Triggered, Closed |\n| created_at | int64 | Yes | Creation time |\n| updated_at | int64 | Yes | Update time |\n| start_time | int64 | Yes | First trigger time (time of first event received by platform), Unix timestamp in seconds |\n| last_time | int64 | Yes | Latest event time (time of most recent event received by platform), Unix timestamp in seconds |\n| end_time | int64 | No | Alert recovery time (time when platform last received end-type event), Unix timestamp in seconds, defaults to 0 |\n| close_time | int64 | No | Closure time, different from end_time, this indicates progress closure, not actual alert recovery. Unix timestamp in seconds, defaults to 0 |\n| labels | map[string]string | No | Label key-value pairs, both Key and Value are strings |\n| event_cnt | int64 | No | Number of associated events |\n| incident | [Incident](#Incident) | No | Associated incident |\n\n<span id="Incident"></span>\n**Incident**:\n\n| Field | Type | Required | Description |\n| :---: | :---: | :---: | :--- |\n| incident_id | string | Yes | Incident ID |\n| title | string | Yes | Incident title |\n\n</div>\n\n### Response\n\nHTTP status code 200 indicates successful push.\n\n### Request Example\n\n```\ncurl -X POST \'https://example.com/alert/webhook?a=a\' \\\n-H \'Content-Type: application/json\' \\\n-H \'X-Customize-Header-A: a\' \\\n-d \'{\n "alert":{\n "alert_id":"645c3affd2b92d989a0bd824",\n "alert_key":"d21d9e3126f5ae94",\n "alert_severity":"Warning",\n "alert_status":"Warning",\n "channel_id":1163577812973,\n "channel_name":"Order System",\n "close_time":0,\n "created_at":1683766015,\n "data_source_id":1571358104973,\n "data_source_name":"Aliyun SLS",\n "data_source_ref_id":"",\n "data_source_type":"aliyun-sls.alert",\n "description":"Test alert trigger to FlashDuty",\n "end_time":0,\n "event_cnt":1,\n "incident":{\n "incident_id":"645db17c9759374196929314",\n "title":"123123123"\n },\n "labels":{\n "a":"a",\n "alert_type":"sls_alert",\n "alert_url":"https://sls.console.aliyun.com/lognext/project/sls-api-testing/alert/alert-1683548531-071659",\n "aliuid":"1082109605037616",\n "check":"Test send to FlashDuty",\n "fire_results":"{\\"_col0\\":\\"true\\"}",\n "fire_results_count":"1",\n "project":"sls-api-testing",\n "raw_condition":"Count:__count__ \\u003e 0; Condition:",\n "region":"cn-beijing",\n "resource":"d18195cd567c6e8b-5fb6a5e6fb8ad-1f269e0",\n "severity":"6"\n },\n "last_time":1683809153,\n "progress":"Triggered",\n "start_time":1683766013,\n "title":"Test alert trigger to FlashDuty",\n "title_rule":"$resource::$check",\n "updated_at":1683809170\n },\n "event_id":"ffcf1d47a8d853dc800d000c87e5568b",\n "event_time":1683890681639,\n "event_type":"a_merge",\n "person":{\n "email":"zhangsan@flashcat.cloud",\n "person_id":82138731581973,\n "person_name":"Flashcat Cloud"\n }\n}\' -v\n```\n\n## III. FAQ\n\n1. **Is there a response timeout for the service?**\n\n - The service must respond within 1 second, after which the response is considered failed\n\n2. **Will failed pushes continue to be pushed?**\n\n - Currently, FlashDuty pushes only once, though retry mechanisms may be introduced in the future. Retries may also occur due to middleware timeouts, so implement idempotent processing\n\n3. **How is push order guaranteed?**\n\n - In theory, events for the same alert are pushed in chronological order, but retries and other situations may cause out-of-order delivery\n - Services can filter based on event_time; if a later event has been received, earlier events can be filtered out. Each push carries the latest complete information, so occasional event loss is acceptable\n\n4. **Trusted IP whitelist for push sources?**\n - {ip_whitelist}\n - May be updated in the future, please check periodically\n';
838
+ const IncidentWebhook = '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.\n\n<span id="EventTypes"></span>\n\n## I. Event Types\n\nThe following event types are currently supported, with more potentially being added in the future.\n\n<div class="md-block">\n\n| Event Type | Description |\n| :----------: | :--------------- |\n| i_new | Create incident (automatically or manually) |\n| i_assign | Assign incident (automatically or manually) |\n| i_snooze | Manually snooze incident |\n| i_wake | Unsnooze incident |\n| i_ack | Manually acknowledge incident |\n| i_unack | Unacknowledge incident |\n| i_storm | Trigger alert storm notification |\n| i_custom | Trigger custom action |\n| i_rslv | Close incident (automatically or manually) |\n| i_reopen | Reopen incident |\n| i_merge | Manually merge incidents |\n| i_r_title | Update incident title |\n| i_r_desc | Update incident description |\n| i_r_impact | Update incident impact |\n| i_r_rc | Update incident root cause |\n| i_r_rsltn | Update incident resolution |\n| i_r_severity | Update incident severity |\n| i_r_field | Update incident custom fields |\n\n</div>\n\n## II. Push Description\n\n### Request Method\n\n<div class="md-block">\n\nPOST, Content-Type:"application/json"\n\n</div>\n\n### Request Payload:\n\n<div class="md-block">\n\n| Field | Type | Required | Description |\n| :--------: | :-------------------: | :--: | :--------- |\n| event_time | int64 | Yes | Event timestamp in `milliseconds` |\n| event_type | string | Yes | Event type, see [Event Types](#EventTypes) for enumerated values |\n| event_id | string | Yes | Event ID, `same event may be retried multiple times due to timeout, receivers need to deduplicate` |\n| person | [Person](#Person) | No | Operator, exists only for manual actions |\n| incident | [Incident](#Incident) | Yes | Incident details |\n\n<span id="Person"></span>\n**Person**:\nField|Type|Required|Description\n:-:|:-:|:-:|:---\nperson_id | int64 | Yes | Person ID\nperson_name | string | Yes | Person name\nemail | string | Yes | Email address\n\n<span id="Responder"></span>\n**Responder**:\nField|Type|Required|Description\n:-:|:-:|:-:|:---\nperson_id | int64 | Yes | Person ID\nperson_name | string | Yes | Person name\nemail | string | Yes | Email address\nassigned_at | int64| No | Assignment time\nacknowledged_at | int64| No | Acknowledgment time\n\n<span id="Incident"></span>\n**Incident**:\n\n| Field | Type | Required | Description |\n| :---------------: | :-----------------: | :--: | :----------------- |\n| incident_id | string | Yes | Incident ID |\n| title | string | Yes | Incident title |\n| description | string | No | Incident description |\n| impact | string | No | Incident impact |\n| root_cause | string | No | Incident root cause |\n| resolution | string | No | Incident resolution |\n| incident_severity | string | Yes | Severity level, enum: Critical, Warning, Info |\n| incident_status | string | Yes | Incident status, enum: Critical, Warning, Info, Ok |\n| progress | string | Yes | Processing status, enum: Triggered, Processing, Closed |\n| created_at | int64 | Yes | Creation time |\n| updated_at | int64 | Yes | Update time |\n| start_time | int64 | Yes | Trigger time, Unix timestamp in seconds |\n| last_time | int64 | No | Latest event time, latest push time of associated alerts, Unix timestamp in seconds, default 0 |\n| end_time | int64 | No | Recovery time, incident auto-recovers when all associated alerts recover, Unix timestamp in seconds, default 0 |\n| ack_time | int64 | No | First acknowledgment time, incidents can be acknowledged by multiple people, this is the earliest acknowledgment time. Unix timestamp in seconds, default 0 |\n| close_time | int64 | No | Close time, end_time represents incident recovery time, close_time represents processing status closure time. Incident recovery triggers closure, but closure doesn\'t affect recovery. Unix timestamp in seconds, default 0 |\n| snoozed_before | int64 | No | Snooze end time |\n| labels | map[string]string | No | Label key-value pairs, both Key and Value are strings. Not available for manually created incidents, for auto-created incidents contains labels from the first aggregated alert |\n| fields | map[string]interface{} | No | Custom field key-value pairs, Key is string, Value can be any type depending on field type |\n| creator | [Person](#Person) | No | Creator information, exists only for manually created incidents |\n| closer | [Person](#Person) | No | Closer information, exists only for manually closed incidents |\n| responders | [][Responder](#Responder) | No | List of responder information |\n| alert_cnt | int64 | No | Number of associated alerts |\n| channel_id | int64 | No | Channel ID, 0 means not belonging to any channel |\n| channel_name | string | No | Channel name |\n| detail_url | string | Yes | Details URL |\n| group_method | string | No | Grouping method, enum: n: no grouping, p: rule-based grouping, i: intelligent grouping |\n\n</div>\n\n### Response\n\nHTTP status code 200 indicates successful push.\n\n### Request Example\n\n```\ncurl -X POST \'https://example.com/incident/webhook?a=a\' \\\n-H \'Content-Type: application/json\' \\\n-H \'X-Customize-Header-A: a\' \\\n-d \'{\n "event_id":"fac0599a2a25529ba2362c0c184b6cfb",\n "event_time":1689335086948,\n "event_type":"i_new",\n "incident":{\n "account_id":74058170041504,\n "account_name":"TouTie Tech kk",\n "ack_time":0,\n "alert_cnt":0,\n "assigned_to":{\n "assigned_at":1689335086,\n "escalate_rule_id":"64abb8a687e7984845822139",\n "escalate_rule_name":"Default Assignment",\n "id":"NBRbNwDSTSMijKXdLtBU3T",\n "layer_idx":0,\n "type":"assign"\n },\n "channel_id":1840312623504,\n "channel_name":"Reduce Noise",\n "close_time":0,\n "created_at":1689335086,\n "creator":{\n "email":"toutie@flashcat.cloud",\n "person_id":1552048792504,\n "person_name":"TouTie"\n },\n "creator_id":1552048792504,\n "data_source_id":0,\n "dedup_key":"",\n "description":"",\n "detail_url":"http://10.206.0.17:8567/incident/detail/64b1352e376e32c85c56e25b",\n "end_time":0,\n "equals_md5":"",\n "group_method":"n",\n "impact":"",\n "incident_id":"64b1352e376e32c85c56e25b",\n "incident_severity":"Critical",\n "incident_status":"Critical",\n "labels":{\n "check": "cpu idle low"\n },\n "last_time":1689335086,\n "num":"56E25B",\n "progress":"Triggered",\n "resolution":"",\n "responder_ids":[\n 1552048792504\n ],\n "responders":[\n {\n "acknowledged_at":0,\n "assigned_at":1689335086,\n "email":"toutie@flashcat.cloud",\n "person_id":1552048792504,\n "person_name":"TouTie"\n }\n ],\n "root_cause":"",\n "snoozed_before":0,\n "start_time":1689335086,\n "title":"ysy028",\n "updated_at":1689335086\n },\n "person":{\n "email":"toutie@flashcat.cloud",\n "person_id":1552048792504,\n "person_name":"TouTie"\n }\n}\' -v\n```\n\n## III. FAQ\n\n1. **Is there a response timeout for the service?**\n\n - Services must respond within 1 second, responses after 1 second are considered failed\n\n2. **Will failed pushes continue to be pushed?**\n\n - Currently, FlashDuty pushes only once, though retry mechanisms may be introduced in the future. Retries may also occur due to middleware timeouts, so implement idempotent processing\n\n3. **How is push order guaranteed?**\n\n - In theory, events for the same incident are pushed in chronological order, but retries may cause out-of-order delivery\n - Services can filter based on event_time; if a later event has been received, earlier events can be filtered out. Each push carries complete, up-to-date information, so occasional event loss is acceptable\n\n4. **Trusted IP whitelist for push sources?**\n - {ip_whitelist}\n - May be updated in the future, please check periodically';
839
+ const CustomAction = 'Custom incident actions allow you to quickly invoke external interfaces during incident troubleshooting for incident self-healing, information enrichment, and other custom operations.\n\n## I. Creating Actions\n\n1. Log in to the FlashDuty console and navigate to [Integration Center-Webhook]\n2. Click to add a Custom Action integration\n3. Configure the action name, which will appear as a button in the incident details\n4. Configure channels (multiple can be configured, but each channel can have up to three custom actions)\n5. Configure Endpoint and custom Headers\n6. Save to complete\n\n## II. Push Description\n\n### Request Method\n\n<div class="md-block">\n\nPOST, Content-Type:"application/json"\n\n</div>\n\n### Request Payload:\n\n<div class="md-block">\n\n| Field | Type | Required | Description |\n| :--------: | :-------------------: | :--: | :--------- |\n| event_time | int64 | Yes | Event occurrence `timestamp in milliseconds` |\n| event_type | string | Yes | Event type, fixed value `i_custom` |\n| event_id | string | Yes | Event ID, `same event may retry multiple times due to timeout, receivers need to deduplicate` |\n| person | [Person](#Person) | No | Operator, exists only for manual actions |\n| incident | [Incident](#Incident) | Yes | Incident details |\n\n<span id="Person"></span>\n**Person**:\nField|Type|Required|Description\n:-:|:-:|:-:|:---\nperson_id | int64 | Yes | Person ID\nperson_name | string | Yes | Person name\nemail | string | Yes | Email address\n\n<span id="Responder"></span>\n**Responder**:\nField|Type|Required|Description\n:-:|:-:|:-:|:---\nperson_id | int64 | Yes | Person ID\nperson_name | string | Yes | Person name\nemail | string | Yes | Email address\nassigned_at | int64| No | Assignment time\nacknowledged_at | int64| No | Acknowledgment time\n\n<span id="Incident"></span>\n**Incident**:\n\n| Field | Type | Required | Description |\n| :---------------: | :-----------------: | :--: | :----------------- |\n| incident_id | string | Yes | Incident ID |\n| title | string | Yes | Incident title |\n| description | string | No | Incident description |\n| impact | string | No | Incident impact |\n| root_cause | string | No | Root cause |\n| resolution | string | No | Resolution |\n| incident_severity | string | Yes | Severity level, enum: Critical, Warning, Info |\n| incident_status | string | Yes | Incident status, enum: Critical, Warning, Info, Ok |\n| progress | string | Yes | Processing progress, enum: Triggered, Processing, Closed |\n| created_at | int64 | Yes | Creation time |\n| updated_at | int64 | Yes | Update time |\n| start_time | int64 | Yes | Trigger time, Unix timestamp in seconds |\n| last_time | int64 | No | Latest event time, latest event push time of associated alerts, Unix timestamp in seconds, default 0 |\n| end_time | int64 | No | Recovery time, incident auto-recovers when all associated alerts recover, Unix timestamp in seconds, default 0 |\n| ack_time | int64 | No | First acknowledgment time, incidents can be acknowledged by multiple people, this is the earliest acknowledgment time. Unix timestamp in seconds, default 0 |\n| close_time | int64 | No | Close time, end_time represents incident recovery time, close_time represents processing progress closure time. Incident recovery triggers closure, but closure doesn\'t affect recovery. Unix timestamp in seconds, default 0 |\n| snoozed_before | int64 | No | Snooze deadline time |\n| labels | map[string]string | No | Label KV pairs, both Key and Value are strings. Not present for manually created incidents, for auto-created incidents contains labels from the first aggregated alert |\n| fields | map[string]interface{} | No | Custom field KV pairs, Key is string, Value can be any type depending on field type |\n| creator | [Person](#Person) | No | Creator information, exists only for manually created incidents |\n| closer | [Person](#Person) | No | Closer information, exists only for manually closed incidents |\n| responders | [][Responder](#Responder) | No | List of responder information |\n| alerts | [Alert](#Alert) | No | Associated alerts |\n| alert_cnt | int64 | No | Number of associated alerts |\n| channel_id | int64 | No | Channel ID, 0 means not belonging to any channel |\n| channel_name | string | No | Channel name |\n| detail_url | string | Yes | Detail URL |\n| group_method | string | No | Grouping method, enum: n: no grouping, p: rule-based grouping, i: intelligent grouping |\n\n<span id="Alert"></span>\n**Alert**:\n\n| Field | Type | Required | Description |\n| :--------------: | :-----------: | :--: | :----------------- |\n| alert_id | string | Yes | Alert ID |\n| data_source_id | int64 | Yes | Integration ID |\n| title | string | Yes | Alert title |\n| description | string | No | Alert description |\n| alert_key | string | Yes | Alert correlation basis |\n| alert_severity | string | Yes | Severity level, enum: Critical, Warning, Info |\n| alert_status | string | Yes | Alert status, enum: Critical, Warning, Info, Ok |\n| progress | string | Yes | Processing progress, enum: Triggered, Closed |\n| created_at | int64 | Yes | Creation time |\n| updated_at | int64 | Yes | Update time |\n| start_time | int64 | Yes | First trigger time (time of first event received by platform), Unix timestamp in seconds |\n| last_time | int64 | Yes | Latest event time (time of latest event received by platform), Unix timestamp in seconds |\n| end_time | int64 | No | Alert recovery time (time of last end-type event received by platform), Unix timestamp in seconds, default 0 |\n| close_time | int64 | No | Close time, different from end_time, this is processing progress closure, doesn\'t mean alert actually recovered. Unix timestamp in seconds, default 0 |\n| labels | map[string]string | No | Label KV pairs, both Key and Value are strings |\n\n</div>\n\n### Response\n\nHTTP status code 200 indicates successful push.\n\n### Request Example\n\n```\ncurl -X POST \'https://example.com/incident/action?a=a\' \\\n-H \'Content-Type: application/json\' \\\n-H \'X-Customize-Header-A: a\' \\\n-d \'{\n "event_time": 1700208013988,\n "event_type": "i_custom",\n "incident": {\n "event_id":"fac0599a2a25529ba2362c0c184b6cfb",\n "account_id": 74058170041504,\n "account_name": "头铁科技",\n "ack_time": 0,\n "alert_cnt": 1,\n "alerts": [\n {\n "account_id": 74058170041504,\n "alert_id": "6551f37f8713372ad1054d54",\n "alert_key": "asdflasdfl2xzasd112621",\n "alert_severity": "Critical",\n "alert_status": "Critical",\n "close_time": 0,\n "created_at": 1699869567,\n "data_source_id": 2398086111504,\n "description": "cpu.idle < 20%",\n "end_time": 0,\n "event_cnt": 0,\n "labels": {\n "a": "a",\n "check": "自定义字段测试",\n "cluster": "nj",\n "metric": "node_cpu_seconds_total",\n "resource": "es.nj.01",\n "service": "engine",\n "v": "v"\n },\n "last_time": 1699869562,\n "progress": "Triggered",\n "responder_email": "",\n "responder_id": 0,\n "responder_name": "",\n "start_time": 1699869562,\n "title": "nj / es.nj.01 - 自定义字段测试",\n "title_rule": "$cluster::$resource::$check",\n "updated_at": 1699869576\n }\n ],\n "assigned_to": {\n "assigned_at": 1699869576,\n "escalate_rule_id": "6509344bc1d50d723ca04986",\n "escalate_rule_name": "策略5",\n "id": "VobpBqvTuXgQ7BZzJ2Qu94",\n "layer_idx": 0,\n "type": "assign"\n },\n "channel_id": 1973372625504,\n "channel_name": "lim_test",\n "close_time": 0,\n "created_at": 1699869576,\n "data_source_id": 2398086111504,\n "dedup_key": "asdflasdfl2xzasd112621",\n "description": "cpu.idle < 20%",\n "detail_url": "http://10.206.0.17:8567/incident/detail/6551f3888713372ad1054d57",\n "end_time": 0,\n "equals_md5": "",\n "fields": {\n "impacted_services": [\n "passport",\n "order"\n ],\n "priority": "P3"\n },\n "group_method": "p",\n "impact": "",\n "incident_id": "6551f3888713372ad1054d57",\n "incident_severity": "Critical",\n "incident_status": "Critical",\n "labels": {\n "a": "a",\n "check": "自定义字段测试",\n "cluster": "nj",\n "metric": "node_cpu_seconds_total",\n "resource": "es.nj.01",\n "service": "engine",\n "v": "v"\n },\n "creator":{\n "email":"toutie@flashcat.cloud",\n "person_id":1552048792504,\n "person_name":"头铁"\n },\n "last_time": 1699869562,\n "num": "054D57",\n "progress": "Triggered",\n "resolution": "",\n "responders": [\n {\n "acknowledged_at": 0,\n "assigned_at": 1699869576,\n "email": "zhangsan@toutie.com",\n "person_id": 1234648032504,\n "person_name": "zhangsan"\n }\n ],\n "root_cause": "",\n "snoozed_before": 0,\n "start_time": 1699869562,\n "title": "nj / es.nj.01 - 自定义字段测试",\n "updated_at": 1699929113\n },\n "person": {\n "email": "zhangsan@toutie.com",\n "person_id": 1999632289504,\n "person_name": "zhangsan"\n }\n}\' -v\n```\n\n## III. Use Cases\n\n### Host Restart\n\nWhen host memory or CPU is maxed out, trigger host restart scripts for quick recovery.\n\n### Information Enrichment\n\nWhen an incident occurs, callback to your service to retrieve Tracing, Logging, topology, and other information based on alert details. Actively call FlashDuty Open API to update incident information, such as adding labels or setting custom fields to assist troubleshooting.\n\n### Rollback Changes\n\nWhen an incident occurs and is confirmed to be caused by a change, directly trigger a callback to your deployment platform to initiate rollback process for faster incident recovery.\n\n### Update Status Page\n\nWhen an incident is confirmed to affect online services, trigger external status page updates to prompt';
840
+ const Templates = '---\ntitle: "Configure Notification Templates"\ndescription: "Customize notification content through template configuration"\ndate: "2024-05-10T10:00:00+08:00"\nurl: "https://docs.flashcat.cloud/en/flashduty/template-settings"\n---\n\n<!-- >\n## Video Tutorial\n---\n<Video src="https://download.flashcat.cloud/flashduty/video/template.mp4"></Video>\n-->\n\n## When Are Templates Used?\n---\nThe system uses templates to render [Incident](#Incident) and trigger notifications when assigning incidents. Assignment may occur in the following scenarios:\n\n1. Manually create and assign an incident\n2. When an alert event is reported, the system automatically generates an incident and assigns it according to the matched escalation rule\n3. After an incident is created, manually change the assignment (reassign)\n4. Automatically escalate assignment according to escalation rule settings\n5. When reopening a closed incident, reassign according to previous settings\n\nWe 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.\n\n- 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\n- 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\n- If you want to introduce more functions, feel free to submit a merge request\n\n## What Variables Can I Reference?\n---\n**Variable Reference Examples**:\n\n```\n// Reference title\n{{.Title}}\n\n// Reference creator name\n{{.Creator.PersonName}}\n\n// Reference resource label value\n{{.Labels.resource}}\n\n// Reference label value with "." in name\n{{index .Labels "A.B"}}\n```\n\n**Complete Variable List** (Direct Reference):\n<span id="Incident"></span>\nField|Type|Required|Description\n:-:|:-:|:-:|:---\nID | string | Yes | Incident ID\n`Title` | string | Yes | Incident title\n`Description` | string | Yes | Incident description, can be empty\nDetailUrl | string | Yes | Incident detail page URL\nNum | string | Yes | Short incident identifier, for easy visual recognition only, may be duplicate\n`IncidentSeverity` | string | Yes | Severity level, enum values: Critical, Warning, Info\nIncidentStatus | string | Yes | Incident status, enum values: Critical, Warning, Info, Ok\n`Progress` | string | Yes | Processing progress, enum values: Triggered, Processing, Closed\n`StartTime` | int64 | Yes | Trigger time, Unix timestamp in seconds\nLastTime | int64 | No | Latest event time, latest incorporated event time in associated alerts, Unix timestamp in seconds, default 0\nEndTime | int64 | No | Recovery time, when all associated alerts recover, the incident will automatically recover and close. Unix timestamp in seconds, default 0\nSnoozedBefore | int64 | No | Snooze end time, Unix timestamp in seconds, default 0\nAckTime | int64 | No | First acknowledgment time, Unix timestamp in seconds, default 0\nCloseTime | 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\nCreator | [Person](#Person) | No | Creator information, does not exist when automatically generated by system\nCloser | [Person](#Person) | No | Closer information, does not exist when incident recovers automatically\nAssignedTo | [Assignment](Assignment) | No | Assignment configuration\nResponders | [][Responder](#Responder) | No | List of responders, initialized based on assignment configuration, will also have corresponding records if non-assigned personnel acknowledge the incident\nChannelID | int64 | No | Channel ID, value is 0 when manually creating global incident\nChannelName | string | No | Channel name\nGroupMethod | string | No | Grouping method, enum values: n: no grouping, p: rule-based grouping, i: intelligent grouping\n`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\nAlertCnt | int64 | Yes | Number of associated alerts\nAlerts | [][Alert](#Alert) | No | Associated alert details, no information when manually created\nFireType | string | No | Notification type, enum values: fire: notify, refire: loop notification\nIsFlapping | bool | No | Whether in flapping state, i.e. frequent occurrence and recovery, related to convergence configuration\nImpact | string | No | Incident impact, filled after incident closure\nRootCause | string | No | Root cause, filled after incident closure\nResolution | string | No | Resolution, filled after incident closure\n\n<span id="Person"></span>\n**Person** (Indirect Reference):\nField|Type|Required|Description\n:-:|:-:|:-:|:---\nperson_id | int64 | Yes | Person ID\nperson_name | string | Yes | Person name\nemail | string | Yes | Email address\n\n<span id="Assignment"></span>\n**Assignment** (Indirect Reference):\nField|Type|Required|Description\n:-:|:-:|:-:|:---\nPersonIDs | []string| No | List of person IDs, exists only when assigning by person\nEscalateRuleID | string | No | Escalation rule ID, exists only when assigning by rule\nEscalateRuleName | string | No | Escalation rule name\nLayerIdx | string | No | Assignment level, corresponds to escalation rule level index, starts from 0\nType | string | Yes | Assignment type, enum values: assign: assign, reassign: reassign, escalate: escalate assignment, reopen: reopen assignment\n\n<span id="Responder"></span>\n**Responder** (Indirect Reference):\nField|Type|Required|Description\n:-:|:-:|:-:|:---\nPersonID | int64 | Yes | Person ID\nPersonName | string | Yes | Person name\nEmail | string | Yes | Email address\nAssignedAt | int64 | Yes | Assignment time, Unix timestamp in seconds, default 0\nAcknowledgedAt | int64 | No | Acknowledgment time, Unix timestamp in seconds, default 0\n\n<span id="Alert"></span>\n**Alert** (Indirect Reference):\nField|Type|Required|Description\n:-:|:-:|:-:|:---\nTitle | string | Yes | Alert title\nDescription | string | Yes | Alert description, can be empty\nAlertSeverity | string | Yes | Severity level, enum values: Critical, Warning, Info\nAlertStatus | string | Yes | Alert status, enum values: Critical, Warning, Info, Ok\nProgress | string | Yes | Processing progress, enum values: Triggered, Processing, Closed\nStartTime | int64 | Yes | Trigger time, Unix timestamp in seconds\nEndTime | int64 | No | Recovery time, Unix timestamp in seconds, default 0\nCloseTime | 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\n`Labels` | map[string]string | No | Label key-value pairs, both Key and Value are strings\n\n## FAQ\n---\n1. **How do I know what label information is in `Labels`?**\n\n - Manually created incidents have no labels\n - 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\n\n2. **Why is the `default template` used when I configured custom template rendering?**\n\n - When creating a custom template, the system uses mock data to render the template to check for syntax errors\n - Mock data has limited coverage and may not match some logical branches in your template, which could fail during actual execution\n - After rendering fails, the system will use the default template as a fallback to ensure message delivery\n - When unsure if a referenced variable exists, it\'s recommended to use logical conditions to avoid rendering exceptions, e.g. for the `resource` label:\n\n ```\n // Wrong approach: directly read label\n {{.Labels.resource}}\n\n // Recommended approach: check first, then read label\n {{if .Labels.resource}}{{.Labels.resource}}{{end}}\n ```\n\n3. **Why are characters like ">" `escaped` in the incident title?**\n\n ```\n // Use toHtml function\n {{toHtml .Title}}\n\n // Use first non-empty value for rendering, avoid writing complex if logic\n {{toHtml .Title .TitleEnglish}}\n ```\n\n4. **Time variables are timestamps, how to `format time`?**\n\n ```\n // date function converts timestamp to readable format\n // "2006-01-02 15:04:05" is a common format, search online for more formats\n {{date "2006-01-02 15:04:05" .StartTime}}\n\n // ago function converts time difference to readable format\n {{ago .StartTime}}\n ```\n\n5. **How to reference external variables inside a for loop?**\n ```\n // Add "$" before external variables\n {{range .Responders}}\n {{if eq $.Progress "Triggered"}}\n [Pending]{{.Email}}\n {{end}}\n {{end}}\n ```\n6. **How to extract field values with "." in names, like "obj.instance" in labels?**\n\n ```\n // Use index function\n {{index .Labels "obj.instance"}}\n ```\n\n7. **How to extract and deduplicate label information from incident associated alerts?**\n\n ```\n // Use alertLabels function to get deduplicated array\n {{alertLabels . "resource"}}\n\n // Use joinAlertLabels function to get deduplicated array, then join with "sep"\n {{joinAlertLabels . "resource" "sep"}}\n ```\n\n8. **How to iterate and print labels?**\n\n ```\n // Complete iteration\n {{range $k, $v := .Labels}}\n {{$k}} : {{toHtml $v}}\n {{end}}\n\n // Exclude single label\n {{range $k, $v := .Labels}}\n {{if ne $k "resource"}}\n {{$k}} : {{toHtml $v}}\n {{end}}\n {{end}}\n\n // Exclude multiple labels\n {{range $k, $v := .Labels}}\n {{if not (in $k "resource" "body_text")}}\n {{$k}} : {{toHtml $v}}\n {{end}}\n {{end}}\n \n9. **How to extract information from JSON fields?**\n \n - The jsonGet function helps you extract values matching conditions from JSON format data via path\n - Target data extracted by jsonGet function must be valid JSON\n - Basic usage: {{jsonGet .Labels.xxx "yyy"}}, where xxx must be valid JSON and yyy is a valid extraction path\n - For JSON path syntax, refer to [gjson.dev](https://gjson.dev/), where you can input target data and extraction path for real-time preview\n \n ```\n // Extract detail_url field from rule_note label\n {{jsonGet .Labels.rule_note "detail_url"}}\n\n // Extract name field from first element in JSON array\n {{jsonGet .Labels.slice "0.name"}}\n \n // Iterate each element in JSON array, match instanceId field of object with userId==7777\n {{jsonGet .Labels.rule_note "#(userId==7777)#.instanceId" }}\n\n ```\n\n10. **Where can I find more functions and usage examples?**\n - Function list: https://github.com/flashcatcloud/sprig/blob/master/functions.go#L97\n - Usage examples: Check corresponding _test.go files, e.g. date function test cases at https://github.com/flashcatcloud/sprig/blob/master/date_test.go\n\nBelow are specific instructions for each notification channel. \n\n## Feishu/Lark App\n---\nYou 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:\n\n```\n{{if .Description}}**description** :{{toHtml .Labels.body_text .Description}}{{end}}\n{{if .Labels.resource}}**resource** : {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}\n{{range $k, $v := .Labels}}\n{{if not (in $k "resource" "body_text")}}**{{$k}}** : {{toHtml $v}}{{end}}{{end}}\n```\n\nAs shown below:\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/fd/template-feishu-1.png" width="800">\n\n\nIf you want to display only key label information, you can refer to the code snippet below:\n\n- We\'ve listed some common labels that you can add or remove as needed\n- In Feishu/Lark app, the system will automatically remove empty lines (caused by non-existent labels) during rendering, so you can configure freely\n\n```\n{{if (index .Labels "resource")}}resource:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}\n{{if (index .Labels "check")}}check:{{toHtml (index .Labels "check")}}{{end}}\n{{if (index .Labels "metric")}}metric:{{index .Labels "metric"}}{{end}}\n{{if (index .Labels "prom_ql")}}prom_ql:{{toHtml (index .Labels "prom_ql")}}{{end}}\n{{if (index .Labels "host_ql")}}host_ql:{{toHtml (index .Labels "host_ql")}}{{end}}\n{{if (index .Labels "trigger_value")}}trigger_value:{{index .Labels "trigger_value"}}{{end}}\n{{if (index .Labels "region")}}region:{{index .Labels "region"}}{{end}}\n{{if (index .Labels "cluster")}}cluster:{{index .Labels "cluster"}}{{end}}\n{{if (index .Labels "business")}}business:{{index .Labels "business"}}{{end}}\n{{if (index .Labels "service")}}service:{{index .Labels "service"}}{{end}}\n{{if (index .Labels "env")}}env:{{index .Labels "env"}}{{end}}\n{{if (index .Labels "type")}}type:{{index .Labels "type"}}{{end}}\n{{if (index .Labels "topic")}}topic:{{index .Labels "topic"}}{{end}}\n{{if (index .Labels "cpu")}}cpu:{{index .Labels "cpu"}}{{end}}\n{{if (index .Labels "device")}}device:{{index .Labels "device"}}{{end}}\n{{if (index .Labels "path")}}path:{{index .Labels "path"}}{{end}}\n{{if (index .Labels "fstype")}}fstype:{{index .Labels "fstype"}}{{end}}\n{{if (index .Labels "name")}}name:{{index .Labels "name"}}{{end}}\n{{if (index .Labels "mode")}}mode:{{index .Labels "mode"}}{{end}}\n{{if (index .Labels "runbook_url")}}runbook_url:{{toHtml (index .Labels "runbook_url")}}{{end}}\n```\n\n## Dingtalk App\n---\nYou 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:\n\n```\n{{if .Description}}**description** :{{toHtml .Labels.body_text .Description}}{{end}}\n{{if .Labels.resource}}**resource** : {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}\n{{range $k, $v := .Labels}}\n{{if not (in $k "resource" "body_text")}}**{{$k}}** : {{toHtml $v}}{{end}}{{end}}\n```\n\nAs shown below:\n<img src="https://download.flashcat.cloud/flashduty/doc/en/fd/template-ding-1.png" width="800">\n\n\nIf you want to display only key label information, you can refer to the code snippet below:\n\n- We\'ve listed some common labels that you can add or remove as needed\n- In Dingtalk app, the system will automatically remove empty lines (caused by non-existent labels) during rendering, so you can configure freely\n\n```\n{{if (index .Labels "resource")}}**resource**:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}\n{{if (index .Labels "metric")}}**metric**:{{index .Labels "metric"}}{{end}}\n{{if (index .Labels "prom_ql")}}**prom_ql**:{{toHtml (index .Labels "prom_ql")}}{{end}}\n{{if (index .Labels "trigger_value")}}**trigger_value**:{{index .Labels "trigger_value"}}{{end}}\n{{if (index .Labels "host_ql")}}**host_ql**:{{toHtml (index .Labels "host_ql")}}{{end}}\n{{if (index .Labels "region")}}**region**:{{index .Labels "region"}}{{end}}\n{{if (index .Labels "cluster")}}**cluster**:{{index .Labels "cluster"}}{{end}}\n{{if (index .Labels "business")}}**business**:{{index .Labels "business"}}{{end}}\n{{if (index .Labels "service")}}**service**:{{index .Labels "service"}}{{end}}\n{{if (index .Labels "env")}}**env**:{{index .Labels "env"}}{{end}}\n{{if (index .Labels "type")}}**type**:{{index .Labels "type"}}{{end}}\n{{if (index .Labels "topic")}}**topic**:{{index .Labels "topic"}}{{end}}\n{{if (index .Labels "cpu")}}**cpu**:{{index .Labels "cpu"}}{{end}}\n{{if (index .Labels "device")}}**device**:{{index .Labels "device"}}{{end}}\n{{if (index .Labels "path")}}**path**:{{index .Labels "path"}}{{end}}\n{{if (index .Labels "fstype")}}**fstype**:{{index .Labels "fstype"}}{{end}}\n{{if (index .Labels "name")}}**name**:{{index .Labels "name"}}{{end}}\n{{if (index .Labels "mode")}}**mode**:{{index .Labels "mode"}}{{end}}\n{{if (index .Labels "runbook_url")}}**runbook_url**:{{index .Labels "runbook_url"}}{{end}}\n```\n\n## WeCom App\n---\nYou 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:\n\n- We\'ve listed some common labels that you can add or remove as needed\n- In WeCom app, the system will automatically remove empty lines (caused by non-existent labels) during rendering, so you can configure freely\n\n```\n{{if (index .Labels "resource")}}resource:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}\n{{if (index .Labels "metric")}}metric:{{index .Labels "metric"}}{{end}}\n{{if (index .Labels "prom_ql")}}prom_ql:{{toHtml (index .Labels "prom_ql")}}{{end}}\n{{if (index .Labels "trigger_value")}}trigger_value:{{index .Labels "trigger_value"}}{{end}}\n{{if (index .Labels "host_ql")}}host_ql:{{toHtml (index .Labels "host_ql")}}{{end}}\n{{if (index .Labels "region")}}region:{{index .Labels "region"}}{{end}}\n{{if (index .Labels "cluster")}}cluster:{{index .Labels "cluster"}}{{end}}\n{{if (index .Labels "business")}}business:{{index .Labels "business"}}{{end}}\n{{if (index .Labels "service")}}service:{{index .Labels "service"}}{{end}}\n{{if (index .Labels "env")}}env:{{index .Labels "env"}}{{end}}\n{{if (index .Labels "type")}}type:{{index .Labels "type"}}{{end}}\n{{if (index .Labels "topic")}}topic:{{index .Labels "topic"}}{{end}}\n{{if (index .Labels "cpu")}}cpu:{{index .Labels "cpu"}}{{end}}\n{{if (index .Labels "device")}}device:{{index .Labels "device"}}{{end}}\n{{if (index .Labels "path")}}path:{{index .Labels "path"}}{{end}}\n{{if (index .Labels "fstype")}}fstype:{{index .Labels "fstype"}}{{end}}\n{{if (index .Labels "name")}}name:{{index .Labels "name"}}{{end}}\n{{if (index .Labels "mode")}}mode:{{index .Labels "mode"}}{{end}}\n{{if (index .Labels "runbook_url")}}runbook_url:{{toHtml (index .Labels "runbook_url")}}{{end}}\n```\n\nAs shown below:\n\n<img src="https://download.flashcat.cloud/flashduty/doc/en/fd/template-wecom-1.png" width="800">\n\n\n**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**\n\n## Slack App\n---\nYou 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:\n\n```\n{{if .Description}}*description* :{{toHtml .Labels.body_text .Description}}{{end}}\n{{if .Labels.resource}}*resource* : {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}\n{{range $k, $v := .Labels}}\n{{if not (in $k "resource" "body_text")}}*{{$k}}* : {{toHtml $v}}{{end}}{{end}}\n```\n\nAs shown below:\n\n<img src="https://download.flashcat.cloud/flashduty/integration/slack/slack_app_message.png" alt="drawing" style="display: block; margin: 0 auto;" width="600"/>\n\nIf you want to display only key label information, you can refer to the code snippet below:\n\n- We\'ve listed some common labels that you can add or remove as needed\n- Messages can be around 15000 characters long, content beyond that will be truncated\n- In Slack app, the system will automatically remove empty lines (caused by non-existent labels) during rendering, so you can configure freely\n\n```\n{{if (index .Labels "resource")}}*resource*:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}\n{{if (index .Labels "metric")}}*metric*:{{index .Labels "metric"}}{{end}}\n{{if (index .Labels "prom_ql")}}*prom_ql*:{{toHtml (index .Labels "prom_ql")}}{{end}}\n{{if (index .Labels "trigger_value")}}*trigger_value*:{{index .Labels "trigger_value"}}{{end}}\n{{if (index .Labels "host_ql")}}*host_ql*:{{toHtml (index .Labels "host_ql")}}{{end}}\n{{if (index .Labels "region")}}*region*:{{index .Labels "region"}}{{end}}\n{{if (index .Labels "cluster")}}*cluster*:{{index .Labels "cluster"}}{{end}}\n{{if (index .Labels "business")}}*business*:{{index .Labels "business"}}{{end}}\n{{if (index .Labels "service")}}*service*:{{index .Labels "service"}}{{end}}\n{{if (index .Labels "env")}}*env*:{{index .Labels "env"}}{{end}}\n{{if (index .Labels "type")}}*type*:{{index .Labels "type"}}{{end}}\n{{if (index .Labels "topic")}}*topic*:{{index .Labels "topic"}}{{end}}\n{{if (index .Labels "cpu")}}*cpu*:{{index .Labels "cpu"}}{{end}}\n{{if (index .Labels "device")}}*device*:{{index .Labels "device"}}{{end}}\n{{if (index .Labels "path")}}*path*:{{index .Labels "path"}}{{end}}\n{{if (index .Labels "fstype")}}*fstype*:{{index .Labels "fstype"}}{{end}}\n{{if (index .Labels "name")}}*name*:{{index .Labels "name"}}{{end}}\n{{if (index .Labels "mode")}}*mode*:{{index .Labels "mode"}}{{end}}\n{{if (index .Labels "runbook_url")}}*runbook_url*:{{index .Labels "runbook_url"}}{{end}}\n``` \n\n## Zoom Bot\n---\n- Messages `can be around 4000 characters long, content beyond that will be truncated`\n- If text contains `<br>`, during rendering the system will `first remove empty lines, then replace <br> with newline`\n- 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/\n- If custom content is not set, the system default template will be used to display only key information:\n\n```\n{"head": {\n "text": "{{fireReason .}}INC [#{{.Num}}] {{toHtml .Title}}",\n "style": {\n "bold": true,\n "italic": false,\n "color": "{{$s := serverityToColor .IncidentSeverity}}{{toHtml $s}}"\n }\n },\n "body": [\n {\n "type": "message",\n "text": "Channel:{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}",\n "style": {\n "bold": false,\n "italic": false\n }\n },\n {\n "type": "message",\n "text": "Severity:{{.IncidentSeverity}}",\n "style": {\n "bold": false,\n "italic": false,\n "color": "{{$s := serverityToColor .IncidentSeverity}}{{toHtml $s}}"\n }\n },\n {\n "type": "message",\n "text": "Duration:{{ago .StartTime}}{{if gt .AlertCnt 1}}",\n "style": {\n "bold": false,\n "italic": false\n }\n },\n {\n "type": "message",\n "text": "Grouped alerts:{{.AlertCnt}}{{end}}{{if .Labels.resource}}",\n "style": {\n "bold": false,\n "italic": false\n }\n },\n {\n "type": "message",\n "text": "Resource:{{.Labels.resource}}{{end}}{{if .Description}}",\n "style": {\n "bold": false,\n "italic": false\n }\n },\n {\n "type": "message",\n "text": "Description:{{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}",\n "style": {\n "bold": false,\n "italic": false\n }\n },\n {\n "type": "message",\n "text": "Responders:{{range .Responders}}@{{.PersonName}}{{end}}{{end}}",\n "style": {\n "bold": false,\n "italic": false\n }\n },\n {\n "type": "message",\n "text": "View details",\n "link": "{{.DetailUrl}}{{if .IsFlapping}}"\n },\n {\n "type": "message",\n "text": "Note: Current incident status changes frequently, notifications will be suppressed for {{.Flapping.MuteMinutes}} minutes. Please optimize your alert policy.{{end}}{{if .IsInStorm}}",\n "style": {\n "bold": true,\n "italic": false\n }\n },\n {\n "type": "message",\n "text": "Note: Current incident has grouped {{.AlertCnt}} alerts, triggering alert storm. Please handle urgently!{{end}}",\n "style": {\n "bold": true,\n "italic": false\n }\n }\n ]\n}\n```\n\n## SMS\n---\nIf custom content is not set, the system default template will be used for notification:\n\n```\nYou have a pending incident: {{toHtml .Title}}, Channel: {{.ChannelName}}, Severity: {{.IncidentSeverity}}{{if gt .AlertCnt 1}}, Grouped {{.AlertCnt}} alerts{{end}}\n```\n\n## Email\n---\nIf custom content is not set, the system default template will be used for notification:\n\n```\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\n<title>{{.Title}}</title>\n<html lang="en">\n\n <head data-id="__react-email-head">\n <style>\n .bg-Critical { background-color: #C80000; }\n .bg-Warning { background-color: #FA7D00; }\n .bg-Info { background-color: #FABE00; }\n .bg-Ok { background-color: rgb(132 204 22); }\n .text-Critical { color: #C80000; }\n .text-Warning { color: #FA7D00; }\n .text-Info { color: #FABE00; }\n .text-Ok { color: rgb(132 204 22); }\n .text-title {font-weight:500;width:6rem;flex-shrink:0}\n .text-content {color:rgb(55,65,81)}\n </style>\n </head>\n\n <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">\n <div style="width:100%;height:0.375rem;margin-bottom:2rem" class="bg-{{.IncidentSeverity}}"></div>\n <div style="display:flex;align-items:center;margin-bottom:1.5rem">\n <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>\n </div>\n <div style="background-color:rgb(243,244,246);padding:2rem;margin-top:1rem;border-radius:0.5rem">\n <div style="display:flex;flex-direction:column;gap:0.75rem">\n <div style="display:flex">\n <div class="text-title">Title</div>\n <div class="text-content">{{.Title}}</div>\n </div>\n <div style="display:flex">\n <div class="text-title">Severity</div>\n <div class="text-{{.IncidentSeverity}}">{{.IncidentSeverity}}</div>\n </div>\n <div style="display:flex">\n <div class="text-title">Channel</div>\n <div class="text-content">{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}</div>\n </div>\n <div style="display:flex">\n <div class="text-title">Triggered at</div>\n <div class="text-content">{{date "2006-01-02 15:04:05" .StartTime}}</div>\n </div>\n {{if .CreatorID}}\n <div style="display:flex">\n <div class="text-title">Creator</div>\n <div class="text-content">{{.Creator.PersonName}}</div>\n </div>\n {{end}}\n {{if gt (len .Responders) 0}}\n <div style="display:flex">\n <div class="text-title">Responders</div>\n <div class="text-content">{{range .Responders}}@{{.PersonName}} {{end}}</div>\n </div>\n {{end}}\n <div style="display:flex">\n <div class="text-title">Progress</div>\n <div class="text-content">{{.Progress}}</div>\n </div>\n <div style="display:flex">\n <div class="text-title">Description</div>\n <div style="color:rgb(55,65,81);margin-top:0.125rem">\n <div data-id="react-email-markdown">{{toHtml .Description}}</div>\n </div>\n </div>\n {{if .Labels.resource}}\n <div style="display:flex;margin-bottom:0.5rem;">\n <div style="color:#000;font-weight:500;width:6rem;margin-right:1rem;">Resource</div>\n <div style="color:rgb(55,65,81);margin-top:0.125rem">\n <div data-id="react-email-markdown">{{toHtml (joinAlertLabels . "resource" ", ")}}</div>\n </div>\n </div>\n {{end}}\n </div>\n <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>\n </div>\n <div style="display:flex;justify-content:flex-end;align-items:flex-end;margin-top:2rem">\n <div style="font-size:0.875rem;line-height:1.25rem;font-weight:500">ALL RIGHTS RESERVED © Beijing Flashcat Cloud Technology Co.,Ltd.</div>\n </div>\n </body>\n\n</html>\n```\n\nAs shown below:\n<img src="https://download.flashcat.cloud/flashduty/doc/en/fd/template-mail-1.png" width="800">\n\n';
841
+ const enDocs = {
842
+ CustomAlert,
843
+ Email,
844
+ N9e,
845
+ Prometheus,
846
+ Grafana,
847
+ Zabbix,
848
+ UptimeKuma,
849
+ AliyunARMS,
850
+ AliyunCmEvent,
851
+ AliyunCm,
852
+ AliyunSLS: AWSCW,
853
+ AWSCW,
854
+ AzureMonitor,
855
+ BaiDuBCM,
856
+ HuaWeiCES,
857
+ InfluxDB,
858
+ OpenFalcon,
859
+ PagerDuty,
860
+ TencentBK,
861
+ TencentCLS,
862
+ TencentCm,
863
+ TencentEb,
864
+ OceanBase,
865
+ Graylog,
866
+ Skywalking,
867
+ Sentry,
868
+ Jiankongbao,
869
+ AWSEventBridge,
870
+ Dynatrace,
871
+ HuaweiyunLTS,
872
+ GoogleCM,
873
+ Zilliz,
874
+ Splunk,
875
+ AppDynamics,
876
+ SolarWinds,
877
+ VolcEngineMetric,
878
+ VolcEngineEvent,
879
+ VolcEngineTLS,
880
+ OpManager,
881
+ Meraki,
882
+ StateCloud,
883
+ Guance,
884
+ CustomChange,
885
+ Jira,
886
+ Lark,
887
+ Dingtalk,
888
+ Wecom,
889
+ Slack,
890
+ MicrosoftTeams,
891
+ AlertWebhook,
892
+ IncidentWebhook,
893
+ CustomAction,
894
+ Templates
895
+ };
896
+ global.FlashDocsEn = enDocs;
3
897
  })(window);