Self-host OpenClaw: connect your personal AI assistant to Telegram, Slack and Discord (plus Hermes Agent comparison)

Deploy OpenClaw on your own server with Zenavo, set up its public URL and gateway token, connect your model APIs or a self-hosted gateway, and hook up Telegram, Discord and Slack bots for a 24/7 personal AI assistant.

This post is also available in 简体中文, 繁體中文, 日本語, Español and Bahasa Indonesia.

Running a personal AI assistant on your laptop works until you close the lid and try to message it from Telegram or Discord on your phone. OpenClaw turns your assistant into an always-on gateway: you configure model providers and chat channels in its browser Control UI, then talk to it anytime from Telegram, Slack, Discord and other chat apps.

This guide uses Zenavo's OpenClaw template to run it 24/7 on a Linux server you rent or own, shows how to pair it with a self-hosted model gateway, and compares it with Hermes Agent. Your server, Zenavo and upstream model APIs are billed separately.

1. Before you deploy: pick your domain

On its first boot, OpenClaw writes your public HTTPS address into its configuration file (publicOrigin and controlUi.allowedOrigins) to validate Control UI requests and build webhook URLs.

  1. Add a DNS A record pointing your subdomain (for example assistant.example.com) to your server's IP.
  2. Connect a Linux server to Zenavo (the template recommends at least 2 GB of memory).
  3. Open the OpenClaw template, enter the full HTTPS address in Public URL (SITE_URL) without a trailing slash (such as https://assistant.example.com), choose your server and deploy.

The template sets up:

Setting Value or purpose
Image ghcr.io/openclaw/openclaw:2026.11.3
HTTP port 18789
State & config volume /home/node/.openclaw (holds openclaw.json and the workspace directory)
Auth volume /home/node/.config/openclaw
OPENCLAW_GATEWAY_TOKEN Generated when the project is created; signs in to the Control UI
SITE_URL Your public HTTPS URL, written into openclaw.json on first boot

2. Bind your domain and sign in to the Control UI

Once deployed:

  1. Open the openclaw service's Networking tab, bind the exact same domain (assistant.example.com) to port 18789, and wait for the HTTPS certificate. See Domains & HTTPS.
  2. Open the openclaw service's Variable tab and copy the value of OPENCLAW_GATEWAY_TOKEN.
  3. Visit https://assistant.example.com in your browser and paste OPENCLAW_GATEWAY_TOKEN to sign in to the Control UI.

Note: Anyone with OPENCLAW_GATEWAY_TOKEN can use your connected models and chat bots. Save it in a password manager (such as self-hosted Vaultwarden) and keep it out of chats and screenshots.

3. Connect model providers or a self-hosted gateway

After signing in to the Control UI, add a model provider:

  • Direct provider APIs: enter an official API key from OpenAI, Anthropic, Gemini or DeepSeek.
  • Self-hosted model gateway (recommended): if you run Magpie, New API or LiteLLM on Zenavo, issue a dedicated key for OpenClaw with a daily quota cap and point OpenClaw at your gateway. Even if a bot is triggered repeatedly, it won't run up an unbounded provider bill.
  • Over the project private network: when OpenClaw and your gateway live in the same Zenavo project (added via Add Service → Templates), use the internal address (http://new-api.zenavo.internal:3000/v1 or http://litellm.zenavo.internal:4000/v1) so requests never traverse the public internet. See Private Networking.

4. Connect Telegram, Discord or Slack channels

On the Channels page in the Control UI, add your chat platforms:

  1. Create bot credentials: for example, message @BotFather on Telegram with /newbot to get a bot token, or create a bot in the Discord Developer Portal or Slack App dashboard.
  2. Save and enable the channel: paste the token into the channel settings in OpenClaw.
  3. Restrict who can talk to the bot: any public bot on Telegram or Discord can be messaged by strangers who guess its handle. Enable the user or channel allowlist in OpenClaw so only your own Telegram User ID, Discord account or private server channels can trigger model calls.

5. OpenClaw vs Hermes Agent: which should you pick?

Zenavo's template catalog also includes Hermes Agent (open-sourced by Nous Research), which connects to Telegram, Discord and Slack as well:

Feature OpenClaw Hermes Agent
Image & default port ghcr.io/openclaw/openclaw:2026.11.3, port 18789 nousresearch/hermes-agent:v0.23.1, port 9119
Persistent volumes /home/node/.openclaw and /home/node/.config/openclaw /opt/data
Dashboard login Token sign-in with OPENCLAW_GATEWAY_TOKEN Username admin, password in HERMES_DASHBOARD_BASIC_AUTH_PASSWORD
Focus Lightweight personal multi-channel AI gateway and workspace Long-term memory, reusable skills and autonomous agent workflows

Start with OpenClaw if you want a clean, fast gateway across your chat apps; pick the Hermes Agent template if you want Nous Research's persistent memory and skill system.

6. Backups and upgrades

OpenClaw stores its configuration, workspace files and channel credentials in /home/node/.openclaw and /home/node/.config/openclaw:

  1. In a maintenance window, stop the project, back up both volumes from the openclaw service's Backup & Restore tab, start the project again and download a copy to keep. See Backups & Restore.
  2. The template pins a tested version (2026.11.3). Before upgrading, back up the volumes, check the upstream release notes, then update the image tag under Settings → Source.

FAQ

The browser says "Origin not allowed" or fails to connect. Check two things: first, SITE_URL must match your bound domain exactly (https://... with no trailing slash). Second, because the startup script only generates /home/node/.openclaw/openclaw.json when the file does not exist yet, changing SITE_URL after the first boot requires updating publicOrigin and controlUi.allowedOrigins inside openclaw.json and restarting the service.

Why does the health check take a moment to turn green after deploy? OpenClaw initializes its gateway on first boot, and the template gives it a 60-second grace period (start_period: 60). If it still isn't ready after two minutes, open the built-in Zenavo Agent on the right edge of the console or inspect the logs from Claude Code with MCP.

Why doesn't my Telegram bot reply in group chats? Telegram bots enable Privacy Mode by default, so in groups they only see / commands or messages that @mention them. Either mention the bot or turn off Privacy Mode via /setprivacy in @BotFather, and make sure the group or your user ID is on the allowlist.

What if I also want a browser chat UI? OpenClaw is great inside Telegram, Slack and Discord. If you also want a dedicated web interface with document uploads, knowledge bases and multi-user accounts, deploy Open WebUI or LobeHub alongside it on the same server.

Pick a subdomain and deploy the OpenClaw template or Hermes Agent template to put your own AI assistant in your pocket.