Free live webinar

Same team, more pipeline: AI-powered marketing for Dynamics 365 · Wed 11 Nov · 1:00pm ET · with Microsoft MVP Mark SmithSame team, more pipeline · 11 Nov

Save my seat

Routines

A routine is an automation that runs on a schedule and does a job for you, rather than walking contacts through a flow. Where a journey is a canvas of steps that contacts travel through, a routine is a short set of instructions in plain language — "check this week's blog traffic and write up what changed", "pull new leads from the CRM and summarise them" — that the assistant carries out on its own, at the times you pick.

Routines live alongside journeys in the Automations section. Each one has its own page with a description, its instructions, its schedule, and a list of every time it has run.

What you can do here

  • Start from a recipe — a ready-made routine with its instructions, schedule and tools filled in — or start blank and write the instructions yourself (see Routine recipes).
  • Write or edit the routine's instructions in plain language. A routine cannot be activated until it has some — a blank routine's page says Add instructions to activate until you do.
  • Choose how often it runs, and at what time of day.
  • Attach it to a campaign, so what it produces lands there.
  • Run it immediately with Run now, without waiting for the schedule.
  • Pause it, resume it, or archive it when you're done with it. Archiving is permanent — an archived routine is read-only, so its instructions, schedule and tools can't be changed and it can't be run or resumed. To get it back, clone it from the automations list.
  • Review each past run in the Runs table — when it ran, whether it succeeded, a summary of what it did, and how many files it produced. Files a routine creates can be @-mentioned in chat like any other saved file (see File artifact). A routine writes the same working notes as an AI session does (see What the "Working" panel shows), but only someone watching the run live sees them.

What it can do, on the routine's own page

Every routine's page has an Advanced · What it can do section, folded away by default because most routines never need it: a routine made from a recipe already has exactly the capabilities the recipe needs, and a routine you write yourself can use any of its capabilities when its instructions call for them.

Open the section and you see two tiers. Contacts and contact fields, web search and read, search across your existing content, and every artifact and campaign creator — blog posts, email templates, files, images, web pages, decks, social drafts, campaigns and plans, plus email and SMS drafts for your review — are always available and show as fixed, checked chips. Querying your app data (the AppGraph), your saved insights (including emailing a snapshot), and AI-visibility checks are extras. The switch at the top decides what the extras mean: off, the routine may use any of them when its instructions ask (the checked ones are simply ready first); on, it is limited to the checked ones. Routines made from a recipe start limited to what the recipe needs.

Sending or scheduling an email or SMS to your contacts is refused in an unattended run. Publishing a web page or blog post is not — a routine can do that, so word its instructions carefully. There is no tool a routine can use to publish to a social network at all; its social capability only ever saves a draft for a person to review and post. The built-in recipes only read contact data; a routine you write yourself can also use the Contacts tool.

What a routine can and can't do

A routine can read your data — contacts and their organizations, campaigns, email and SMS results, web and form activity, saved insights — research the web, and create things: reports and files, web pages, blog posts, images, decks, email templates, email and SMS drafts, social drafts, campaigns and campaign plans. Everything it makes is a draft or a report for you to review. It can also add at most 5 facts about an organization in one run to that organization's memory (see What the assistant remembers).

A routine cannot send or schedule email or SMS — whatever its instructions ask for, that action is refused, and the run reports that it left the message as a draft for a person to send. It has no tool to publish or schedule a social post at all, so a routine only ever produces a social draft the same way. That is expected, not an error.

Routines are also built to leave your contacts, segments, tags and suppression lists alone: every built-in recipe only reads and reports on them, and a routine's own instructions should stick to the same rule — recommend a change and let a person make it, rather than asking the routine to make it directly.

Some outputs need a choice only you can make — an email template's layout, for instance. Recipes ask for these when you set them up. A routine written by hand that reaches such a choice without an answer stops and says which one is missing, rather than guessing.

Referencing your campaigns, segments and artifacts with @

Inside Instructions, type @ and a search list appears covering your whole workspace — campaigns, segments, contacts, email templates, images, web pages, blog posts, files, sent emails, social posts and automations. Pick a result and it becomes a chip in the text — the same @ you can use anywhere in the app. See Pointing at your own data.

