Skip to main content

openclaw message

Single outbound command for sending messages and channel actions across Discord, Google Chat, iMessage, Matrix, Mattermost (plugin), Microsoft Teams, Signal, Slack, Telegram, and WhatsApp.

Channel selection

  • --channel <name> is required if more than one channel is configured; with exactly one channel configured, that channel is the default.
  • Values: discord|googlechat|imessage|matrix|mattermost|msteams|signal|slack|telegram|whatsapp (Mattermost requires the plugin).
  • Channel-prefixed targets (for example discord:channel:123) resolve the owning plugin without an explicit --channel.

Target formats (-t, --target)

Channel name lookup: for providers with a directory (Discord/Slack/etc), names like Help or #help resolve via the directory cache, falling back to a live directory lookup on a cache miss where the provider supports it.

Common flags

Every action accepts: --channel <name>, --account <id>, --json, --dry-run, --verbose. Actions that take a destination also accept -t, --target <dest>.

SecretRef resolution

openclaw message resolves channel SecretRefs before running the action, scoped as narrowly as possible:
  • channel-scoped when --channel is set (or inferred from a prefixed target)
  • account-scoped when --account is also set
  • all configured channels when neither is set
Unresolved SecretRefs on unrelated channels never block a targeted action; an unresolved SecretRef on the selected channel/account fails the action closed.

Actions

Core

Send

  • --media <path-or-url>: attach image/audio/video/document (local path or URL).
  • --presentation <json>: shared payload with text, context, divider, chart, table, buttons, and select blocks, rendered per channel capability. See Message Presentation.
  • --delivery <json>: generic delivery preferences, for example {"pin": true}. --pin is shorthand for pinned delivery when the channel supports it.
  • --reply-to <id>, --thread-id <id> (Telegram forum topic; Slack thread timestamp, same field as --reply-to).
  • --force-document (Telegram, WhatsApp): send images/GIFs/videos as documents to avoid channel compression.
  • --silent (Telegram, Discord): send without a notification.
  • --gif-playback (WhatsApp only): treat video media as GIF playback.
Slack renders supported chart blocks natively; other channels receive the same data as readable text:
Slack also renders explicit table blocks natively. Other channels receive the caption and every row as deterministic text:
Telegram Mini App buttons use webApp (web_app still parses for legacy JSON) and only render in private chats between a user and the bot:

Poll

  • --poll-option <choice>: repeat 2-12 times.
  • --poll-multi: allow multiple selections.
  • Discord: --poll-duration-hours, --silent, --message.
  • Telegram: --poll-duration-seconds <n> (5-600), --silent, --poll-anonymous / --poll-public, --thread-id.

Threads

  • thread create: channels Discord. Required: --thread-name, --target (channel id). Optional: --message-id, --message, --auto-archive-min.
  • thread list: channels Discord. Required: --guild-id. Optional: --channel-id, --include-archived, --before, --limit.
  • thread reply: channels Discord. Required: --target (thread id), --message. Optional: --media, --reply-to.

Emojis

  • emoji list: Discord (--guild-id), Slack (no extra flags).
  • emoji upload: Discord. Required: --guild-id, --emoji-name, --media. Optional: --role-ids (repeat).

Stickers

  • sticker send: Discord. Required: --target, --sticker-id (repeat). Optional: --message.
  • sticker upload: Discord. Required: --guild-id, --sticker-name, --sticker-desc, --sticker-tags, --media.

Roles, channels, voice, events (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: required --guild-id, --event-name, --start-time; optional --end-time, --desc, --channel-id, --location, --event-type, --image <url-or-path>.

Moderation (Discord)

  • timeout: --guild-id, --user-id; optional --duration-min or --until (omit both to clear the timeout), --reason.
  • kick: --guild-id, --user-id, --reason.
  • ban: --guild-id, --user-id, --delete-days, --reason.

Broadcast

Sends one payload to multiple targets. --targets takes a space-separated list. Use --channel all to target every configured provider.