OpenClaw Reference (Mirrored)

`openclaw message`

Mirrored from OpenClaw (MIT)
This mirror is provided for convenience. OpenClawdBots is not affiliated with or endorsed by OpenClaw.

openclaw message

Single outbound command for sending messages and channel actions (Discord/Google Chat/Slack/Mattermost (plugin)/Telegram/WhatsApp/Signal/iMessage/MS Teams).

Usage

openclaw message <subcommand> [flags]

Channel selection:

  • --channel required if more than one channel is configured.
  • If exactly one channel is configured, it becomes the default.
  • Values: whatsapp|telegram|discord|googlechat|slack|mattermost|signal|imessage|msteams (Mattermost requires plugin)

Target formats (--target):

  • WhatsApp: E.164 or group JID
  • Telegram: chat id or @username
  • Discord: channel:<id> or user:<id> (or <@id> mention; raw numeric ids are treated as channels)
  • Google Chat: spaces/<spaceId> or users/<userId>
  • Slack: channel:<id> or user:<id> (raw channel id is accepted)
  • Mattermost (plugin): channel:<id>, user:<id>, or @username (bare ids are treated as channels)
  • Signal: +E.164, group:<id>, signal:+E.164, signal:group:<id>, or username:<name>/u:<name>
  • iMessage: handle, chat_id:<id>, chat_guid:<guid>, or chat_identifier:<id>
  • MS Teams: conversation id (19:[email protected]) or conversation:<id> or user:<aad-object-id>

Name lookup:

  • For supported providers (Discord/Slack/etc), channel names like Help or #help are resolved via the directory cache.
  • On cache miss, OpenClaw will attempt a live directory lookup when the provider supports it.

Common flags

  • --channel <name>
  • --account <id>
  • --target <dest> (target channel or user for send/poll/read/etc)
  • --targets <name> (repeat; broadcast only)
  • --json
  • --dry-run
  • --verbose

Actions

Core

  • send

    • Channels: WhatsApp/Telegram/Discord/Google Chat/Slack/Mattermost (plugin)/Signal/iMessage/MS Teams
    • Required: --target, plus --message or --media
    • Optional: --media, --reply-to, --thread-id, --gif-playback
    • Telegram only: --buttons (requires channels.telegram.capabilities.inlineButtons to allow it)
    • Telegram only: --thread-id (forum topic id)
    • Slack only: --thread-id (thread timestamp; --reply-to uses the same field)
    • WhatsApp only: --gif-playback
  • poll

    • Channels: WhatsApp/Telegram/Discord/Matrix/MS Teams
    • Required: --target, --poll-question, --poll-option (repeat)
    • Optional: --poll-multi
    • Discord only: --poll-duration-hours, --silent, --message
    • Telegram only: --poll-duration-seconds (5-600), --silent, --poll-anonymous / --poll-public, --thread-id
  • react

    • Channels: Discord/Google Chat/Slack/Telegram/WhatsApp/Signal
    • Required: --message-id, --target
    • Optional: --emoji, --remove, --participant, --from-me, --target-author, --target-author-uuid
    • Note: --remove requires --emoji (omit --emoji to clear own reactions where supported; see /tools/reactions)
    • WhatsApp only: --participant, --from-me
    • Signal group reactions: --target-author or --target-author-uuid required
  • reactions

    • Channels: Discord/Google Chat/Slack
    • Required: --message-id, --target
    • Optional: --limit
  • read

    • Channels: Discord/Slack
    • Required: --target
    • Optional: --limit, --before, --after
    • Discord only: --around
  • edit

    • Channels: Discord/Slack
    • Required: --message-id, --message, --target
  • delete

    • Channels: Discord/Slack/Telegram
    • Required: --message-id, --target
  • pin / unpin

    • Channels: Discord/Slack
    • Required: --message-id, --target
  • pins (list)

    • Channels: Discord/Slack
    • Required: --target
  • permissions

    • Channels: Discord
    • Required: --target
  • search

    • Channels: Discord
    • Required: --guild-id, --query
    • Optional: --channel-id, --channel-ids (repeat), --author-id, --author-ids (repeat), --limit

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

    • Channels: Discord
    • Required: --guild-id, --emoji-name, --media
    • Optional: --role-ids (repeat)

Stickers

  • sticker send

    • Channels: Discord
    • Required: --target, --sticker-id (repeat)
    • Optional: --message
  • sticker upload

    • Channels: Discord
    • Required: --guild-id, --sticker-name, --sticker-desc, --sticker-tags, --media

Roles / Channels / Members / Voice

  • role info (Discord): --guild-id
  • role add / role remove (Discord): --guild-id, --user-id, --role-id
  • channel info (Discord): --target
  • channel list (Discord): --guild-id
  • member info (Discord/Slack): --user-id (+ --guild-id for Discord)
  • voice status (Discord): --guild-id, --user-id

Events

  • event list (Discord): --guild-id
  • event create (Discord): --guild-id, --event-name, --start-time
    • Optional: --end-time, --desc, --channel-id, --location, --event-type

Moderation (Discord)

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

Broadcast

  • broadcast
    • Channels: any configured channel; use --channel all to target all providers
    • Required: --targets (repeat)
    • Optional: --message, --media, --dry-run

Examples

Send a Discord reply:

openclaw message send --channel discord \
  --target channel:123 --message "hi" --reply-to 456

Create a Discord poll:

openclaw message poll --channel discord \
  --target channel:123 \
  --poll-question "Snack?" \
  --poll-option Pizza --poll-option Sushi \
  --poll-multi --poll-duration-hours 48

Create a Telegram poll (auto-close in 2 minutes):

openclaw message poll --channel telegram \
  --target @mychat \
  --poll-question "Lunch?" \
  --poll-option Pizza --poll-option Sushi \
  --poll-duration-seconds 120 --silent

Send a Teams proactive message:

openclaw message send --channel msteams \
  --target conversation:19:[email protected] --message "hi"

Create a Teams poll:

openclaw message poll --channel msteams \
  --target conversation:19:[email protected] \
  --poll-question "Lunch?" \
  --poll-option Pizza --poll-option Sushi

React in Slack:

openclaw message react --channel slack \
  --target C123 --message-id 456 --emoji "✅"

React in a Signal group:

openclaw message react --channel signal \
  --target signal:group:abc123 --message-id 1737630212345 \
  --emoji "✅" --target-author-uuid 123e4567-e89b-12d3-a456-426614174000

Send Telegram inline buttons:

openclaw message send --channel telegram --target @mychat --message "Choose:" \
  --buttons '[ [{"text":"Yes","callback_data":"cmd:yes"}], [{"text":"No","callback_data":"cmd:no"}] ]'