OpenClaw

Canal Signal OpenClaw

Messagerie
Difficile

Connectez OpenClaw à Signal en utilisant signal-cli — une interface en ligne de commande tierce et open-source pour le protocole Signal. Cette intégration offre une messagerie IA axée sur la confidentialité avec un chiffrement de bout en bout complet. OpenClaw communique avec un démon signal-cli via HTTP JSON-RPC et Server-Sent Events, permettant à votre assistant IA d'envoyer et recevoir des messages sur Signal. Un numéro de téléphone dédié est requis pour le compte du bot.

Info rapide
DifficultéDifficile
CatégorieMessagerie
Fonctionnalités prises en charge4 / 6

Signal Fonctionnalités prises en charge

Messages texte

Pris en charge

Médias et fichiers

Pris en charge

Réactions

Pris en charge

Fils de discussion

Non pris en charge

Messages vocaux

Non pris en charge

Discussion de groupe

Pris en charge

Signal Prérequis

  • Un numéro de téléphone dédié pour le compte Signal du bot (séparé de votre numéro personnel)
  • Java Runtime Environment (JRE 25+) installé sur votre serveur
  • signal-cli installé et accessible dans votre PATH
  • OpenClaw Gateway en fonctionnement et configuré
  • Un compte Signal existant pour associer le bot (ou une nouvelle inscription)

Signal Configuration rapide

1

Installer signal-cli

Téléchargez et installez signal-cli depuis le dépôt GitHub officiel. Java 25 ou ultérieur est requis. Vérifiez l'installation en exécutant 'signal-cli --version' dans votre terminal.

2

Associer ou enregistrer un compte Signal

Associez signal-cli à un compte Signal existant en exécutant 'signal-cli link -n "OpenClaw"' et en scannant le QR code depuis un autre appareil. Alternativement, enregistrez un nouveau compte avec 'signal-cli -a +15551234567 register'. Utilisez un numéro dédié — l'utilisation de votre compte personnel provoquera des boucles de messages.

3

Ajouter la configuration du canal Signal

Ajoutez la configuration du canal Signal dans ~/.openclaw/openclaw.json. Définissez le champ 'account' avec le numéro de téléphone E.164 de votre bot et configurez la dmPolicy (pairing, allowlist ou open) pour contrôler qui peut envoyer des messages à votre assistant.

4

Démarrer le Gateway et envoyer un message test

Lancez le processus Gateway. OpenClaw démarrera automatiquement le démon signal-cli. Envoyez un message au numéro du bot depuis un autre compte Signal. Si vous utilisez la politique pairing par défaut, approuvez l'expéditeur via 'openclaw pairing approve signal <code>'.

Signal Exemple de configuration

config.json
{
  "channels": {
    "signal": {
      "enabled": true,
      "account": "+15551234567",
      "dmPolicy": "pairing"
    }
  }
}

Signal Documentation Détaillée

Aperçu de l'architecture

OpenClaw se connecte à Signal via signal-cli — un client en ligne de commande basé sur Java qui implémente le protocole Signal. L'architecture utilise une interface HTTP JSON-RPC avec des Server-Sent Events (SSE) pour la livraison de messages en temps réel. Par défaut, OpenClaw lance automatiquement un processus démon signal-cli au démarrage du Gateway. Le démon gère toutes les opérations du protocole Signal (chiffrement, échange de clés, envoi/réception de messages), tandis qu'OpenClaw communique avec lui via une API HTTP locale. Cela maintient la couche du protocole Signal complètement séparée de la logique IA. Alternativement, vous pouvez exécuter signal-cli en tant que démon externe et configurer OpenClaw pour s'y connecter via la configuration httpUrl — utile pour gérer signal-cli indépendamment ou l'exécuter sur un hôte différent.
Le démon auto-démarré se lie à 127.0.0.1:8080 par défaut. Modifiez httpHost et httpPort si vous avez besoin d'une adresse différente.
Exécuter signal-cli en externe vous donne plus de contrôle sur les mises à jour et la gestion du cycle de vie. Définissez httpUrl vers l'URL complète du démon pour désactiver le démarrage automatique.

Configuration du compte Signal

