How I Set Up Slack and Telegram Bots for Different OpenClaw Workflows

March 21, 2026

openclaw · automation · ai-tools · slack · telegram

TL;DR: I use OpenClaw across both Slack and Telegram, but not as one giant all-purpose assistant. The useful setup was giving each surface a different job. Slack became the place for coding work, repo changes, and project-oriented collaboration. Telegram became the faster mobile-first surface for lightweight personal workflows. The hard part wasn't connecting the bots — it was designing the boundaries so the system stayed helpful, safe, and context-aware.


Why I Didn't Want One Bot Doing Everything

The first instinct with a tool like OpenClaw is to wire it into every place you already communicate and let the same assistant handle everything. In theory, that sounds efficient. In practice, it gets messy fast.

Coding work, personal reminders, quick mobile questions, repo tasks, and group-chat participation all have different expectations. The tone is different. The risk level is different. The amount of context needed is different. The right answer in a Slack channel is not always the right answer in a private Telegram chat.

So instead of building one universal bot, I started thinking in terms of workflow surfaces:

  • Slack for coding and project work
  • Telegram for quick personal interactions and lightweight workflows
  • OpenClaw as the orchestration layer that ties those surfaces together

That shift — from “one bot everywhere” to “different workflows on different surfaces” — made the whole setup much more usable.

The High-Level Setup

At a high level, my setup is simple:

  1. OpenClaw sits in the middle as the runtime and orchestration layer.
  2. Slack and Telegram are different interfaces into that system.
  3. Each interface is shaped around the kind of work I actually want to do there.

That means the bots may share identity and some continuity, but they should not behave identically.

A coding assistant inside Slack should be more structured, more careful about repo context, and better suited for project-style iteration. A personal assistant inside Telegram should be faster, lighter, and more conversational.

The goal isn't to make every surface equally powerful. The goal is to make each one feel appropriate.

Why Slack Became the Coding Surface

Slack is naturally better for project work.

It has channels, threads, messages with better persistence, and a format that makes back-and-forth iteration feel normal. That's especially useful when the assistant is helping with things like:

  • cloning and inspecting repos
  • editing portfolio content
  • creating branches and pull requests
  • reviewing layout changes
  • coordinating multi-step code tasks

In that environment, I want the assistant to behave less like a casual chatbot and more like a careful engineering collaborator.

That means a few things matter more:

  • awareness of repo boundaries
  • branch-only workflows
  • concise technical summaries
  • remembering which repo is the active working context
  • handling group-chat participation without spamming

Slack also makes it easier to keep coding workflows socially visible. If I'm iterating in a channel, the assistant should act like a participant in that workspace, not an all-knowing background daemon.

Why Telegram Became the Personal Surface

Telegram solves a different problem.

Sometimes I don't want to open Slack, jump into a repo, or think in “project mode.” I just want fast access from my phone. That could be a quick question, a reminder, a check-in, or a lightweight workflow that doesn't need a whole engineering context.

That makes Telegram better for things like:

  • quick daily interactions
  • personal workflow nudges
  • mobile-first assistant access
  • lightweight back-and-forth while away from a desk

The UX expectations are completely different there. Telegram should feel immediate, lower-friction, and less formal — still useful, but not overloaded with coding assumptions.

The biggest lesson for me was that channel choice shapes the assistant experience more than model choice does. A good model in the wrong surface still feels awkward.

The Real Work: Designing Boundaries

Connecting a bot to Slack or Telegram is mostly operational work. The more interesting problem is what happens after the bot shows up.

I had to decide:

  • What kind of work belongs on each platform?
  • How much memory or continuity should carry between them?
  • When should the assistant speak in group settings vs stay quiet?
  • What should count as “safe to do automatically” versus “ask first”?
  • How should coding-specific rules stay attached to coding contexts?

Those decisions matter more than the bot token setup.

The reason is simple: once an assistant can operate across multiple surfaces, you stop having a single UX. You now have a family of UX patterns. If you don't define them intentionally, the system becomes inconsistent and annoying.

Making the Assistant Context-Aware

