Chat channels
Talk to your Smooth Agent from Telegram, WhatsApp, Slack, Matrix, LINE, WeChat Work and Discord. Only you get answers, every chat keeps its own conversation.
| Channel | Direction | How it connects | What you need |
|---|---|---|---|
| Telegram | two-way, approval buttons | long-polling (no open port) | bot token from @BotFather |
| two-way | Meta Cloud API webhook | token, phone-number id, verify token | |
| Slack | two-way | Events API webhook (signed) | bot token, signing secret |
| Matrix | two-way | /sync long-polling, any homeserver | bot access token |
| LINE | two-way | Messaging API webhook (signed) | channel access token + secret |
| WeChat Work | delivery only | group robot webhook | robot URL |
| Discord | delivery only | channel webhook | webhook URL |
Turn channels on
Pick them in the wizard, or name them directly:
smooth-agent setup --channels telegram,slack
smooth-agent channels list # what is configured
smooth-agent channels test telegram "hello" # send a test message
smooth-agent daemon # run channels + scheduled jobsSecrets go in ~/.smooth-agent/.env; the config only names the variable:
[channels]
enabled = ["telegram"]
webhook_port = 8808 # for WhatsApp, Slack and LINE
[channels.telegram]
token_env = "TELEGRAM_BOT_TOKEN"
owners = ["123456789"] # message the bot once: it replies with your id
auto_approve = false # true = run your tool calls without the button tap
voice_replies = "auto" # off | auto | always (needs [tts] and ffmpeg)How it behaves
- Owner only. Anyone not in
ownersgets a short "this agent is private" reply with their id, and nothing else. - One conversation per chat, saved in
smooth.dband resumed after a restart. - One message at a time. Turns run in order, so your provider never sees a burst of parallel requests.
- Live progress. One message shows the steps as they happen (
$ git pull,read app.py,search …) and disappears when the answer arrives. - Approvals. On Telegram you get ✅ Allow / ❌ Deny buttons. On the other two-way channels reply
yesorno(alsoya,oke,gas,gak,batal). No answer means no. - Files in, files out. Send photos, PDFs, Office files or archives; ask for a report and it sends back a real
.docxor.xlsx. - Voice. Voice notes are transcribed (
[stt]); withvoice_replies = "auto"a voice note gets a voice answer too.
Chat commands
| Command | What it does |
|---|---|
/new | Fresh conversation (the old one stays saved and searchable) |
/status | Model, session and memory |
/model <name> | Switch the model for this chat |
/stop | Stop what the agent is doing |
/help | Help |
Per-channel setup
Telegram
- Create a bot with @BotFather and copy the token into
.envasTELEGRAM_BOT_TOKEN. - Start the daemon, message your bot once, and put the id it replies with into
owners.
No open port needed.
Meta WhatsApp Cloud API. Point the webhook at https://<your-host>/webhook/whatsapp with the verify_token you chose.
[channels.whatsapp]
token_env = "WHATSAPP_TOKEN"
phone_id = "123456789012345"
verify_token = "a-secret-you-choose"
owners = ["628123456789"]Slack
Create a Slack app, enable Event Subscriptions to https://<your-host>/webhook/slack (message.im), and install it to your workspace.
[channels.slack]
token_env = "SLACK_BOT_TOKEN" # xoxb-…
signing_secret_env = "SLACK_SIGNING_SECRET"
owners = ["U0123ABCD"]Matrix
Works with any homeserver. Invite the bot to a room and it joins (only invites from owners).
[channels.matrix]
homeserver = "https://matrix.org"
token_env = "MATRIX_TOKEN"
owners = ["@you:matrix.org"]LINE
LINE Messaging API, webhook https://<your-host>/webhook/line.
[channels.line]
token_env = "LINE_CHANNEL_TOKEN"
secret_env = "LINE_CHANNEL_SECRET"
owners = ["U1234567890abcdef"]WeChat Work and Discord (alerts)
For delivering results and alerts into a group or channel:
[channels.wechat]
webhook_url_env = "WECHAT_ROBOT_URL"
[channels.discord]
webhook_url_env = "DISCORD_WEBHOOK_URL"Last updated: