Channels (Inbound Messaging)
Channels let users trigger CrewForm agents and teams directly from messaging platforms. Send a message — CrewForm creates a task, runs the agent, and replies in the same conversation. Supported platforms:How Channels Work
Each channel is a two-way bridge between a messaging platform and a CrewForm agent or team:Managed Bot vs Bring Your Own Bot (BYOB)
All channel platforms (except Email, Trello, and Linear) support two modes:Managed Bot
CrewForm hosts and operates the bot. You connect your chat to it using a connect code generated in Settings. Fast to set up — no bot registration needed. RequiresTELEGRAM_BOT_TOKEN, SLACK_BOT_TOKEN, or DISCORD_BOT_TOKEN to be set in your Supabase Edge Function secrets (or .env for self-hosted). These are set by default in the CrewForm cloud.
Bring Your Own Bot (BYOB)
Register your own bot application, paste its credentials into CrewForm, and CrewForm uses your bot instead. Full control over name, avatar, and permissions. Required if your org policy prohibits third-party bots.Telegram
Managed Bot Setup
-
Create the channel in CrewForm:
- Go to Settings → Channels → New Channel → Telegram
- Toggle Managed Bot ON
- Set a Default Agent or Default Team
- Save — a connect code is generated
-
Link your Telegram chat:
- Open the chat, group, or channel in Telegram
- Send:
/connect <your_connect_code> - The bot replies:
✅ Connected! Messages in this chat will be routed to your configured agent.
-
Send tasks:
- Any text message is routed to the agent
- Or use
/ask <prompt>to be explicit
BYOB Setup
- Create a bot via @BotFather →
/newbot→ copy the Bot Token - In CrewForm: Settings → Channels → New Channel → Telegram
- Toggle Managed Bot OFF
- Paste the Bot Token and your Chat ID
- Set the Webhook URL on your bot:
How Messages Are Handled
The bot sends a typing indicator (
...) while the task is being processed, then replies with the result in the same chat.
Required Environment Variables (Self-Hosted)
Slack
Managed Bot Setup
-
Create the channel in CrewForm:
- Go to Settings → Channels → New Channel → Slack
- Toggle Managed Bot ON
- Set a Default Agent or Default Team
- Save — a connect code is generated
-
Invite the bot to your Slack channel:
- In Slack, type
/invite @CrewFormin the target channel
- In Slack, type
-
Link the Slack channel:
- In the Slack channel, send:
connect <your_connect_code> - The bot replies:
✅ Connected! Messages in this channel will now be routed to your configured agent.
- In the Slack channel, send:
-
Send tasks:
- Any message in the channel is routed to the agent
BYOB Setup
- Create a Slack app at api.slack.com/apps
- Enable Event Subscriptions and add
message.channels(ormessage.groupsfor private channels) under Subscribe to bot events - Set the Request URL to:
Slack will send a
url_verificationchallenge — CrewForm responds to it automatically. - Go to OAuth & Permissions → add scopes:
chat:write,reactions:add,channels:history - Install the app to your workspace and copy the Bot User OAuth Token (
xoxb-...) - In CrewForm: Settings → Channels → New Channel → Slack
- Toggle Managed Bot OFF
- Paste the Bot Token and Channel ID
How Messages Are Handled
When a task is received, the bot reacts to the message with ⏳ (
:hourglass_flowing_sand:) to indicate processing. When the task completes, the result is posted as a thread reply to the original message.
Required Environment Variables (Self-Hosted)
Discord
Discord channels use slash commands (/connect and /ask) instead of plain text triggers.
Full setup instructions are in the dedicated Discord Integration guide, covering:
- Managed bot flow (invite → connect code →
/connect→/ask) - BYOB flow (custom Discord app, Ed25519 signature verification, slash command registration)
- Deferred responses and the “thinking…” indicator
- Troubleshooting
Required Environment Variables (Self-Hosted)
How It Works
- Emails arrive at a dedicated inbound address (e.g.
agent@mail.yourapp.com) - Resend receives the email and fires an
email.receivedwebhook to CrewForm - CrewForm fetches the email body via the Resend API, creates a task, and runs the agent
- The agent’s result is sent back as a reply email to the original sender
Setup
1. Configure Resend Inbound
- Sign up at resend.com and add your domain
-
Add an MX record to your domain DNS:
This routes emails sent to
@mail.yourdomain.comthrough Resend. -
In the Resend dashboard → Inbound → Add Webhook:
- Event:
email.received - URL:
- Event:
2. Create the Channel in CrewForm
- Go to Settings → Channels → New Channel → Email
- Set the Inbound Address — the full email address or prefix that should trigger this channel (e.g.
agent@mail.yourdomain.com) - Set a Default Agent or Default Team
- Save
3. Configure Reply Sending
Set these as Supabase Edge Function secrets (or.env for self-hosted):
How Emails Are Processed
Attachments: Email attachments are not currently included in the agent prompt. Only the subject and body are used.
Reply Format
The agent’s result is sent back as an email reply:- From:
RESEND_FROM_ADDRESS - To: Original sender
- Subject:
Re: <original subject> - Body: Agent result in a styled HTML block
Routing Multiple Agents
You can create multiple email channels with different inbound addresses to route different types of emails to different agents:Required Environment Variables (Self-Hosted)
Trello
Trello channels trigger agents when cards are created or moved to a specific list on a Trello board. Agent results are posted back as comments on the original card, and the card is optionally moved to a review list. Trello channels are always BYOB — you provide your own API Key and Token (similar to Email).Setup
1. Get Trello API Credentials
- Go to trello.com/power-ups/admin
- Create or select a Power-Up to get your API Key
- From the API key page, click the Token link to generate a token with read/write access
2. Find Your Board and List IDs
- Board ID — open the board in Trello; the short ID is in the URL:
https://trello.com/b/<BOARD_ID>/... - List IDs — use the Trello API:
You’ll need:
- Trigger List ID — cards created or moved here start agent tasks
- Review List ID (optional) — completed cards are moved here after results are posted
3. Create the Channel in CrewForm
- Go to Settings → Channels → New Channel → Trello
- Enter your API Key, Token, Board ID, Trigger List ID, and optionally a Review List ID
- Set a Default Agent or Default Team
- Save — CrewForm registers a webhook on the board automatically via the
trello-webhook-registerEdge Function
How Cards Are Handled
When the agent completes the task:
- The result is posted as a comment on the original Trello card
- If a Review List is configured, the card is moved there
- A
trello_card_mappingsrecord links the Trello card to the CrewForm task
Bidirectional Flow with Output Routes
Trello channels work with Trello Output Routes for a full round-trip:Tip: Create two lists on your board — “AI Work” (trigger) and “Review” (review) — for a clean Kanban workflow with your AI agents.
Webhook Management
When you create a Trello channel, CrewForm automatically registers a webhook on your board via the Trello API. When you delete the channel, the webhook is unregistered. If you need to manually manage webhooks, use thetrello-webhook-register Edge Function:
Required Environment Variables (Self-Hosted)
No additional environment variables are needed — all Trello credentials (API Key, Token) are stored per-channel in the database.Linear
Linear channels trigger CrewForm agents when issues are created, moved to a specific state, or labelled. Agent results are posted back as comments on the original Linear issue, and the issue is optionally moved to a “Done” state. Linear channels are always BYOB — you provide a Linear Personal API Key.Setup
1. Get a Linear Personal API Key
- Go to linear.app/settings/api
- Click Create key → give it a label (e.g. “CrewForm”)
- Copy the key (
lin_api_...)
2. Find Your Team ID
- In Linear, go to Settings → Teams → [Your Team]
- The Team ID (UUID) is visible in the URL:
https://linear.app/<workspace>/settings/teams/<TEAM_ID>
3. Create the Channel in CrewForm
- Go to Settings → Channels → New Channel → Linear
- Enter your Personal API Key and Team ID
- Configure triggers:
- Trigger On — comma-separated list:
create,state_change,label - Trigger States (optional) — comma-separated state names, e.g.
Triage,Todo - Trigger Labels (optional) — comma-separated label names, e.g.
crewform,ai-task - Done State (optional) — move the issue to this state when the agent completes (e.g.
Done)
- Trigger On — comma-separated list:
- Set a Default Agent or Default Team
- Save — CrewForm automatically registers a webhook on your Linear team via the
linear-webhook-registerEdge Function
Trigger Configuration
You can combine multiple trigger types for fine-grained control:Tip: Usestate_changeorlabeltriggers to avoid processing every new issue. For example, label issues with “ai-task” to selectively trigger your agent.
How Issues Are Handled
When the agent completes the task:
- The result is posted as a comment on the original Linear issue
- If a Done State is configured, the issue is moved to that state
- A
linear_issue_mappingsrecord links the Linear issue to the CrewForm task
Bidirectional Flow
Linear channels provide a full round-trip:Priority Mapping
Linear issue priorities are mapped to CrewForm task priorities:Webhook Management
When you create a Linear channel, CrewForm automatically registers a webhook on your Linear team via the Linear GraphQL API. The webhook secret is stored in the channel config for HMAC signature verification. If you need to manually manage webhooks, use the Linear API:Required Environment Variables (Self-Hosted)
No additional environment variables are needed — the Linear API Key is stored per-channel in the database.Message Log
All inbound and outbound channel messages are logged. View them in Settings → Channels → [Channel Name] → Message Log:Choosing Managed Bot vs BYOB
For most teams, Managed Bot is the right starting point. Switch to BYOB if you need a branded bot, organisation-specific permissions, or if your team policy requires it.

