DingTalk (Dingtalk)
Ce guide explique comment configurer un canal Qwen Code sur DingTalk (钉钉).
Prérequis
- Un compte organisation DingTalk
- Une application bot DingTalk disposant d’un AppKey et d’un AppSecret (voir ci-dessous)
Création d’un bot
- Accédez au portail développeur DingTalk
- Créez une nouvelle application (ou utilisez-en une existante)
- Dans l’application, activez la capacité Robot
- Dans les paramètres du Robot, activez le mode Stream (机器人协议 → Stream 模式)
- Notez l’AppKey (Client ID) et l’AppSecret (Client Secret) depuis la page des identifiants de l’application
Mode Stream
Le mode Stream de DingTalk utilise une connexion WebSocket sortante : aucune URL publique ni serveur n’est nécessaire. Le bot se connecte aux serveurs de DingTalk, qui poussent les messages via le WebSocket. Il s’agit du modèle de déploiement le plus simple.
Configuration
Ajoutez le canal à ~/.qwen/settings.json :
{
"channels": {
"my-dingtalk": {
"type": "dingtalk",
"clientId": "$DINGTALK_CLIENT_ID",
"clientSecret": "$DINGTALK_CLIENT_SECRET",
"senderPolicy": "open",
"sessionScope": "user",
"cwd": "/path/to/your/project",
"instructions": "You are a concise coding assistant responding via DingTalk.",
"groupPolicy": "open",
"groups": {
"*": { "requireMention": true }
}
}
}
}Définissez les identifiants comme variables d’environnement :
export DINGTALK_CLIENT_ID=<your-app-key>
export DINGTALK_CLIENT_SECRET=<your-app-secret>Ou définissez-les dans la section env de settings.json :
{
"env": {
"DINGTALK_CLIENT_ID": "your-app-key",
"DINGTALK_CLIENT_SECRET": "your-app-secret"
}
}Exécution
# Start only the DingTalk channel
qwen channel start my-dingtalk
# Or start all configured channels together
qwen channel startOuvrez DingTalk et envoyez un message au bot. Vous devriez voir une réaction emoji 👀 apparaître pendant le traitement par l’agent, suivie de la réponse.
Conversations de groupe
Les bots DingTalk fonctionnent à la fois en DM et dans les conversations de groupe. Pour activer la prise en charge des groupes :
- Définissez
groupPolicysur"allowlist"ou"open"dans la configuration de votre canal - Ajoutez le bot à un groupe DingTalk
- @mentionnez le bot dans le groupe pour déclencher une réponse
Par défaut, le bot nécessite une @mention dans les conversations de groupe (requireMention: true). Définissez "requireMention": false pour un groupe spécifique afin qu’il réponde à tous les messages. Consultez Conversations de groupe pour plus de détails.
Trouver l’ID de conversation d’un groupe
DingTalk utilise conversationId pour identifier les groupes. Vous pouvez le trouver dans les logs du service de canal lorsqu’un utilisateur envoie un message dans le groupe : recherchez le champ conversationId dans la sortie des logs.
Images et fichiers
Vous pouvez envoyer des photos et des documents au bot, pas seulement du texte.
Photos : Envoyez une image (capture d’écran, diagramme, etc.) et l’agent l’analysera grâce à ses capacités de vision. Cela nécessite un modèle multimodal : ajoutez "model": "qwen3.5-plus" (ou un autre modèle compatible vision) à la configuration de votre canal. DingTalk prend en charge l’envoi d’images directement ou dans le cadre de messages en texte enrichi (texte + images mélangés).
Fichiers : Envoyez un PDF, un fichier de code ou tout autre document. Le bot le télécharge depuis les serveurs de DingTalk et l’enregistre localement pour que l’agent puisse le lire avec ses outils de fichiers. Les fichiers audio et vidéo sont également pris en charge. Cela fonctionne avec n’importe quel modèle.
Différences clés avec Telegram
- Authentification : AppKey + AppSecret au lieu d’un token de bot statique. Le SDK gère automatiquement le rafraîchissement du token d’accès.
- Connexion : Flux WebSocket au lieu du polling : aucune IP publique ni URL de webhook n’est nécessaire.
- Formatage : Les réponses utilisent le dialecte Markdown de DingTalk (un sous-ensemble limité). Les tableaux sont automatiquement convertis en texte brut car DingTalk ne les affiche pas. Les messages longs sont découpés en blocs d’environ 3800 caractères.
- Indicateur de traitement : Une réaction emoji 👀 est ajoutée au message de l’utilisateur pendant le traitement, puis supprimée une fois la réponse envoyée.
- Téléchargement de médias : Processus en deux étapes : un
downloadCodeissu du message est échangé contre une URL de téléchargement temporaire via l’API de DingTalk. - Groupes : DingTalk utilise
isInAtListpour détecter les @mentions au lieu d’analyser les entités du message.
Conseils
- Utilisez des instructions compatibles Markdown DingTalk — DingTalk prend en charge un sous-ensemble limité de Markdown (titres, gras, liens, blocs de code, mais pas les tableaux). Ajouter des instructions comme “Use DingTalk markdown. Avoid tables.” aide l’agent à formater correctement les réponses.
- Restreignez l’accès — Dans un contexte organisationnel,
senderPolicy: "open"peut être acceptable. Pour un contrôle plus strict, utilisez"allowlist"ou"pairing". Consultez Appairage en DM pour plus de détails. - Messages référencés — Citer (répondre à) un message utilisateur inclut le texte cité comme contexte pour l’agent. La citation des réponses du bot n’est pas encore prise en charge.
Dépannage
Le bot ne se connecte pas
- Vérifiez que votre AppKey et AppSecret sont corrects
- Vérifiez que les variables d’environnement sont définies avant d’exécuter
qwen channel start - Assurez-vous que le mode Stream est activé dans les paramètres du bot sur le portail développeur DingTalk
- Vérifiez la sortie du terminal pour détecter d’éventuelles erreurs de connexion
Le bot ne répond pas dans les groupes
- Vérifiez que
groupPolicyest défini sur"allowlist"ou"open"(la valeur par défaut est"disabled") - Assurez-vous de @mentionner le bot dans le message du groupe
- Vérifiez que le bot a bien été ajouté au groupe
”No sessionWebhook in message”
Cela signifie que DingTalk n’a pas inclus d’endpoint de réponse dans le callback du message. Cela peut se produire si les permissions du bot sont mal configurées. Vérifiez les paramètres du bot dans le portail développeur.
”Sorry, something went wrong processing your message”
Cela signifie généralement que l’agent a rencontré une erreur. Consultez la sortie du terminal pour plus de détails.