CLI commands
Mensaje
openclaw message
Comando saliente único para enviar mensajes y acciones de canal (Discord/Google Chat/iMessage/Matrix/Mattermost (plugin)/Microsoft Teams/Signal/Slack/Telegram/WhatsApp).
Uso
openclaw message <subcommand> [flags]
Selección de canal:
--channeles obligatorio si hay más de un canal configurado.- Si hay exactamente un canal configurado, se convierte en el predeterminado.
- Valores:
discord|googlechat|imessage|matrix|mattermost|msteams|signal|slack|telegram|whatsapp(Mattermost requiere plugin) openclaw messageresuelve el canal seleccionado a su plugin propietario cuando--channelo un destino con prefijo de canal está presente; de lo contrario, carga los plugins de canal configurados para inferir el canal predeterminado.
Formatos de destino (--target):
- WhatsApp: E.164, JID de grupo o JID de canal/boletín de WhatsApp (
...@newsletter) - Telegram: id de chat,
@usernameo destino de tema de foro (-1001234567890:topic:42, o--thread-id 42) - Discord:
channel:<id>ouser:<id>(o mención<@id>; los ids numéricos sin procesar se tratan como canales) - Google Chat:
spaces/<spaceId>ousers/<userId> - Slack:
channel:<id>ouser:<id>(se acepta el id de canal sin procesar) - Mattermost (plugin):
channel:<id>,user:<id>o@username(los ids simples se tratan como canales) - Signal:
+E.164,group:<id>,signal:+E.164,signal:group:<id>ousername:<name>/u:<name> - iMessage: identificador,
chat_id:<id>,chat_guid:<guid>ochat_identifier:<id> - Matrix:
@user:server,!room:servero#alias:server - Microsoft Teams: id de conversación (
19:[email protected]) oconversation:<id>ouser:<aad-object-id>
Búsqueda por nombre:
- Para proveedores compatibles (Discord/Slack/etc), los nombres de canal como
Helpo#helpse resuelven mediante la caché de directorio. - Si no hay acierto en la caché, OpenClaw intentará una búsqueda de directorio en vivo cuando el proveedor lo admita.
Flags comunes
--channel <name>--account <id>--target <dest>(canal o usuario de destino para enviar/sondear/leer/etc)--targets <name>(repetible; solo difusión)--json--dry-run--verbose
Comportamiento de SecretRef
openclaw messageresuelve las SecretRefs de canal compatibles antes de ejecutar la acción seleccionada.- La resolución se limita al destino de la acción activa cuando es posible:
- con alcance de canal cuando
--channelestá establecido (o se infiere de destinos con prefijo comodiscord:...) - con alcance de cuenta cuando
--accountestá establecido (globales de canal + superficies de la cuenta seleccionada) - cuando se omite
--account, OpenClaw no fuerza un alcance SecretRef de cuentadefault
- con alcance de canal cuando
- Las SecretRefs sin resolver en canales no relacionados no bloquean una acción de mensaje dirigida.
- Si la SecretRef del canal/cuenta seleccionado no está resuelta, el comando falla cerrado para esa acción.
Acciones
Núcleo
-
send- Canales: WhatsApp/Telegram/Discord/Google Chat/Slack/Mattermost (plugin)/Signal/iMessage/Matrix/Microsoft Teams
- Obligatorio:
--target, además de--message,--mediao--presentation - Opcional:
--media,--presentation,--delivery,--pin,--reply-to,--thread-id,--gif-playback,--force-document,--silent - Cargas de presentación compartidas:
--presentationenvía bloques semánticos (text,context,divider,buttons,select) que el núcleo renderiza mediante las capacidades declaradas del canal seleccionado. Consulta Presentación de mensajes. - Preferencias genéricas de entrega:
--deliveryacepta indicios de entrega como{ "pin": true };--pines una forma abreviada para entrega fijada cuando el canal lo admite. - Solo Telegram:
--force-document(enviar imágenes y GIFs como documentos para evitar la compresión de Telegram) - Solo Telegram:
--thread-id(id de tema de foro) - Solo Slack:
--thread-id(marca de tiempo del hilo;--reply-tousa el mismo campo) - Telegram + Discord:
--silent - Solo WhatsApp:
--gif-playback; los canales/boletines de WhatsApp se direccionan con su JID nativo@newsletter.
-
poll- Canales: WhatsApp/Telegram/Discord/Matrix/Microsoft Teams
- Obligatorio:
--target,--poll-question,--poll-option(repetible) - Opcional:
--poll-multi - Solo Discord:
--poll-duration-hours,--silent,--message - Solo Telegram:
--poll-duration-seconds(5-600),--silent,--poll-anonymous/--poll-public,--thread-id
-
react- Canales: Discord/Google Chat/Slack/Telegram/WhatsApp/Signal/Matrix
- Obligatorio:
--message-id,--target - Opcional:
--emoji,--remove,--participant,--from-me,--target-author,--target-author-uuid - Nota:
--removerequiere--emoji(omite--emojipara borrar reacciones propias donde sea compatible; consulta /tools/reactions) - Solo WhatsApp:
--participant,--from-me - Reacciones de grupo de Signal: se requiere
--target-authoro--target-author-uuid
-
reactions- Canales: Discord/Google Chat/Slack/Matrix
- Obligatorio:
--message-id,--target - Opcional:
--limit
-
read- Canales: Discord/Slack/Matrix
- Obligatorio:
--target - Opcional:
--limit,--message-id,--before,--after - Solo Slack:
--message-idlee una marca de tiempo de mensaje de Slack específica; combínalo con--thread-idpara leer una respuesta exacta de hilo. - Solo Discord:
--around
-
edit- Canales: Discord/Slack/Matrix
- Obligatorio:
--message-id,--message,--target
-
delete- Canales: Discord/Slack/Telegram/Matrix
- Obligatorio:
--message-id,--target
-
pin/unpin- Canales: Discord/Slack/Matrix
- Obligatorio:
--message-id,--target
-
pins(listar)- Canales: Discord/Slack/Matrix
- Obligatorio:
--target
-
permissions- Canales: Discord/Matrix
- Obligatorio:
--target - Solo Matrix: disponible cuando el cifrado de Matrix está habilitado y las acciones de verificación están permitidas
-
search- Canales: Discord
- Obligatorio:
--guild-id,--query - Opcional:
--channel-id,--channel-ids(repetible),--author-id,--author-ids(repetible),--limit
Hilos
-
thread create- Canales: Discord
- Obligatorio:
--thread-name,--target(id de canal) - Opcional:
--message-id,--message,--auto-archive-min
-
thread list- Canales: Discord
- Obligatorio:
--guild-id - Opcional:
--channel-id,--include-archived,--before,--limit
-
thread reply- Canales: Discord
- Obligatorio:
--target(id de hilo),--message - Opcional:
--media,--reply-to
Emojis
-
emoji list- Discord:
--guild-id - Slack: sin flags adicionales
- Discord:
-
emoji upload- Canales: Discord
- Obligatorio:
--guild-id,--emoji-name,--media - Opcional:
--role-ids(repetible)
Stickers
-
sticker send- Canales: Discord
- Obligatorio:
--target,--sticker-id(repetible) - Opcional:
--message
-
sticker upload- Canales: Discord
- Obligatorio:
--guild-id,--sticker-name,--sticker-desc,--sticker-tags,--media
Roles / Canales / Miembros / Voz
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-idpara Discord)voice status(Discord):--guild-id,--user-id
Eventos
event list(Discord):--guild-idevent create(Discord):--guild-id,--event-name,--start-time- Opcional:
--end-time,--desc,--channel-id,--location,--event-type
- Opcional:
Moderación (Discord)
timeout:--guild-id,--user-id(--duration-mino--untilopcional; omite ambos para borrar el timeout)kick:--guild-id,--user-id(+--reason)ban:--guild-id,--user-id(+--delete-days,--reason)timeouttambién admite--reason
Difusión
broadcast- Canales: cualquier canal configurado; usa
--channel allpara dirigirte a todos los proveedores - Obligatorio:
--targets <target...> - Opcional:
--message,--media,--dry-run
- Canales: cualquier canal configurado; usa
Ejemplos
Enviar una respuesta de Discord:
openclaw message send --channel discord \
--target channel:123 --message "hi" --reply-to 456
Enviar un mensaje con botones semánticos:
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"}]}]}'
El núcleo renderiza la misma carga presentation en componentes de Discord, bloques de Slack, botones en línea de Telegram, props de Mattermost o tarjetas de Teams/Feishu según la capacidad del canal. Consulta Presentación de mensajes para ver el contrato completo y las reglas de alternativa.
Enviar una carga de presentación más completa:
openclaw message send --channel googlechat --target spaces/AAA... \
--message "Choose:" \
--presentation '{"title":"Deploy approval","tone":"warning","blocks":[{"type":"text","text":"Choose a path"},{"type":"buttons","buttons":[{"label":"Approve","value":"approve"},{"label":"Decline","value":"decline"}]}]}'
Crear una encuesta de Discord:
openclaw message poll --channel discord \
--target channel:123 \
--poll-question "Snack?" \
--poll-option Pizza --poll-option Sushi \
--poll-multi --poll-duration-hours 48
Crear una encuesta de Telegram (cierre automático en 2 minutos):
openclaw message poll --channel telegram \
--target @mychat \
--poll-question "Lunch?" \
--poll-option Pizza --poll-option Sushi \
--poll-duration-seconds 120 --silent
Enviar un mensaje proactivo de Teams:
openclaw message send --channel msteams \
--target conversation:19:[email protected] --message "hi"
Crear una encuesta de Teams:
openclaw message poll --channel msteams \
--target conversation:19:[email protected] \
--poll-question "Lunch?" \
--poll-option Pizza --poll-option Sushi
Reaccionar en Slack:
openclaw message react --channel slack \
--target C123 --message-id 456 --emoji "✅"
Reaccionar en un grupo de Signal:
openclaw message react --channel signal \
--target signal:group:abc123 --message-id 1737630212345 \
--emoji "✅" --target-author-uuid 123e4567-e89b-12d3-a456-426614174000
Enviar botones en línea de Telegram mediante presentación genérica:
openclaw message send --channel telegram --target @mychat --message "Choose:" \
--presentation '{"blocks":[{"type":"buttons","buttons":[{"label":"Yes","value":"cmd:yes"},{"label":"No","value":"cmd:no"}]}]}'
Enviar una tarjeta de Teams mediante presentación genérica:
openclaw message send --channel msteams \
--target conversation:19:[email protected] \
--presentation '{"title":"Status update","blocks":[{"type":"text","text":"Build completed"}]}'
Enviar una imagen de Telegram como documento para evitar la compresión:
openclaw message send --channel telegram --target @mychat \
--media ./diagram.png --force-document