CLI commands
Mensagem
openclaw message
Comando único de saída para enviar mensagens e ações de canal pelo Discord, Google Chat, iMessage, Matrix, Mattermost (plugin), Microsoft Teams, Signal, Slack, Telegram e WhatsApp.
openclaw message <subcommand> [flags]Seleção de canal
--channel <name>é obrigatório se mais de um canal estiver configurado; com exatamente um canal configurado, esse canal será o padrão.- Valores:
discord|googlechat|imessage|matrix|mattermost|msteams|signal|slack|telegram|whatsapp(o Mattermost requer o plugin). - Destinos com prefixo de canal (por exemplo,
discord:channel:123) identificam o plugin responsável sem um--channelexplícito.
Formatos de destino (-t, --target)
| Canal | Formato |
|---|---|
| Discord | channel:<id>, user:<id>, menção <@id> ou um id numérico sem prefixo (tratado como id de canal) |
| Google Chat | spaces/<spaceId> ou users/<userId> |
| iMessage | identificador, chat_id:<id>, chat_guid:<guid> ou chat_identifier:<id> |
| Mattermost (plugin) | channel:<id>, user:<id>, @username ou um id sem prefixo (tratado como canal) |
| Matrix | @user:server, !room:server ou #alias:server |
| Microsoft Teams | conversation:<id> (19:...@thread.tacv2), um id de conversa sem prefixo ou user:<aad-object-id> |
| Signal | +E.164, group:<id>, uuid:<id>, username:<name>/u:<name> ou qualquer um desses com o prefixo signal: |
| Slack | channel:<id> ou user:<id> (um id sem prefixo é tratado como canal) |
| Telegram | id do chat, @username ou destino de tópico de fórum: <chatId>:topic:<topicId> (ou --thread-id <topicId>) |
E.164, JID de grupo (...@g.us) ou JID de canal/boletim informativo (...@newsletter) |
Pesquisa pelo nome do canal: para provedores que têm um diretório (Discord/Slack/etc.),
nomes como Help ou #help são resolvidos pelo cache do diretório, recorrendo a uma
consulta ao diretório em tempo real quando não há correspondência no cache e o provedor
oferece suporte a isso.
Opções comuns
Todas as ações aceitam: --channel <name>, --account <id>, --json,
--dry-run, --verbose. As ações que recebem um destino também aceitam
-t, --target <dest>.
Resolução de SecretRef
openclaw message resolve os SecretRefs do canal antes de executar a ação,
com o escopo mais restrito possível:
- escopo do canal quando
--channelestá definido (ou é inferido de um destino com prefixo) - escopo da conta quando
--accounttambém está definido - todos os canais configurados quando nenhum dos dois está definido
SecretRefs não resolvidos em canais não relacionados nunca bloqueiam uma ação direcionada; um SecretRef não resolvido no canal/conta selecionado faz a ação falhar de modo fechado.
Ações
Principais
| Ação | Canais | Obrigatório | Observações |
|---|---|---|---|
send |
Discord, Google Chat, iMessage, Matrix, Mattermost (plugin), Microsoft Teams, Signal, Slack, Telegram, WhatsApp | --target, mais um entre --message/--media/--presentation |
Consulte Envio abaixo. |
poll |
Discord, Matrix, Microsoft Teams, Telegram, WhatsApp | --target, --poll-question, --poll-option (repetível) |
Consulte Enquete abaixo. |
react |
Discord, Matrix, Nextcloud Talk, Signal, Slack, Telegram, WhatsApp | --message-id, --target |
--emoji, --remove (requer --emoji; omita-o para limpar as próprias reações quando houver suporte; consulte Reações). WhatsApp: --participant, --from-me. Reações em grupos do Signal exigem --target-author ou --target-author-uuid. O Nextcloud Talk apenas adiciona reações; --remove gera um erro. |
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 lê um carimbo de data e hora específico; combine com --thread-id para obter uma resposta exata na conversa encadeada. |
edit |
Discord, Matrix, Microsoft Teams, Slack, Telegram | --message-id, --message, --target |
Conversas encadeadas de fóruns do Telegram usam --thread-id. |
delete |
Discord, Matrix, Microsoft Teams, Slack, Telegram | --message-id, --target |
|
pin / unpin |
Discord, Matrix, Microsoft Teams, Slack | --message-id, --target |
unpin também aceita --pinned-message-id (Microsoft Teams: o id do recurso de fixação/listagem de mensagens fixadas, não o id da mensagem do chat). |
pins (lista) |
Discord, Matrix, Microsoft Teams, Slack | --target |
--limit. |
permissions |
Discord, Matrix | --target |
Matrix: disponível somente quando a criptografia está habilitada e as ações de verificação são permitidas. |
search |
Discord | --guild-id, --query |
--channel-id, --channel-ids (repetível), --author-id, --author-ids (repetível), --limit. |
member info |
Discord, Matrix, Microsoft Teams, Slack | --user-id |
--guild-id (Discord). |
Envio
openclaw message send --channel discord \ --target channel:123 --message "hi" --reply-to 456--media <path-or-url>: anexa imagem/áudio/vídeo/documento (caminho local ou URL).--presentation <json>: carga útil compartilhada com blocostext,context,divider,chart,table,buttonseselect, renderizados de acordo com a capacidade de cada canal. Consulte Apresentação de mensagens.--delivery <json>: preferências genéricas de entrega, por exemplo{"pin": true}.--piné uma forma abreviada para entrega fixada quando o canal oferece suporte.--reply-to <id>,--thread-id <id>(tópico de fórum do Telegram; carimbo de data e hora da conversa encadeada do Slack, o mesmo campo que--reply-to).--force-document(Telegram, WhatsApp): envia imagens/GIFs/vídeos como documentos para evitar a compactação do canal.--silent(Telegram, Discord): envia sem notificação.--gif-playback(somente WhatsApp): trata a mídia de vídeo como reprodução de 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"}]}]}'O Slack renderiza nativamente os blocos de gráfico compatíveis; os outros canais recebem os mesmos dados como texto legível:
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"}]}'O Slack também renderiza blocos de tabela explícitos nativamente. Outros canais recebem a legenda e cada linha como texto determinístico:
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}]}'Os botões de Mini App do Telegram usam webApp (web_app ainda é interpretado para JSON
legado) e são renderizados somente em conversas privadas entre um usuário e o 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"}]}'Enquete
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>: repita de 2 a 12 vezes.--poll-multi: permite várias seleções.- 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 SushiTópicos
thread create: canais do Discord. Obrigatórios:--thread-name,--target(ID do canal). Opcionais:--message-id,--message,--auto-archive-min.thread list: canais do Discord. Obrigatório:--guild-id. Opcionais:--channel-id,--include-archived,--before,--limit.thread reply: canais do Discord. Obrigatórios:--target(ID do tópico),--message. Opcionais:--media,--reply-to.
Emojis
emoji list: Discord (--guild-id), Slack (sem flags adicionais).emoji upload: Discord. Obrigatórios:--guild-id,--emoji-name,--media. Opcional:--role-ids(pode ser repetido).
Figurinhas
sticker send: Discord. Obrigatórios:--target,--sticker-id(pode ser repetido). Opcional:--message.sticker upload: Discord. Obrigatórios:--guild-id,--sticker-name,--sticker-desc,--sticker-tags,--media.
Cargos, canais, voz e eventos (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: obrigatórios--guild-id,--event-name,--start-time; opcionais--end-time,--desc,--channel-id,--location,--event-type,--image <url-or-path>.
Moderação (Discord)
timeout:--guild-id,--user-id; opcionais--duration-minou--until(omita ambos para remover o tempo limite),--reason.kick:--guild-id,--user-id,--reason.ban:--guild-id,--user-id,--delete-days,--reason.
Transmissão
openclaw message broadcast --targets <target...> [--channel all] [--message <text>] [--media <url>] [--dry-run]Envia uma carga útil para vários destinos. --targets recebe uma lista separada por
espaços. Use --channel all para direcionar a todos os provedores configurados.