Votre bot a besoin d'un compte Signal dédié. N'utilisez pas votre numéro personnel — Signal ignore les messages auto-envoyés, et l'utilisation simultanée de comptes personnel et bot sur le même numéro crée des conflits de routage. Deux options pour la configuration du compte : • Associer à un appareil existant — Exécutez 'signal-cli link -n "OpenClaw"' pour générer une URI de liaison d'appareil. Scannez le QR code depuis l'application Signal principale. C'est l'approche recommandée car c'est la plus simple. • Inscription directe — Exécutez 'signal-cli -a +15551234567 register' pour enregistrer un nouveau compte Signal directement. Vous devrez vérifier le numéro par SMS ou appel vocal. Une fois associé ou enregistré, signal-cli stocke ses identifiants et clés localement. Ceux-ci persistent après les redémarrages.
openclaw.json
{
  "channels": {
    "signal": {
      "account": "+15551234567",
      "cliPath": "/usr/local/bin/signal-cli"
    }
  }
}
Évitez d'exécuter le bot sur votre numéro Signal personnel. La protection contre les messages auto-envoyés de Signal ignorera les messages envoyés à vous-même, et le bot ne fonctionnera pas correctement.

Mode démon externe

Pour les déploiements avancés, vous pouvez exécuter signal-cli en tant que processus démon autonome en dehors d'OpenClaw. C'est utile lorsque vous souhaitez gérer les mises à jour de signal-cli indépendamment, l'exécuter sur une machine séparée ou partager un seul démon entre plusieurs services. Démarrez le démon manuellement avec : signal-cli -a +15551234567 daemon --http=127.0.0.1:8080 Puis configurez OpenClaw pour s'y connecter en définissant httpUrl. Lorsque httpUrl est configuré, OpenClaw ne démarre pas automatiquement le démon et se connecte au processus existant à la place.
openclaw.json
{
  "channels": {
    "signal": {
      "account": "+15551234567",
      "httpUrl": "http://127.0.0.1:8080/api/v1/rpc"
    }
  }
}
Lorsque vous utilisez un démon externe, assurez-vous qu'il est démarré avant le Gateway. OpenClaw attendra jusqu'à startupTimeoutMs (maximum 120 secondes) que le démon devienne disponible.

Politiques de DM

Les politiques de DM (Messages Directs) contrôlent qui peut interagir avec votre assistant IA en conversations privées. OpenClaw prend en charge quatre politiques : • pairing (par défaut) — Les nouveaux contacts reçoivent un code d'association aléatoire lorsqu'ils envoient leur premier message au bot. Le code expire après 1 heure. Approuvez via 'openclaw pairing approve signal <code>' dans votre terminal. Une fois approuvé, ils peuvent discuter librement. • allowlist — Seuls les numéros de téléphone ou UUID listés dans allowFrom peuvent envoyer des messages au bot. Tous les autres sont silencieusement ignorés. Utilisez le format E.164 pour les numéros de téléphone ou 'uuid:<id>' pour les contacts sans numéro. • open — Toute personne qui envoie un message au bot reçoit une réponse. Nécessite l'ajout de '*' à la liste allowFrom comme confirmation de sécurité. À utiliser avec prudence. • disabled — La fonctionnalité DM est complètement désactivée.
openclaw.json
{
  "channels": {
    "signal": {
      "dmPolicy": "allowlist",
      "allowFrom": ["+15551234567", "uuid:a1b2c3d4-e5f6-7890-abcd-ef1234567890"]
    }
  }
}
Les contacts qui se sont inscrits sur Signal sans partager leur numéro de téléphone apparaîtront comme 'uuid:<id>' dans la liste allowFrom. Consultez les logs du Gateway pour trouver leur UUID.
Les limites d'historique par contact peuvent être définies via dms["<phone_or_uuid>"].historyLimit pour remplacer le dmHistoryLimit global.

Gestion des discussions de groupe

OpenClaw prend en charge les discussions de groupe Signal avec un contrôle d'accès configurable : • open — Accepter les messages de tous les membres du groupe • allowlist — Seuls les expéditeurs approuvés (via groupAllowFrom) peuvent déclencher le bot • disabled — Ignorer tous les messages de groupe Les conversations de groupe sont entièrement isolées des DM. Les messages sont étiquetés comme 'agent:<agentId>:signal:group:<groupId>' pour maintenir un contexte et un historique séparés par groupe. Vous pouvez configurer historyLimit par groupe pour contrôler le nombre de messages inclus comme contexte IA (par défaut 50, définir à 0 pour désactiver l'historique).
openclaw.json
{
  "channels": {
    "signal": {
      "groupPolicy": "open",
      "historyLimit": 50
    }
  }
}

Confidentialité et chiffrement de bout en bout

