← Back to PRs

#7142: Add Free Zalo Personal Channel Plugin Using zca-js

by Dino-VN open 2026-02-02 12:53 View on GitHub →
docs
This PR introduces a new Zalo Personal channel plugin that uses the open-source zca-js library instead of the paid zca-cli. The existing zalouser plugin requires the commercial zca-cli, which costs around $130 USD per machine/account. I wanted to use Zalo integration but found that price too expensive for a single machine or account, so I decided to create this free alternative using zca-js. This new plugin, called zalouser-free, provides the same functionality for connecting personal Zalo accounts but uses the free and open-source zca-js library as the underlying implementation. Changes Made • Added zalouser-free plugin in the extensions/zalouser-free directory • Implemented all essential features equivalent to the original zalouser plugin: • QR code login and session persistence • Send/receive text messages • Direct messages and group messages • Added proper configuration schema and documentation • Included access control options (whitelist, mention, etc.) Benefits • Completely free to use (no paid dependencies) • Open source implementation using zca-js • Lower barrier to entry for users wanting to integrate Zalo Testing The plugin has been tested and verified to work with: • QR code login and authentication • Normal message sending and receiving • Session persistence across restarts • Multi-account support Motivation I wanted to use Zalo integration in OpenClaw but found the original zalouser plugin's requirement for zca-cli too expensive at approximately $130 USD per machine or account. This PR provides a free alternative that maintains the same basic functionality. <!-- greptile_comment --> <h2>Greptile Overview</h2> <h3>Greptile Summary</h3> This PR adds a new `zalouser-free` extension that integrates Zalo Personal accounts via the free/unofficial `zca-js` library (QR login + session persistence, basic message send/receive, access control) along with onboarding hooks and docs entries under `docs/channels` and `docs/plugins`. The plugin follows the existing extension pattern (`extensions/*/index.ts` registering a channel plugin) and introduces a session manager to persist credentials under `~/.openclaw/zalouser-free/sessions.json`, then dispatches inbound messages through the OpenClaw channel routing/session/reply pipeline. <h3>Confidence Score: 2/5</h3> - This PR is not safe to merge as-is due to a couple of high-likelihood routing/runtime issues in message dispatch and receipt sending. - Score is reduced because `peer.kind` is hardcoded to `group` (breaking DM routing), `msg.raw` is accessed unsafely, and the receipt APIs (`sendSeenEvent`) appear to be called with incorrect arguments. There are also configuration/schema mismatches that can lead to confusing setup and non-functional onboarding status checks. - extensions/zalouser-free/src/channel.ts, extensions/zalouser-free/src/session-manager.ts, extensions/zalouser-free/openclaw.plugin.json, extensions/zalouser-free/src/onboarding.ts, extensions/zalouser-free/package.json <!-- greptile_other_comments_section --> <sub>(2/5) Greptile learns from your feedback when you react with thumbs up/down!</sub> <!-- /greptile_comment -->

Most Similar PRs