Slack
Bind Slack channels to a brand — order creatives with an @braaand mention, and let pipelines deliver finished work straight into the channel.
The Slack integration makes a channel a place where creative work is ordered and delivered. Bind #client-wwf to the WWF brand and anyone in that channel can ask braaand for creatives; the pipeline runs durably in the factory and posts the finished PNGs back into the thread, with a board link for the full review.
Two directions, one integration:
- Slack as a pipeline ending — the Slack node delivers whatever reaches it into a bound channel. Wire it where you'd wire a Board node (they compose — a Board after a Slack node still files the same work).
- Ordering from Slack — mention
@braaandin a bound channel and describe what you want. The order is matched to one of the brand's recipes and launched; the run replies in its own thread from ack to delivery.
Setting it up
Two steps, both in Brand settings → Slack, both done by a brand admin.
1. Connect the workspace. Press Connect Slack workspace and approve on Slack's own authorization screen. The first person to do this in a workspace may need a Slack admin to approve the app — braaand asks for the minimum it needs: read the mentions addressed to it, post messages, upload files, and list channels so the picker can show them.
The connection lives at the account level, not per brand: one connect serves every brand in your Team. Colleagues onboarding other brands don't repeat this step.
2. Bind a channel to the brand. Press Bind a channel and pick one. That's the whole grant — and it's per channel, per brand:
- People in that channel can order creatives against this brand. Runs spend the brand's credit pool, exactly like a run launched from the app.
- Pipelines for this brand can deliver into it with a Slack node.
A channel belongs to exactly one brand, so a mention always resolves without asking who it's for. Unbinding revokes both directions immediately. Channels you haven't bound are ignored entirely — the bot never speaks where it hasn't been given a job.
Private channels need one extra move: type /invite @braaand in the channel first (Slack won't show a bot a private room it isn't in), then reopen the picker and it's there.
Disconnecting a workspace stops everything at once but keeps the bindings, so re-connecting later picks up where you left off.
Ordering
Mention the bot with what you want:
@braaand 5 spaningar quotes about AI in the public sector
The text is routed to the brand's recipes — a named recipe wins ("spaningar quotes" finds the recipe called "Spaningar"); a generic bounded ask ("5 posts about the reef") takes the standard campaign shape; a count in the order carries through. The rest of the text becomes the run's brief, in whatever language it was written.
Every order is answered in its thread:
- Acknowledged immediately — what's being built and that results land here.
- Delivered on completion — one PNG per creative plus the board's share link.
- Asked when the order can't be routed — the bot names the available recipes instead of guessing.
- Told when something fails — a run that dies says so; an empty credit pool says so. Never silence.
A recipe that needs something picked in the app (a specific creative to vary, an asset) isn't orderable from Slack — the bot says so and points at the canvas.
Follow-ups in the thread
The delivery thread stays a conversation. Mention the bot again inside it to change what was delivered:
@braaand redo nr 2 with the orange heading black instead
The numbers are the delivery order (each posted PNG is labeled #N · crv_… so both are one tap away), and titles work too ("the one about väljarna"). The crv_… half is the creative's canonical id — paste one into a mention and the bot targets exactly that creative, no numbering needed and no ambiguity, even in a thread it was never delivered in. Ids are copyable from every sidebar in the app (editor, board rail, pipeline canvas), and a pasted braaand.ai/r/<id> link works the same way. An id from another brand's channel gets one honest "I don't recognize that id" — nothing leaks. Pasting a creative's id in a top-level order also unlocks recipes that need a specific creative ("kör variations-of-this på crv_…"). Behind the scenes this builds and runs the same pipeline you'd wire on the canvas — the creative as a seed, an Edit node with your instruction, a settle pass, and delivery back into the same thread. The original is never touched: every change is a new version, posted alongside and filed on the run's board with the rest of the campaign.
What a follow-up can carry:
- Several changes at once — "change the image on nr 2 and make nr 5's heading black" becomes parallel edit branches in one run.
- Replacement copy, verbatim — 'I like nr 5 but go with this copy: "…"' places your quoted text exactly as written.
- Copy transfer — "take the copy from nr 5 and use it on all of them" reads nr 5's actual text and applies it across the set.
- Explicit colours — "make the orange heading black", "another background colour on nr 4".
- More creatives — "can you make 3 variations of each?" varies the headline and colour scheme by default; imagery is only varied when you ask for it, because on a per-person set a new image means a new person.
The thread is a real conversation: braaand remembers its own back-and-forth, so answering its "which number?" with just "8" works, and a number you gave earlier still stands when you re-state a request. A singular ask ("make a version…") with no target gets a question back — replacement copy is never stamped across the whole batch unless you explicitly say all. Order something new mid-thread and it's treated as a fresh order. Layout settling runs after edits by default — custom composition asks ("move the heading to the bottom") skip it so the engine doesn't undo your art direction.
Refining braaand's own drafts. Provenance decides what an edit does. The campaign's original creatives are records — editing one mints a new version so you can compare. But a version braaand just made for you in this thread is a draft: "make the background a bit lighter" on it is applied directly, in place — no new run, no new version, and the board it already sits on simply shows the updated state. An edit chain is always two things: the untouched original, and one living draft you keep refining. Follow-up runs also deliver onto the campaign's own board, so the share link from the first delivery stays the one link that has everything.
Delivery
The Slack node posts each creative's base-format PNG, threaded under a single header message — a ten-creative run is one message in the channel, not ten. Each PNG carries its #N · crv_… label: the number for talking, the id for copy-pasting into anything (a follow-up mention, the palette, the CLI's braaand resolve, a teammate's DM). The header carries two links, each for a different audience: the braaand board (team sign-in) where anyone on the brand can tweak copy and layout themselves, and the share link (no login, view-only) to pass along for review. All four formats stay on the board; Slack gets the overview.
Delivery is idempotent: a re-run posts only what hasn't already landed in that channel, never duplicates.
How it fits together
A Slack order is not a separate little engine — it's the ordinary Workflow Engine run, entered from a different door. The chain, end to end:
Your message → a recipe → a pipeline run → a board → back to the thread.
- The message picks a recipe. braaand matches what you wrote against the recipes this brand has — the three built-in starters plus every graph anyone has saved. Naming one wins outright ("spaningar quotes" finds the recipe called Spaningar); a generic bounded ask ("5 posts about the reef") takes the standard campaign shape. Everything else in your message becomes the run's brief.
- The recipe already knows the layouts. This is why ordering by name works so well. When someone saves a graph as a recipe with templates pinned on its Templates node, that recipe is the campaign's format: the same layouts every time, only the message changes. A Spaningar order produces Spaningar-shaped creatives because that set of templates is baked into the recipe — nobody re-picks layouts per order. A recipe with no pins instead lets the selector choose from your template library per run, spreading across as many distinct layouts as the creative count allows.
- The pipeline runs durably. Exactly the graph you'd see on the canvas: find layouts → write copy → place imagery → fit → score → route → deliver. Close Slack, close your laptop; it finishes and posts anyway.
- The results land on a board and in the campaign's collection, then come back to your thread as images plus the two links.
The practical consequence: to change what a channel produces, change the recipe, not the way people ask. Save the graph you want under a name your team will say out loud, pin the layouts that campaign uses, and the channel starts producing that shape. Everything else — follow-ups, variations, edits — keeps working the same way on top of it.
Ordering from Slack is one of several ways to run the same recipe; the Recipes page covers running from the command palette, the canvas, the CLI and the API.
Who pays, who acts
Runs ordered from Slack are billed to the brand's credit pool (the Team pool for team brands), same as any factory run. The run is attributed to the braaand user who connected the workspace; the Slack orderer is recorded on the run for the log.