openclaw message¶
Single outbound command for sending messages and channel actions (Discord/Google Chat/Slack/Mattermost (plugin)/Telegram/WhatsApp/Signal/iMessage/MS Teams).
Usage¶
Channel selection:
--channelrequired 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>oruser:<id>(or<@id>mention; raw numeric ids are treated as channels) - Google Chat:
spaces/<spaceId>orusers/<userId> - Slack:
channel:<id>oruser:<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>, orusername:<name>/u:<name> - iMessage: handle,
chat_id:<id>,chat_guid:<guid>, orchat_identifier:<id> - MS Teams: conversation id (
19:...@thread.tacv2) orconversation:<id>oruser:<aad-object-id>
Name lookup:
- For supported providers (Discord/Slack/etc), channel names like
Helpor#helpare 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--messageor--media - Optional:
--media,--reply-to,--thread-id,--gif-playback - Telegram only:
--buttons(requireschannels.telegram.capabilities.inlineButtonsto allow it) - Telegram only:
--thread-id(forum topic id) - Slack only:
--thread-id(thread timestamp;--reply-touses 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:
--removerequires--emoji(omit--emojito clear own reactions where supported; see /tools/reactions) - WhatsApp only:
--participant,--from-me -
Signal group reactions:
--target-authoror--target-author-uuidrequired -
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-idrole add/role remove(Discord):--guild-id,--user-id,--role-idchannel info(Discord):--targetchannel list(Discord):--guild-idmember info(Discord/Slack):--user-id(+--guild-idfor Discord)voice status(Discord):--guild-id,--user-id
Events¶
event list(Discord):--guild-idevent 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-minor--until; omit both to clear timeout)kick:--guild-id,--user-id(+--reason)ban:--guild-id,--user-id(+--delete-days,--reason)timeoutalso supports--reason
Broadcast¶
broadcast- Channels: any configured channel; use
--channel allto target all providers - Required:
--targets(repeat) - Optional:
--message,--media,--dry-run
Examples¶
Send a Discord reply:
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:
Create a Teams poll:
openclaw message poll --channel msteams \
--target conversation:19:abc@thread.tacv2 \
--poll-question "Lunch?" \
--poll-option Pizza --poll-option Sushi
React in Slack:
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: