Overview
Fifteen questions about the nine transport bridges — the operational subset that tends to bite people in production.
Questions
1. Do any transports open inbound HTTP ports?
No. Every inbound transport uses either an outbound WebSocket (Slack Socket Mode, Discord Gateway) or long polling (Telegram, Matrix /sync, email IMAP, iMessage). SMS is send-only for exactly this reason.
2. Can I run more than one transport at once?
Yes. Run each as its own subcommand (e.g. under separate systemd units). They share the session store.
3. Is the WhatsApp integration official?
No. It uses the whatsmeow library which speaks the unofficial WhatsApp Web protocol. Meta can and does ban numbers using unofficial clients.
4. Can I lose access to my WhatsApp number?
Yes. Do not run this bridge on a number you rely on. See Transports: WhatsApp.
5. Do I need signal-cli for Signal?
Yes. Rousseau does not embed the Signal protocol; it drives signal-cli via JSON-RPC over a subprocess.
6. How does the Matrix bridge handle encrypted rooms?
It doesn't. Encrypted (Olm/Megolm) rooms are unsupported today. Invite the bot into unencrypted rooms.
7. Why is SMS outbound-only?
Inbound SMS requires a public HTTP webhook. That conflicts with rousseau's zero-inbound-surface posture. Use SMS with cron or from other scripts.
8. Can iMessage work without a Mac?
No. Apple has no public API. Rousseau polls a locally installed BlueBubbles server on a Mac.
9. Does email support STARTTLS?
Not currently. Direct TLS on port 993 (IMAP) and port 465 (SMTP) only.
10. Does the Slack bridge need a public webhook URL?
No. Socket Mode is a purely outbound WebSocket, so no public endpoint is required.
11. Does the Discord bridge need extra intents?
Yes, the Message Content privileged intent. Enable it in the Developer Portal.
12. How do allowlists work?
Every transport reads a list of IDs / JIDs / numbers. Only messages from listed senders enter the router. Empty allowlist = everyone (do not use in production).
13. Can I add a tenth transport?
Yes. Implement the transport.Transport interface (Start, Stop, Deliver) under internal/transport/<name>/, wire it in internal/cli/<name>.go, add a config block. See Community: Contributing.
14. Do cron jobs work with every transport?
Yes. Every transport gets a Deliver method, and wiring.startCron runs inside the transport daemon. The cron --deliver-to value is transport-specific (JID for WhatsApp, snowflake for Discord, etc.).
15. Where do transport-level failures show up?
Structured events like whatsapp.error, slack.error, matrix.disconnected. See Reference: Logs.
Related pages
- Transports
- Reference: Config: Transports
- Reference: Commands: whatsapp — and every other per-command page
- FAQ: General
- FAQ: Security