Key Capabilities
- Channel message trigger — Start a Run automatically from every new message in a channel, or from messages containing specific keywords or patterns
- Reaction trigger — Start a Run when someone adds a specific emoji reaction to a message (for example,
white_check_markto approve, orticketto create a ticket) - Scheduled channel digest — Run a scheduled agent that reads recent channel messages and produces a summary, alert, or report on a time-based cadence
- Bot and third-party app message support — Capture structured messages from Jira, GitHub, PagerDuty, and other Slack integrations, not just messages from humans
- No mention required — Team members do not need to tag the Duvo app; the trigger fires silently in the background
How Channel Message Triggers Work
The Channel Message trigger is a push-based trigger: the Duvo app listens to the channel and starts a Run for every new message (or every message matching your keyword filter). It fires within seconds of the message being posted. If multiple agents have a matching Channel Message trigger on the same channel, they all start simultaneously — there is no selection menu. Use keyword filters to prevent unintended overlaps. Reaction triggers work the same way: the Duvo app listens for emoji reactions in enabled channels and starts a Run when the configured reaction is added. Scheduled digests use a time-based schedule rather than a real-time trigger. The agent runs at a set time, reads the recent message history of the channel, and produces output.Choosing the Connection for a Trigger
When you create or edit a Slack (or Microsoft Teams) channel trigger, you choose which connection backs it using the connection picker on the trigger. If your organization has Connections sharing enabled, the picker groups connections into two sections:- Team — connections a teammate has shared with your team
- Personal — connections you set up under your own profile
When to Use Channel Triggers
- #alerts or #incidents — Every alert that lands in the channel is automatically triaged, deduplicated, or escalated without anyone reading and forwarding each message
- #support-inbox — Every inbound support message is read, categorized, and a ticket is created — no manual scanning required
- Weekly digest — On Friday at 5pm, summarize everything posted in #operations that week and send the digest to stakeholders
- Approval shortcut — Team members react with the
white_check_markemoji on a pending item in #approvals to trigger the approval workflow, without opening a separate tool - Monitoring — Watch #deploys or #ci-alerts for failure patterns and post a summary to the engineering team each morning
How to Set It Up
- Channel message trigger
- Reaction trigger
- Scheduled channel digest
Open Setup
Find the Slack Workspace connection
Enable the Channel Message trigger
Select the channel
Choose the connection (optional)
Add keywords (optional)
Save
/invite @Duvo).Worked Example 1 — #support-inbox Triage
Outcome: Every message posted in #support-inbox is automatically read, categorized, and routed. A ticket is created in your issue tracker and the poster receives an acknowledgment — without a human scanning the channel. Connections used:- Slack Workspace — triggers from channel messages
- Slack — reads the message thread and posts replies (required for actions beyond the trigger thread)
- Linear — creates tickets for engineering issues
- Human-in-the-Loop — escalates ambiguous or urgent requests
Trigger setup
Enable the Channel Message trigger
Select the channel
Leave the keyword filter empty
AOP
Expected results
- Every message in #support-inbox triggers a Run within seconds.
- Bug reports and feature requests get a Linear ticket and a thread acknowledgment automatically.
- Questions are answered from the knowledge base or escalated to the on-call engineer.
- The channel stays organized — every message gets a response, nothing is missed.
Worked Example 2 — Reaction-Based Approval in #approvals
Outcome: Finance and operations team members post pending approvals in #approvals. A reviewer adds awhite_check_mark reaction to approve, or an x to reject. The agent detects the reaction, records the decision, and notifies the requester.
Connections used:
- Slack Workspace — reaction trigger
- Slack — post DM to the requester and reply in the channel
- Google Sheets — log the approval decision
Trigger setup
Enable the Slack Reaction trigger
Select the channel
Set the emoji
white_check_mark for approvals. Create a second agent with x for rejections, or handle both reactions in one AOP.AOP
Expected results
- A reviewer adds the
white_check_markreaction on any message in #approvals. - The requester receives a DM within seconds confirming the decision.
- The decision is logged in Google Sheets with a timestamp and approver name.
- The original message thread gets a confirmation reply.
Worked Example 3 — Weekly #operations Digest
Outcome: Every Friday at 5pm, Duvo reads the past week of messages in #operations, identifies key decisions, open items, and blockers, and posts a structured summary to #operations-digest. Connections used:- Slack — read channel history and post the digest
- Human-in-the-Loop (optional) — flag items needing follow-up
Trigger setup
Set a schedule
No Slack trigger needed
AOP
Expected results
- Every Friday at 5pm, #operations-digest receives a structured summary.
- Open items and blockers are surfaced even if they were buried in a busy week of messages.
- The team has a single record of decisions and follow-ups without anyone manually reviewing the channel.
Tips
Troubleshooting
The trigger is not firing
The trigger is not firing
- Confirm the Duvo app has been invited to the channel:
/invite @Duvoin the channel. - Verify the Slack Workspace connection is active on the Connections page.
- Check that the agent has a published build — draft-only agents cannot be triggered.
- If a keyword filter is set, confirm the test message contains the exact keyword (case-insensitive match).
Every message starts a Run but most should not
Every message starts a Run but most should not
- Add a keyword filter to the trigger so only relevant messages start a Run.
- Alternatively, keep the trigger broad and add a filter step to the AOP: “If the message does not match [criteria], stop processing.”
The AOP cannot read the channel history for a digest
The AOP cannot read the channel history for a digest
- The Slack connection (not Slack Workspace) is required for reading channel history. Confirm it is enabled under Connections and authorized.
- Confirm the agent has permission to read the target channel. Re-authorize the Slack connection if needed.
Reaction trigger fires for the wrong emoji
Reaction trigger fires for the wrong emoji
- Emoji names in Slack are case-sensitive and use underscores, not spaces. Use
white_check_marknotwhite check mark. Find the exact name by hovering over the emoji in Slack and checking the tooltip.