Push alerts as interactive cards to a Feishu group via the group's custom robot (Webhook). Beginners can finish the setup step by step.

Overview

The Feishu Card notification channel pushes alert events from Nightingale to a designated Feishu group via the Feishu Group Custom Robot (Webhook). Messages are rendered as rich interactive cards — with a colored header, title, separator and body. triggered is red and recovered is green, far more intuitive than plain Markdown messages.

  • Use case: deliver alerts as polished cards to a Feishu group, with @ mentions of specific members.
  • Prerequisites: a Feishu group, plus permission to “Add Robot” in that group.
  • The whole setup has three steps: ① Add a robot in the Feishu group → ② Create a Feishu Card notification channel in Nightingale → ③ Fill in the access_token in the notification rule.

If you want to send to a direct chat, @ specific members by Feishu open_id/user_id, or embed alert screenshots in the card (group-robot screenshot embedding is an advanced topic, see the last section), see Feishu Application. This page only covers the most common and simplest group-robot approach.

Step 1: Add a custom robot in the Feishu group

  1. In the target Feishu group: Group Settings → Group Robots → Add Robot → Custom Robot.

  2. Set the robot name (for example Nightingale Alert) and description, then click “Next”.

  3. Security settings (at least one is required; “Custom Keyword” is recommended — Nightingale currently only supports the two below):

    Type Description Use case
    Custom Keyword Robot only accepts messages containing the specified keyword(s); up to 3 Recommended, simplest. Use a word that always appears in alert titles, such as Alert or n9e
    IP Allowlist Only accept requests from the specified IP range Suitable when deployed behind a fixed public egress

    Feishu also offers a “signature verification” security policy. Nightingale’s default request body does not include timestamp/sign; if you choose signing, you’ll need to fill the complete signed URL in the access_token field yourself — not recommended for beginners.

  4. Check “I have read and agree to the Custom Robot Service Agreement”, then click “Done”.

  5. Copy the popup Webhook URL, which looks like:

    https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    

    The string after /hook/ is the Access Token (actually a UUID) you’ll fill into Nightingale later — save it.

Official Feishu limit: a single robot can send at most 100 messages per minute and 5 per second, exceeding which triggers throttling. For very high alert volumes, split alerts across multiple groups/robots, or configure a sensible suppression strategy in your notification rule.

Step 2: Create a Feishu Card notification channel in Nightingale

  1. Sign in to Nightingale → left menu Notification → Notification Channels to enter the channel list page.

  2. In the channel-type panel on the left, click Feishu Card to enter the create page (URL /notification-channels/add?ident=feishucard).

    Notification channel entrance

  3. Fill in the basics and save. Most fields are pre-filled by the system — you only need to change “Name”:

    Feishu Card notification channel form

    Section Field Edit needed Notes
    Basic Name Yes e.g. Feishu Group Card Robot. This is what appears when you select the channel in a notification rule
    Basic Enabled Keep on If turned off, the channel will not be used
    Variables Contact Method Optional Used for @ mentions; the selected contact’s “Feishu open_id/phone/email” is injected into the message body
    Variables Parameters Keep default, do not delete The parameters access_token and bot_name are pre-set; the actual token is filled in step 3 inside the notification rule
    HTTP URL Keep default https://open.feishu.cn/open-apis/bot/v2/hook/{{$params.access_token}}{{$params.access_token}} is replaced with the value filled in the notification rule
    HTTP Method POST Feishu Webhook only accepts POST
    HTTP Headers Content-Type: application/json Pre-filled
  4. Scrolling down you will see “Request Body”. This piece is the core of the card-message logic — keep it as default:

    HTTP config and request body

    The default request body is the Feishu interactive card structure (msg_type: interactive). Key points:

    {
      "msg_type": "interactive",
      "card": {
        "config": { "wide_screen_mode": true },
        "header": {
          "title": { "content": "{{$tpl.title}}", "tag": "plain_text" },
          "template": "{{if $event.IsRecovered}}green{{else}}red{{end}}"
        },
        "elements": [
          { "tag": "markdown", "content": "{{$tpl.content}}" }
        ]
      }
    }
    
    • header.title.content comes from the title field of the message template named FeishuCard, typically 🔔 <alert rule name>;
    • header.template automatically changes color based on the event’s IsRecovered: green for recovered / red for triggered, so the status is obvious at a glance;
    • elements[0].content comes from the content field of the FeishuCard template — the Markdown body of the card.
  5. Click Save in the lower-left, and a notification channel of type “Feishu Card” is ready.

Note: Nightingale v8 no longer stores the token on the channel itself like older versions did. The same Feishu Card channel can be reused across multiple groups/robots; each notification rule fills in its own access_token.

Step 3: Fill in the access_token in the notification rule

The UUID after /hook/ in a Feishu robot Webhook URL is filled inside the notification rule:

  1. Left menu Notification → Notification Rules → New (or edit an existing rule).

  2. In the “Notification Configuration” area:

    Filling in the Access Token in a notification rule

    • Notification Channel: pick the Feishu Card channel you just created;
    • Message Template: pick FeishuCard (built-in; if missing, import the default templates from “Message Templates”);
    • Access Token: paste the token from Step 1 (just the UUID after /hook/, no full URL);
    • Bot Name: optional; a name to help you identify it, such as Nightingale Monitoring;
    • Applicable Severity / Time Range / Tags: filter which events to push as needed.
  3. After saving, click “Notification Test” to send a test message — the Feishu group should immediately receive an alert card.

One Feishu Card channel + multiple robots

If different business lines want to push to different groups, no new channel is needed — just create another notification rule with a different access_token.

FAQ

Q1: Getting "msg":"Key Words Not Found" / "code":19024 (keyword mismatch)?

A: The Feishu robot has the “Custom Keyword” security policy enabled, but no keyword appears in the alert title/content. Fix: include the configured keyword in your alert rule name, or add a more permissive keyword (such as Alert) on the Feishu robot side.

Q2: Getting "code":19021 / "msg":"sign match fail" (signature error)?

A: The Feishu robot is using “signature verification” mode, but Nightingale by default does not send sign/timestamp fields. Switch to “Custom Keyword” mode if possible; if you must use signing, fill the complete signed URL in the notification rule’s access_token (in the form https://open.feishu.cn/open-apis/bot/v2/hook/xxx?timestamp=yyy&sign=zzz).

Q3: The card is always red — recovery events don’t turn green?

A: The card color is decided by {{if $event.IsRecovered}}green{{else}}red{{end}} in the template. Verify that your alert rule has a recovery condition; for aggregated alerts that mix triggered and recovered, you can extend it to {{if $event.IsRecovered}}green{{else if ...}}orange{{else}}red{{end}}.

Q4: Hitting rate limits?

A: Feishu officially caps a single robot at 100 messages/minute, 5 per second. Recommendations:

  • Enable alert suppression/aggregation;
  • Split traffic across multiple groups by business;
  • Send only P1/P2 alerts to Feishu, route P3 to email or another async channel.

Q5: What’s the difference between feishucard and lark_card?

A: They share the same card protocol; larkcard targets the international Lark version (open.larksuite.com) and feishucard targets the China Feishu version (open.feishu.cn). Form fields are identical — pick the one that matches the domain you actually use.

References

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云