DingTalk
L'intégration DingTalk est aujourd'hui notification uniquement (pousse les alertes parties dans un groupe DingTalk). Le mode bidirectionnel IM-bridge est planifié mais pas livré ; le validateur accepte dingtalk en mode stream/webhook pour compat avant.
| Mode | Statut |
|---|---|
| Notification | Supporté. Bot de groupe personnalisé, signé. |
| Pont IM | Échafaudage présent ; support production différé. |
Payload
Le bot personnalisé de DingTalk accepte la forme standard de message texte :
{
"msgtype": "text",
"text": {"content": "[CRITICAL] node-01 swap_high\nswap_in_pages > 1000 for 5m\nsource: alert\ndedupe: alert:swap_high:device=7"}
}Le corps lui-même n'est pas signé. DingTalk authentifie la requête via les paramètres de requête de l'URL à la place — voir signature.
C'est le même formatter texte plat que les senders Feishu et WeCom utilisent, produit par formatText.
Signature
Quand le bot personnalisé a 加签 (signé) activé, DingTalk requiert que la requête porte un paramètre de requête URL timestamp et sign :
timestamp = milliseconds since epoch
stringToSign = timestamp + "\n" + secret
sign = base64(HMAC-SHA256(key=secret, message=stringToSign))La clé de signature est le secret seul (contrairement à Feishu, où le secret fait partie du string-to-sign). L'helper signDingTalkURL ajoute les deux paramètres de requête :
POST https://oapi.dingtalk.com/robot/send?access_token=…×tamp=1717012345000&sign=…Le corps reste du JSON brut. L'URL signée plus le corps est ce contre quoi DingTalk authentifie.
Utilisez des timestamps en millisecondes
La signature DingTalk attend des millisecondes, pas des secondes. Le signer utilise time.Now().UnixMilli(). Un timestamp en précision seconde donne une réponse 310000 « sign invalid ».
Setup
- Dans le groupe DingTalk cible → 群设置 → 智能群助手 → 添加机器人 → 自定义. Donnez-lui un nom et un avatar.
- Choisissez 安全设置 → 加签 et copiez le secret. (Vous pouvez aussi choisir une allowlist IP ou un filtre de mots-clés à la place ; le sender Ongrid en supporte n'importe lequel mais le mode signé est recommandé.)
- Copiez l'URL du webhook — ça ressemble à
https://oapi.dingtalk.com/robot/send?access_token=<token>. - Dans Ongrid : Settings → Channels → New → Provider =
dingtalk→ Endpoint = l'URL de webhook → Secret = le secret de signature de l'étape 2 (skippez si vous avez choisi le mode mots-clés ou IP allowlist).
Le message test doit matcher la règle de « sécurité » du groupe
Si vous avez choisi le filtre de mots-clés, le corps du message test DOIT contenir ce mot-clé sinon DingTalk le rejette. Le message test par défaut d'Ongrid est [INFO] Ongrid test. Soit configurez un mot-clé qui matche (Ongrid fonctionne), soit choisissez le mode signé.
Particularités
at n'est pas supporté
Le sender actuel livre du msgtype: text pur. Mentionner un utilisateur spécifique (atMobiles / atUserIds / isAtAll) n'est pas encore dans le constructeur de payload. Ajoutez-le via le webhook générique si vous en avez besoin aujourd'hui ; le support natif est une amélioration future.
Le retry sur 4xx est intentionnel
DingTalk renvoie HTTP 200 même pour les échecs au niveau protocole (mismatch de signature, message trop long, bot rate-limité), avec un errcode dans le corps JSON. Le sender traite tout 2xx comme succès et ne fait apparaître que les codes de statut HTTP non-2xx. Si le bot arrête silencieusement de livrer, vérifiez le log du manager pour dingtalk: send_text: code=… — Feishu et DingTalk partagent le même pattern de « 200 OK + errcode dans le corps ».
Rate-limit de messages DingTalk
DingTalk plafonne les messages de bot personnalisé à 20 par minute par bot. Le dampening du pipeline d'alerte (défaut 5m par clé de dédoublonnage) reste habituellement bien en dessous ; les clusters à haute cardinalité peuvent nécessiter une fenêtre de dampening plus haute ou un routage de canal par règle.
Comparaison avec Feishu
| Aspect | DingTalk | Feishu |
|---|---|---|
| Requête / corps signé | Query URL (timestamp, sign) | Champs du corps (timestamp, sign) |
| Unité de timestamp | Millisecondes | Secondes |
| Clé de signature | secret | timestamp + "\n" + secret |
| Algorithme HMAC | SHA-256 | SHA-256 |
| Corps vide signé | Non (sign est sur stringToSign) | Oui (le message HMAC est vide) |
Deux protocoles superficiellement similaires, trois différences réelles. Ils existent dans des Senders séparés exactement pour cette raison.
Voir aussi
- Webhook — pour les protocoles qu'Ongrid ne parle pas nativement (Wecom Mass app, Microsoft Teams, Mattermost, Rocket Chat, OpsGenie, PagerDuty…).
- Aperçu des canaux — la forme unifiée
notify.Messageque chaque Sender consomme.