CLI commands
Message
openclaw message
Commande sortante unique permettant d’envoyer des messages et d’effectuer des actions sur les canaux Discord, Google Chat, iMessage, Matrix, Mattermost (plugin), Microsoft Teams, Signal, Slack, Telegram et WhatsApp.
openclaw message <subcommand> [flags]Sélection du canal
--channel <name>est requis si plusieurs canaux sont configurés ; si un seul canal est configuré, celui-ci est utilisé par défaut.- Valeurs :
discord|googlechat|imessage|matrix|mattermost|msteams|signal|slack|telegram|whatsapp(Mattermost nécessite le plugin). - Les cibles préfixées par un canal (par exemple
discord:channel:123) permettent d’identifier le plugin propriétaire sans spécifier explicitement--channel.
Formats de cible (-t, --target)
| Canal | Format |
|---|---|
| Discord | channel:<id>, user:<id>, mention <@id> ou identifiant numérique brut (traité comme un identifiant de canal) |
| Google Chat | spaces/<spaceId> ou users/<userId> |
| iMessage | identifiant, chat_id:<id>, chat_guid:<guid> ou chat_identifier:<id> |
| Mattermost (plugin) | channel:<id>, user:<id>, @username ou identifiant brut (traité comme un canal) |
| Matrix | @user:server, !room:server ou #alias:server |
| Microsoft Teams | conversation:<id> (19:...@thread.tacv2), identifiant de conversation brut ou user:<aad-object-id> |
| Signal | +E.164, group:<id>, uuid:<id>, username:<name>/u:<name> ou l’un de ces formats préfixé par signal: |
| Slack | channel:<id> ou user:<id> (un identifiant brut est traité comme un canal) |
| Telegram | identifiant de discussion, @username ou cible de sujet de forum : <chatId>:topic:<topicId> (ou --thread-id <topicId>) |
E.164, JID de groupe (...@g.us) ou JID de canal/newsletter (...@newsletter) |
Recherche par nom de canal : pour les fournisseurs disposant d’un annuaire (Discord/Slack/etc.), les noms
tels que Help ou #help sont résolus via le cache de l’annuaire, avec recours à une recherche en direct
dans l’annuaire en cas d’absence dans le cache lorsque le fournisseur la prend en charge.
Options communes
Chaque action accepte : --channel <name>, --account <id>, --json,
--dry-run, --verbose. Les actions nécessitant une destination acceptent également
-t, --target <dest>.
Résolution des SecretRefs
openclaw message résout les SecretRefs des canaux avant d’exécuter l’action,
avec la portée la plus restreinte possible :
- limitée au canal lorsque
--channelest défini (ou déduit d’une cible préfixée) - limitée au compte lorsque
--accountest également défini - tous les canaux configurés lorsque ni l’un ni l’autre n’est défini
Les SecretRefs non résolues sur des canaux sans rapport ne bloquent jamais une action ciblée ; une SecretRef non résolue sur le canal ou le compte sélectionné entraîne l’échec sécurisé de l’action.
Actions
Principales
| Action | Canaux | Requis | Remarques |
|---|---|---|---|
send |
Discord, Google Chat, iMessage, Matrix, Mattermost (plugin), Microsoft Teams, Signal, Slack, Telegram, WhatsApp | --target, plus l’un de --message/--media/--presentation |
Voir Envoi ci-dessous. |
poll |
Discord, Matrix, Microsoft Teams, Telegram, WhatsApp | --target, --poll-question, --poll-option (répétable) |
Voir Sondage ci-dessous. |
react |
Discord, Matrix, Nextcloud Talk, Signal, Slack, Telegram, WhatsApp | --message-id, --target |
--emoji, --remove (nécessite --emoji ; omettez-le pour effacer vos propres réactions lorsque cette fonction est prise en charge, voir Réactions). WhatsApp : --participant, --from-me. Les réactions de groupe Signal nécessitent --target-author ou --target-author-uuid. Nextcloud Talk permet uniquement d’ajouter des réactions ; --remove génère une erreur. |
reactions |
Discord, Matrix, Microsoft Teams, Slack | --message-id, --target |
--limit. |
read |
Discord, Matrix, Microsoft Teams, Slack | --target |
--limit, --message-id, --before, --after. Discord : --around, --include-thread. Slack : --message-id lit un horodatage précis ; combinez-le avec --thread-id pour obtenir une réponse exacte dans un fil. |
edit |
Discord, Matrix, Microsoft Teams, Slack, Telegram | --message-id, --message, --target |
Les fils de forum Telegram utilisent --thread-id. |
delete |
Discord, Matrix, Microsoft Teams, Slack, Telegram | --message-id, --target |
|
pin / unpin |
Discord, Matrix, Microsoft Teams, Slack | --message-id, --target |
unpin accepte également --pinned-message-id (Microsoft Teams : l’identifiant de ressource d’épinglage/de liste des épinglages, et non l’identifiant du message de discussion). |
pins (liste) |
Discord, Matrix, Microsoft Teams, Slack | --target |
--limit. |
permissions |
Discord, Matrix | --target |
Matrix : disponible uniquement lorsque le chiffrement est activé et que les actions de vérification sont autorisées. |
search |
Discord | --guild-id, --query |
--channel-id, --channel-ids (répétable), --author-id, --author-ids (répétable), --limit. |
member info |
Discord, Matrix, Microsoft Teams, Slack | --user-id |
--guild-id (Discord). |
Envoi
openclaw message send --channel discord \ --target channel:123 --message "hi" --reply-to 456--media <path-or-url>: joint une image, un fichier audio, une vidéo ou un document (chemin local ou URL).--presentation <json>: charge utile partagée comprenant des blocstext,context,divider,chart,table,buttonsetselect, dont le rendu est adapté aux capacités de chaque canal. Voir Présentation des messages.--delivery <json>: préférences générales de distribution, par exemple{"pin": true}.--pinest un raccourci permettant d’épingler le message lors de sa distribution lorsque le canal le prend en charge.--reply-to <id>,--thread-id <id>(sujet de forum Telegram ; horodatage du fil Slack, même champ que--reply-to).--force-document(Telegram, WhatsApp) : envoie les images/GIF/vidéos sous forme de documents afin d’éviter la compression du canal.--silent(Telegram, Discord) : envoie sans notification.--gif-playback(WhatsApp uniquement) : traite le média vidéo comme une animation GIF.
openclaw message send --channel discord \ --target channel:123 --message "Choose:" \ --presentation '{"blocks":[{"type":"buttons","buttons":[{"label":"Approve","value":"approve","style":"success"},{"label":"Decline","value":"decline","style":"danger"}]}]}'openclaw message send --channel telegram --target @mychat --message "Choose:" \ --presentation '{"blocks":[{"type":"buttons","buttons":[{"label":"Yes","value":"cmd:yes"},{"label":"No","value":"cmd:no"}]}]}'Slack affiche nativement les blocs de graphique pris en charge ; les autres canaux reçoivent les mêmes données sous forme de texte lisible :
openclaw message send --channel slack --target channel:C123 \ --presentation '{"blocks":[{"type":"chart","chartType":"bar","title":"Quarterly revenue","categories":["Q1","Q2"],"series":[{"name":"Revenue","values":[120,145]}],"xLabel":"Quarter"}]}'Slack affiche également les blocs de tableau explicites de manière native. Les autres canaux reçoivent la légende et chaque ligne sous forme de texte déterministe :
openclaw message send --channel slack --target channel:C123 \ --presentation '{"title":"Pipeline report","blocks":[{"type":"table","caption":"Open pipeline","headers":["Account","Stage","ARR"],"rows":[["Acme","Won",125000],["Globex","Review",82000]],"rowHeaderColumnIndex":0}]}'Les boutons de mini-application Telegram utilisent webApp (web_app reste analysé pour les anciens
documents JSON) et ne s’affichent que dans les discussions privées entre un utilisateur et le bot :
openclaw message send --channel telegram --target 123456789 --message "Open app:" \ --presentation '{"blocks":[{"type":"buttons","buttons":[{"label":"Launch","webApp":{"url":"https://example.com/app"}}]}]}'openclaw message send --channel telegram --target @mychat \ --media ./diagram.png --force-documentopenclaw message send --channel msteams \ --target conversation:19:abc@thread.tacv2 \ --presentation '{"title":"Status update","blocks":[{"type":"text","text":"Build completed"}]}'Sondage
openclaw message poll --channel discord \ --target channel:123 \ --poll-question "Snack?" \ --poll-option Pizza --poll-option Sushi \ --poll-multi --poll-duration-hours 48--poll-option <choice>: à répéter de 2 à 12 fois.--poll-multi: autorise plusieurs sélections.- Discord :
--poll-duration-hours,--silent,--message. - Telegram :
--poll-duration-seconds <n>(5-600),--silent,--poll-anonymous/--poll-public,--thread-id.
openclaw message poll --channel telegram \ --target @mychat \ --poll-question "Lunch?" \ --poll-option Pizza --poll-option Sushi \ --poll-duration-seconds 120 --silentopenclaw message poll --channel msteams \ --target conversation:19:abc@thread.tacv2 \ --poll-question "Lunch?" \ --poll-option Pizza --poll-option SushiFils de discussion
thread create: canaux Discord. Obligatoires :--thread-name,--target(identifiant du canal). Facultatifs :--message-id,--message,--auto-archive-min.thread list: canaux Discord. Obligatoire :--guild-id. Facultatifs :--channel-id,--include-archived,--before,--limit.thread reply: canaux Discord. Obligatoires :--target(identifiant du fil),--message. Facultatifs :--media,--reply-to.
Émojis
emoji list: Discord (--guild-id), Slack (aucune option supplémentaire).emoji upload: Discord. Obligatoires :--guild-id,--emoji-name,--media. Facultatif :--role-ids(répétable).
Autocollants
sticker send: Discord. Obligatoires :--target,--sticker-id(répétable). Facultatif :--message.sticker upload: Discord. Obligatoires :--guild-id,--sticker-name,--sticker-desc,--sticker-tags,--media.
Rôles, canaux, voix et événements (Discord)
role info:--guild-id.role add/role remove:--guild-id,--user-id,--role-id.channel info:--target.channel list:--guild-id.voice status:--guild-id,--user-id.event list:--guild-id.event create: obligatoires :--guild-id,--event-name,--start-time; facultatifs :--end-time,--desc,--channel-id,--location,--event-type,--image <url-or-path>.
Modération (Discord)
timeout:--guild-id,--user-id; facultatifs :--duration-minou--until(omettez les deux pour supprimer l’exclusion temporaire),--reason.kick:--guild-id,--user-id,--reason.ban:--guild-id,--user-id,--delete-days,--reason.
Diffusion
openclaw message broadcast --targets <target...> [--channel all] [--message <text>] [--media <url>] [--dry-run]Envoie une même charge utile à plusieurs destinataires. --targets accepte une liste
séparée par des espaces. Utilisez --channel all pour cibler tous les fournisseurs configurés.