OpenClaw is an open-source multi-channel messaging bot. It connects to Telegram, Discord, WhatsApp Cloud API, and Slack, and replies using your choice of AI provider (Anthropic Claude or OpenAI GPT). This page covers running OpenClaw on Suji end-to-end. OpenClaw itself is maintained upstream; Suji provides the marketplace packaging.Documentation Index
Fetch the complete documentation index at: https://docs.suji.fr/llms.txt
Use this file to discover all available pages before exploring further.
Before you install
You’ll need:- An AI provider API key:
- Anthropic — console.anthropic.com
- OpenAI — platform.openai.com
- At least one channel token for the platforms you want OpenClaw to respond on. You can start with one and add others later.
| Channel | Where to get the token |
|---|---|
| Telegram | @BotFather |
| Discord | Discord developer portal |
| WhatsApp Cloud API | Meta Business |
| Slack | Your Slack app’s config page |
Install
Dashboard → Apps → OpenClaw → Install:| Field | Required | Notes |
|---|---|---|
| AI provider | yes | Anthropic (Claude) or OpenAI (GPT). |
| AI API key | yes | Encrypted at rest. |
| Gateway password | no | Auto-generated if blank. |
| Channels | yes | Pick one or more of Telegram / Discord / WhatsApp / Slack. |
| Per-channel tokens | for the channels you selected | See table above. |
running in ~1 minute. You’ll see a public URL like https://<your-subdomain>.suji.fr — that’s the Control UI.
First connection (two extra steps)
OpenClaw uses two security layers in front of the Control UI. Both run automatically when you access fromlocalhost but require explicit setup over the public tunnel:
- A token that authenticates your browser.
- A device pairing approval per browser.
Step 1 — open the tokenized URL
OpenClaw generates its own access token on first boot and stores it inopenclaw.json under gateway.auth.token.
- Dashboard → instance → Files tab.
- Switch the root to the OpenClaw install’s volume.
- Open
openclaw.json. - Copy the value of
gateway.auth.token.
Step 2 — approve the device pairing
The browser will show:
disconnected (1008): pairing required
That means OpenClaw created a pending pairing request for your browser and is waiting for you to approve it.
Leave the browser tab open, then in the dashboard:
- Terminal tab → pick OpenClaw from the selector.
-
List the pending request:
-
Approve it (replace with the ID you saw):
- Refresh the browser tab. The Control UI connects.
Connecting channels
After the Control UI is up, channels you selected at install time auto-connect using the tokens you provided. Confirm by sending a test message to your bot. For webhooks-based channels (WhatsApp Cloud API, Slack events), point the webhook URL in the provider’s console athttps://<your-subdomain>.suji.fr/webhooks/<channel>.
To add a channel after the initial install:
- Install detail page → Edit Install.
- Toggle the channel on.
- Paste its token.
- Save — Suji redeploys the container with the new env.
Day-to-day management
| Want to… | Where |
|---|---|
| View live logs | Dashboard → Logs (pick OpenClaw) |
Open a shell as node inside the container | Dashboard → Terminal (pick OpenClaw) |
| Browse data files | Dashboard → Files (pick the OpenClaw volume) |
Edit openclaw.json | Files → open → Cmd-S to save → restart from install detail page |
| Restart | Install detail page → Restart |
| Upgrade to a newer version | Install detail page → Upgrade (when available) |
| Remove the install + its data | Install detail page → Uninstall |
Troubleshooting
disconnected (1008): unauthorized: gateway token missing
disconnected (1008): unauthorized: gateway token missing
disconnected (1008): pairing required
disconnected (1008): pairing required
The browser isn’t paired yet. Open the dashboard’s per-app Terminal, run
openclaw devices list and openclaw devices approve <id> while the failing browser tab is still on screen. Pairing is per browser, so repeat on every new device.Bad gateway (Cloudflare 502)
Bad gateway (Cloudflare 502)
OpenClaw isn’t reachable through the tunnel. Most common causes:
- Container still starting — wait 30 s and retry, especially right after an upgrade.
- Container crashing — Logs tab will show the reason. If it’s a permission error on
/home/node/.openclaw, that’s a packaging issue — file a Suji support ticket.
Permission denied on /home/node/.openclaw/…
Permission denied on /home/node/.openclaw/…
OpenClaw runs as the Fresh installs handle this automatically via an init-permissions container.
node user. If the data volume’s ownership has drifted, OpenClaw can’t write its config. Fix from the host terminal:Mail isn't sending
Mail isn't sending
The underlying network blocks outbound SMTP on ports 25 and 465. Use port 587 with STARTTLS, or an HTTP-based provider (Resend / Postmark / Mailgun / SendGrid). A firewall rule won’t help — the block is upstream of the firewall.
Control UI works in one browser, fails 1008 in another
Control UI works in one browser, fails 1008 in another
Expected. Pairing is per device — approve the new browser’s pairing request the same way as the first.
Where things live
| What | Inside container | On host |
|---|---|---|
| sqlite, sessions, gateway config | /home/node/.openclaw | Named volume <install-id>_openclaw-data |
| Logs | stdout/stderr | — |
| Compose file (rendered) | — | /etc/suji/installs/<install-id>/compose.yaml |
| Env (rendered secrets) | injected as env vars | /etc/suji/installs/<install-id>/.env (0600) |
Recommended size
- Small (2 vCPU / 4 GB) is the floor for stable operation.
- The compose caps OpenClaw at 2048 MiB and 1 vCPU. AI work itself runs at the provider (Anthropic / OpenAI) — local CPU is just message routing, channel adapters, and HTTP roundtrips, which is light. The 2 GB ceiling is what actually matters: sustained high message volume can push memory usage if sessions accumulate, which is when an OOM kill would happen.
Reporting issues
| Class | Where |
|---|---|
| OpenClaw bug (wrong AI reply, channel logic, etc.) | openclaw/openclaw issues |
| Marketplace packaging bug (compose / manifest / install form) | suji-hq/suji-templates issues |
| Suji platform bug (dashboard, billing, network) | Support ticket from the dashboard |