Slack Channel Config
Map Slack channels to JuhJuh projects, set defaults, configure AI guidance, intake monitoring, and notification routing per channel.
Channel mappings are the bridge between your Slack workspace and JuhJuh projects. Each mapping connects one Slack channel to one project, controlling where tickets go, who gets assigned, what notifications fire, and how the AI interprets messages.
You can map as many channels as you need. One project can receive tickets from multiple channels. Each channel can only map to one project at a time.
Creating a channel mapping¶
- Go to Settings > Integrations > Slack Channels
- Click Add Channel
- Select the Slack channel from the dropdown
- Choose the target project
- Click Save
The JuhJuh bot must be present in the channel. Invite it with /invite @juhjuh before configuring the mapping.
Default settings¶
Each mapping has two optional defaults that pre-fill ticket creation from that channel.
| Setting | What it does |
|---|---|
| Default project | The project pre-selected when creating tickets from this channel. Users can override at creation time. |
| Default assignee | The team member automatically assigned to new tickets from this channel. Leave blank for manual assignment. |
These defaults apply to both /jj slash commands and @juhjuh natural language requests.
Notification toggles¶
Three toggles control which events post messages back to the mapped Slack channel.
| Toggle | When it fires |
|---|---|
| Notify on ticket creation | A new ticket is created in the mapped project |
| Notify on comments | Someone comments on a ticket linked to this channel |
| Notify on status changes | A ticket's status is updated |
All three are enabled by default. Disable any toggle to reduce noise in busy channels.
These are channel-level notifications. Individual team members configure their own DM preferences separately at Profile > Notification Settings. See Notifications for the full list of per-user events.
AI guidance¶
The AI guidance field shapes how JuhJuh interprets natural language messages in a specific channel. It accepts up to 2,000 characters of free text. The guidance affects intent classification, parameter extraction, and conversation analysis for every @juhjuh mention in that channel.
To configure:
- Go to Settings > Integrations > Slack Channels
- Find the channel and click Edit
- Enter your guidance in the AI Guidance field
- Click Save
Writing good guidance¶
Be specific about the channel's purpose and the types of work discussed there. Focus on context the AI would not otherwise know: team function, default categories, priority biases, labeling conventions.
Examples:
| Channel | Guidance | Effect |
|---|---|---|
| #frontend | "This channel is for frontend bugs. Default priority to High. Tickets should be tagged as frontend." | Tickets auto-fill with the frontend project and bug type |
| #infrastructure | "Infrastructure channel. Classify network and deployment issues as devops type. Default priority high." | Requests route to the infrastructure project with high priority |
| #design-requests | "Design intake channel. Classify requests as design tasks. Tag with design label." | Intake requests are classified for design work |
| #support-escalations | "Customer support escalations. Always set priority to Urgent. Include the customer name in the ticket description." | Urgent priority is applied automatically |
Guidance text is sanitized before use. Prompt injection is not possible.
How guidance is applied¶
When someone mentions @juhjuh in a channel with AI guidance configured, the guidance is injected into the classification prompt as shared context. The same natural language message can produce different results in different channels because of this. A message like "this is broken" might create a frontend bug in #frontend and an infrastructure incident in #infrastructure.
Guidance does not affect /jj slash commands. Those bypass the AI layer entirely.
Intake settings¶
Intake monitoring turns a Slack channel into a request queue for people outside your platform. Designers, stakeholders, support teams, and external collaborators post messages that enter a triage queue for your team to review.
Five settings control intake behavior per channel.
| Setting | Description | Default |
|---|---|---|
| Allow intake | Accept requests from users who are not mapped to JuhJuh accounts | Off |
| Intake channel monitoring | Treat every top-level message in this channel as an intake request | Off |
| Trigger emoji | React to any message with this emoji to create an intake request | :ticket: |
| Minimum message length | Messages shorter than this character count are ignored | 10 |
| Triage channel | The channel where triage notification cards are posted for your team | Same channel |
Enabling intake¶
- Go to Settings > Integrations > Slack Channels
- Edit the target channel mapping
- Toggle Allow intake to on
- Toggle Intake channel monitoring to on
- Optionally set a custom trigger emoji, minimum length, and triage channel
- Click Save
Intake flow¶
graph LR
A[Message in intake channel] --> B{Meets criteria?}
B -->|Yes| C[Intake request created]
B -->|No| D[Ignored]
C --> E[Acknowledgement posted]
C --> F[Triage card sent]
F --> G{Team decision}
G -->|Accept| H[Converted to ticket]
G -->|Reject| I[Requester notified]
G -->|Defer| J[Follow-up scheduled]When intake monitoring is active, every top-level message in the channel that meets the minimum length is captured as a request. Thread replies are not captured. Duplicate requests from the same message are prevented with a one-hour deduplication window.
The trigger emoji works in any connected channel, not only intake channels. React with the configured emoji on any message and JuhJuh creates an intake request from it. One request per message.
Guest users¶
External Slack users who are not mapped to JuhJuh accounts are tracked as guest users. After 3 or more requests, they are prompted to create a full platform account. All previous requests link to the new account automatically.
Guest users can only view and interact with their own requests. They have no access to the broader platform.
Triage channel routing¶
By default, triage notification cards post to the same channel where the intake request was created. For teams that prefer a dedicated review channel, set the Triage channel field to a different channel.
This keeps the intake channel clean for incoming requests while your team triages in a separate space. The triage cards include interactive buttons (Accept, Reject, Defer) so your team can act without opening the web interface.
See the full triage workflow and queue management at Slack: Triage queue.
Managing multiple channels¶
Most teams map several channels. Common patterns:
| Pattern | Channels | Setup |
|---|---|---|
| Team-per-channel | #frontend, #backend, #devops | Each channel maps to a team-specific project with AI guidance tuned to that domain |
| Intake + work | #requests, #engineering | #requests has intake monitoring on. #engineering is the triage channel. |
| Support escalation | #support, #support-triage | #support allows intake from external users. #support-triage receives triage cards. |
| Project-per-channel | #project-alpha, #project-beta | Each channel maps to its respective project. Defaults and guidance differ per project. |
Editing and removing mappings¶
Edit a mapping:
- Go to Settings > Integrations > Slack Channels
- Find the channel and click Edit
- Change any settings
- Click Save
Remove a mapping:
- Go to Settings > Integrations > Slack Channels
- Find the channel and click Remove
- Confirm the removal
Removing a mapping stops notifications and ticket routing for that channel. Existing tickets created from the channel are not affected. Thread sync for active threads continues until those threads go inactive.
API access¶
Channel mappings are available through the API. The endpoint supports listing, viewing, and updating mappings programmatically.
| Operation | Method | Endpoint |
|---|---|---|
| List all mappings | GET | /api/v1/orgs/{slug}/slack-channels/ |
| View a mapping | GET | /api/v1/orgs/{slug}/slack-channels/{id}/ |
| Update a mapping | PATCH | /api/v1/orgs/{slug}/slack-channels/{id}/ |
Updating requires organization admin permissions.
Filterable fields: is_intake_channel (boolean), q (search by channel name).
Related¶
- Slack: full Slack integration guide, including commands, natural language, thread sync, and link unfurling
- Notifications: per-user DM preferences and event types
- Projects: the projects that channel mappings route tickets to
- Tickets: the tickets created from Slack channel activity
- Agents: AI agents that can be triggered from mapped channels
- Permissions: organization admin requirements for managing channel config