Channels
Channels let your end-users talk to askTheodor through their everyday messenger. An inbound message matches a routing rule, gets dispatched to the right worker (or a Company’s CEO, or Kafenio), and a reply ships back out the same wire. Email and Signal are live, WhatsApp ships via an unofficial bridge, and several more channels are on the roadmap.
Crucially, inbound handling is draft-only by default: a worker prepares a reply for you to review — nothing is sent on the channel until you approve it.
Add a channel
The top grid shows a card for every known channel. Live ones are highlighted; planned ones are dimmed and labeled Coming soon.
- Live now: 📧 Email (SMTP send + IMAP receive) and 💬 Signal (via
signal-cli). - Bridge: 🟢 WhatsApp — works through an unofficial WhatsApp Web bridge (see the caution below).
- On the roadmap: Telegram, Discord, Slack, Microsoft Teams, and Viber. The architecture is already in place — when an adapter ships, your existing routing rules and workforce pick up the new wire with no reconfiguration.
Click a live card to add a channel of that kind; click a planned one to read a short “what’s coming” note.
Configure a channel
Each configured channel is a row with its label, an Enabled toggle, 🔍 Test (a health check), ▾ Configure (the per-kind editor), and 🗑 Delete. The row also shows when it was last polled and any last error.
Email (SMTP / IMAP)
- SMTP host / port — your outgoing mail server (e.g.
mail.smtp2go.com, port587). A 📮 Use SMTP2Go preset button fills the host and port for that relay. - Username / Password — your SMTP login (an app password if your provider requires one).
- From address — the address replies are sent from, header included
(e.g.
askTheodor <ai@your-domain.com>). - IMAP host / port / folder — your incoming mail server, so askTheodor can read inbound mail
(e.g.
imap.gmail.com, port993, folderINBOX). - 💾 Save, then 📨 Test send to a known address to confirm delivery.
Signal
- signal-cli path — path to the
signal-cliprogram. Leave blank to find it on yourPATH. - Phone number — the number, with country code, already registered with
signal-cli. - 💾 Save and 📨 Test send as with Email.
- ⚠️ Unofficial bridge — this drives WhatsApp Web via
whatsapp-web.jsand is not endorsed by WhatsApp; it can get a number banned. Use a number you control, for personal/testing use only. - Bridge port — the local port the Node bridge listens on (one per number; default
8788). - Session name — identifies the saved login; change it to link a second number.
- 🔗 Pair (scan QR) — starts the bridge and shows a QR code; scan it from WhatsApp → Linked devices → Link a device. Status updates automatically once linked. 🔓 Log out / new QR unlinks the number to generate a fresh code.
- Advanced — optional Node path, bridge directory, and Chrome path.
Routing rules
A routing rule decides where an inbound message goes. When a message lands, the first matching rule wins. Each rule has:
- Enabled — whether the rule is active.
- ⚡ act — let the routed worker act (use its tools to handle the request), not just reply. Tools stay gated by the worker’s autonomy allowlist and the global kill-switch.
- 📝 draft — draft only: the worker prepares a reply that’s saved for your review and nothing is sent on the channel. Use this for digests and draft-and-review flows.
- Channel — which channel this rule watches.
- From pattern — a case-insensitive substring matched against the sender (e.g.
acme.com). Empty matches everyone on that channel. - Subject pattern (Email) — an optional substring matched against the subject line.
- Target — where to send it: → Worker (pick one), → Company CEO (pick a company), → Kafenio (the staff room), or → Report (a report trigger).
Use + Add routing rule to create one and 🗑 to delete it.
In practice
Use a dedicated address, not your main inbox. Point the channel at something like
hello@ or a forwarding alias rather than your personal mailbox. It keeps the worker’s scope obvious,
makes routing rules simpler, and means a misconfiguration can’t touch mail you care about.
Use an app password where the provider offers one. Gmail and most major providers issue single-purpose credentials for programs. That’s both safer than your account password and easier to revoke if you change your mind.
Set up the Library before you connect the channel. A channel worker with nothing to ground its answers will draft plausible generic replies you’ll rewrite entirely. Your top questions, prices, delivery times and policies first — then the drafts are worth reviewing.
Start with one narrow routing rule. Route a single sender or subject pattern to one worker and watch the drafts for a week before widening. A broad rule on day one produces a lot of drafts you didn’t ask for and can’t easily evaluate.
Everything inbound is untrusted. A message can contain text crafted to read as an instruction to the worker processing it. Replies stay drafts, and the channel worker’s allowlist should be narrow — capability it doesn’t hold can’t be turned against you.
🎓 Learn it hands-on: OAuth sign-in
Terms in this page
- Channel — an external messenger (Email, Signal, WhatsApp, …) connected to askTheodor so people can reach your workers through it.
- SMTP — the protocol for sending email. You give askTheodor your outgoing mail server’s host, port, and login.
- IMAP — the protocol for reading received email. You give askTheodor your incoming mail server so it can see inbound messages.
- App password — a single-purpose password some email providers issue for programs, used instead of your main account password.
- signal-cli — a command-line program for the Signal messenger that askTheodor drives to send and receive Signal messages.
- Bridge — a helper program that connects askTheodor to a service that has no official API. The WhatsApp bridge automates WhatsApp Web.
- QR pairing — linking a device by scanning a one-time QR code, the way WhatsApp Web links to your phone.
- Routing rule — a condition (which channel, which sender, optional subject) that decides which worker or destination an inbound message is dispatched to.
- From / subject pattern — case-insensitive substring matches against the sender address and the email subject; the first matching rule wins.
- Draft-only — the worker writes a reply that’s saved for your review and nothing is sent on the channel until you approve it. The default for inbound messages.
- Act (⚡) — permission for the routed worker to use its tools to handle a request, still bounded by its autonomy allowlist and the global kill-switch.
- Company CEO — the lead worker of a Company; routing to it hands the message to that team.
- Kafenio — askTheodor’s shared staff room where workers talk to each other; a message can be routed there.
- Kill-switch — the one-click global stop that pauses all worker tool use; it overrides channel auto-replies too.