Slack
Create tickets, trigger AI agents, triage intake requests, and get notifications directly in Slack. Full setup and usage guide.
The Slack integration puts JuhJuh inside your team's daily communication. Create tickets, trigger agents, triage external requests, and receive notifications without leaving Slack.
Two interaction modes are available:
- Structured commands (
/jj) for fast, precise operations - Natural language (
@juhjuh) for conversational requests in plain English
Both modes support the same core operations: ticket creation, status checks, assignment, agent triggers, and knowledge search.
Installation¶
- Go to Settings > Integrations > Slack in your organization
- Click Connect Slack and select the project to authorize
- Slack redirects you to the OAuth authorization page. Review the permissions and click Allow
- JuhJuh stores the connection credentials securely for that project
Permissions granted during OAuth:
| Scope | Purpose |
|---|---|
| Channels (read/join) | Read channel messages and join channels where the bot is invited |
| Messages (write) | Post notifications, ticket cards, and agent progress updates |
| Reactions (read) | Detect emoji reactions that trigger ticket creation |
| Commands | Register the /jj slash command |
| Chat (unfurl) | Display rich previews when JuhJuh links are shared |
| Users (read) | Resolve Slack users to JuhJuh accounts |
| Conversations (read) | Fetch thread context for smart ticket creation |
To connect multiple projects, repeat the authorization for each one. Each project maintains its own Slack connection.
Channel configuration¶
Channel mappings connect Slack channels to JuhJuh projects. They control which project receives tickets from a given channel, who gets assigned by default, and which notifications get posted. See Slack Channel Config for the full configuration reference, including AI guidance, intake settings, and triage channel routing.
Quick setup:
- Go to Settings > Integrations > Slack Channels
- Click Add Channel and select the Slack channel from the dropdown
- Choose a default project and assignee
- Toggle notification preferences
- Save
The JuhJuh bot must be invited to each channel you configure. Invite it with /invite @juhjuh.
AI guidance¶
Each channel mapping includes a free-text AI guidance field (up to 2,000 characters) that shapes how JuhJuh interprets natural language messages in that channel. Guidance affects intent classification, parameter extraction, and conversation analysis. See Slack Channel Config: AI Guidance for detailed examples and writing tips.
Slash commands¶
All structured commands use the /jj prefix. These bypass the AI layer entirely for speed.
| Command | Description | Example |
|---|---|---|
/jj create <title> |
Create a new ticket with the given title | /jj create Login page crashes on mobile |
/jj status <key> |
Check the status of a specific ticket | /jj status PROJ-42 |
/jj list |
List your recent tickets (up to 10) | /jj list |
/jj assign <key> |
Assign a ticket to yourself or a team member | /jj assign PROJ-42 |
/jj run-agent <agent> "<task>" |
Trigger an AI agent with a specific task | /jj run-agent DevBot "fix the login crash" |
/jj context |
Create a ticket from the current thread context using AI extraction | /jj context |
/jj link |
Link your Slack account to your JuhJuh account | /jj link |
/jj mystatus |
Check the status of your submitted intake requests | /jj mystatus |
/jj help |
Show available commands and usage | /jj help |
Commands return an immediate acknowledgement, then post the full response once processing completes. Rate limit: 5 commands per 60 seconds per user.
Natural language¶
Mention @juhjuh in any channel where the bot is present and describe what you need in plain English. JuhJuh routes natural language through the same intelligence layer used by the web platform.
Supported intents:
| Intent | Example |
|---|---|
| Create ticket | "create a bug for the login crash" |
| Update ticket | "assign PROJ-42 to sarah" |
| Query tickets | "show my open tickets" |
| Check status | "what's the status of PROJ-42?" |
| Create idea | "I have an idea for dark mode support" |
| Expand idea | "expand on that idea" |
| Convert idea to ticket | "convert that idea to a ticket" |
| Run agent | "ask DevBot to fix the auth issue" |
| Agent status | "what is DevBot doing?" |
| Search knowledge | "search knowledge for auth patterns" |
| Help | "what can you do?" |
Confidence levels:
| Level | Behavior |
|---|---|
| High | The action is executed immediately. The result is posted publicly. |
| Medium | The action is executed. The response is posted privately so you can confirm. |
| Low | JuhJuh asks for clarification before acting. |
When parameters are missing from a request, JuhJuh prompts you for the missing details instead of guessing. Per-channel AI guidance directly affects how natural language is interpreted. The same message can produce different results depending on the channel's configured guidance.
Intake system¶
The intake system lets non-platform users (designers, stakeholders, support teams) submit requests directly from Slack. Requests enter a triage queue for your team to review and act on.
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]Enabling intake monitoring:
- Go to Settings > Integrations > Slack Channels
- Edit the channel you want to designate as an intake channel
- Enable the required settings:
| 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 threshold (characters) are ignored | 10 |
| Triage channel | The channel where triage notification cards are posted | Same channel |
How it works:
- A user posts a message in the intake channel, or someone reacts with the trigger emoji on any message in a connected channel
- JuhJuh acknowledges receipt in the channel
- The request is classified by type (bug, feature, question, or other) and added to the triage queue
- A triage notification card with action buttons is posted to the configured triage channel
- Your team triages the request
- The original requester receives status updates via thread replies
Emoji-based ticket creation: React with the trigger emoji on any message in a connected channel to create a ticket from it. One ticket per message. Duplicate prevention is automatic, with a one-hour deduplication window.
Guest user tracking: External Slack users are tracked by their Slack identity without a platform account. After 3 or more requests, they are prompted to create a full account. All previous requests link automatically.
Triage queue¶
The triage queue is where your team reviews, prioritizes, and acts on incoming intake requests.
Accessing the queue: Navigate to Settings > Intake Queue.
Filtering options:
| Filter | Values |
|---|---|
| Status | Pending, Triaged, Deferred, Converted, Rejected |
| Channel | The Slack channel the request originated from |
| Request type | Bug, Feature, Question, Other |
Actions:
| Action | Description |
|---|---|
| Accept | Convert the request into a ticket. Set the title, priority, assignee, and add triage notes. |
| Reject | Decline the request with a reason. The requester is notified in their original Slack thread. |
| Defer | Postpone the request with a follow-up date. Deferred requests resurface automatically when the date arrives. |
| Assign | Route the request to a specific team member for triage. |
| Merge | Link the request to an existing ticket to avoid duplicates. |
Triage from Slack: Triage notification cards posted to your triage channel include interactive buttons (Accept, Reject, Defer). Your team can triage directly from Slack without opening the web interface.
Auto-escalation: Requests in Pending status for more than 24 hours are automatically escalated. Deferred requests past their follow-up date are resurfaced for attention.
Agent integration¶
AI agents can be triggered and monitored directly from Slack.
Four trigger methods:
| Method | How |
|---|---|
| Slash command | /jj run-agent <agent-name> "<task>" |
| Natural language | @juhjuh ask DevBot to fix the auth bug |
| Interactive buttons | Click action buttons on ticket cards or agent completion cards |
| Channel mention triggers | Configure agents to auto-fire when @juhjuh is mentioned in specific channels |
sequenceDiagram
participant U as User
participant S as Slack
participant J as JuhJuh
participant A as Agent
U->>S: @juhjuh ask DevBot to analyze auth
S->>J: Event received
J->>S: "DevBot is working on it..."
J->>A: Start agent execution
loop Progress updates
A->>J: Status update
J->>S: Progress posted to thread
end
A->>J: Execution complete
J->>S: Completion card with summaryProgress tracking: While an agent runs, progress updates are posted to the originating Slack thread in real time. Running agents display a Cancel button so you can stop execution early.
Completion cards include:
- Summary of work done
- Execution status (completed or failed)
- Tools used and iteration count
- Interactive buttons: Retry, View Details, View Ticket
Channel mention triggers: Assign agents to auto-start when @juhjuh is mentioned in designated channels. Useful for dedicated support or operations channels. Configure at Settings > Agents > Triggers.
Notifications¶
Channel notifications are posted to mapped channels when:
- A ticket is created in the mapped project
- A ticket's status changes
- A ticket receives a comment
- An agent completes or fails
- A new intake request arrives
Per-user DM configuration: Each user controls which events trigger Slack direct messages.
| Event type | Description |
|---|---|
| Ticket created | A new ticket is created in a project you follow |
| Status changed | A ticket's status was updated |
| Assigned to you | A ticket was assigned to you |
| Comment added | Someone commented on a ticket you are involved in |
| Agent completed | An AI agent finished executing a task |
| Agent failed | An AI agent encountered an error |
| Intake request | A new intake request arrived (for triage team members) |
| Mentioned | You were mentioned in a comment or description |
| PR created | A pull request was created for a ticket you follow |
Configure DM preferences at Profile > Notification Settings. Slack DM delivery is disabled by default.
Quiet hours: Set a time window (for example, 10:00 PM to 8:00 AM) to suppress Slack DM notifications. In-app notifications are still recorded during quiet hours and visible when you next open the platform.
Page notifications¶
Pages can send Slack notifications independently of the ticket notification system. This is useful for teams that collaborate on documentation or knowledge base content.
Setup:
- Go to your project's Pages > Integrations > Slack
- Select the Slack channel to receive page notifications
- Toggle the events you want:
| Setting | Description |
|---|---|
| Notify on page creation | Post a message when a new page is created |
| Notify on page updates | Post a message when a page is edited |
| Notify on comments | Post a message when someone comments on a page |
Page notifications are configured per project and per channel. They use the same Slack connection established during OAuth setup.
Thread sync¶
Bidirectional sync between Slack threads and ticket comments. The full Slack discussion is captured on the ticket automatically.
Three sync directions:
| Direction | Behavior |
|---|---|
| Both (default) | Slack replies become ticket comments. Ticket comments are posted to the Slack thread. |
| Slack to JuhJuh only | Slack thread replies sync to the ticket. Ticket comments are not posted back to Slack. |
| JuhJuh to Slack only | Ticket comments are posted to the Slack thread. Slack replies are not synced to the ticket. |
How threads are linked:
- A ticket URL is shared in a Slack thread
- A ticket is created from a Slack thread (via
/jj createor/jj context) - A team member manually links a thread to a ticket
Link unfurling¶
When a JuhJuh URL is shared in any Slack channel where the bot is present, JuhJuh posts a rich preview card automatically.
Supported entities:
| Entity | Preview includes |
|---|---|
| Ticket | Title, status, priority, assignee, project |
| Project | Name, key, description, ticket count |
| Agent | Name, type, description, status |
Ticket key detection: Mention a ticket key (for example, PROJ-123) in conversation and JuhJuh unfurls it automatically. The pattern matches 1 to 10 uppercase letters followed by a dash and 1 to 6 digits. No link required.
Action buttons on unfurled cards:
| Button | Action |
|---|---|
| View | Open the entity in the web platform |
| Assign | Assign the ticket to a team member |
| Comment | Add a comment to the ticket from a modal |
| Subscribe / Unsubscribe | Toggle notifications for the entity |
Security¶
| Measure | Description |
|---|---|
| Cryptographic signature verification | Every incoming request from Slack is verified using HMAC signatures with a 5-minute replay window |
| Rate limiting | 5 commands per 60 seconds per user. A secondary per-organization limit applies to AI-processed requests. |
| No destructive operations | Delete operations are blocked from Slack. Destructive actions require the web interface. |
| Account linking required | Write operations (creating and updating tickets) require a linked platform account |
| AI guidance sanitization | Per-channel guidance text is sanitized to prevent prompt injection |
| Event deduplication | Every incoming event is deduplicated to prevent double-processing from retries |
| Guest isolation | Guest users can only submit and view their own requests. No access to the broader platform. |
| Idempotent processing | All background operations are safe to retry without side effects |
| Data retention | Raw event payloads are purged after 90 days |
| Generic error messages | Error responses never expose internal implementation details |
Troubleshooting¶
Bot not responding to commands:
- Verify the bot is in the channel. Invite it with
/invite @juhjuh - Check the OAuth connection at Settings > Integrations > Slack. Verify the status is active. Re-authorize if needed.
- Run
/jj linkto confirm your Slack account is linked to your JuhJuh account. Write operations require a linked account. - Check rate limits. If you sent more than 5 commands in 60 seconds, wait and retry.
Notifications not being delivered:
- Verify channel notification toggles are enabled at Settings > Integrations > Slack Channels
- Check personal DM preferences at Profile > Notification Settings. Slack DM delivery is disabled by default.
- Check quiet hours. DM notifications are suppressed during the configured window.
- Confirm the bot is still in the channel. Bots can be removed by workspace admins.
Intake requests not being created:
- Verify both Allow intake and Intake channel monitoring are enabled on the channel mapping
- Check the minimum message length setting. Messages below the threshold are silently ignored.
- Confirm the message is top-level. Thread replies do not create intake requests.
- Verify the user is not already mapped to a JuhJuh account (mapped users go through the standard ticket creation flow).
Link unfurling not working:
- Verify the bot has unfurl permissions. These are granted during OAuth authorization.
- Check that the URL domain matches your JuhJuh instance domain.
- Confirm the bot is present in the channel where the link was shared.
Agent not triggering from Slack:
- Verify the agent is active at Settings > Agents
- For channel mention triggers, confirm the trigger is configured for the correct channel at Settings > Agents > Triggers
- Verify the user triggering the agent has appropriate permissions in the target project
- Check that the agent name is spelled correctly in the command
Related¶
- Slack Channel Config: per-channel settings, AI guidance, intake monitoring, and triage routing
- Integrations: overview of all supported integrations and connection setup
- Agents: create and configure AI agents that can be triggered from Slack
- Tickets: the tickets that Slack commands create and manage
- Projects: project-level configuration for Slack channel mappings
- Pages: knowledge base pages that can send Slack notifications
- Automation: auto-classification and triage rules that work with Slack intake