Read when: sending text, files, stickers, polls, status broadcasts, quoted replies, or reactions.
wacli send requires authentication, a live connection, and writable mode. Send attempts are bounded and retry once after reconnect for known stale-session/usync timeout failures. Sent to ... and JSON sent: true mean WhatsApp accepted the send request and returned a message ID; they do not confirm recipient delivery. After a successful send, wacli keeps the connection alive briefly so whatsmeow can handle retry receipts from devices that could not decrypt the first copy. Repeated send commands within 5 seconds print a stderr warning so tight loops make WhatsApp rate-limit/account-risk visible.
When sync --follow is already running for the same store, send commands delegate the send to that running process instead of opening a second WhatsApp session. This keeps scripts usable while continuous sync owns the store lock.
wacli send text --to RECIPIENT --message TEXT [--message-escapes] [--pick N] [--mention USER] [--no-preview] [--ephemeral] [--ephemeral-duration DURATION] [--reply-to MSG_ID] [--reply-to-sender JID] [--post-send-wait 2s]
wacli send file --to RECIPIENT --file PATH [--pick N] [--caption TEXT] [--filename NAME] [--mime TYPE] [--ptt] [--reply-to MSG_ID] [--reply-to-sender JID] [--post-send-wait 2s]
wacli send sticker --to RECIPIENT --file PATH [--pick N] [--reply-to MSG_ID] [--reply-to-sender JID] [--post-send-wait 2s]
wacli send voice --to RECIPIENT --file PATH [--pick N] [--mime TYPE] [--reply-to MSG_ID] [--reply-to-sender JID] [--post-send-wait 2s]
wacli send react --to PHONE_OR_JID --id MSG_ID [--reaction TEXT] [--sender JID] [--post-send-wait 2s]
wacli send poll --to RECIPIENT --question TEXT --option TEXT --option TEXT [--multi N] [--ephemeral] [--post-send-wait 2s]
wacli send status [--message TEXT] [--file PATH] [--mime TYPE] [--background-color '#RRGGBB'] [--font N] [--post-send-wait 2s]
wacli poll vote --to RECIPIENT --id MSG_ID --option TEXT [--option TEXT] [--sender JID] [--post-send-wait 2s]
wacli poll show --to RECIPIENT --id MSG_ID [--json]
wacli polls list [--chat RECIPIENT] [--limit N] [--json]send text,send file,send sticker, andsend voiceaccept a JID, phone number, or synced contact/group/chat name.- Channel JIDs use
...@newsletter;send textandsend filecan target channels when the authenticated account has posting permission. - If a name matches multiple recipients, interactive terminals prompt.
- In scripts, use
--pick Nto choose a displayed match. - Phone numbers may use common formatting such as
+1 (234) 567-8900.
send textfetches Open Graph metadata for the firsthttp://orhttps://URL and sends it as a WhatsApp link preview.- Preview metadata fetches time out after 10 seconds and fall back to plain text.
- Pass
--no-previewto disable link-preview fetching. --ephemeralsends text withContextInfo.Expiration, matching the disappearing-send path. For groups, wacli uses the live group timer when available; otherwise it falls back to a 7-day default. Set--ephemeral-durationto choose an explicit expiration.--messageis literal by default. Pass--message-escapesto interpret\n,\r,\t,\\, and\"before sending.- Use repeatable
--mention USERwith a phone number or user JID to add WhatsApp mentions tosend text. --reply-toquotes a stored message ID.- For unsynced group replies, pass
--reply-to-sender. send reactdefaults to thumbs-up.- Pass
--reaction ""to clear a reaction. - Sent reactions are stored locally immediately, including reaction target and display text.
- For group reactions, pass
--senderfor the original message sender. - Use
--post-send-wait 0to disable the retry-receipt grace window for latency-sensitive scripts.
send pollaccepts 2-12 repeatable--optionvalues.--multi Nsets how many options a voter may select. The default is1.- Outbound single-select polls use WhatsApp's V3 poll creation field. Multi-select polls use the base poll creation field. Community announcement groups use V2 when live group metadata identifies the target as both announce-only and a community parent.
- Incoming polls and poll votes are stored during sync in the local poll tables.
poll votevalidates selected options when the original poll is present in the local store.- For unsynced group polls, pass
--senderwith the poll author's JID. poll showprints current aggregates and per-voter selections from the local store. JSON output includesunknown_hashesfor vote hashes that could not be matched to a stored option.polls listshows recently synced or sent polls, optionally filtered with--chat.
send statusposts to WhatsApp'sstatus@broadcasttarget.--messageor--fileis required.- Text statuses use
--message; media statuses use--fileand can use--messageas the caption. - Text statuses accept
--background-coloras#RRGGBBor#AARRGGBB. - Text statuses accept
--font Nto pass a WhatsApp text status font number. - Media statuses reuse the normal upload path, including MIME detection and
--mimeoverrides. - Sent and synced statuses are stored in the local
status_messagestable, separate from normal chatmessages.
- File uploads are capped at 100 MiB.
- MIME type is detected automatically unless
--mimeis set. --filenamechanges the displayed document name.- Captions apply to images, videos, and documents.
- Files sent to channels use WhatsApp's unencrypted newsletter media upload path and include the upstream media handle required by
whatsmeow. - Quoted file replies and
--pttvoice-note mode are not supported for channel sends. send stickerrequires 512x512 WebP input. Static stickers are capped at 100 KiB; animated stickers are capped at 500 KiB and are sent with animation metadata.send voiceis a shortcut forsend file --ptt.- Voice notes require OGG/Opus audio (
audio/ogg; codecs=opus). - When available,
ffprobesets voice-note duration andffmpeggenerates the 64-sample waveform from decoded PCM audio.
wacli send text --to mom --message "landed"
wacli send text --to mom --message "auto delete this" --ephemeral
wacli send text --to mom --message "auto delete this in 7 days" --ephemeral-duration 7d
wacli send text --to "Family" --message "auto delete this" --ephemeral
wacli send text --to mom --message "line1\nline2" --message-escapes
wacli send text --to "Family" --pick 2 --message "on my way"
wacli send text --to "Family" --message "hey @15551234567" --mention +15551234567
wacli send text --to 1234567890 --message "replying" --reply-to ABC123
wacli send file --to 1234567890 --file ./pic.jpg --caption "hi"
wacli send file --to 1234567890 --file /tmp/report --filename report.pdf
wacli send sticker --to 1234567890 --file ./sticker-512.webp
wacli send voice --to 1234567890 --file ./voice.ogg
wacli send react --to 1234567890 --id ABC123 --reaction "❤️"
wacli send poll --to "Family" --question "Dinner?" --option "Pizza" --option "Sushi" --multi 1
wacli send status --message "available today" --background-color '#1f7a8c' --font 1
wacli send status --file ./photo.jpg --message "new update"
wacli poll vote --to "Family" --id ABC123 --option "Pizza"
wacli poll show --to "Family" --id ABC123 --json
wacli polls list --chat "Family" --limit 10