DingTalk
DingTalk-Integration ist heute nur-Benachrichtigung (gefeuerte Alarme in eine DingTalk-Gruppe pushen). Der IM-Bridge-Zweiseitig-Modus ist geplant, aber nicht ausgeliefert; der Validator akzeptiert dingtalk in Stream-/Webhook-Mode für Vorwärtskompatibilität.
| Modus | Status |
|---|---|
| Notification | Unterstützt. Custom Group Bot, signiert. |
| IM bridge | Scaffold vorhanden; produktive Unterstützung aufgeschoben. |
Payload
DingTalks Custom Bot akzeptiert die Standard-Text-Message-Form:
{
"msgtype": "text",
"text": {"content": "[CRITICAL] node-01 swap_high\nswap_in_pages > 1000 for 5m\nsource: alert\ndedupe: alert:swap_high:device=7"}
}Der Body selbst ist unsigniert. DingTalk authentifiziert die Anfrage stattdessen über URL-Query-Parameter — siehe Signatur.
Das ist derselbe Flat-Text-Formatter, den die Feishu- und WeCom-Sender verwenden, produziert von formatText.
Signatur
Wenn der Custom Bot 加签 (signiert) eingeschaltet hat, erfordert DingTalk, dass die Anfrage einen timestamp- und einen sign-URL-Query-Parameter trägt:
timestamp = Millisekunden seit Epoch
stringToSign = timestamp + "\n" + secret
sign = base64(HMAC-SHA256(key=secret, message=stringToSign))Der Signaturschlüssel ist nur das Secret (anders als Feishu, wo das Secret Teil des String-to-Sign ist). Der signDingTalkURL-Helper hängt beide Query-Parameter an:
POST https://oapi.dingtalk.com/robot/send?access_token=…×tamp=1717012345000&sign=…Der Body bleibt reines JSON. Die signierte URL plus der Body ist, gegen was DingTalk authentifiziert.
Millisekunden-Zeitstempel verwenden
DingTalks Signatur erwartet Millisekunden, keine Sekunden. Der Signer verwendet time.Now().UnixMilli(). Ein Zeitstempel mit Sekundengenauigkeit gibt eine 310000 „sign invalid"-Antwort.
Setup
- In der Ziel-DingTalk-Gruppe → 群设置 → 智能群助手 → 添加机器人 → 自定义. Geben Sie ihm einen Namen und ein Avatar.
- 安全设置 → 加签 wählen und das Secret kopieren. (Sie können auch stattdessen IP-Allowlist oder Keyword-Filter wählen; der Ongrid-Sender unterstützt jeden davon, aber signierter Modus wird empfohlen.)
- Die Webhook-URL kopieren — sieht aus wie
https://oapi.dingtalk.com/robot/send?access_token=<token>. - In Ongrid: Settings → Channels → New → Provider =
dingtalk→ Endpoint = die Webhook-URL → Secret = das Signatur-Secret aus Schritt 2 (überspringen, wenn Sie Keyword- oder IP-Allowlist-Modus gewählt haben).
Test-Nachricht muss zur „Safety"-Regel der Gruppe passen
Wenn Sie Keyword-Filter gewählt haben, MUSS der Test-Nachrichtenbody dieses Keyword enthalten, sonst lehnt DingTalk ihn ab. Die Default-Ongrid-Test-Nachricht ist [INFO] Ongrid test. Konfigurieren Sie entweder ein passendes Keyword (Ongrid funktioniert) oder wählen Sie den signierten Modus.
Eigenheiten
at wird nicht unterstützt
Der aktuelle Sender liefert reines msgtype: text. Einen spezifischen Benutzer zu erwähnen (atMobiles / atUserIds / isAtAll) ist im Payload-Builder noch nicht. Fügen Sie es via generischen Webhook hinzu, wenn Sie es heute brauchen; native Unterstützung ist eine zukünftige Erweiterung.
Retry auf 4xx ist beabsichtigt
DingTalk gibt HTTP 200 auch für protokoll-level Fehler zurück (Signatur-Mismatch, Nachricht zu lang, Bot rate-limited), mit einem errcode im JSON-Body. Der Sender behandelt jeden 2xx als Erfolg und zeigt nur Nicht-2xx-HTTP-Status-Codes. Wenn der Bot stillschweigend aufhört zu liefern, prüfen Sie das Manager-Log nach dingtalk: send_text: code=… — Feishu und DingTalk teilen das gleiche Muster von „200 OK + errcode im Body".
DingTalk-Message-Rate-Limit
DingTalk cappt Custom-Bot-Messages bei 20 pro Minute pro Bot. Die Dämpfung der Alarmpipeline (Default 5m pro Dedupe-Key) bleibt normalerweise deutlich darunter; High-Cardinality-Cluster könnten ein höheres Dämpfungsfenster oder Per-Regel-Channel-Routing brauchen.
Vergleich mit Feishu
| Aspekt | DingTalk | Feishu |
|---|---|---|
| Signiert Query / Body | URL-Query (timestamp, sign) | Body-Felder (timestamp, sign) |
| Zeitstempel-Einheit | Millisekunden | Sekunden |
| Signaturschlüssel | secret | timestamp + "\n" + secret |
| HMAC-Algorithmus | SHA-256 | SHA-256 |
| Leerer Body signiert | Nein (Sign ist über stringToSign) | Ja (HMAC-Message ist leer) |
Zwei oberflächlich ähnliche Protokolle, drei reale Unterschiede. Sie existieren genau aus diesem Grund in separaten Sendern.
Verwandt
- Webhook — für Protokolle, die Ongrid nicht nativ spricht (Wecom Mass App, Microsoft Teams, Mattermost, Rocket Chat, OpsGenie, PagerDuty…).
- Kanäle-Übersicht — die einheitliche
notify.Message-Form, die jeder Sender konsumiert.