Status: experimental. Direct messages only; groups coming soon per Zalo docs.
Zalo ships as a plugin and is not bundled with the core install.
coderclaw plugins install @coderclaw/zalocoderclaw plugins install ./extensions/zalocoderclaw plugins install @coderclaw/zaloZALO_BOT_TOKEN=...channels.zalo.botToken: "...".Minimal config:
{
channels: {
zalo: {
enabled: true,
botToken: "12345689:abc-xyz",
dmPolicy: "pairing",
},
},
}
Zalo is a Vietnam-focused messaging app; its Bot API lets the Gateway run a bot for 1:1 conversations. It is a good fit for support or notifications where you want deterministic routing back to Zalo.
12345689:abc-xyz).Example:
{
channels: {
zalo: {
enabled: true,
botToken: "12345689:abc-xyz",
dmPolicy: "pairing",
},
},
}
Env option: ZALO_BOT_TOKEN=... (works for the default account only).
Multi-account support: use channels.zalo.accounts with per-account tokens and optional name.
channels.zalo.webhookUrl.channels.zalo.mediaMaxMb (default 5).channels.zalo.dmPolicy = "pairing". Unknown senders receive a pairing code; messages are ignored until approved (codes expire after 1 hour).coderclaw pairing list zalocoderclaw pairing approve zalo <CODE>channels.zalo.allowFrom accepts numeric user IDs (no username lookup available).channels.zalo.webhookUrl and channels.zalo.webhookSecret.
X-Bot-Api-Secret-Token header for verification.channels.zalo.webhookPath (defaults to the webhook URL path).Note: getUpdates (polling) and webhook are mutually exclusive per Zalo API docs.
sendPhoto.| Feature | Status |
|---|---|
| Direct messages | âś… Supported |
| Groups | ❌ Coming soon (per Zalo docs) |
| Media (images) | âś… Supported |
| Reactions | ❌ Not supported |
| Threads | ❌ Not supported |
| Polls | ❌ Not supported |
| Native commands | ❌ Not supported |
| Streaming | ⚠️ Blocked (2000 char limit) |
coderclaw message send --channel zalo --target 123456789 --message "hi".Bot doesn’t respond:
coderclaw channels status --probecoderclaw logs --followWebhook not receiving events:
Full configuration: Configuration
Provider options:
channels.zalo.enabled: enable/disable channel startup.channels.zalo.botToken: bot token from Zalo Bot Platform.channels.zalo.tokenFile: read token from file path.channels.zalo.dmPolicy: pairing | allowlist | open | disabled (default: pairing).channels.zalo.allowFrom: DM allowlist (user IDs). open requires "*". The wizard will ask for numeric IDs.channels.zalo.mediaMaxMb: inbound/outbound media cap (MB, default 5).channels.zalo.webhookUrl: enable webhook mode (HTTPS required).channels.zalo.webhookSecret: webhook secret (8-256 chars).channels.zalo.webhookPath: webhook path on the gateway HTTP server.channels.zalo.proxy: proxy URL for API requests.Multi-account options:
channels.zalo.accounts.<id>.botToken: per-account token.channels.zalo.accounts.<id>.tokenFile: per-account token file.channels.zalo.accounts.<id>.name: display name.channels.zalo.accounts.<id>.enabled: enable/disable account.channels.zalo.accounts.<id>.dmPolicy: per-account DM policy.channels.zalo.accounts.<id>.allowFrom: per-account allowlist.channels.zalo.accounts.<id>.webhookUrl: per-account webhook URL.channels.zalo.accounts.<id>.webhookSecret: per-account webhook secret.channels.zalo.accounts.<id>.webhookPath: per-account webhook path.channels.zalo.accounts.<id>.proxy: per-account proxy URL.