When an assignment sends a Slack message, the message can appear in two ways:Documentation Index
Fetch the complete documentation index at: https://docs.duvo.ai/llms.txt
Use this file to discover all available pages before exploring further.
- As Duvo — a bot message from the Duvo app, clearly labelled with a “APP” badge.
- As you — a message posted on behalf of your authenticated Slack account, indistinguishable from something you typed yourself.
How it works
Connecting Slack installs two tokens at once:| Token type | Visible as | Scope of access |
|---|---|---|
| Bot token (xoxb-) | “Duvo” app with APP badge | Channels and DMs the bot has been added to |
| User token (xoxp-) | Your personal Slack account | Every channel and DM you can access |
The bot token is workspace-wide. Every member of your Duvo team that connects
to the same Slack workspace shares one bot identity. User tokens are personal
— each Duvo user who connects gets their own xoxp- token.
Connect Slack
If you haven’t connected Slack yet, open Connections in the Duvo dashboard and click Add connection → Slack. Complete the OAuth flow — Slack authorises both the bot and your personal account in one step. You can connect multiple Slack workspaces by repeating the flow.Default behaviour: Duvo posts as the bot
Read operations (listing channels, fetching messages, searching) always use your user token — the bot can only see channels it has been added to, whereas your user account has full visibility. Write operations (sending messages, reacting, uploading files) default to the bot token, so posts appear as Duvo:Post as yourself instead
Setas_user: true on any write step in the assignment prompt or tool configuration:
as_user: true, the message appears under your name and avatar, with no APP badge. Use this when:
- You want a DM to feel like a personal follow-up.
- A downstream recipient only trusts messages from a known person, not a bot.
- Your Slack admin has restricted bot posting in certain channels.
Private channels and DMs
The bot token only works in channels it has been explicitly added to. If an assignment needs to post to a private channel:Invite the bot to the channel
In Slack, open the private channel and run
/invite @Duvo. This adds the
bot as a member so its token can read and post there.as_user: true as described above.
Triggering assignments from Slack
Assignments can be started when a message is posted to a specific Slack channel. To set this up, go to the assignment’s Triggers tab and add a Slack channel message trigger. Because the trigger listener uses the bot token, the bot must be a member of the channel you select. Private channels require the/invite @Duvo step above before the trigger will fire.
You can further narrow which messages fire the trigger:
| Match rule | When it fires |
|---|---|
| All messages | Every message in the channel |
| Contains keyword | Only messages that include one of the specified phrases |
Multiple Slack workspaces
If your assignment needs to post to two different Slack workspaces, add a separate Slack connection for each workspace and reference the correct connection in each step of your assignment prompt. Duvo resolves the token per connection, not per workspace automatically.Troubleshooting
“Bot can’t see the channel or the trigger isn’t firing” The bot has not been invited to the channel. Run/invite @Duvo in Slack.
“Messages are appearing under the wrong name”
Check whether as_user is set for that step. If as_user: true, messages post as the user whose token was used at connect time. Re-connect Slack under a different user account to change this.
“I connected Slack but the bot scopes are missing”
You may have authorised user scopes only. Disconnect the connection and reconnect — make sure to click Allow on the Slack app installation screen (which grants bot scopes) as well as the personal authorisation prompt.
“The assignment can see channels but can’t post”
The bot requires the channels:join or chat:write.public scope for public channels and an explicit invite for private ones. Both scopes are included in the default Slack connection. If you installed a custom Slack app, verify both scopes are present in your app’s OAuth & Permissions settings.