Skip to main content
Web chat is built into every Capsule app. Channels let the same app receive messages from external transports such as Telegram, Slack, or WhatsApp.

Create a channel

capsule channel create support-telegram --type telegram -c bot_token=123:ABC

Declare it in the app

app = cpsl.App(
    name="support-ops",
    image=cpsl.Image(),
    channels=[cpsl.Channel("support-telegram")],
)

Handle messages once

The same @app.message() handler can serve web chat and named channels.
@app.message()
async def handle(session: cpsl.Session, msg: cpsl.Message):
    await session.reply(
        f"Received on {session.channel.type}: {msg.text}"
    )

Serve with a channel

capsule serve app.py:app --channel support-telegram
Use --force-channel when you need to rebind a local channel binding.

Manage channels

capsule channel list
capsule channel info support-telegram
capsule channel bind support-telegram --app support-ops
capsule channel unbind support-telegram