One of the best parts of OpenClaw is that it can behave differently based on where it is and what workspace it's operating in.

That let me lean into a few useful patterns:

1. Channel-specific behavior

The assistant should know whether it's in:

  • a coding-oriented Slack channel
  • a direct personal chat
  • a shared group context
  • a repo-specific workspace

That affects everything from how verbose it should be to whether it should proactively respond at all.

2. Workspace-specific rules

For coding tasks, repo-level instructions matter a lot. A portfolio repo, a product repo, and a scratch sandbox all need different expectations.

That means the assistant shouldn't just “know how to code.” It should inherit the local rules of the repo or workspace it's currently working in.

3. File-based continuity

I like systems that make memory explicit.

Instead of pretending the assistant has perfect long-term recall, I prefer continuity to live in files: workspace rules, user notes, memory files, repo conventions, and task-specific documentation. That makes the behavior more inspectable and easier to shape over time.

For me, that was a much better mental model than relying on vague persistent chat memory.

Security and Privacy: What I Intentionally Did Not Optimize For

Whenever you describe a bot setup publicly, there's a temptation to show every implementation detail. I think that's a mistake.

The public version of this story should explain the design without exposing the internals that make your own system vulnerable.

So the principles I care about are:

  • don't expose secrets in posts or prompts
  • don't document private tokens, webhook details, or internal URLs
  • don't publish machine-specific config that doesn't need to be public
  • don't blur the line between “architecture explanation” and “operational instructions for my exact setup”

The point of a post like this is to share how I structured the workflows, not to dump a blueprint of my private environment.

That distinction matters even more when the assistant has access to real repos, messaging channels, and personal workflows.

What Actually Made the Setup Feel Good

A few design choices mattered more than I expected:

Clear separation of responsibilities

The bots became much more useful once each one had a clearer role. “Everything bot” sounds powerful, but it creates too much ambiguity.

Matching the UX to the platform

Slack wants structured collaboration. Telegram wants speed and simplicity. Fighting that makes the assistant feel unnatural.

Treating coding work as higher-trust but higher-risk

Coding workflows can be incredibly productive, but they also have more ways to go wrong. Repo context, branch safety, and explicit approval boundaries matter.

Letting the assistant participate without dominating

In shared channels, the assistant should act like a smart participant, not an omnipresent narrator. That sounds obvious, but it's one of the easiest things to get wrong.

What I'd Do Differently If I Were Starting From Scratch

I’d keep the same overall philosophy, but I’d get to it faster.

Start with workflow separation earlier

The cleanest version of this setup came from deciding what each surface was for before optimizing the implementation. If I were rebuilding it, I’d define those boundaries on day one.

Keep each bot narrower than feels necessary

It’s tempting to make every assistant do everything because the capability is there. In practice, narrower responsibilities usually create a better UX.

Design public explanations separately from private operations

If a workflow is worth writing about, it’s worth writing about safely. I’d separate “architecture worth sharing” from “implementation details that should stay private” from the start instead of cleaning that up later.

Key Takeaways

  1. Different surfaces should have different jobs. The useful setup was not one assistant everywhere. It was distinct workflows mapped to the right interface.
  2. Slack is great for coding because it supports structured iteration. Threads, channels, and project-oriented conversation make it a strong home for repo work.
  3. Telegram is better when speed and accessibility matter more than structure. Mobile-first, lightweight interactions are where it shines.
  4. Context design matters more than bot connectivity. The hard part is not attaching a bot to a platform. The hard part is deciding how it should behave once it gets there.
  5. Public architecture posts should explain systems, not leak internals. You can share design principles without exposing the private details that make your setup work.

Final Takeaway

The most useful assistants aren't the ones that appear everywhere with the same behavior. They're the ones that understand where they are, what kind of work belongs there, and how much autonomy makes sense in that context.

For me, Slack and Telegram ended up being complementary rather than redundant:

  • Slack for coding, projects, and structured collaboration
  • Telegram for fast personal workflows and mobile access
  • OpenClaw as the layer that makes both feel like parts of the same system

That separation is what made the whole setup go from “cool demo” to something I actually want to use every day.