Sending Messages
Send text, photos, videos, and files via LOCO protocol.
Text Messages
# With confirmation prompt
openkakao-rs send <chat_id> "Hello!"
# Skip confirmation
openkakao-rs send <chat_id> "Hello!" -y[!NOTE] Messages are automatically prefixed with
🤖 [Sent via openkakao]for traceability. Disable with--no-prefix.
# Without prefix
openkakao-rs --no-prefix send <chat_id> "Hello!" -yPhotos
openkakao-rs send-photo <chat_id> photo.jpg -y
# or
openkakao-rs send-file <chat_id> photo.jpg -ySupported formats: JPEG, PNG, GIF. The CLI auto-detects the image type from magic bytes and extracts dimensions for the thumbnail metadata.
Videos
openkakao-rs send-file <chat_id> video.mp4 -ySupported formats: MP4, MOV, WebM.
Files
openkakao-rs send-file <chat_id> document.pdf -yAny file type is supported. The CLI detects media types automatically and falls back to generic file upload.
How It Works
Media upload uses the LOCO SHIP+POST protocol:
- SHIP — Request an upload slot from the main LOCO server (returns CDN host, port, key)
- POST — Connect to the upload server, send file metadata (size, type, dimensions)
- Data — Send the encrypted file data through the AES-GCM channel
- WRITE — Send the chat message with the attachment URL
sequenceDiagram
participant CLI as openkakao-rs
participant LOCO as LOCO Server
participant CDN as Upload Server (Kage CDN)
CLI->>LOCO: SHIP (chatId, type, size)
LOCO-->>CLI: vhost, port, key
CLI->>CDN: RSA Handshake + POST (metadata)
CLI->>CDN: Encrypted file data
CDN-->>CLI: Upload complete (status=0)
CLI->>LOCO: WRITE (msg with attachment URL)
Open Chat Safety
Sending to open chats (public chat rooms) has a higher risk of account restrictions. The CLI blocks this by default:
# This will be blocked
openkakao-rs send <open_chat_id> "message" -y
# Error: Open chat send blocked (use --force to override)
# Override with --force
openkakao-rs send <open_chat_id> "message" -y --force