@quantumclaw/quantumclaw 2026.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4601 -0
- package/LICENSE +21 -0
- package/README.md +559 -0
- package/assets/avatar-placeholder.svg +19 -0
- package/assets/chrome-extension/icons/icon128.png +0 -0
- package/assets/chrome-extension/icons/icon16.png +0 -0
- package/assets/chrome-extension/icons/icon32.png +0 -0
- package/assets/chrome-extension/icons/icon48.png +0 -0
- package/assets/dmg-background-small.png +0 -0
- package/assets/dmg-background.png +0 -0
- package/docs/.i18n/README.md +31 -0
- package/docs/.i18n/glossary.ja-JP.json +14 -0
- package/docs/.i18n/glossary.zh-CN.json +302 -0
- package/docs/.i18n/ja-JP.tm.jsonl +0 -0
- package/docs/assets/install-script.svg +1 -0
- package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
- package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
- package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
- package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
- package/docs/assets/macos-onboarding/05-permissions.png +0 -0
- package/docs/assets/pixel-lobster.svg +60 -0
- package/docs/assets/quantumclaw-logo-text-dark.png +0 -0
- package/docs/assets/quantumclaw-logo-text-dark.svg +418 -0
- package/docs/assets/quantumclaw-logo-text.png +0 -0
- package/docs/assets/quantumclaw-logo-text.svg +418 -0
- package/docs/assets/showcase/agents-ui.jpg +0 -0
- package/docs/assets/showcase/bambu-cli.png +0 -0
- package/docs/assets/showcase/codexmonitor.png +0 -0
- package/docs/assets/showcase/gohome-grafana.png +0 -0
- package/docs/assets/showcase/ios-testflight.jpg +0 -0
- package/docs/assets/showcase/oura-health.png +0 -0
- package/docs/assets/showcase/padel-cli.svg +11 -0
- package/docs/assets/showcase/padel-screenshot.jpg +0 -0
- package/docs/assets/showcase/papla-tts.jpg +0 -0
- package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
- package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
- package/docs/assets/showcase/roborock-status.svg +13 -0
- package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
- package/docs/assets/showcase/snag.png +0 -0
- package/docs/assets/showcase/tesco-shop.jpg +0 -0
- package/docs/assets/showcase/wienerlinien.png +0 -0
- package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
- package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
- package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
- package/docs/assets/sponsors/blacksmith.svg +14 -0
- package/docs/assets/sponsors/convex.svg +16 -0
- package/docs/assets/sponsors/openai.svg +3 -0
- package/docs/assets/sponsors/vercel.svg +5 -0
- package/docs/auth-credential-semantics.md +53 -0
- package/docs/automation/auth-monitoring.md +44 -0
- package/docs/automation/cron-jobs.md +727 -0
- package/docs/automation/cron-vs-heartbeat.md +286 -0
- package/docs/automation/gmail-pubsub.md +256 -0
- package/docs/automation/hooks.md +1056 -0
- package/docs/automation/poll.md +86 -0
- package/docs/automation/standing-orders.md +251 -0
- package/docs/automation/troubleshooting.md +122 -0
- package/docs/automation/webhook.md +217 -0
- package/docs/brave-search.md +93 -0
- package/docs/channels/bluebubbles.md +347 -0
- package/docs/channels/broadcast-groups.md +442 -0
- package/docs/channels/channel-routing.md +139 -0
- package/docs/channels/discord.md +1229 -0
- package/docs/channels/feishu.md +747 -0
- package/docs/channels/googlechat.md +261 -0
- package/docs/channels/group-messages.md +84 -0
- package/docs/channels/groups.md +379 -0
- package/docs/channels/imessage.md +367 -0
- package/docs/channels/index.md +47 -0
- package/docs/channels/irc.md +242 -0
- package/docs/channels/line.md +194 -0
- package/docs/channels/location.md +56 -0
- package/docs/channels/matrix.md +677 -0
- package/docs/channels/mattermost.md +427 -0
- package/docs/channels/msteams.md +780 -0
- package/docs/channels/nextcloud-talk.md +138 -0
- package/docs/channels/nostr.md +249 -0
- package/docs/channels/pairing.md +114 -0
- package/docs/channels/signal.md +329 -0
- package/docs/channels/slack.md +603 -0
- package/docs/channels/synology-chat.md +134 -0
- package/docs/channels/telegram.md +987 -0
- package/docs/channels/tlon.md +276 -0
- package/docs/channels/troubleshooting.md +118 -0
- package/docs/channels/twitch.md +379 -0
- package/docs/channels/whatsapp.md +460 -0
- package/docs/channels/zalo.md +243 -0
- package/docs/channels/zalouser.md +181 -0
- package/docs/ci.md +55 -0
- package/docs/cli/acp.md +288 -0
- package/docs/cli/agent.md +29 -0
- package/docs/cli/agents.md +123 -0
- package/docs/cli/approvals.md +50 -0
- package/docs/cli/backup.md +76 -0
- package/docs/cli/browser.md +106 -0
- package/docs/cli/channels.md +102 -0
- package/docs/cli/clawbot.md +21 -0
- package/docs/cli/completion.md +35 -0
- package/docs/cli/config.md +295 -0
- package/docs/cli/configure.md +36 -0
- package/docs/cli/cron.md +77 -0
- package/docs/cli/daemon.md +53 -0
- package/docs/cli/dashboard.md +22 -0
- package/docs/cli/devices.md +139 -0
- package/docs/cli/directory.md +63 -0
- package/docs/cli/dns.md +23 -0
- package/docs/cli/docs.md +15 -0
- package/docs/cli/doctor.md +48 -0
- package/docs/cli/gateway.md +235 -0
- package/docs/cli/health.md +21 -0
- package/docs/cli/hooks.md +329 -0
- package/docs/cli/index.md +1150 -0
- package/docs/cli/logs.md +28 -0
- package/docs/cli/memory.md +66 -0
- package/docs/cli/message.md +278 -0
- package/docs/cli/models.md +81 -0
- package/docs/cli/node.md +127 -0
- package/docs/cli/nodes.md +75 -0
- package/docs/cli/onboard.md +157 -0
- package/docs/cli/pairing.md +32 -0
- package/docs/cli/plugins.md +210 -0
- package/docs/cli/qr.md +46 -0
- package/docs/cli/reset.md +20 -0
- package/docs/cli/sandbox.md +197 -0
- package/docs/cli/secrets.md +188 -0
- package/docs/cli/security.md +79 -0
- package/docs/cli/sessions.md +110 -0
- package/docs/cli/setup.md +29 -0
- package/docs/cli/skills.md +36 -0
- package/docs/cli/status.md +30 -0
- package/docs/cli/system.md +60 -0
- package/docs/cli/tui.md +30 -0
- package/docs/cli/uninstall.md +20 -0
- package/docs/cli/update.md +103 -0
- package/docs/cli/voicecall.md +34 -0
- package/docs/cli/webhooks.md +25 -0
- package/docs/concepts/agent-loop.md +148 -0
- package/docs/concepts/agent-workspace.md +236 -0
- package/docs/concepts/agent.md +122 -0
- package/docs/concepts/architecture.md +137 -0
- package/docs/concepts/compaction.md +123 -0
- package/docs/concepts/context-engine.md +268 -0
- package/docs/concepts/context.md +172 -0
- package/docs/concepts/delegate-architecture.md +296 -0
- package/docs/concepts/features.md +73 -0
- package/docs/concepts/markdown-formatting.md +130 -0
- package/docs/concepts/memory.md +108 -0
- package/docs/concepts/messages.md +154 -0
- package/docs/concepts/model-failover.md +152 -0
- package/docs/concepts/model-providers.md +607 -0
- package/docs/concepts/models.md +225 -0
- package/docs/concepts/multi-agent.md +552 -0
- package/docs/concepts/oauth.md +158 -0
- package/docs/concepts/presence.md +102 -0
- package/docs/concepts/queue.md +89 -0
- package/docs/concepts/retry.md +69 -0
- package/docs/concepts/session-pruning.md +121 -0
- package/docs/concepts/session-tool.md +242 -0
- package/docs/concepts/session.md +310 -0
- package/docs/concepts/streaming.md +155 -0
- package/docs/concepts/system-prompt.md +132 -0
- package/docs/concepts/timezone.md +91 -0
- package/docs/concepts/typebox.md +291 -0
- package/docs/concepts/typing-indicators.md +68 -0
- package/docs/concepts/usage-tracking.md +35 -0
- package/docs/date-time.md +128 -0
- package/docs/debug/node-issue.md +85 -0
- package/docs/diagnostics/flags.md +91 -0
- package/docs/docs.json +2078 -0
- package/docs/gateway/authentication.md +179 -0
- package/docs/gateway/background-process.md +97 -0
- package/docs/gateway/bonjour.md +177 -0
- package/docs/gateway/bridge-protocol.md +91 -0
- package/docs/gateway/cli-backends.md +225 -0
- package/docs/gateway/configuration-examples.md +651 -0
- package/docs/gateway/configuration-reference.md +3123 -0
- package/docs/gateway/configuration.md +633 -0
- package/docs/gateway/discovery.md +123 -0
- package/docs/gateway/doctor.md +362 -0
- package/docs/gateway/gateway-lock.md +34 -0
- package/docs/gateway/health.md +44 -0
- package/docs/gateway/heartbeat.md +393 -0
- package/docs/gateway/index.md +261 -0
- package/docs/gateway/local-models.md +152 -0
- package/docs/gateway/logging.md +113 -0
- package/docs/gateway/multiple-gateways.md +112 -0
- package/docs/gateway/network-model.md +22 -0
- package/docs/gateway/openai-http-api.md +132 -0
- package/docs/gateway/openresponses-http-api.md +295 -0
- package/docs/gateway/openshell.md +307 -0
- package/docs/gateway/pairing.md +99 -0
- package/docs/gateway/protocol.md +267 -0
- package/docs/gateway/remote-gateway-readme.md +158 -0
- package/docs/gateway/remote.md +153 -0
- package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +134 -0
- package/docs/gateway/sandboxing.md +469 -0
- package/docs/gateway/secrets-plan-contract.md +116 -0
- package/docs/gateway/secrets.md +503 -0
- package/docs/gateway/security/index.md +1220 -0
- package/docs/gateway/tailscale.md +132 -0
- package/docs/gateway/tools-invoke-http-api.md +118 -0
- package/docs/gateway/troubleshooting.md +378 -0
- package/docs/gateway/trusted-proxy-auth.md +330 -0
- package/docs/help/debugging.md +168 -0
- package/docs/help/environment.md +163 -0
- package/docs/help/faq.md +2997 -0
- package/docs/help/index.md +28 -0
- package/docs/help/scripts.md +28 -0
- package/docs/help/testing.md +526 -0
- package/docs/help/troubleshooting.md +297 -0
- package/docs/images/configure-model-picker-unsearchable.png +0 -0
- package/docs/images/feishu-step2-create-app.png +0 -0
- package/docs/images/feishu-step3-credentials.png +0 -0
- package/docs/images/feishu-step4-permissions.png +0 -0
- package/docs/images/feishu-step5-bot-capability.png +0 -0
- package/docs/images/feishu-step6-event-subscription.png +0 -0
- package/docs/images/feishu-verification-token.png +0 -0
- package/docs/images/groups-flow.svg +52 -0
- package/docs/images/mobile-ui-screenshot.png +0 -0
- package/docs/index.md +196 -0
- package/docs/install/ansible.md +230 -0
- package/docs/install/azure.md +311 -0
- package/docs/install/bun.md +55 -0
- package/docs/install/development-channels.md +120 -0
- package/docs/install/digitalocean.md +129 -0
- package/docs/install/docker-vm-runtime.md +142 -0
- package/docs/install/docker.md +375 -0
- package/docs/install/exe-dev.md +126 -0
- package/docs/install/fly.md +501 -0
- package/docs/install/gcp.md +402 -0
- package/docs/install/hetzner.md +251 -0
- package/docs/install/index.md +183 -0
- package/docs/install/installer.md +415 -0
- package/docs/install/kubernetes.md +191 -0
- package/docs/install/macos-vm.md +281 -0
- package/docs/install/migrating-matrix.md +346 -0
- package/docs/install/migrating.md +110 -0
- package/docs/install/nix.md +89 -0
- package/docs/install/node.md +138 -0
- package/docs/install/northflank.mdx +54 -0
- package/docs/install/oracle.md +156 -0
- package/docs/install/podman.md +133 -0
- package/docs/install/railway.mdx +100 -0
- package/docs/install/raspberry-pi.md +159 -0
- package/docs/install/render.mdx +169 -0
- package/docs/install/uninstall.md +128 -0
- package/docs/install/updating.md +128 -0
- package/docs/ja-JP/index.md +186 -0
- package/docs/ja-JP/start/getting-started.md +125 -0
- package/docs/ja-JP/start/wizard.md +77 -0
- package/docs/logging.md +352 -0
- package/docs/nav-tabs-underline.js +100 -0
- package/docs/network.md +54 -0
- package/docs/nodes/audio.md +187 -0
- package/docs/nodes/camera.md +162 -0
- package/docs/nodes/images.md +72 -0
- package/docs/nodes/index.md +393 -0
- package/docs/nodes/location-command.md +98 -0
- package/docs/nodes/media-understanding.md +394 -0
- package/docs/nodes/talk.md +92 -0
- package/docs/nodes/troubleshooting.md +114 -0
- package/docs/nodes/voicewake.md +66 -0
- package/docs/perplexity.md +174 -0
- package/docs/pi-dev.md +80 -0
- package/docs/pi.md +567 -0
- package/docs/platforms/android.md +168 -0
- package/docs/platforms/digitalocean.md +266 -0
- package/docs/platforms/index.md +54 -0
- package/docs/platforms/ios.md +220 -0
- package/docs/platforms/linux.md +94 -0
- package/docs/platforms/mac/bundled-gateway.md +73 -0
- package/docs/platforms/mac/canvas.md +125 -0
- package/docs/platforms/mac/child-process.md +69 -0
- package/docs/platforms/mac/dev-setup.md +104 -0
- package/docs/platforms/mac/health.md +34 -0
- package/docs/platforms/mac/icon.md +31 -0
- package/docs/platforms/mac/logging.md +57 -0
- package/docs/platforms/mac/menu-bar.md +81 -0
- package/docs/platforms/mac/peekaboo.md +65 -0
- package/docs/platforms/mac/permissions.md +50 -0
- package/docs/platforms/mac/remote.md +84 -0
- package/docs/platforms/mac/signing.md +47 -0
- package/docs/platforms/mac/skills.md +33 -0
- package/docs/platforms/mac/voice-overlay.md +60 -0
- package/docs/platforms/mac/voicewake.md +67 -0
- package/docs/platforms/mac/webchat.md +43 -0
- package/docs/platforms/mac/xpc.md +61 -0
- package/docs/platforms/macos.md +226 -0
- package/docs/platforms/oracle.md +303 -0
- package/docs/platforms/raspberry-pi.md +412 -0
- package/docs/platforms/windows.md +241 -0
- package/docs/plugins/agent-tools.md +10 -0
- package/docs/plugins/architecture.md +1366 -0
- package/docs/plugins/building-extensions.md +10 -0
- package/docs/plugins/building-plugins.md +239 -0
- package/docs/plugins/bundles.md +181 -0
- package/docs/plugins/community.md +145 -0
- package/docs/plugins/manifest.md +241 -0
- package/docs/plugins/sdk-channel-plugins.md +370 -0
- package/docs/plugins/sdk-entrypoints.md +161 -0
- package/docs/plugins/sdk-migration.md +172 -0
- package/docs/plugins/sdk-overview.md +196 -0
- package/docs/plugins/sdk-provider-plugins.md +370 -0
- package/docs/plugins/sdk-runtime.md +345 -0
- package/docs/plugins/sdk-setup.md +331 -0
- package/docs/plugins/sdk-testing.md +263 -0
- package/docs/plugins/voice-call.md +380 -0
- package/docs/plugins/zalouser.md +77 -0
- package/docs/prose.md +134 -0
- package/docs/providers/anthropic.md +259 -0
- package/docs/providers/bedrock.md +176 -0
- package/docs/providers/claude-max-api-proxy.md +154 -0
- package/docs/providers/cloudflare-ai-gateway.md +71 -0
- package/docs/providers/deepgram.md +93 -0
- package/docs/providers/github-copilot.md +72 -0
- package/docs/providers/glm.md +43 -0
- package/docs/providers/google.md +78 -0
- package/docs/providers/groq.md +96 -0
- package/docs/providers/huggingface.md +209 -0
- package/docs/providers/index.md +69 -0
- package/docs/providers/kilocode.md +74 -0
- package/docs/providers/litellm.md +154 -0
- package/docs/providers/minimax.md +224 -0
- package/docs/providers/mistral.md +54 -0
- package/docs/providers/models.md +45 -0
- package/docs/providers/modelstudio.md +66 -0
- package/docs/providers/moonshot.md +175 -0
- package/docs/providers/nvidia.md +55 -0
- package/docs/providers/ollama.md +352 -0
- package/docs/providers/openai.md +303 -0
- package/docs/providers/opencode-go.md +45 -0
- package/docs/providers/opencode.md +64 -0
- package/docs/providers/openrouter.md +37 -0
- package/docs/providers/perplexity-provider.md +62 -0
- package/docs/providers/qianfan.md +38 -0
- package/docs/providers/qwen.md +53 -0
- package/docs/providers/sglang.md +104 -0
- package/docs/providers/synthetic.md +99 -0
- package/docs/providers/together.md +66 -0
- package/docs/providers/venice.md +282 -0
- package/docs/providers/vercel-ai-gateway.md +60 -0
- package/docs/providers/vllm.md +92 -0
- package/docs/providers/volcengine.md +74 -0
- package/docs/providers/xai.md +60 -0
- package/docs/providers/xiaomi.md +86 -0
- package/docs/providers/zai.md +46 -0
- package/docs/reference/AGENTS.default.md +126 -0
- package/docs/reference/RELEASING.md +42 -0
- package/docs/reference/api-usage-costs.md +144 -0
- package/docs/reference/credits.md +30 -0
- package/docs/reference/device-models.md +47 -0
- package/docs/reference/memory-config.md +711 -0
- package/docs/reference/prompt-caching.md +185 -0
- package/docs/reference/rpc.md +43 -0
- package/docs/reference/secretref-credential-surface.md +140 -0
- package/docs/reference/secretref-user-supplied-credentials-matrix.json +563 -0
- package/docs/reference/session-management-compaction.md +324 -0
- package/docs/reference/templates/AGENTS.dev.md +83 -0
- package/docs/reference/templates/AGENTS.md +219 -0
- package/docs/reference/templates/BOOT.md +11 -0
- package/docs/reference/templates/BOOTSTRAP.md +62 -0
- package/docs/reference/templates/HEARTBEAT.md +14 -0
- package/docs/reference/templates/IDENTITY.dev.md +47 -0
- package/docs/reference/templates/IDENTITY.md +29 -0
- package/docs/reference/templates/SOUL.dev.md +76 -0
- package/docs/reference/templates/SOUL.md +43 -0
- package/docs/reference/templates/TOOLS.dev.md +24 -0
- package/docs/reference/templates/TOOLS.md +47 -0
- package/docs/reference/templates/USER.dev.md +18 -0
- package/docs/reference/templates/USER.md +23 -0
- package/docs/reference/test.md +90 -0
- package/docs/reference/token-use.md +175 -0
- package/docs/reference/transcript-hygiene.md +151 -0
- package/docs/reference/wizard.md +235 -0
- package/docs/security/CONTRIBUTING-THREAT-MODEL.md +98 -0
- package/docs/security/THREAT-MODEL-ATLAS.md +611 -0
- package/docs/security/formal-verification.md +167 -0
- package/docs/start/bootstrapping.md +41 -0
- package/docs/start/docs-directory.md +66 -0
- package/docs/start/getting-started.md +116 -0
- package/docs/start/hubs.md +198 -0
- package/docs/start/lore.md +219 -0
- package/docs/start/onboarding-overview.md +67 -0
- package/docs/start/onboarding.md +91 -0
- package/docs/start/openclaw.md +221 -0
- package/docs/start/quickstart.md +22 -0
- package/docs/start/setup.md +164 -0
- package/docs/start/showcase.md +418 -0
- package/docs/start/wizard-cli-automation.md +215 -0
- package/docs/start/wizard-cli-reference.md +299 -0
- package/docs/start/wizard.md +125 -0
- package/docs/style.css +37 -0
- package/docs/tools/acp-agents.md +623 -0
- package/docs/tools/agent-send.md +100 -0
- package/docs/tools/apply-patch.md +51 -0
- package/docs/tools/brave-search.md +93 -0
- package/docs/tools/browser-linux-troubleshooting.md +138 -0
- package/docs/tools/browser-login.md +73 -0
- package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +211 -0
- package/docs/tools/browser.md +731 -0
- package/docs/tools/btw.md +142 -0
- package/docs/tools/capability-cookbook.md +119 -0
- package/docs/tools/clawhub.md +298 -0
- package/docs/tools/creating-skills.md +117 -0
- package/docs/tools/diffs.md +386 -0
- package/docs/tools/elevated.md +114 -0
- package/docs/tools/exec-approvals.md +430 -0
- package/docs/tools/exec.md +207 -0
- package/docs/tools/firecrawl.md +140 -0
- package/docs/tools/index.md +137 -0
- package/docs/tools/llm-task.md +119 -0
- package/docs/tools/lobster.md +340 -0
- package/docs/tools/loop-detection.md +100 -0
- package/docs/tools/multi-agent-sandbox-tools.md +364 -0
- package/docs/tools/pdf.md +156 -0
- package/docs/tools/perplexity-search.md +174 -0
- package/docs/tools/plugin.md +255 -0
- package/docs/tools/reactions.md +64 -0
- package/docs/tools/skills-config.md +86 -0
- package/docs/tools/skills.md +309 -0
- package/docs/tools/slash-commands.md +294 -0
- package/docs/tools/subagents.md +295 -0
- package/docs/tools/tavily.md +125 -0
- package/docs/tools/thinking.md +96 -0
- package/docs/tools/tts.md +406 -0
- package/docs/tools/web.md +516 -0
- package/docs/tts.md +406 -0
- package/docs/vps.md +112 -0
- package/docs/web/control-ui.md +275 -0
- package/docs/web/dashboard.md +54 -0
- package/docs/web/index.md +120 -0
- package/docs/web/tui.md +170 -0
- package/docs/web/webchat.md +61 -0
- package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
- package/docs/whatsapp-openclaw.jpg +0 -0
- package/docs/zh-CN/AGENTS.md +61 -0
- package/docs/zh-CN/automation/auth-monitoring.md +47 -0
- package/docs/zh-CN/automation/cron-jobs.md +435 -0
- package/docs/zh-CN/automation/cron-vs-heartbeat.md +286 -0
- package/docs/zh-CN/automation/gmail-pubsub.md +249 -0
- package/docs/zh-CN/automation/hooks.md +1051 -0
- package/docs/zh-CN/automation/poll.md +76 -0
- package/docs/zh-CN/automation/troubleshooting.md +8 -0
- package/docs/zh-CN/automation/webhook.md +163 -0
- package/docs/zh-CN/brave-search.md +60 -0
- package/docs/zh-CN/channels/bluebubbles.md +354 -0
- package/docs/zh-CN/channels/broadcast-groups.md +449 -0
- package/docs/zh-CN/channels/channel-routing.md +117 -0
- package/docs/zh-CN/channels/discord.md +468 -0
- package/docs/zh-CN/channels/feishu.md +728 -0
- package/docs/zh-CN/channels/googlechat.md +257 -0
- package/docs/zh-CN/channels/grammy.md +38 -0
- package/docs/zh-CN/channels/group-messages.md +91 -0
- package/docs/zh-CN/channels/groups.md +379 -0
- package/docs/zh-CN/channels/imessage.md +302 -0
- package/docs/zh-CN/channels/index.md +53 -0
- package/docs/zh-CN/channels/line.md +180 -0
- package/docs/zh-CN/channels/location.md +63 -0
- package/docs/zh-CN/channels/matrix.md +221 -0
- package/docs/zh-CN/channels/mattermost.md +144 -0
- package/docs/zh-CN/channels/msteams.md +775 -0
- package/docs/zh-CN/channels/nextcloud-talk.md +142 -0
- package/docs/zh-CN/channels/nostr.md +249 -0
- package/docs/zh-CN/channels/pairing.md +89 -0
- package/docs/zh-CN/channels/signal.md +209 -0
- package/docs/zh-CN/channels/slack.md +531 -0
- package/docs/zh-CN/channels/synology-chat.md +138 -0
- package/docs/zh-CN/channels/telegram.md +751 -0
- package/docs/zh-CN/channels/tlon.md +136 -0
- package/docs/zh-CN/channels/troubleshooting.md +36 -0
- package/docs/zh-CN/channels/twitch.md +385 -0
- package/docs/zh-CN/channels/whatsapp.md +411 -0
- package/docs/zh-CN/channels/zalo.md +196 -0
- package/docs/zh-CN/channels/zalouser.md +147 -0
- package/docs/zh-CN/cli/acp.md +173 -0
- package/docs/zh-CN/cli/agent.md +30 -0
- package/docs/zh-CN/cli/agents.md +82 -0
- package/docs/zh-CN/cli/approvals.md +57 -0
- package/docs/zh-CN/cli/browser.md +114 -0
- package/docs/zh-CN/cli/channels.md +86 -0
- package/docs/zh-CN/cli/config.md +57 -0
- package/docs/zh-CN/cli/configure.md +38 -0
- package/docs/zh-CN/cli/cron.md +43 -0
- package/docs/zh-CN/cli/dashboard.md +23 -0
- package/docs/zh-CN/cli/devices.md +74 -0
- package/docs/zh-CN/cli/directory.md +70 -0
- package/docs/zh-CN/cli/dns.md +30 -0
- package/docs/zh-CN/cli/docs.md +22 -0
- package/docs/zh-CN/cli/doctor.md +48 -0
- package/docs/zh-CN/cli/gateway.md +206 -0
- package/docs/zh-CN/cli/health.md +28 -0
- package/docs/zh-CN/cli/hooks.md +298 -0
- package/docs/zh-CN/cli/index.md +1143 -0
- package/docs/zh-CN/cli/logs.md +31 -0
- package/docs/zh-CN/cli/memory.md +52 -0
- package/docs/zh-CN/cli/message.md +246 -0
- package/docs/zh-CN/cli/models.md +85 -0
- package/docs/zh-CN/cli/node.md +115 -0
- package/docs/zh-CN/cli/nodes.md +80 -0
- package/docs/zh-CN/cli/onboard.md +164 -0
- package/docs/zh-CN/cli/pairing.md +28 -0
- package/docs/zh-CN/cli/plugins.md +66 -0
- package/docs/zh-CN/cli/reset.md +24 -0
- package/docs/zh-CN/cli/sandbox.md +158 -0
- package/docs/zh-CN/cli/security.md +33 -0
- package/docs/zh-CN/cli/sessions.md +23 -0
- package/docs/zh-CN/cli/setup.md +36 -0
- package/docs/zh-CN/cli/skills.md +33 -0
- package/docs/zh-CN/cli/status.md +33 -0
- package/docs/zh-CN/cli/system.md +63 -0
- package/docs/zh-CN/cli/tui.md +30 -0
- package/docs/zh-CN/cli/uninstall.md +24 -0
- package/docs/zh-CN/cli/update.md +101 -0
- package/docs/zh-CN/cli/voicecall.md +41 -0
- package/docs/zh-CN/cli/webhooks.md +32 -0
- package/docs/zh-CN/concepts/agent-loop.md +146 -0
- package/docs/zh-CN/concepts/agent-workspace.md +219 -0
- package/docs/zh-CN/concepts/agent.md +115 -0
- package/docs/zh-CN/concepts/architecture.md +123 -0
- package/docs/zh-CN/concepts/compaction.md +67 -0
- package/docs/zh-CN/concepts/context.md +168 -0
- package/docs/zh-CN/concepts/features.md +59 -0
- package/docs/zh-CN/concepts/markdown-formatting.md +117 -0
- package/docs/zh-CN/concepts/memory.md +412 -0
- package/docs/zh-CN/concepts/messages.md +141 -0
- package/docs/zh-CN/concepts/model-failover.md +145 -0
- package/docs/zh-CN/concepts/model-providers.md +606 -0
- package/docs/zh-CN/concepts/models.md +225 -0
- package/docs/zh-CN/concepts/multi-agent.md +372 -0
- package/docs/zh-CN/concepts/oauth.md +164 -0
- package/docs/zh-CN/concepts/presence.md +99 -0
- package/docs/zh-CN/concepts/queue.md +94 -0
- package/docs/zh-CN/concepts/retry.md +76 -0
- package/docs/zh-CN/concepts/session-pruning.md +129 -0
- package/docs/zh-CN/concepts/session-tool.md +200 -0
- package/docs/zh-CN/concepts/session.md +166 -0
- package/docs/zh-CN/concepts/streaming.md +133 -0
- package/docs/zh-CN/concepts/system-prompt.md +101 -0
- package/docs/zh-CN/concepts/timezone.md +96 -0
- package/docs/zh-CN/concepts/typebox.md +284 -0
- package/docs/zh-CN/concepts/typing-indicators.md +74 -0
- package/docs/zh-CN/concepts/usage-tracking.md +42 -0
- package/docs/zh-CN/date-time.md +129 -0
- package/docs/zh-CN/debug/node-issue.md +90 -0
- package/docs/zh-CN/diagnostics/flags.md +98 -0
- package/docs/zh-CN/gateway/authentication.md +184 -0
- package/docs/zh-CN/gateway/background-process.md +100 -0
- package/docs/zh-CN/gateway/bonjour.md +174 -0
- package/docs/zh-CN/gateway/bridge-protocol.md +86 -0
- package/docs/zh-CN/gateway/cli-backends.md +213 -0
- package/docs/zh-CN/gateway/configuration-examples.md +587 -0
- package/docs/zh-CN/gateway/configuration-reference.md +3103 -0
- package/docs/zh-CN/gateway/configuration.md +640 -0
- package/docs/zh-CN/gateway/discovery.md +123 -0
- package/docs/zh-CN/gateway/doctor.md +238 -0
- package/docs/zh-CN/gateway/gateway-lock.md +41 -0
- package/docs/zh-CN/gateway/health.md +42 -0
- package/docs/zh-CN/gateway/heartbeat.md +274 -0
- package/docs/zh-CN/gateway/index.md +335 -0
- package/docs/zh-CN/gateway/local-models.md +159 -0
- package/docs/zh-CN/gateway/logging.md +114 -0
- package/docs/zh-CN/gateway/multiple-gateways.md +119 -0
- package/docs/zh-CN/gateway/network-model.md +23 -0
- package/docs/zh-CN/gateway/openai-http-api.md +125 -0
- package/docs/zh-CN/gateway/openresponses-http-api.md +317 -0
- package/docs/zh-CN/gateway/pairing.md +99 -0
- package/docs/zh-CN/gateway/protocol.md +220 -0
- package/docs/zh-CN/gateway/remote-gateway-readme.md +164 -0
- package/docs/zh-CN/gateway/remote.md +133 -0
- package/docs/zh-CN/gateway/sandbox-vs-tool-policy-vs-elevated.md +135 -0
- package/docs/zh-CN/gateway/sandboxing.md +188 -0
- package/docs/zh-CN/gateway/security/index.md +777 -0
- package/docs/zh-CN/gateway/tailscale.md +124 -0
- package/docs/zh-CN/gateway/tools-invoke-http-api.md +92 -0
- package/docs/zh-CN/gateway/troubleshooting.md +771 -0
- package/docs/zh-CN/help/debugging.md +160 -0
- package/docs/zh-CN/help/environment.md +88 -0
- package/docs/zh-CN/help/faq.md +2640 -0
- package/docs/zh-CN/help/index.md +28 -0
- package/docs/zh-CN/help/scripts.md +35 -0
- package/docs/zh-CN/help/testing.md +375 -0
- package/docs/zh-CN/help/troubleshooting.md +104 -0
- package/docs/zh-CN/index.md +186 -0
- package/docs/zh-CN/install/ansible.md +215 -0
- package/docs/zh-CN/install/bun.md +65 -0
- package/docs/zh-CN/install/development-channels.md +81 -0
- package/docs/zh-CN/install/docker.md +532 -0
- package/docs/zh-CN/install/exe-dev.md +133 -0
- package/docs/zh-CN/install/fly.md +490 -0
- package/docs/zh-CN/install/gcp.md +510 -0
- package/docs/zh-CN/install/hetzner.md +337 -0
- package/docs/zh-CN/install/index.md +235 -0
- package/docs/zh-CN/install/installer.md +422 -0
- package/docs/zh-CN/install/macos-vm.md +288 -0
- package/docs/zh-CN/install/migrating.md +199 -0
- package/docs/zh-CN/install/nix.md +99 -0
- package/docs/zh-CN/install/node.md +8 -0
- package/docs/zh-CN/install/northflank.mdx +60 -0
- package/docs/zh-CN/install/railway.mdx +106 -0
- package/docs/zh-CN/install/render.mdx +169 -0
- package/docs/zh-CN/install/uninstall.md +135 -0
- package/docs/zh-CN/install/updating.md +233 -0
- package/docs/zh-CN/logging.md +329 -0
- package/docs/zh-CN/network.md +59 -0
- package/docs/zh-CN/nodes/audio.md +120 -0
- package/docs/zh-CN/nodes/camera.md +162 -0
- package/docs/zh-CN/nodes/images.md +79 -0
- package/docs/zh-CN/nodes/index.md +348 -0
- package/docs/zh-CN/nodes/location-command.md +120 -0
- package/docs/zh-CN/nodes/media-understanding.md +380 -0
- package/docs/zh-CN/nodes/talk.md +97 -0
- package/docs/zh-CN/nodes/troubleshooting.md +8 -0
- package/docs/zh-CN/nodes/voicewake.md +72 -0
- package/docs/zh-CN/perplexity.md +102 -0
- package/docs/zh-CN/pi-dev.md +77 -0
- package/docs/zh-CN/pi.md +619 -0
- package/docs/zh-CN/platforms/android.md +155 -0
- package/docs/zh-CN/platforms/digitalocean.md +273 -0
- package/docs/zh-CN/platforms/index.md +60 -0
- package/docs/zh-CN/platforms/ios.md +114 -0
- package/docs/zh-CN/platforms/linux.md +100 -0
- package/docs/zh-CN/platforms/mac/bundled-gateway.md +75 -0
- package/docs/zh-CN/platforms/mac/canvas.md +128 -0
- package/docs/zh-CN/platforms/mac/child-process.md +73 -0
- package/docs/zh-CN/platforms/mac/dev-setup.md +109 -0
- package/docs/zh-CN/platforms/mac/health.md +41 -0
- package/docs/zh-CN/platforms/mac/icon.md +38 -0
- package/docs/zh-CN/platforms/mac/logging.md +64 -0
- package/docs/zh-CN/platforms/mac/menu-bar.md +88 -0
- package/docs/zh-CN/platforms/mac/peekaboo.md +62 -0
- package/docs/zh-CN/platforms/mac/permissions.md +46 -0
- package/docs/zh-CN/platforms/mac/remote.md +90 -0
- package/docs/zh-CN/platforms/mac/signing.md +54 -0
- package/docs/zh-CN/platforms/mac/skills.md +40 -0
- package/docs/zh-CN/platforms/mac/voice-overlay.md +67 -0
- package/docs/zh-CN/platforms/mac/voicewake.md +74 -0
- package/docs/zh-CN/platforms/mac/webchat.md +43 -0
- package/docs/zh-CN/platforms/mac/xpc.md +68 -0
- package/docs/zh-CN/platforms/macos.md +193 -0
- package/docs/zh-CN/platforms/oracle.md +310 -0
- package/docs/zh-CN/platforms/raspberry-pi.md +416 -0
- package/docs/zh-CN/platforms/windows.md +247 -0
- package/docs/zh-CN/plugins/agent-tools.md +99 -0
- package/docs/zh-CN/plugins/manifest.md +68 -0
- package/docs/zh-CN/plugins/voice-call.md +250 -0
- package/docs/zh-CN/plugins/zalouser.md +88 -0
- package/docs/zh-CN/prose.md +141 -0
- package/docs/zh-CN/providers/anthropic.md +265 -0
- package/docs/zh-CN/providers/bedrock.md +170 -0
- package/docs/zh-CN/providers/claude-max-api-proxy.md +155 -0
- package/docs/zh-CN/providers/cloudflare-ai-gateway.md +78 -0
- package/docs/zh-CN/providers/deepgram.md +97 -0
- package/docs/zh-CN/providers/github-copilot.md +67 -0
- package/docs/zh-CN/providers/glm.md +50 -0
- package/docs/zh-CN/providers/huggingface.md +216 -0
- package/docs/zh-CN/providers/index.md +69 -0
- package/docs/zh-CN/providers/kilocode.md +80 -0
- package/docs/zh-CN/providers/litellm.md +160 -0
- package/docs/zh-CN/providers/minimax.md +222 -0
- package/docs/zh-CN/providers/mistral.md +61 -0
- package/docs/zh-CN/providers/models.md +51 -0
- package/docs/zh-CN/providers/moonshot.md +182 -0
- package/docs/zh-CN/providers/nvidia.md +62 -0
- package/docs/zh-CN/providers/ollama.md +359 -0
- package/docs/zh-CN/providers/openai.md +308 -0
- package/docs/zh-CN/providers/opencode-go.md +52 -0
- package/docs/zh-CN/providers/opencode.md +71 -0
- package/docs/zh-CN/providers/openrouter.md +44 -0
- package/docs/zh-CN/providers/qianfan.md +45 -0
- package/docs/zh-CN/providers/qwen.md +55 -0
- package/docs/zh-CN/providers/sglang.md +111 -0
- package/docs/zh-CN/providers/synthetic.md +106 -0
- package/docs/zh-CN/providers/together.md +72 -0
- package/docs/zh-CN/providers/venice.md +289 -0
- package/docs/zh-CN/providers/vercel-ai-gateway.md +66 -0
- package/docs/zh-CN/providers/xiaomi.md +93 -0
- package/docs/zh-CN/providers/zai.md +53 -0
- package/docs/zh-CN/reference/AGENTS.default.md +131 -0
- package/docs/zh-CN/reference/RELEASING.md +48 -0
- package/docs/zh-CN/reference/api-usage-costs.md +141 -0
- package/docs/zh-CN/reference/credits.md +34 -0
- package/docs/zh-CN/reference/device-models.md +54 -0
- package/docs/zh-CN/reference/rpc.md +48 -0
- package/docs/zh-CN/reference/session-management-compaction.md +287 -0
- package/docs/zh-CN/reference/templates/AGENTS.dev.md +89 -0
- package/docs/zh-CN/reference/templates/AGENTS.md +225 -0
- package/docs/zh-CN/reference/templates/BOOT.md +17 -0
- package/docs/zh-CN/reference/templates/BOOTSTRAP.md +68 -0
- package/docs/zh-CN/reference/templates/HEARTBEAT.md +18 -0
- package/docs/zh-CN/reference/templates/IDENTITY.dev.md +54 -0
- package/docs/zh-CN/reference/templates/IDENTITY.md +36 -0
- package/docs/zh-CN/reference/templates/SOUL.dev.md +83 -0
- package/docs/zh-CN/reference/templates/SOUL.md +49 -0
- package/docs/zh-CN/reference/templates/TOOLS.dev.md +31 -0
- package/docs/zh-CN/reference/templates/TOOLS.md +53 -0
- package/docs/zh-CN/reference/templates/USER.dev.md +25 -0
- package/docs/zh-CN/reference/templates/USER.md +30 -0
- package/docs/zh-CN/reference/test.md +57 -0
- package/docs/zh-CN/reference/token-use.md +119 -0
- package/docs/zh-CN/reference/transcript-hygiene.md +109 -0
- package/docs/zh-CN/reference/wizard.md +242 -0
- package/docs/zh-CN/security/formal-verification.md +171 -0
- package/docs/zh-CN/start/bootstrapping.md +9 -0
- package/docs/zh-CN/start/docs-directory.md +70 -0
- package/docs/zh-CN/start/getting-started.md +143 -0
- package/docs/zh-CN/start/hubs.md +194 -0
- package/docs/zh-CN/start/lore.md +226 -0
- package/docs/zh-CN/start/onboarding-overview.md +58 -0
- package/docs/zh-CN/start/onboarding.md +105 -0
- package/docs/zh-CN/start/openclaw.md +248 -0
- package/docs/zh-CN/start/quickstart.md +88 -0
- package/docs/zh-CN/start/setup.md +153 -0
- package/docs/zh-CN/start/showcase.md +423 -0
- package/docs/zh-CN/start/wizard-cli-automation.md +222 -0
- package/docs/zh-CN/start/wizard-cli-reference.md +306 -0
- package/docs/zh-CN/start/wizard.md +132 -0
- package/docs/zh-CN/tools/agent-send.md +59 -0
- package/docs/zh-CN/tools/apply-patch.md +57 -0
- package/docs/zh-CN/tools/browser-linux-troubleshooting.md +144 -0
- package/docs/zh-CN/tools/browser-login.md +75 -0
- package/docs/zh-CN/tools/browser.md +553 -0
- package/docs/zh-CN/tools/chrome-extension.md +183 -0
- package/docs/zh-CN/tools/clawhub.md +209 -0
- package/docs/zh-CN/tools/creating-skills.md +61 -0
- package/docs/zh-CN/tools/elevated.md +64 -0
- package/docs/zh-CN/tools/exec-approvals.md +234 -0
- package/docs/zh-CN/tools/exec.md +169 -0
- package/docs/zh-CN/tools/firecrawl.md +68 -0
- package/docs/zh-CN/tools/index.md +515 -0
- package/docs/zh-CN/tools/llm-task.md +117 -0
- package/docs/zh-CN/tools/lobster.md +349 -0
- package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +401 -0
- package/docs/zh-CN/tools/plugin.md +1612 -0
- package/docs/zh-CN/tools/reactions.md +29 -0
- package/docs/zh-CN/tools/skills-config.md +78 -0
- package/docs/zh-CN/tools/skills.md +279 -0
- package/docs/zh-CN/tools/slash-commands.md +205 -0
- package/docs/zh-CN/tools/subagents.md +167 -0
- package/docs/zh-CN/tools/thinking.md +80 -0
- package/docs/zh-CN/tools/web.md +289 -0
- package/docs/zh-CN/tts.md +375 -0
- package/docs/zh-CN/vps.md +47 -0
- package/docs/zh-CN/web/control-ui.md +191 -0
- package/docs/zh-CN/web/dashboard.md +53 -0
- package/docs/zh-CN/web/index.md +118 -0
- package/docs/zh-CN/web/tui.md +166 -0
- package/docs/zh-CN/web/webchat.md +56 -0
- package/package.json +841 -0
- package/quantumclaw.mjs +135 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +118 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +198 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +295 -0
- package/skills/discord/SKILL.md +197 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gh-issues/SKILL.md +865 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +163 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +122 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +320 -0
- package/skills/model-usage/scripts/test_model_usage.py +40 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/node-connect/SKILL.md +142 -0
- package/skills/notion/SKILL.md +174 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-image-gen/SKILL.md +92 -0
- package/skills/openai-image-gen/scripts/gen.py +328 -0
- package/skills/openai-image-gen/scripts/test_gen.py +140 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +52 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +112 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/session-logs/SKILL.md +115 -0
- package/skills/sherpa-onnx-tts/SKILL.md +103 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +372 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +139 -0
- package/skills/skill-creator/scripts/quick_validate.py +159 -0
- package/skills/skill-creator/scripts/test_package_skill.py +160 -0
- package/skills/skill-creator/scripts/test_quick_validate.py +72 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +65 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +153 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +95 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- package/skills/weather/SKILL.md +112 -0
- package/skills/xurl/SKILL.md +461 -0
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "WhatsApp channel support, access controls, delivery behavior, and operations"
|
|
3
|
+
read_when:
|
|
4
|
+
- Working on WhatsApp/web channel behavior or inbox routing
|
|
5
|
+
title: "WhatsApp"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# WhatsApp (Web channel)
|
|
9
|
+
|
|
10
|
+
Status: production-ready via WhatsApp Web (Baileys). Gateway owns linked session(s).
|
|
11
|
+
|
|
12
|
+
## Install (on demand)
|
|
13
|
+
|
|
14
|
+
- Onboarding (`quantumclaw onboard`) and `quantumclaw channels add --channel whatsapp`
|
|
15
|
+
prompt to install the WhatsApp plugin the first time you select it.
|
|
16
|
+
- `quantumclaw channels login --channel whatsapp` also offers the install flow when
|
|
17
|
+
the plugin is not present yet.
|
|
18
|
+
- Dev channel + git checkout: defaults to the local plugin path.
|
|
19
|
+
- Stable/Beta: defaults to the npm package `@quantumclaw/whatsapp`.
|
|
20
|
+
|
|
21
|
+
Manual install stays available:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
quantumclaw plugins install @quantumclaw/whatsapp
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
<CardGroup cols={3}>
|
|
28
|
+
<Card title="Pairing" icon="link" href="/channels/pairing">
|
|
29
|
+
Default DM policy is pairing for unknown senders.
|
|
30
|
+
</Card>
|
|
31
|
+
<Card title="Channel troubleshooting" icon="wrench" href="/channels/troubleshooting">
|
|
32
|
+
Cross-channel diagnostics and repair playbooks.
|
|
33
|
+
</Card>
|
|
34
|
+
<Card title="Gateway configuration" icon="settings" href="/gateway/configuration">
|
|
35
|
+
Full channel config patterns and examples.
|
|
36
|
+
</Card>
|
|
37
|
+
</CardGroup>
|
|
38
|
+
|
|
39
|
+
## Quick setup
|
|
40
|
+
|
|
41
|
+
<Steps>
|
|
42
|
+
<Step title="Configure WhatsApp access policy">
|
|
43
|
+
|
|
44
|
+
```json5
|
|
45
|
+
{
|
|
46
|
+
channels: {
|
|
47
|
+
whatsapp: {
|
|
48
|
+
dmPolicy: "pairing",
|
|
49
|
+
allowFrom: ["+15551234567"],
|
|
50
|
+
groupPolicy: "allowlist",
|
|
51
|
+
groupAllowFrom: ["+15551234567"],
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
</Step>
|
|
58
|
+
|
|
59
|
+
<Step title="Link WhatsApp (QR)">
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
quantumclaw channels login --channel whatsapp
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
For a specific account:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
quantumclaw channels login --channel whatsapp --account work
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
</Step>
|
|
72
|
+
|
|
73
|
+
<Step title="Start the gateway">
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
quantumclaw gateway
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
</Step>
|
|
80
|
+
|
|
81
|
+
<Step title="Approve first pairing request (if using pairing mode)">
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
quantumclaw pairing list whatsapp
|
|
85
|
+
quantumclaw pairing approve whatsapp <CODE>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Pairing requests expire after 1 hour. Pending requests are capped at 3 per channel.
|
|
89
|
+
|
|
90
|
+
</Step>
|
|
91
|
+
</Steps>
|
|
92
|
+
|
|
93
|
+
<Note>
|
|
94
|
+
QuantumClaw recommends running WhatsApp on a separate number when possible. (The channel metadata and setup flow are optimized for that setup, but personal-number setups are also supported.)
|
|
95
|
+
</Note>
|
|
96
|
+
|
|
97
|
+
## Deployment patterns
|
|
98
|
+
|
|
99
|
+
<AccordionGroup>
|
|
100
|
+
<Accordion title="Dedicated number (recommended)">
|
|
101
|
+
This is the cleanest operational mode:
|
|
102
|
+
|
|
103
|
+
- separate WhatsApp identity for QuantumClaw
|
|
104
|
+
- clearer DM allowlists and routing boundaries
|
|
105
|
+
- lower chance of self-chat confusion
|
|
106
|
+
|
|
107
|
+
Minimal policy pattern:
|
|
108
|
+
|
|
109
|
+
```json5
|
|
110
|
+
{
|
|
111
|
+
channels: {
|
|
112
|
+
whatsapp: {
|
|
113
|
+
dmPolicy: "allowlist",
|
|
114
|
+
allowFrom: ["+15551234567"],
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
</Accordion>
|
|
121
|
+
|
|
122
|
+
<Accordion title="Personal-number fallback">
|
|
123
|
+
Onboarding supports personal-number mode and writes a self-chat-friendly baseline:
|
|
124
|
+
|
|
125
|
+
- `dmPolicy: "allowlist"`
|
|
126
|
+
- `allowFrom` includes your personal number
|
|
127
|
+
- `selfChatMode: true`
|
|
128
|
+
|
|
129
|
+
In runtime, self-chat protections key off the linked self number and `allowFrom`.
|
|
130
|
+
|
|
131
|
+
</Accordion>
|
|
132
|
+
|
|
133
|
+
<Accordion title="WhatsApp Web-only channel scope">
|
|
134
|
+
The messaging platform channel is WhatsApp Web-based (`Baileys`) in current QuantumClaw channel architecture.
|
|
135
|
+
|
|
136
|
+
There is no separate Twilio WhatsApp messaging channel in the built-in chat-channel registry.
|
|
137
|
+
|
|
138
|
+
</Accordion>
|
|
139
|
+
</AccordionGroup>
|
|
140
|
+
|
|
141
|
+
## Runtime model
|
|
142
|
+
|
|
143
|
+
- Gateway owns the WhatsApp socket and reconnect loop.
|
|
144
|
+
- Outbound sends require an active WhatsApp listener for the target account.
|
|
145
|
+
- Status and broadcast chats are ignored (`@status`, `@broadcast`).
|
|
146
|
+
- Direct chats use DM session rules (`session.dmScope`; default `main` collapses DMs to the agent main session).
|
|
147
|
+
- Group sessions are isolated (`agent:<agentId>:whatsapp:group:<jid>`).
|
|
148
|
+
|
|
149
|
+
## Access control and activation
|
|
150
|
+
|
|
151
|
+
<Tabs>
|
|
152
|
+
<Tab title="DM policy">
|
|
153
|
+
`channels.whatsapp.dmPolicy` controls direct chat access:
|
|
154
|
+
|
|
155
|
+
- `pairing` (default)
|
|
156
|
+
- `allowlist`
|
|
157
|
+
- `open` (requires `allowFrom` to include `"*"`)
|
|
158
|
+
- `disabled`
|
|
159
|
+
|
|
160
|
+
`allowFrom` accepts E.164-style numbers (normalized internally).
|
|
161
|
+
|
|
162
|
+
Multi-account override: `channels.whatsapp.accounts.<id>.dmPolicy` (and `allowFrom`) take precedence over channel-level defaults for that account.
|
|
163
|
+
|
|
164
|
+
Runtime behavior details:
|
|
165
|
+
|
|
166
|
+
- pairings are persisted in channel allow-store and merged with configured `allowFrom`
|
|
167
|
+
- if no allowlist is configured, the linked self number is allowed by default
|
|
168
|
+
- outbound `fromMe` DMs are never auto-paired
|
|
169
|
+
|
|
170
|
+
</Tab>
|
|
171
|
+
|
|
172
|
+
<Tab title="Group policy + allowlists">
|
|
173
|
+
Group access has two layers:
|
|
174
|
+
|
|
175
|
+
1. **Group membership allowlist** (`channels.whatsapp.groups`)
|
|
176
|
+
- if `groups` is omitted, all groups are eligible
|
|
177
|
+
- if `groups` is present, it acts as a group allowlist (`"*"` allowed)
|
|
178
|
+
|
|
179
|
+
2. **Group sender policy** (`channels.whatsapp.groupPolicy` + `groupAllowFrom`)
|
|
180
|
+
- `open`: sender allowlist bypassed
|
|
181
|
+
- `allowlist`: sender must match `groupAllowFrom` (or `*`)
|
|
182
|
+
- `disabled`: block all group inbound
|
|
183
|
+
|
|
184
|
+
Sender allowlist fallback:
|
|
185
|
+
|
|
186
|
+
- if `groupAllowFrom` is unset, runtime falls back to `allowFrom` when available
|
|
187
|
+
- sender allowlists are evaluated before mention/reply activation
|
|
188
|
+
|
|
189
|
+
Note: if no `channels.whatsapp` block exists at all, runtime group-policy fallback is `allowlist` (with a warning log), even if `channels.defaults.groupPolicy` is set.
|
|
190
|
+
|
|
191
|
+
</Tab>
|
|
192
|
+
|
|
193
|
+
<Tab title="Mentions + /activation">
|
|
194
|
+
Group replies require mention by default.
|
|
195
|
+
|
|
196
|
+
Mention detection includes:
|
|
197
|
+
|
|
198
|
+
- explicit WhatsApp mentions of the bot identity
|
|
199
|
+
- configured mention regex patterns (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
|
|
200
|
+
- implicit reply-to-bot detection (reply sender matches bot identity)
|
|
201
|
+
|
|
202
|
+
Security note:
|
|
203
|
+
|
|
204
|
+
- quote/reply only satisfies mention gating; it does **not** grant sender authorization
|
|
205
|
+
- with `groupPolicy: "allowlist"`, non-allowlisted senders are still blocked even if they reply to an allowlisted user's message
|
|
206
|
+
|
|
207
|
+
Session-level activation command:
|
|
208
|
+
|
|
209
|
+
- `/activation mention`
|
|
210
|
+
- `/activation always`
|
|
211
|
+
|
|
212
|
+
`activation` updates session state (not global config). It is owner-gated.
|
|
213
|
+
|
|
214
|
+
</Tab>
|
|
215
|
+
</Tabs>
|
|
216
|
+
|
|
217
|
+
## Personal-number and self-chat behavior
|
|
218
|
+
|
|
219
|
+
When the linked self number is also present in `allowFrom`, WhatsApp self-chat safeguards activate:
|
|
220
|
+
|
|
221
|
+
- skip read receipts for self-chat turns
|
|
222
|
+
- ignore mention-JID auto-trigger behavior that would otherwise ping yourself
|
|
223
|
+
- if `messages.responsePrefix` is unset, self-chat replies default to `[{identity.name}]` or `[quantumclaw]`
|
|
224
|
+
|
|
225
|
+
## Message normalization and context
|
|
226
|
+
|
|
227
|
+
<AccordionGroup>
|
|
228
|
+
<Accordion title="Inbound envelope + reply context">
|
|
229
|
+
Incoming WhatsApp messages are wrapped in the shared inbound envelope.
|
|
230
|
+
|
|
231
|
+
If a quoted reply exists, context is appended in this form:
|
|
232
|
+
|
|
233
|
+
```text
|
|
234
|
+
[Replying to <sender> id:<stanzaId>]
|
|
235
|
+
<quoted body or media placeholder>
|
|
236
|
+
[/Replying]
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Reply metadata fields are also populated when available (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, sender JID/E.164).
|
|
240
|
+
|
|
241
|
+
</Accordion>
|
|
242
|
+
|
|
243
|
+
<Accordion title="Media placeholders and location/contact extraction">
|
|
244
|
+
Media-only inbound messages are normalized with placeholders such as:
|
|
245
|
+
|
|
246
|
+
- `<media:image>`
|
|
247
|
+
- `<media:video>`
|
|
248
|
+
- `<media:audio>`
|
|
249
|
+
- `<media:document>`
|
|
250
|
+
- `<media:sticker>`
|
|
251
|
+
|
|
252
|
+
Location and contact payloads are normalized into textual context before routing.
|
|
253
|
+
|
|
254
|
+
</Accordion>
|
|
255
|
+
|
|
256
|
+
<Accordion title="Pending group history injection">
|
|
257
|
+
For groups, unprocessed messages can be buffered and injected as context when the bot is finally triggered.
|
|
258
|
+
|
|
259
|
+
- default limit: `50`
|
|
260
|
+
- config: `channels.whatsapp.historyLimit`
|
|
261
|
+
- fallback: `messages.groupChat.historyLimit`
|
|
262
|
+
- `0` disables
|
|
263
|
+
|
|
264
|
+
Injection markers:
|
|
265
|
+
|
|
266
|
+
- `[Chat messages since your last reply - for context]`
|
|
267
|
+
- `[Current message - respond to this]`
|
|
268
|
+
|
|
269
|
+
</Accordion>
|
|
270
|
+
|
|
271
|
+
<Accordion title="Read receipts">
|
|
272
|
+
Read receipts are enabled by default for accepted inbound WhatsApp messages.
|
|
273
|
+
|
|
274
|
+
Disable globally:
|
|
275
|
+
|
|
276
|
+
```json5
|
|
277
|
+
{
|
|
278
|
+
channels: {
|
|
279
|
+
whatsapp: {
|
|
280
|
+
sendReadReceipts: false,
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Per-account override:
|
|
287
|
+
|
|
288
|
+
```json5
|
|
289
|
+
{
|
|
290
|
+
channels: {
|
|
291
|
+
whatsapp: {
|
|
292
|
+
accounts: {
|
|
293
|
+
work: {
|
|
294
|
+
sendReadReceipts: false,
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
},
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
Self-chat turns skip read receipts even when globally enabled.
|
|
303
|
+
|
|
304
|
+
</Accordion>
|
|
305
|
+
</AccordionGroup>
|
|
306
|
+
|
|
307
|
+
## Delivery, chunking, and media
|
|
308
|
+
|
|
309
|
+
<AccordionGroup>
|
|
310
|
+
<Accordion title="Text chunking">
|
|
311
|
+
- default chunk limit: `channels.whatsapp.textChunkLimit = 4000`
|
|
312
|
+
- `channels.whatsapp.chunkMode = "length" | "newline"`
|
|
313
|
+
- `newline` mode prefers paragraph boundaries (blank lines), then falls back to length-safe chunking
|
|
314
|
+
</Accordion>
|
|
315
|
+
|
|
316
|
+
<Accordion title="Outbound media behavior">
|
|
317
|
+
- supports image, video, audio (PTT voice-note), and document payloads
|
|
318
|
+
- `audio/ogg` is rewritten to `audio/ogg; codecs=opus` for voice-note compatibility
|
|
319
|
+
- animated GIF playback is supported via `gifPlayback: true` on video sends
|
|
320
|
+
- captions are applied to the first media item when sending multi-media reply payloads
|
|
321
|
+
- media source can be HTTP(S), `file://`, or local paths
|
|
322
|
+
</Accordion>
|
|
323
|
+
|
|
324
|
+
<Accordion title="Media size limits and fallback behavior">
|
|
325
|
+
- inbound media save cap: `channels.whatsapp.mediaMaxMb` (default `50`)
|
|
326
|
+
- outbound media send cap: `channels.whatsapp.mediaMaxMb` (default `50`)
|
|
327
|
+
- per-account overrides use `channels.whatsapp.accounts.<accountId>.mediaMaxMb`
|
|
328
|
+
- images are auto-optimized (resize/quality sweep) to fit limits
|
|
329
|
+
- on media send failure, first-item fallback sends text warning instead of dropping the response silently
|
|
330
|
+
</Accordion>
|
|
331
|
+
</AccordionGroup>
|
|
332
|
+
|
|
333
|
+
## Acknowledgment reactions
|
|
334
|
+
|
|
335
|
+
WhatsApp supports immediate ack reactions on inbound receipt via `channels.whatsapp.ackReaction`.
|
|
336
|
+
|
|
337
|
+
```json5
|
|
338
|
+
{
|
|
339
|
+
channels: {
|
|
340
|
+
whatsapp: {
|
|
341
|
+
ackReaction: {
|
|
342
|
+
emoji: "👀",
|
|
343
|
+
direct: true,
|
|
344
|
+
group: "mentions", // always | mentions | never
|
|
345
|
+
},
|
|
346
|
+
},
|
|
347
|
+
},
|
|
348
|
+
}
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
Behavior notes:
|
|
352
|
+
|
|
353
|
+
- sent immediately after inbound is accepted (pre-reply)
|
|
354
|
+
- failures are logged but do not block normal reply delivery
|
|
355
|
+
- group mode `mentions` reacts on mention-triggered turns; group activation `always` acts as bypass for this check
|
|
356
|
+
- WhatsApp uses `channels.whatsapp.ackReaction` (legacy `messages.ackReaction` is not used here)
|
|
357
|
+
|
|
358
|
+
## Multi-account and credentials
|
|
359
|
+
|
|
360
|
+
<AccordionGroup>
|
|
361
|
+
<Accordion title="Account selection and defaults">
|
|
362
|
+
- account ids come from `channels.whatsapp.accounts`
|
|
363
|
+
- default account selection: `default` if present, otherwise first configured account id (sorted)
|
|
364
|
+
- account ids are normalized internally for lookup
|
|
365
|
+
</Accordion>
|
|
366
|
+
|
|
367
|
+
<Accordion title="Credential paths and legacy compatibility">
|
|
368
|
+
- current auth path: `~/.quantumclaw/credentials/whatsapp/<accountId>/creds.json`
|
|
369
|
+
- backup file: `creds.json.bak`
|
|
370
|
+
- legacy default auth in `~/.quantumclaw/credentials/` is still recognized/migrated for default-account flows
|
|
371
|
+
</Accordion>
|
|
372
|
+
|
|
373
|
+
<Accordion title="Logout behavior">
|
|
374
|
+
`quantumclaw channels logout --channel whatsapp [--account <id>]` clears WhatsApp auth state for that account.
|
|
375
|
+
|
|
376
|
+
In legacy auth directories, `oauth.json` is preserved while Baileys auth files are removed.
|
|
377
|
+
|
|
378
|
+
</Accordion>
|
|
379
|
+
</AccordionGroup>
|
|
380
|
+
|
|
381
|
+
## Tools, actions, and config writes
|
|
382
|
+
|
|
383
|
+
- Agent tool support includes WhatsApp reaction action (`react`).
|
|
384
|
+
- Action gates:
|
|
385
|
+
- `channels.whatsapp.actions.reactions`
|
|
386
|
+
- `channels.whatsapp.actions.polls`
|
|
387
|
+
- Channel-initiated config writes are enabled by default (disable via `channels.whatsapp.configWrites=false`).
|
|
388
|
+
|
|
389
|
+
## Troubleshooting
|
|
390
|
+
|
|
391
|
+
<AccordionGroup>
|
|
392
|
+
<Accordion title="Not linked (QR required)">
|
|
393
|
+
Symptom: channel status reports not linked.
|
|
394
|
+
|
|
395
|
+
Fix:
|
|
396
|
+
|
|
397
|
+
```bash
|
|
398
|
+
quantumclaw channels login --channel whatsapp
|
|
399
|
+
quantumclaw channels status
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
</Accordion>
|
|
403
|
+
|
|
404
|
+
<Accordion title="Linked but disconnected / reconnect loop">
|
|
405
|
+
Symptom: linked account with repeated disconnects or reconnect attempts.
|
|
406
|
+
|
|
407
|
+
Fix:
|
|
408
|
+
|
|
409
|
+
```bash
|
|
410
|
+
quantumclaw doctor
|
|
411
|
+
quantumclaw logs --follow
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
If needed, re-link with `channels login`.
|
|
415
|
+
|
|
416
|
+
</Accordion>
|
|
417
|
+
|
|
418
|
+
<Accordion title="No active listener when sending">
|
|
419
|
+
Outbound sends fail fast when no active gateway listener exists for the target account.
|
|
420
|
+
|
|
421
|
+
Make sure gateway is running and the account is linked.
|
|
422
|
+
|
|
423
|
+
</Accordion>
|
|
424
|
+
|
|
425
|
+
<Accordion title="Group messages unexpectedly ignored">
|
|
426
|
+
Check in this order:
|
|
427
|
+
|
|
428
|
+
- `groupPolicy`
|
|
429
|
+
- `groupAllowFrom` / `allowFrom`
|
|
430
|
+
- `groups` allowlist entries
|
|
431
|
+
- mention gating (`requireMention` + mention patterns)
|
|
432
|
+
- duplicate keys in `quantumclaw.json` (JSON5): later entries override earlier ones, so keep a single `groupPolicy` per scope
|
|
433
|
+
|
|
434
|
+
</Accordion>
|
|
435
|
+
|
|
436
|
+
<Accordion title="Bun runtime warning">
|
|
437
|
+
WhatsApp gateway runtime should use Node. Bun is flagged as incompatible for stable WhatsApp/Telegram gateway operation.
|
|
438
|
+
</Accordion>
|
|
439
|
+
</AccordionGroup>
|
|
440
|
+
|
|
441
|
+
## Configuration reference pointers
|
|
442
|
+
|
|
443
|
+
Primary reference:
|
|
444
|
+
|
|
445
|
+
- [Configuration reference - WhatsApp](/gateway/configuration-reference#whatsapp)
|
|
446
|
+
|
|
447
|
+
High-signal WhatsApp fields:
|
|
448
|
+
|
|
449
|
+
- access: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`
|
|
450
|
+
- delivery: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `sendReadReceipts`, `ackReaction`
|
|
451
|
+
- multi-account: `accounts.<id>.enabled`, `accounts.<id>.authDir`, account-level overrides
|
|
452
|
+
- operations: `configWrites`, `debounceMs`, `web.enabled`, `web.heartbeatSeconds`, `web.reconnect.*`
|
|
453
|
+
- session behavior: `session.dmScope`, `historyLimit`, `dmHistoryLimit`, `dms.<id>.historyLimit`
|
|
454
|
+
|
|
455
|
+
## Related
|
|
456
|
+
|
|
457
|
+
- [Pairing](/channels/pairing)
|
|
458
|
+
- [Channel routing](/channels/channel-routing)
|
|
459
|
+
- [Multi-agent routing](/concepts/multi-agent)
|
|
460
|
+
- [Troubleshooting](/channels/troubleshooting)
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Zalo bot support status, capabilities, and configuration"
|
|
3
|
+
read_when:
|
|
4
|
+
- Working on Zalo features or webhooks
|
|
5
|
+
title: "Zalo"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Zalo (Bot API)
|
|
9
|
+
|
|
10
|
+
Status: experimental. DMs are supported. The [Capabilities](#capabilities) section below reflects current Marketplace-bot behavior.
|
|
11
|
+
|
|
12
|
+
## Plugin required
|
|
13
|
+
|
|
14
|
+
Zalo ships as a plugin and is not bundled with the core install.
|
|
15
|
+
|
|
16
|
+
- Install via CLI: `quantumclaw plugins install @quantumclaw/zalo`
|
|
17
|
+
- Or select **Zalo** during setup and confirm the install prompt
|
|
18
|
+
- Details: [Plugins](/tools/plugin)
|
|
19
|
+
|
|
20
|
+
## Quick setup (beginner)
|
|
21
|
+
|
|
22
|
+
1. Install the Zalo plugin:
|
|
23
|
+
- From a source checkout: `quantumclaw plugins install ./extensions/zalo`
|
|
24
|
+
- From npm (if published): `quantumclaw plugins install @quantumclaw/zalo`
|
|
25
|
+
- Or pick **Zalo** in setup and confirm the install prompt
|
|
26
|
+
2. Set the token:
|
|
27
|
+
- Env: `ZALO_BOT_TOKEN=...`
|
|
28
|
+
- Or config: `channels.zalo.accounts.default.botToken: "..."`.
|
|
29
|
+
3. Restart the gateway (or finish setup).
|
|
30
|
+
4. DM access is pairing by default; approve the pairing code on first contact.
|
|
31
|
+
|
|
32
|
+
Minimal config:
|
|
33
|
+
|
|
34
|
+
```json5
|
|
35
|
+
{
|
|
36
|
+
channels: {
|
|
37
|
+
zalo: {
|
|
38
|
+
enabled: true,
|
|
39
|
+
accounts: {
|
|
40
|
+
default: {
|
|
41
|
+
botToken: "12345689:abc-xyz",
|
|
42
|
+
dmPolicy: "pairing",
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## What it is
|
|
51
|
+
|
|
52
|
+
Zalo is a Vietnam-focused messaging app; its Bot API lets the Gateway run a bot for 1:1 conversations.
|
|
53
|
+
It is a good fit for support or notifications where you want deterministic routing back to Zalo.
|
|
54
|
+
|
|
55
|
+
This page reflects current QuantumClaw behavior for **Zalo Bot Creator / Marketplace bots**.
|
|
56
|
+
**Zalo Official Account (OA) bots** are a different Zalo product surface and may behave differently.
|
|
57
|
+
|
|
58
|
+
- A Zalo Bot API channel owned by the Gateway.
|
|
59
|
+
- Deterministic routing: replies go back to Zalo; the model never chooses channels.
|
|
60
|
+
- DMs share the agent's main session.
|
|
61
|
+
- The [Capabilities](#capabilities) section below shows current Marketplace-bot support.
|
|
62
|
+
|
|
63
|
+
## Setup (fast path)
|
|
64
|
+
|
|
65
|
+
### 1) Create a bot token (Zalo Bot Platform)
|
|
66
|
+
|
|
67
|
+
1. Go to [https://bot.zaloplatforms.com](https://bot.zaloplatforms.com) and sign in.
|
|
68
|
+
2. Create a new bot and configure its settings.
|
|
69
|
+
3. Copy the full bot token (typically `numeric_id:secret`). For Marketplace bots, the usable runtime token may appear in the bot's welcome message after creation.
|
|
70
|
+
|
|
71
|
+
### 2) Configure the token (env or config)
|
|
72
|
+
|
|
73
|
+
Example:
|
|
74
|
+
|
|
75
|
+
```json5
|
|
76
|
+
{
|
|
77
|
+
channels: {
|
|
78
|
+
zalo: {
|
|
79
|
+
enabled: true,
|
|
80
|
+
accounts: {
|
|
81
|
+
default: {
|
|
82
|
+
botToken: "12345689:abc-xyz",
|
|
83
|
+
dmPolicy: "pairing",
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
If you later move to a Zalo bot surface where groups are available, you can add group-specific config such as `groupPolicy` and `groupAllowFrom` explicitly. For current Marketplace-bot behavior, see [Capabilities](#capabilities).
|
|
92
|
+
|
|
93
|
+
Env option: `ZALO_BOT_TOKEN=...` (works for the default account only).
|
|
94
|
+
|
|
95
|
+
Multi-account support: use `channels.zalo.accounts` with per-account tokens and optional `name`.
|
|
96
|
+
|
|
97
|
+
3. Restart the gateway. Zalo starts when a token is resolved (env or config).
|
|
98
|
+
4. DM access defaults to pairing. Approve the code when the bot is first contacted.
|
|
99
|
+
|
|
100
|
+
## How it works (behavior)
|
|
101
|
+
|
|
102
|
+
- Inbound messages are normalized into the shared channel envelope with media placeholders.
|
|
103
|
+
- Replies always route back to the same Zalo chat.
|
|
104
|
+
- Long-polling by default; webhook mode available with `channels.zalo.webhookUrl`.
|
|
105
|
+
|
|
106
|
+
## Limits
|
|
107
|
+
|
|
108
|
+
- Outbound text is chunked to 2000 characters (Zalo API limit).
|
|
109
|
+
- Media downloads/uploads are capped by `channels.zalo.mediaMaxMb` (default 5).
|
|
110
|
+
- Streaming is blocked by default due to the 2000 char limit making streaming less useful.
|
|
111
|
+
|
|
112
|
+
## Access control (DMs)
|
|
113
|
+
|
|
114
|
+
### DM access
|
|
115
|
+
|
|
116
|
+
- Default: `channels.zalo.dmPolicy = "pairing"`. Unknown senders receive a pairing code; messages are ignored until approved (codes expire after 1 hour).
|
|
117
|
+
- Approve via:
|
|
118
|
+
- `quantumclaw pairing list zalo`
|
|
119
|
+
- `quantumclaw pairing approve zalo <CODE>`
|
|
120
|
+
- Pairing is the default token exchange. Details: [Pairing](/channels/pairing)
|
|
121
|
+
- `channels.zalo.allowFrom` accepts numeric user IDs (no username lookup available).
|
|
122
|
+
|
|
123
|
+
## Access control (Groups)
|
|
124
|
+
|
|
125
|
+
For **Zalo Bot Creator / Marketplace bots**, group support was not available in practice because the bot could not be added to a group at all.
|
|
126
|
+
|
|
127
|
+
That means the group-related config keys below exist in the schema, but were not usable for Marketplace bots:
|
|
128
|
+
|
|
129
|
+
- `channels.zalo.groupPolicy` controls group inbound handling: `open | allowlist | disabled`.
|
|
130
|
+
- `channels.zalo.groupAllowFrom` restricts which sender IDs can trigger the bot in groups.
|
|
131
|
+
- If `groupAllowFrom` is unset, Zalo falls back to `allowFrom` for sender checks.
|
|
132
|
+
- Runtime note: if `channels.zalo` is missing entirely, runtime still falls back to `groupPolicy="allowlist"` for safety.
|
|
133
|
+
|
|
134
|
+
The group policy values (when group access is available on your bot surface) are:
|
|
135
|
+
|
|
136
|
+
- `groupPolicy: "disabled"` — blocks all group messages.
|
|
137
|
+
- `groupPolicy: "open"` — allows any group member (mention-gated).
|
|
138
|
+
- `groupPolicy: "allowlist"` — fail-closed default; only allowed senders are accepted.
|
|
139
|
+
|
|
140
|
+
If you are using a different Zalo bot product surface and have verified working group behavior, document that separately rather than assuming it matches the Marketplace-bot flow.
|
|
141
|
+
|
|
142
|
+
## Long-polling vs webhook
|
|
143
|
+
|
|
144
|
+
- Default: long-polling (no public URL required).
|
|
145
|
+
- Webhook mode: set `channels.zalo.webhookUrl` and `channels.zalo.webhookSecret`.
|
|
146
|
+
- The webhook secret must be 8-256 characters.
|
|
147
|
+
- Webhook URL must use HTTPS.
|
|
148
|
+
- Zalo sends events with `X-Bot-Api-Secret-Token` header for verification.
|
|
149
|
+
- Gateway HTTP handles webhook requests at `channels.zalo.webhookPath` (defaults to the webhook URL path).
|
|
150
|
+
- Requests must use `Content-Type: application/json` (or `+json` media types).
|
|
151
|
+
- Duplicate events (`event_name + message_id`) are ignored for a short replay window.
|
|
152
|
+
- Burst traffic is rate-limited per path/source and may return HTTP 429.
|
|
153
|
+
|
|
154
|
+
**Note:** getUpdates (polling) and webhook are mutually exclusive per Zalo API docs.
|
|
155
|
+
|
|
156
|
+
## Supported message types
|
|
157
|
+
|
|
158
|
+
For a quick support snapshot, see [Capabilities](#capabilities). The notes below add detail where the behavior needs extra context.
|
|
159
|
+
|
|
160
|
+
- **Text messages**: Full support with 2000 character chunking.
|
|
161
|
+
- **Plain URLs in text**: Behave like normal text input.
|
|
162
|
+
- **Link previews / rich link cards**: See the Marketplace-bot status in [Capabilities](#capabilities); they did not reliably trigger a reply.
|
|
163
|
+
- **Image messages**: See the Marketplace-bot status in [Capabilities](#capabilities); inbound image handling was unreliable (typing indicator without a final reply).
|
|
164
|
+
- **Stickers**: See the Marketplace-bot status in [Capabilities](#capabilities).
|
|
165
|
+
- **Voice notes / audio files / video / generic file attachments**: See the Marketplace-bot status in [Capabilities](#capabilities).
|
|
166
|
+
- **Unsupported types**: Logged (for example, messages from protected users).
|
|
167
|
+
|
|
168
|
+
## Capabilities
|
|
169
|
+
|
|
170
|
+
This table summarizes current **Zalo Bot Creator / Marketplace bot** behavior in QuantumClaw.
|
|
171
|
+
|
|
172
|
+
| Feature | Status |
|
|
173
|
+
| --------------------------- | --------------------------------------- |
|
|
174
|
+
| Direct messages | ✅ Supported |
|
|
175
|
+
| Groups | ❌ Not available for Marketplace bots |
|
|
176
|
+
| Media (inbound images) | ⚠️ Limited / verify in your environment |
|
|
177
|
+
| Media (outbound images) | ⚠️ Not re-tested for Marketplace bots |
|
|
178
|
+
| Plain URLs in text | ✅ Supported |
|
|
179
|
+
| Link previews | ⚠️ Unreliable for Marketplace bots |
|
|
180
|
+
| Reactions | ❌ Not supported |
|
|
181
|
+
| Stickers | ⚠️ No agent reply for Marketplace bots |
|
|
182
|
+
| Voice notes / audio / video | ⚠️ No agent reply for Marketplace bots |
|
|
183
|
+
| File attachments | ⚠️ No agent reply for Marketplace bots |
|
|
184
|
+
| Threads | ❌ Not supported |
|
|
185
|
+
| Polls | ❌ Not supported |
|
|
186
|
+
| Native commands | ❌ Not supported |
|
|
187
|
+
| Streaming | ⚠️ Blocked (2000 char limit) |
|
|
188
|
+
|
|
189
|
+
## Delivery targets (CLI/cron)
|
|
190
|
+
|
|
191
|
+
- Use a chat id as the target.
|
|
192
|
+
- Example: `quantumclaw message send --channel zalo --target 123456789 --message "hi"`.
|
|
193
|
+
|
|
194
|
+
## Troubleshooting
|
|
195
|
+
|
|
196
|
+
**Bot doesn't respond:**
|
|
197
|
+
|
|
198
|
+
- Check that the token is valid: `quantumclaw channels status --probe`
|
|
199
|
+
- Verify the sender is approved (pairing or allowFrom)
|
|
200
|
+
- Check gateway logs: `quantumclaw logs --follow`
|
|
201
|
+
|
|
202
|
+
**Webhook not receiving events:**
|
|
203
|
+
|
|
204
|
+
- Ensure webhook URL uses HTTPS
|
|
205
|
+
- Verify secret token is 8-256 characters
|
|
206
|
+
- Confirm the gateway HTTP endpoint is reachable on the configured path
|
|
207
|
+
- Check that getUpdates polling is not running (they're mutually exclusive)
|
|
208
|
+
|
|
209
|
+
## Configuration reference (Zalo)
|
|
210
|
+
|
|
211
|
+
Full configuration: [Configuration](/gateway/configuration)
|
|
212
|
+
|
|
213
|
+
The flat top-level keys (`channels.zalo.botToken`, `channels.zalo.dmPolicy`, and similar) are a legacy single-account shorthand. Prefer `channels.zalo.accounts.<id>.*` for new configs. Both forms are still documented here because they exist in the schema.
|
|
214
|
+
|
|
215
|
+
Provider options:
|
|
216
|
+
|
|
217
|
+
- `channels.zalo.enabled`: enable/disable channel startup.
|
|
218
|
+
- `channels.zalo.botToken`: bot token from Zalo Bot Platform.
|
|
219
|
+
- `channels.zalo.tokenFile`: read token from a regular file path. Symlinks are rejected.
|
|
220
|
+
- `channels.zalo.dmPolicy`: `pairing | allowlist | open | disabled` (default: pairing).
|
|
221
|
+
- `channels.zalo.allowFrom`: DM allowlist (user IDs). `open` requires `"*"`. The wizard will ask for numeric IDs.
|
|
222
|
+
- `channels.zalo.groupPolicy`: `open | allowlist | disabled` (default: allowlist). Present in config; see [Capabilities](#capabilities) and [Access control (Groups)](#access-control-groups) for current Marketplace-bot behavior.
|
|
223
|
+
- `channels.zalo.groupAllowFrom`: group sender allowlist (user IDs). Falls back to `allowFrom` when unset.
|
|
224
|
+
- `channels.zalo.mediaMaxMb`: inbound/outbound media cap (MB, default 5).
|
|
225
|
+
- `channels.zalo.webhookUrl`: enable webhook mode (HTTPS required).
|
|
226
|
+
- `channels.zalo.webhookSecret`: webhook secret (8-256 chars).
|
|
227
|
+
- `channels.zalo.webhookPath`: webhook path on the gateway HTTP server.
|
|
228
|
+
- `channels.zalo.proxy`: proxy URL for API requests.
|
|
229
|
+
|
|
230
|
+
Multi-account options:
|
|
231
|
+
|
|
232
|
+
- `channels.zalo.accounts.<id>.botToken`: per-account token.
|
|
233
|
+
- `channels.zalo.accounts.<id>.tokenFile`: per-account regular token file. Symlinks are rejected.
|
|
234
|
+
- `channels.zalo.accounts.<id>.name`: display name.
|
|
235
|
+
- `channels.zalo.accounts.<id>.enabled`: enable/disable account.
|
|
236
|
+
- `channels.zalo.accounts.<id>.dmPolicy`: per-account DM policy.
|
|
237
|
+
- `channels.zalo.accounts.<id>.allowFrom`: per-account allowlist.
|
|
238
|
+
- `channels.zalo.accounts.<id>.groupPolicy`: per-account group policy. Present in config; see [Capabilities](#capabilities) and [Access control (Groups)](#access-control-groups) for current Marketplace-bot behavior.
|
|
239
|
+
- `channels.zalo.accounts.<id>.groupAllowFrom`: per-account group sender allowlist.
|
|
240
|
+
- `channels.zalo.accounts.<id>.webhookUrl`: per-account webhook URL.
|
|
241
|
+
- `channels.zalo.accounts.<id>.webhookSecret`: per-account webhook secret.
|
|
242
|
+
- `channels.zalo.accounts.<id>.webhookPath`: per-account webhook path.
|
|
243
|
+
- `channels.zalo.accounts.<id>.proxy`: per-account proxy URL.
|