Signal est la référence en matière de messagerie privée. Tous les messages entre le bot et les contacts sont chiffrés de bout en bout en utilisant le protocole Signal (algorithme Double Ratchet + accord de clés X3DH). OpenClaw ne voit jamais les messages en clair en transit — le déchiffrement se fait localement dans le processus signal-cli sur votre serveur. Propriétés clés de confidentialité : • Les messages sont chiffrés de client à client — les serveurs de Signal ne peuvent pas les lire • signal-cli stocke les clés de chiffrement localement sur votre serveur • Aucune donnée ne passe par l'infrastructure d'Anthropic, OpenAI ou de tout autre fournisseur IA tiers (les messages sont déchiffrés localement, traités par votre Gateway auto-hébergé, et seul le contexte de conversation est envoyé à votre fournisseur IA configuré) • Les événements de stories peuvent être entièrement ignorés avec ignoreStories: true
Pour une confidentialité maximale, combinez Signal avec un fournisseur LLM hébergé localement (ex : Ollama) pour conserver toutes les données entièrement sur votre infrastructure.

Réactions

OpenClaw prend en charge l'envoi et la réception de réactions emoji sur les messages Signal. Les réactions sont utiles pour l'accusé de réception (montrer à l'utilisateur que son message a été reçu) et pour les comportements interactifs de l'agent. La syntaxe des réactions utilise l'outil message avec des cibles au format E.164, format UUID ou format groupe : • Réaction DM : target=+15551234567 ou target=uuid:<id> • Réaction groupe : target=signal:group:<groupId> avec targetAuthor=uuid:<sender> Configurez le comportement des réactions globalement ou par compte : • actions.reactions — Activer/désactiver la capacité de réaction (par défaut true) • reactionLevel — off/ack (désactivé) ou minimal/extensive (activé avec instructions)
openclaw.json
{
  "channels": {
    "signal": {
      "reactionLevel": "minimal"
    }
  }
}

Médias et pièces jointes

OpenClaw gère les fichiers multimédias sur Signal, y compris les images, documents, fichiers audio et vidéos. Les médias sont transférés via signal-cli sous forme de données encodées en base64. Les médias entrants sont automatiquement téléchargés et traités sauf si ignoreAttachments est défini sur true. Les médias sortants sont récupérés en base64 depuis signal-cli avant d'être envoyés. La limite de taille de fichier par défaut est de 8 Mo (mediaMaxMb). Signal lui-même prend en charge des fichiers plus volumineux, mais la surcharge d'encodage base64 et le temps de traitement font de 8 Mo une valeur par défaut pratique.
openclaw.json
{
  "channels": {
    "signal": {
      "mediaMaxMb": 8,
      "ignoreAttachments": false
    }
  }
}

Indicateurs de saisie et accusés de lecture

OpenClaw envoie des indicateurs de saisie pendant la génération des réponses IA pour maintenir un ressenti de conversation naturel. Le Gateway appelle l'endpoint sendTyping de signal-cli et rafraîchit l'indicateur périodiquement pendant la génération de la réponse. Les accusés de lecture peuvent être transférés pour les contacts DM approuvés lorsque sendReadReceipts est activé. Cela permet aux expéditeurs de savoir que leur message a été traité. Note : Les accusés de lecture de groupe ne sont pas pris en charge par signal-cli.
openclaw.json
{
  "channels": {
    "signal": {
      "sendReadReceipts": true
    }
  }
}

Découpage du texte et livraison

Pour les longues réponses IA, OpenClaw découpe automatiquement le texte en plusieurs messages. La taille de fragment par défaut est de 4 000 caractères par message. Deux modes de découpage sont disponibles : • length (par défaut) — Découpage strict à la limite de caractères • newline — Découpage aux limites de paragraphes d'abord, puis application de la limite de caractères Les cibles de livraison utilisent des numéros de téléphone E.164, des UUID ou des ID de groupe : • DM : signal:+15551234567 ou numéro E.164 simple • DM UUID : uuid:<id> ou UUID simple • Groupes : signal:group:<groupId>
openclaw.json
{
  "channels": {
    "signal": {
      "textChunkLimit": 4000,
      "chunkMode": "newline"
    }
  }
}

Signal Référence de Configuration

enabled
Type: booleanDefault: true

Activer ou désactiver le canal Signal

account
Type: stringDefault: ""

Numéro de téléphone du bot au format E.164 (ex : +15551234567). Requis

cliPath
Type: stringDefault: "signal-cli"

Chemin vers l'exécutable signal-cli

httpUrl
Type: stringDefault: ""

URL complète d'un démon signal-cli externe. Lorsque défini, désactive le démarrage automatique

httpHost
Type: stringDefault: "127.0.0.1"

Adresse de l'hôte pour le démon signal-cli auto-démarré

httpPort
Type: numberDefault: 8080

Port pour le démon signal-cli auto-démarré

autoStart
Type: booleanDefault: true

Démarrer automatiquement le démon signal-cli au lancement du Gateway

startupTimeoutMs
Type: numberDefault: 30000

Temps maximum (ms) d'attente pour que le démon signal-cli devienne disponible. Maximum 120000

dmPolicy
Type: stringDefault: "pairing"

Contrôle qui peut envoyer des DM au bot. Options : pairing, allowlist, open, disabled

allowFrom
Type: string[]Default: []

Numéros de téléphone (E.164) ou identifiants uuid:<id> autorisés à envoyer des messages au bot

dmHistoryLimit
Type: numberDefault: 50

Nombre de messages DM récents à inclure comme contexte IA par conversation

groupPolicy
Type: stringDefault: "disabled"

Politique de discussion de groupe. Options : disabled, allowlist, open

groupAllowFrom
Type: string[]Default: []

Numéros de téléphone ou UUID autorisés à déclencher le bot dans les groupes (quand groupPolicy est allowlist)

historyLimit
Type: numberDefault: 50

Nombre maximum de messages de groupe inclus comme contexte IA. Définir à 0 pour désactiver

sendReadReceipts
Type: booleanDefault: false

Transférer les accusés de lecture pour les contacts DM approuvés

textChunkLimit
Type: numberDefault: 4000

Nombre maximum de caractères par message sortant avant découpage

chunkMode
Type: stringDefault: "length"

Mode de découpage du texte. Options : length (découpage strict), newline (respecte les paragraphes)

mediaMaxMb
Type: numberDefault: 8

Taille maximale des fichiers multimédias en mégaoctets pour les pièces jointes entrantes/sortantes

ignoreAttachments
Type: booleanDefault: false

Ne pas télécharger les pièces jointes multimédias entrantes

ignoreStories
Type: booleanDefault: false

Ignorer entièrement les événements de stories Signal

receiveMode
Type: stringDefault: ""

Mode de réception des messages. Options : on-start (récupérer au démarrage), manual

configWrites
Type: booleanDefault: true

Autoriser les commandes /config à modifier les paramètres du canal en temps réel

reactionLevel
Type: stringDefault: "ack"

Capacité de réaction du bot. Options : off, ack, minimal, extensive

Signal Questions Fréquentes

Signal Dépannage

signal-cli ne démarre pas avec des erreurs Java

Java n'est pas installé, ou la version installée est trop ancienne. signal-cli nécessite Java 25 ou ultérieur.

Installez OpenJDK 25+ sur votre serveur. Vérifiez avec 'java --version'. Si plusieurs versions de Java sont installées, assurez-vous que la bonne est dans votre PATH ou définissez JAVA_HOME. Vérifiez également que signal-cli est correctement installé en exécutant 'signal-cli --version'.
Le bot ne répond à aucun message

Le champ account peut être incorrect, le démon signal-cli peut ne pas être en cours d'exécution, ou l'expéditeur n'a pas été approuvé via l'association.

Vérifiez que le numéro de compte correspond au compte signal-cli enregistré (format E.164 avec indicatif pays). Exécutez 'openclaw status' et 'openclaw gateway status' pour vérifier que le démon fonctionne. Si vous utilisez la politique pairing, vérifiez les associations en attente avec 'openclaw pairing list signal' et approuvez l'expéditeur.
Les DM sont ignorés même après approbation

L'expéditeur peut ne pas être dans la liste allowFrom (lors de l'utilisation de la politique allowlist), ou le format d'identifiant de l'expéditeur peut ne pas correspondre.