A chip is a real reference, not just a name: when the routine runs, the assistant is handed exactly which record you meant instead of guessing from similar titles in the instructions. Reference a segment and it's also handed that segment's member count at that exact moment, so an instruction like "only if there are more than 50 people" works from the real number rather than a guess. (If that count can't be worked out on the day — a broken segment, or a count that takes too long — the routine is told the number is unavailable rather than given a wrong one.)

Type a kind after the @ to search just that type — @campaign:, @segment:, @contact:, @template:, @image:, @page:, @post:, @file:, @send:, @social: or @automation:. The search only opens after whitespace or at the start of the field, so typing an email address normally, like support@example.com, never triggers it.

Renaming something you've referenced doesn't relabel its chip. The chip goes on showing the name the item had when you picked it, and for most kinds — contacts, email templates, images, web pages, blog posts, files, sent emails, social posts — the routine also keeps using that old name when it runs. Segments, campaigns and automations are the exception: the routine looks those up again by their current name on every run, so a rename to one of them corrects itself without you touching the chip. Anywhere else, open @ and pick the item again to refresh the label.

Deleting something you've referenced doesn't warn you either. There's no error when you save the instructions, and no flag on the chip. Segments, campaigns and automations are at least recognized as missing when the routine looks for them at run time — though that only shows up inside the run, never as an upfront warning. Every other kind doesn't even get that: it keeps quietly pointing at whatever label it was given, deleted or not. Either way, the safe habit is the same: when you delete something you've referenced, remove its chip from the instructions too.

A reference isn't a permission. Adding a chip lets the routine see that item — it doesn't hand it a tool to act on it. If you've limited what the routine can do under Advanced · What it can do, a referenced item outside those capabilities is still visible to the routine and still off limits.

Setting the schedule

The Schedule row has up to three controls, depending on the cadence you pick:

  • Cadence — how often the routine runs:
    • Manual — never on its own; only when you press Run now.
    • Hourly — at the top of every hour.
    • Daily — once a day, at the time you choose.
    • Weekdays — Monday to Friday, at the time you choose.
    • Weekly — one day a week, at the time you choose.
  • Time of day — the wall-clock time the routine should run.
  • Weekday — for a weekly cadence, which day it runs on.

Which timezone the time means

Next to the time you'll see a timezone name, such as Europe/Berlin or Asia/Jerusalem. That is the zone the time is read in — set a daily routine to 09:00 with Asia/Jerusalem beside it and it runs at 9am in Jerusalem, whatever the server happens to be doing.

When you set or change a schedule, it takes the timezone of the computer you're editing on. So if you're in Berlin, "09:00" means 9am Berlin time. Travelling doesn't move a schedule you already saved — the routine keeps the zone it was saved with until you change the schedule again.

Two things worth knowing:

  • A routine set up before this behaviour existed may show UTC. Those schedules were saved in UTC, so they fire at that time in UTC rather than your local time — which, depending on where you are, can be hours off from what you intended. Changing the schedule (even setting it to the same time again) re-saves it in your own timezone and puts it right.
  • Daylight saving is handled for you. A routine set for 09:00 in a zone that changes clocks still runs at 09:00 local after the change — you don't need to adjust it twice a year.

If the AI model declines a run

Now and then the AI model behind a routine declines its instructions: its provider's safety check flags the request, sometimes by mistake. The run shows as Failed, and its summary (open the run to read all of it) is the same message you'd see in an AI session — the AI model declined this request, with the area it flagged when the check names one. See If the assistant declines a request for what it means.

A declined run isn't retried automatically, because running the same instructions again would be declined the same way. If five runs of a routine are declined within an hour — pressing Run now over and over, say — the routine is paused automatically, like any other failure that would only keep repeating, and it stays paused until you resume it. To put it right, reword the instructions so they say plainly what the routine is for, then try Run now. If the routine was paused, resume it once a run goes through.

Example scenarios

Scenario: Start from a recipe

  1. In Automations, press New Routine and pick a recipe — say Weekly performance digest.
  2. Answer its few setup questions (which channels to cover, whether to compare with the previous week).
  3. Check the suggested schedule and the plain-language preview of what the routine will do, then press Create routine.
  4. Adjust anything on the routine's page — the recipe only fills it in — and activate it.

Scenario: A Tuesday-morning report

  1. Open the routine and set its Cadence to Weekly.
  2. Set Time of day to 09:00 and the weekday to Tue.
  3. Check the timezone shown next to the time — it should be your own. If it still says UTC and you aren't on UTC, change the time and set it back, which re-saves the schedule in your zone.
  4. Make sure the instructions describe the report you want.
  5. Activate the routine. It will now run each Tuesday at 9am your time.

Scenario: Check a routine actually ran

  1. Open the routine and look at its list of runs.
  2. Each entry shows when the run started and how it finished.
  3. If the last run is at an unexpected hour, check the timezone beside the schedule time — a routine saved in a different zone runs at that zone's 9am, not yours.
  4. Use Run now if you need its output immediately rather than waiting for the next scheduled time.

FAQ

Q: Can I change a routine I made from a recipe? A: Yes — everything. The recipe only fills in the first draft; the routine is yours from then on, and editing it never affects the recipe. Its page keeps a small "From recipe" tag by its name so you can always tell how it started.

Q: Why did my routine say a choice was missing? A: Some outputs need a decision a person has to make (an email template's layout, which social networks to draft for). Add it to the routine's instructions and run it again.

Q: Why does my routine still use an old name for something I renamed? A: Renaming something doesn't relabel chips that already point to it — the routine keeps describing it by the old name until you open @ and pick it again. Segments, campaigns and automations are the exception: those are looked up fresh on every run, so a rename corrects itself. If you delete something instead, nothing warns you — remove its chip from the instructions yourself.

Q: What's the difference between a routine and a journey? A: A journey moves contacts through a series of steps over time. A routine does a job for you on a schedule and isn't tied to any one contact. Both live in the Automations section.

Q: I changed the schedule — will it run on both the old and new times? A: No. Putting a schedule change live replaces the previous schedule entirely; only the new one fires from then on.

Q: Why does my routine run at the wrong time of day? A: Almost always the timezone beside the schedule time isn't the one you expected — most often UTC on an older routine. Re-saving the schedule adopts your own timezone.

Q: Can I run a routine without waiting for its schedule? A: Yes — Run now starts it immediately. It works whether the routine is active or paused, and doesn't affect the next scheduled run.

Q: What happens if I pause a routine? A: It stops running on its schedule until you resume it. Anything it already produced stays where it is.

Q: What happens when a routine run fails? A: If the failure looks temporary — the AI service was briefly unavailable, say — the run is tried again later: up to 5 more times, after 5 minutes, 30 minutes, 2 hours, 6 hours and 24 hours. That is what every routine set up in the app does, including ones made before this was written down. A routine whose own retry settings ask for fewer tries, or different waits, gets those instead — but never more than 5 tries, nor more than a day between them, nor (for a failure that may already have had an effect) a retry sooner than the 5 minutes and 30 minutes above. A failure that trying again can't fix (your AI credit spend limit has been reached, for example) isn't retried. Either way the failed run shows in the routine's list of runs with the reason.