Skip to content

Building automation recipes

Composing a trigger, conditions and actions into a recipe, previewing it with a dry run, and the exact sense in which a recipe never runs silently.

Updated

A recipe pairs a trigger with conditions and a list of actions. Twenty-one triggers and twelve actions are declared, and a recipe is built from those and nothing else.

Recipes are governed and never run silently. A suggest-only recipe proposes its actions for a person to review. An automatic recipe puts each action through the governance gate and records what the gate decided. Neither performs a provider side effect: a run records what it proposed or what the gate said, and never a fabricated result such as published or sent.

Eighteen of the twenty-one triggers are raised by the product itself, the moment the thing they name happens: a message arriving in the inbox, an inbox item being handled or reopened, an inbox item still open after 1, 4, 24 or 72 hours, content being published, approved or sent back for changes, a scheduled item falling due, an approval passing its deadline, a publish attempt failing, a connected account needing reconnecting, a performance figure being recorded, a subscription change, a failed payment, the credit balance dropping into a warning band, the daily generation limit getting close, an AI provider being switched off, a webhook delivery failing, and usage rights or voice consent expiring. You can also start any recipe by hand with the test-run control on the page or through the API.

Three are not raised by anything, and the builder says so beside the picker rather than leaving you to find out: a recurring series is due, an offer is about to expire, and a gap appears in the calendar. Each needs a feature this product does not have — there is no repeating-series concept, no offer record with an end date, and nothing that measures a gap per channel — so a recipe built on one will save, preview and validate correctly and then wait indefinitely.

A note on how one trigger covers several situations. Rather than a separate trigger per case, a trigger carries the facts as fields and you narrow it with a condition. "The subscription changes" covers a start, an upgrade and a cancellation: condition on status, previous_status or price_changed. "An inbox item is handled or reopened" covers a reopening: condition on status and previous_status. "Consent or usage rights expired" covers both media rights and voice consent: condition on subject_type. That is one engine and one governance path rather than a separate automation system per area.

BEFORE YOU START

  • The "administer" or "moderate" permission to create, activate, pause, change mode or run a recipe. A dry run and reading need workspace access only.
  • Access to the workspace.
  • A clear idea of what should happen, because a recipe records intent precisely.

STEPS

  1. Open Automations for the workspace, or go to /app/workspaces/{workspace}/automations.
  2. Browse the playbook library. Each playbook says plainly what it will not do before you install it, and installs as a draft.
  3. Or build a recipe: name it, choose the trigger, and read the trigger's help and the fields it supplies.
  4. Add conditions, either as individual tests or as one level of and, or and not groupings.
  5. Add the actions to take, and optionally a different set for when the conditions do not match.
  6. Choose "Dry run", supply a payload, and read whether it matches and what would be proposed. A dry run writes nothing, calls the gate for nothing and charges nothing.
  7. Enable the recipe, choose suggest-only or automatic, and use "Test run now" to exercise it once. After that, leave it: the product raises the trigger itself.

WHAT YOU SHOULD SEE

A run recorded with an estimated credit cost and a list of actions, each with a status: proposed, ready, awaiting approval, awaiting confirmation, refused or blocked.

WHAT THIS WILL NOT DO

  • It will not fire on its own if you chose one of the three unraised triggers. Nothing in the product raises a recurring series, an expiring offer or a calendar gap.
  • It will not read the text of a message. A message trigger carries the channel it arrived on and whether it is a first contact, so a condition can route by channel but cannot match a keyword.
  • It will not tell you whether anyone replied. "An inbox item is still open" measures that nobody marked it handled — nothing in this product sends a reply to a platform, so a reply sent from the platform's own app is invisible here.
  • It will not fire again for a number that has not moved. "A performance figure is recorded" fires for a figure written through the report-metrics API and for one read from a connected provider account by the analytics ingestion, in both cases once the row is saved. Providers keep counting a window for about two days and are re-read while they do, so if a figure is restated to a different number the trigger fires again with the new one — but a re-read that leaves every figure unchanged raises nothing, because nothing was recorded that was not already recorded.
  • It will not publish or send. Actions that reach outside your organisation, and the one commercial action, are held at awaiting approval even in automatic mode and even when the gate allowed them.
  • It will not charge for publishing. A commercial action that tried to charge credits is refused outright as a defect.
  • It will not create or edit a recipe on your phone. The mobile screen lists recipes, dry runs one, opens its runs and pauses or enables it.

IF IT DOES NOT WORK

  • "The payload must be valid JSON." means the dry-run payload is malformed.
  • "This trigger never supplies engagement_count - a condition on it can never match." is the builder telling you a condition is unreachable.
  • "Does not match - nothing would run (no ELSE fallback)" is a real dry-run result, not an error.
  • "Only a queued or running run can be cancelled."
  • "That playbook is already installed in this workspace."
  • "administer or moderate permission required."
  • "That recipe's mode could not be changed. It is still running in its previous mode." is precise about what did not happen.
  • A run reason of "trigger_withdrawn" means the trigger the recipe was written against has been retired.

COMMON QUESTIONS

Does my plan include automations?

The plan catalogue names an automations entitlement on the larger plans. Nothing enforces it today, because no automation action is ever dispatched through the gate namespace that would check it.

What is the difference between a dry run and a test run?

A dry run writes nothing at all. A test run creates a real run record with real gate decisions and real proposed actions.

  • Connecting an assistant with MCP

    Minting an MCP token, the eleven tools the server exposes, and the exact state of the n8n node, the Make app definition and Zapier.

  • Planning the week with the Social Operator

    How the Social Operator gathers evidence from your own recorded activity, proposes at most six things to do this week, and why it never acts on its own.

  • Drafting replies with rules

    Writing rules that draft a reply for a matching inbox item, approving the draft, and which networks Social Studio can actually post the approved reply to.