Consultez les logs du Gateway pour l'identifiant de l'expéditeur. Certains utilisateurs Signal s'inscrivent sans partager leur numéro de téléphone — ils apparaîtront comme 'uuid:<id>' au lieu d'un numéro de téléphone. Ajoutez le bon identifiant à allowFrom. Exécutez 'openclaw channels status --probe' pour des diagnostics détaillés du canal.
Les messages de groupe ne sont pas reçus

groupPolicy est défini sur 'disabled' (par défaut), ou le groupe n'est pas dans la liste autorisée.

Définissez groupPolicy sur 'open' pour accepter tous les messages de groupe, ou utilisez 'allowlist' et ajoutez l'ID du groupe à groupAllowFrom. Consultez les logs du Gateway pour l'ID du groupe lorsqu'un message de groupe est reçu.
La connexion au démon externe échoue (httpUrl inaccessible)

Le démon signal-cli n'est pas en cours d'exécution, l'URL est incorrecte, ou un pare-feu bloque la connexion.

Vérifiez que le démon fonctionne et écoute sur l'hôte:port attendu. Testez la connectivité avec 'curl http://127.0.0.1:8080/api/v1/rpc'. Vérifiez les règles de pare-feu si vous fonctionnez entre machines. Assurez-vous que le démon a été démarré avec le bon flag --http correspondant à votre configuration httpUrl.