Install
openclaw skills install zalo-agentAutomate Zalo messaging, Official Account (OA), and MCP server integration via zalo-agent-cli. Triggers: 'zalo', 'send zalo', 'zalo OA', 'official account',...
openclaw skills install zalo-agentAutomate Zalo messaging, groups, contacts, payments, and real-time events via zalo-agent CLI.
Handles: login, messaging (text/image/file/sticker/voice/video/link), reactions, mentions, recall, friends, groups, polls, reminders, auto-reply, labels, catalogs, listen (WebSocket), webhooks, bank cards, VietQR, multi-account with proxy, Official Account (OA) API v3.0 (OAuth login, OA messaging, followers, tags, webhook listener, store, articles), MCP Server (Model Context Protocol for Claude Code and MCP clients). Does NOT handle: Zalo Mini App, Zalo Ads, ZNS templates, non-Zalo platforms.
zalo-agent CLI pre-installed by user (zalo-agent --version to verify)zalo-agent updatezalo-agent statusreferences/login-flow.md)references/command-reference.md)--json for machine-readable outputlisten --webhook (references/listen-mode-guide.md)# QR (interactive — human scan required, temporary local server, auto-closes after scan/timeout)
zalo-agent login --qr-url &
# Headless (re-use previously exported credentials)
zalo-agent login --credentials ./creds.json
CRITICAL: QR expires 60s. QR server is temporary and local-only. Scan via Zalo app QR Scanner (NOT camera).
Details: references/login-flow.md
zalo-agent msg send <ID> "text" # DM
zalo-agent msg send <ID> "text" -t 1 # Group
zalo-agent msg send-image <ID> ./img.jpg -m "caption" # Image
zalo-agent msg send-file <ID> ./doc.pdf # File
zalo-agent msg send-voice <ID> <url> # Voice
zalo-agent msg send-video <ID> <url> # Video
zalo-agent msg send-link <ID> <url> # Link preview
zalo-agent msg sticker <ID> "keyword" # Sticker
zalo-agent msg react <msgId> <ID> ":>" -c <cliMsgId> # React (cliMsgId REQUIRED)
zalo-agent msg undo <msgId> <ID> -c <cliMsgId> # Recall both sides
zalo-agent msg delete <msgId> <ID> # Delete self only
zalo-agent msg forward <msgId> <targetId> # Forward
Reactions: :> haha · /-heart heart · /-strong like · :o wow · :-(( cry · :-h angry
zalo-agent msg send <gID> "@All meeting" -t 1 --mention "0:-1:4" # @All
zalo-agent msg send <gID> "@Name check" -t 1 --mention "0:USER_ID:5" # @user
Format: position:userId:length — userId=-1 for @All.
zalo-agent listen # Messages + friends
zalo-agent listen --filter user --no-self # DM only
zalo-agent listen --webhook http://n8n.local/webhook/zalo # Forward to webhook
zalo-agent listen --events message,friend,group,reaction # All events
zalo-agent listen --save ./logs # Save JSONL locally
Production-ready with pm2. Details: references/listen-mode-guide.md
zalo-agent friend find "phone" # Find
zalo-agent friend list # All friends
zalo-agent friend add <ID> # Request
zalo-agent friend accept <ID> # Accept
zalo-agent friend block <ID> # Block
zalo-agent group list # List
zalo-agent group create "Name" <uid1> <uid2> # Create
zalo-agent group members <gID> # Members
zalo-agent group add-member <gID> <uid> # Add
zalo-agent group remove-member <gID> <uid> # Remove
zalo-agent group rename <gID> "New Name" # Rename
Full commands: references/command-reference.md
zalo-agent msg send-bank <ID> <ACCT> --bank ocb --name "HOLDER"
zalo-agent msg send-qr-transfer <ID> <ACCT> --bank vcb --amount 500000 --content "note"
Banks: ocb, vcb, bidv, mb, techcombank, tpbank, acb, vpbank, sacombank, hdbank... VietQR templates: compact, print, qronly. Content max 50 chars.
zalo-agent account list # List
zalo-agent account login -p "proxy" -n "Shop" # Add with proxy
zalo-agent account switch <ownerId> # Switch
zalo-agent account export -o creds.json # Export
zalo-agent oa init --app-id <ID> --secret <KEY> --skip-webhook # Setup (non-interactive)
zalo-agent oa init # Setup (interactive wizard)
zalo-agent oa whoami # OA profile
zalo-agent oa msg text <uid> "Hello" [-m cs|transaction|promotion] # Send OA message
zalo-agent oa follower list # List followers
zalo-agent oa tag assign <uid> <tag> # Tag follower
zalo-agent oa listen -p 3000 [-s <secret>] # Webhook listener
zalo-agent oa listen -p 3000 --verify-domain <code> # With domain verify
zalo-agent oa refresh # Refresh token
zalo-agent oa login --app-id <ID> --secret <KEY> --callback-host https://vps.com # VPS login
OA uses official Zalo API (no ban risk). Separate auth from personal account.
Full reference: references/oa-command-reference.md
zalo-agent mcp start # stdio transport (default, for local Claude Code)
zalo-agent mcp start --http <port> # HTTP transport (for VPS/remote clients)
zalo-agent mcp start --auth <token> # Bearer token auth (HTTP mode)
zalo-agent mcp start --config <path> # Custom config file
MCP tools exposed:
zalo_get_messages — Get buffered messages with cursor-based pagination (incremental reads)zalo_send_message — Send text message to a thread (DM or group)zalo_list_threads — List active threads with unread counts and metadatazalo_mark_read — Discard messages up to a given cursorUse stdio mode for local Claude Code, HTTP mode for VPS deployments.
Full reference: references/mcp-guide.md
Full commands: references/command-reference.md
listen and browser Zalo cannot coexistcliMsgId required for: react, undo → get from --json send or --json listen-t 1)~/.zalo-agent-cli/ (personal, 0600) and ~/.zalo-agent/ (OA, 0600)oa refresh to renewzalo-agent CLI binary — it does not run arbitrary code, install packages, or modify system fileszalo-agent CLI at ~/.zalo-agent-cli/ with 0600 permissions. This skill never reads, writes, or transmits credential files directly--qr-url login starts a temporary local HTTP server that auto-terminates after successful scan or 60-second timeout. No persistent server is created