owner_user_id et reçoivent uniquement les portées de jeton que vous leur accordez.
Configuration rapide
Dans ClickClack, ouvrez Workspace settings → Integrations → OpenClaw, créez un bot et copiez son jeton. Configurez ensuite le canal :workspace accepte un identifiant d’espace de travail (wsp_...), un slug ou un nom d’affichage.
channels add vérifie le serveur, le jeton et l’espace de travail après l’enregistrement, puis
indique si le Gateway en cours d’exécution a pris en compte le nouveau compte. Si OpenClaw est
déjà en cours d’exécution, ClickClack se connecte automatiquement et aucune deuxième commande
n’est nécessaire. Sinon, démarrez-le avec :
Alternative : jeton basé sur une variable d’environnement
Le compte par défaut peut lireCLICKCLACK_BOT_TOKEN au lieu de stocker un jeton
dans la configuration :
Référence JSON5
La structure de configuration équivalente est :baseUrl, une source de jeton et
workspace sont tous définis. Une source de jeton peut être token, tokenFile ou
CLICKCLACK_BOT_TOKEN pour le compte par défaut. workspace accepte un identifiant d’espace de travail
(wsp_...), un slug ou un nom ; le Gateway le résout en identifiant au démarrage.
Clés de configuration du compte
Si
plugins.allow est une liste restrictive non vide, sélectionner explicitement
ClickClack dans la configuration du canal ou exécuter openclaw plugins enable clickclack
ajoute clickclack à cette liste. L’installation lors de l’intégration utilise le même
comportement de sélection explicite. Ces chemins ne remplacent pas plugins.deny ni un
paramètre global plugins.enabled: false. L’exécution directe de
openclaw plugins install @openclaw/clickclack suit la politique normale
d’installation des plugins et enregistre également ClickClack dans une liste d’autorisation existante.
Plusieurs bots
Chaque compte ouvre sa propre connexion ClickClack en temps réel et utilise son propre jeton de bot.Modes de réponse
replyMode: "agent"(par défaut) transmet les messages entrants au pipeline normal de l’agent, notamment l’enregistrement de la session et la politique des outils.replyMode: "model"contourne le pipeline de l’agent et utilise lellm.completede l’environnement d’exécution du plugin pour les réponses directes du bot, éventuellement structurées parmodeletsystemPrompt. Le fournisseur et le modèle sélectionnés déterminent le budget de complétion.
plugins.entries.clickclack.llm.allowAgentIdOverride: true :
agent par défaut ; il
n’y est pas nécessaire.
Menu des commandes
Au démarrage du Gateway, chaque compte configuré publie les commandes natives d’OpenClaw dans ClickClack. Elles apparaissent dans la saisie semi-automatique de l’éditeur avec le pseudo du bot comme libellé. L’ensemble publié est entièrement remplacé à chaque démarrage, y compris par la suppression d’un menu obsolète lorsque le catalogue des commandes natives est vide. La synchronisation du menu des commandes est activée par défaut. DéfinissezcommandMenu: false sur un compte
pour la désactiver :
commands:write. Les offres ClickClack bot:write et
bot:admin actuelles incluent cette portée, qui peut également être accordée
individuellement. Les jetons créés avant l’introduction des menus de commandes peuvent nécessiter
l’ajout de cette portée ou un jeton de remplacement.
La synchronisation s’effectue au mieux et s’exécute une fois par démarrage du Gateway. Une portée manquante ou une défaillance
réseau consigne un avertissement ; un ancien serveur ClickClack dépourvu du point de terminaison consigne
le problème au niveau débogage. Aucun de ces échecs ne bloque le démarrage en temps réel. Les menus restent
disponibles lorsque l’agent est hors ligne et sont supprimés lorsque le bot quitte
l’espace de travail.
Cette version publie uniquement les spécifications des commandes natives. Les alias et les
catalogues de commandes de Skills, de plugins ou personnalisées ne sont pas ajoutés au menu. Si un
nom est également enregistré comme commande HTTP avec barre oblique, ClickClack traite d’abord cet
enregistrement ; les autres commandes du menu continuent d’être transmises par la voie normale
des messages.
Utilisez le mode agent pour les éléments de preuve de corrélation entre services. À partir d’un
identifiant de message ClickClack faisant autorité dans sa forme canonique msg_<ulid>, le canal dérive
l’identifiant d’exécution OpenClaw déterministe clickclack:<message-id>. Chaque appel de modèle est
alors visible dans les diagnostics sous la forme clickclack:<message-id>:model:<n> ; lorsque ce
tour utilise ClawRouter, le même identifiant d’appel de modèle est envoyé comme X-Request-ID.
Le mode model contourne les diagnostics normaux d’exécution et de session de l’agent et ne convient donc
pas à ce parcours de preuve.
Lorsqu’un événement en temps réel contient un payload.correlation_id validé, le
canal le transmet comme X-Correlation-ID lors de la récupération du message faisant autorité et
des requêtes de réponse ClickClack qui en résultent. Les valeurs utilisent le jeu sécurisé de
128 caractères de ClickClack (A-Z, a-z, 0-9, ., _, : et -) ; les valeurs non valides
sont omises. Ces jointures ne contiennent que des identifiants, jamais le corps des messages,
les prompts, les complétions, les identifiants d’authentification ni la sortie des outils.
Livraison durable des médias
Les réponses de l’agent contenant des médias utilisent obligatoirement une livraison durable. OpenClaw attribue des nonces stables par partie pour les messages et les téléversements avant la première écriture ClickClack, afin qu’une nouvelle tentative réutilise le même téléversement et le même message au lieu de consommer le quota de stockage ou de publier des doublons. Si un téléversement existe déjà après un redémarrage, OpenClaw ne relit ni le chemin local d’origine ni l’URL distante du média. Ce contrat de récupération nécessite un serveur ClickClack prenant en charge :GET /api/uploads/by-nonceavecX-ClickClack-Upload-Nonce: supportedpour les résultats trouvés et manquants.GET /api/messages/by-nonceavecX-ClickClack-Message-Nonce: supportedpour les résultats trouvés et manquants.- La création idempotente des messages et l’association des pièces jointes pour le même nonce limité au propriétaire et le même téléversement.
Lignes d’activité de l’agent
Par défaut, un canal ClickClack n’affiche rien pendant l’exécution d’un tour de l’agent ; seule la réponse finale apparaît. DéfinissezagentActivity: true sur un compte pour publier des lignes de message durables agent_commentary et agent_tool pendant le déroulement du tour :
- Désactivé par défaut. Les configurations standard et les anciens serveurs ClickClack ne sont pas affectés.
- Nécessite la portée de jeton
agent_activity:write. Cette portée est distincte debot:writeet n’en est pas héritée ; créez le jeton du bot avec--scopes bot:write,agent_activity:write(ou accordez cette portée à un jeton existant) avant d’activer l’option. - Dégradation au mieux. Si le jeton ne dispose pas de
agent_activity:writeou si le serveur rejette les écritures d’activité, les échecs sont consignés et la réponse finale est tout de même livrée normalement ; aucune ligne d’activité n’apparaît. - Les lignes sont regroupées par tour (
turn_id), fusionnées afin qu’une étape logique corresponde à une ligne, et les lignes d’outil utilisent la même mise en forme de progression que Discord/Slack/Telegram (nom de l’outil suivi des détails de la commande). - Métadonnées d’attribution. Les publications rédigées par l’agent (lignes d’activité et réponse finale) comportent les champs
author_modeletauthor_thinking, résolus à partir du modèle réellement utilisé pour le tour (y compris après un repli). Les serveurs qui ne définissent pas ces colonnes ignorent les champs JSON inconnus ; ceux qui les conservent peuvent déterminer « quel modèle a produit cette ligne, et à quel niveau de réflexion » pour chaque message.
Cibles
channel:<name-or-id>envoie vers un canal de l’espace de travail. Les cibles sans préfixe utilisentchannel:par défaut.dm:<user_id>crée ou réutilise une conversation directe avec cet utilisateur.thread:<message_id>répond dans le fil de discussion dont ce message est la racine.
clickclack: ou cc:.
Pour les médias sortants, l’API de téléversement de ClickClack est utilisée, puis le téléversement durable
est joint au message de canal, à la réponse dans le fil de discussion ou au message privé créé. Les fichiers locaux et les URL de médias
distants pris en charge suivent la politique habituelle d’accès aux médias d’OpenClaw, avec une limite de 64 MiB
par fichier. Les envois durables mis en file d’attente utilisent des nonces distincts propres au propriétaire pour chaque
téléversement et chaque partie de message, puis réessaient d’associer la pièce jointe à ces mêmes
objets. Consultez Distribution durable des médias pour connaître le contrat
du serveur et le comportement de récupération.
Exemples :
Autorisations
Les portées des jetons ClickClack sont appliquées par l’API ClickClack.bot:read: lecture des données de l’espace de travail, des canaux, des messages, des fils de discussion, des messages privés, du temps réel et des profils.bot:write:bot:read, ainsi que les messages de canal, les réponses dans les fils de discussion, les messages privés, les téléversements et la publication du menu de commandes.bot:admin:bot:write, ainsi que la création de canaux.commands:write: publication du menu de commandes du bot. Inclus dans les ensemblesbot:writeetbot:adminactuels et pouvant être accordé individuellement.agent_activity:write: lignes durables d’activité de l’agent (agent_commentary/agent_tool). Non hérité parbot:writenibot:admin; requis uniquement lorsqueagentActivity: trueest défini.
bot:write actuelle pour les conversations normales avec l’agent et la synchronisation du menu de commandes. Ajoutez agent_activity:write lors de l’activation des lignes d’activité de l’agent.
Dépannage
ClickClack is not configured for account "<id>": définissezbaseUrl,token(par exemple viaCLICKCLACK_BOT_TOKEN) etworkspacepour ce compte.ClickClack workspace not found: <value>: définissezworkspacesur l’identifiant, le slug ou le nom de l’espace de travail renvoyé par ClickClack.- Aucune réponse entrante : vérifiez que le jeton dispose d’un accès en lecture en temps réel et notez que le bot ignore ses propres messages ainsi que ceux des autres bots.
- Échec des envois vers les canaux : vérifiez que le bot est membre de l’espace de travail et dispose de
bot:write. - Aucun menu de commandes : vérifiez que
commandMenun’est pasfalse, que le serveur ClickClack prend en chargePUT /api/bots/self/commandset que le jeton dispose decommands:write.