CLI commands
ข้อความ
openclaw message
คำสั่งขาออกเดียวสำหรับส่งข้อความและการกระทำของช่องทาง (Discord/Google Chat/iMessage/Matrix/Mattermost (plugin)/Microsoft Teams/Signal/Slack/Telegram/WhatsApp)
การใช้งาน
openclaw message <subcommand> [flags]
การเลือกช่องทาง:
- ต้องระบุ
--channelหากกำหนดค่าช่องทางไว้มากกว่าหนึ่งช่องทาง - หากกำหนดค่าช่องทางไว้เพียงช่องทางเดียว ช่องทางนั้นจะเป็นค่าเริ่มต้น
- ค่า:
discord|googlechat|imessage|matrix|mattermost|msteams|signal|slack|telegram|whatsapp(Mattermost ต้องใช้ plugin) openclaw messageจะแปลงช่องทางที่เลือกไปยัง plugin ที่เป็นเจ้าของเมื่อมี--channelหรือเป้าหมายที่มีคำนำหน้าช่องทาง มิฉะนั้นจะโหลด channel plugins ที่กำหนดค่าไว้เพื่ออนุมานช่องทางเริ่มต้น
รูปแบบเป้าหมาย (--target):
- WhatsApp: E.164, group JID หรือ WhatsApp Channel/Newsletter JID (
...@newsletter) - Telegram: chat id,
@usernameหรือเป้าหมายหัวข้อฟอรัม (-1001234567890:topic:42หรือ--thread-id 42) - Discord:
channel:<id>หรือuser:<id>(หรือการกล่าวถึง<@id>; raw numeric ids จะถือว่าเป็นช่องทาง) - Google Chat:
spaces/<spaceId>หรือusers/<userId> - Slack:
channel:<id>หรือuser:<id>(ยอมรับ raw channel id) - Mattermost (plugin):
channel:<id>,user:<id>หรือ@username(bare ids จะถือว่าเป็นช่องทาง) - Signal:
+E.164,group:<id>,signal:+E.164,signal:group:<id>หรือusername:<name>/u:<name> - iMessage: handle,
chat_id:<id>,chat_guid:<guid>หรือchat_identifier:<id> - Matrix:
@user:server,!room:serverหรือ#alias:server - Microsoft Teams: conversation id (
19:[email protected]) หรือconversation:<id>หรือuser:<aad-object-id>
การค้นหาชื่อ:
- สำหรับผู้ให้บริการที่รองรับ (Discord/Slack/etc) ชื่อช่องทางอย่าง
Helpหรือ#helpจะถูกแปลงผ่าน directory cache - เมื่อไม่พบในแคช OpenClaw จะพยายามค้นหาไดเรกทอรีสดเมื่อผู้ให้บริการรองรับ
แฟล็กทั่วไป
--channel <name>--account <id>--target <dest>(ช่องทางหรือผู้ใช้เป้าหมายสำหรับ send/poll/read/etc)--targets <name>(ทำซ้ำได้; เฉพาะ broadcast)--json--dry-run--verbose
พฤติกรรม SecretRef
openclaw messageจะแปลง SecretRefs ของช่องทางที่รองรับก่อนเรียกใช้การกระทำที่เลือก- การแปลงจะจำกัดขอบเขตตามเป้าหมายของการกระทำที่ใช้งานอยู่เมื่อทำได้:
- จำกัดตามช่องทางเมื่อกำหนด
--channel(หรืออนุมานจากเป้าหมายที่มีคำนำหน้า เช่นdiscord:...) - จำกัดตามบัญชีเมื่อกำหนด
--account(channel globals + selected account surfaces) - เมื่อไม่ระบุ
--accountOpenClaw จะไม่บังคับขอบเขต SecretRef ของบัญชีdefault
- จำกัดตามช่องทางเมื่อกำหนด
- SecretRefs ที่ยังไม่ได้แปลงในช่องทางที่ไม่เกี่ยวข้องจะไม่บล็อกการกระทำข้อความแบบระบุเป้าหมาย
- หาก SecretRef ของช่องทาง/บัญชีที่เลือกยังไม่ได้แปลง คำสั่งจะปิดล้มเหลวสำหรับการกระทำนั้น
การกระทำ
หลัก
-
send- ช่องทาง: WhatsApp/Telegram/Discord/Google Chat/Slack/Mattermost (plugin)/Signal/iMessage/Matrix/Microsoft Teams
- จำเป็น:
--targetพร้อมด้วย--message,--mediaหรือ--presentation - ไม่บังคับ:
--media,--presentation,--delivery,--pin,--reply-to,--thread-id,--gif-playback,--force-document,--silent - เพย์โหลดการนำเสนอที่ใช้ร่วมกัน:
--presentationส่งบล็อกเชิงความหมาย (text,context,divider,buttons,select) ที่ core เรนเดอร์ผ่านความสามารถที่ช่องทางที่เลือกประกาศไว้ ดู การนำเสนอข้อความ - ค่ากำหนดการส่งทั่วไป:
--deliveryรับคำใบ้การส่ง เช่น{ "pin": true };--pinเป็นคำย่อสำหรับการส่งแบบปักหมุดเมื่อช่องทางรองรับ - เฉพาะ Telegram:
--force-document(ส่งรูปภาพและ GIF เป็นเอกสารเพื่อหลีกเลี่ยงการบีบอัดของ Telegram) - เฉพาะ Telegram:
--thread-id(forum topic id) - เฉพาะ Slack:
--thread-id(thread timestamp;--reply-toใช้ฟิลด์เดียวกัน) - Telegram + Discord:
--silent - เฉพาะ WhatsApp:
--gif-playback; WhatsApp Channels/Newsletters จะระบุด้วย JID@newsletterดั้งเดิม
-
poll- ช่องทาง: WhatsApp/Telegram/Discord/Matrix/Microsoft Teams
- จำเป็น:
--target,--poll-question,--poll-option(ทำซ้ำได้) - ไม่บังคับ:
--poll-multi - เฉพาะ Discord:
--poll-duration-hours,--silent,--message - เฉพาะ Telegram:
--poll-duration-seconds(5-600),--silent,--poll-anonymous/--poll-public,--thread-id
-
react- ช่องทาง: Discord/Google Chat/Slack/Telegram/WhatsApp/Signal/Matrix
- จำเป็น:
--message-id,--target - ไม่บังคับ:
--emoji,--remove,--participant,--from-me,--target-author,--target-author-uuid - หมายเหตุ:
--removeต้องใช้--emoji(ละ--emojiเพื่อเคลียร์ปฏิกิริยาของตนเองเมื่อรองรับ; ดู /tools/reactions) - เฉพาะ WhatsApp:
--participant,--from-me - ปฏิกิริยากลุ่ม Signal: ต้องระบุ
--target-authorหรือ--target-author-uuid
-
reactions- ช่องทาง: Discord/Google Chat/Slack/Matrix
- จำเป็น:
--message-id,--target - ไม่บังคับ:
--limit
-
read- ช่องทาง: Discord/Slack/Matrix
- จำเป็น:
--target - ไม่บังคับ:
--limit,--message-id,--before,--after - เฉพาะ Slack:
--message-idอ่าน timestamp ของข้อความ Slack ที่ระบุ; ใช้ร่วมกับ--thread-idเพื่ออ่านการตอบกลับใน thread ที่แน่นอน - เฉพาะ Discord:
--around
-
edit- ช่องทาง: Discord/Slack/Matrix
- จำเป็น:
--message-id,--message,--target
-
delete- ช่องทาง: Discord/Slack/Telegram/Matrix
- จำเป็น:
--message-id,--target
-
pin/unpin- ช่องทาง: Discord/Slack/Matrix
- จำเป็น:
--message-id,--target
-
pins(รายการ)- ช่องทาง: Discord/Slack/Matrix
- จำเป็น:
--target
-
permissions- ช่องทาง: Discord/Matrix
- จำเป็น:
--target - เฉพาะ Matrix: ใช้งานได้เมื่อเปิดใช้งานการเข้ารหัส Matrix และอนุญาตการกระทำการยืนยัน
-
search- ช่องทาง: Discord
- จำเป็น:
--guild-id,--query - ไม่บังคับ:
--channel-id,--channel-ids(ทำซ้ำได้),--author-id,--author-ids(ทำซ้ำได้),--limit
Threads
-
thread create- ช่องทาง: Discord
- จำเป็น:
--thread-name,--target(channel id) - ไม่บังคับ:
--message-id,--message,--auto-archive-min
-
thread list- ช่องทาง: Discord
- จำเป็น:
--guild-id - ไม่บังคับ:
--channel-id,--include-archived,--before,--limit
-
thread reply- ช่องทาง: Discord
- จำเป็น:
--target(thread id),--message - ไม่บังคับ:
--media,--reply-to
Emojis
-
emoji list- Discord:
--guild-id - Slack: ไม่มีแฟล็กเพิ่มเติม
- Discord:
-
emoji upload- ช่องทาง: Discord
- จำเป็น:
--guild-id,--emoji-name,--media - ไม่บังคับ:
--role-ids(ทำซ้ำได้)
Stickers
-
sticker send- ช่องทาง: Discord
- จำเป็น:
--target,--sticker-id(ทำซ้ำได้) - ไม่บังคับ:
--message
-
sticker upload- ช่องทาง: Discord
- จำเป็น:
--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-idสำหรับ Discord)voice status(Discord):--guild-id,--user-id
Events
event list(Discord):--guild-idevent create(Discord):--guild-id,--event-name,--start-time- ไม่บังคับ:
--end-time,--desc,--channel-id,--location,--event-type
- ไม่บังคับ:
การดูแลจัดการ (Discord)
timeout:--guild-id,--user-id(ไม่บังคับ--duration-minหรือ--until; ละทั้งคู่เพื่อเคลียร์ timeout)kick:--guild-id,--user-id(+--reason)ban:--guild-id,--user-id(+--delete-days,--reason)timeoutยังรองรับ--reason
Broadcast
broadcast- ช่องทาง: ช่องทางใดก็ได้ที่กำหนดค่าไว้; ใช้
--channel allเพื่อกำหนดเป้าหมายผู้ให้บริการทั้งหมด - จำเป็น:
--targets <target...> - ไม่บังคับ:
--message,--media,--dry-run
- ช่องทาง: ช่องทางใดก็ได้ที่กำหนดค่าไว้; ใช้
ตัวอย่าง
ส่งการตอบกลับ Discord:
openclaw message send --channel discord \
--target channel:123 --message "hi" --reply-to 456
ส่งข้อความพร้อมปุ่มเชิงความหมาย:
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"}]}]}'
Core เรนเดอร์เพย์โหลด presentation เดียวกันเป็นคอมโพเนนต์ Discord, บล็อก Slack, ปุ่ม inline ของ Telegram, props ของ Mattermost หรือการ์ด Teams/Feishu ตามความสามารถของช่องทาง ดู การนำเสนอข้อความ สำหรับสัญญาฉบับเต็มและกฎ fallback
ส่งเพย์โหลดการนำเสนอที่สมบูรณ์ยิ่งขึ้น:
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"}]}]}'
สร้างโพล Discord:
openclaw message poll --channel discord \
--target channel:123 \
--poll-question "Snack?" \
--poll-option Pizza --poll-option Sushi \
--poll-multi --poll-duration-hours 48
สร้างโพล Telegram (ปิดอัตโนมัติใน 2 นาที):
openclaw message poll --channel telegram \
--target @mychat \
--poll-question "Lunch?" \
--poll-option Pizza --poll-option Sushi \
--poll-duration-seconds 120 --silent
ส่งข้อความเชิงรุกของ Teams:
openclaw message send --channel msteams \
--target conversation:19:[email protected] --message "hi"
สร้างโพล Teams:
openclaw message poll --channel msteams \
--target conversation:19:[email protected] \
--poll-question "Lunch?" \
--poll-option Pizza --poll-option Sushi
ตอบสนองใน Slack:
openclaw message react --channel slack \
--target C123 --message-id 456 --emoji "✅"
ตอบสนองในกลุ่ม Signal:
openclaw message react --channel signal \
--target signal:group:abc123 --message-id 1737630212345 \
--emoji "✅" --target-author-uuid 123e4567-e89b-12d3-a456-426614174000
ส่งปุ่ม inline ของ Telegram ผ่านการนำเสนอทั่วไป:
openclaw message send --channel telegram --target @mychat --message "Choose:" \
--presentation '{"blocks":[{"type":"buttons","buttons":[{"label":"Yes","value":"cmd:yes"},{"label":"No","value":"cmd:no"}]}]}'
ส่งการ์ด Teams ผ่านการนำเสนอทั่วไป:
openclaw message send --channel msteams \
--target conversation:19:[email protected] \
--presentation '{"title":"Status update","blocks":[{"type":"text","text":"Build completed"}]}'
ส่งรูปภาพ Telegram เป็นเอกสารเพื่อหลีกเลี่ยงการบีบอัด:
openclaw message send --channel telegram --target @mychat \
--media ./diagram.png --force-document