Skip to content
WACRM.AI

Set up a WhatsApp automation in WACRM and read its run log

WACRM Workspace's Automations screen lets you turn an order, a fulfilment, an abandoned cart, an inbound message or a booking reminder into an action — a label, a ticket, a proposed agent action, or a template send. This tutorial covers the real screen, the run log that shows what each firing actually did, and the same calls through the API.

By Huy Nguyen (David), Founder & CEO of Netbase JSC Updated

What you'll learn

  • What you need before you start
  • Create an automation in Workspace
  • Turn a rule on or off
  • Read the run log
  • The same thing through the API
  • What works today vs. what’s not there yet

An automation in WACRM is a rule: when something happens — a new order, an order marked fulfilled, an abandoned cart, an inbound message, or a booking reminder — it runs one or more actions against the contact that event is about. This tutorial walks the real Automations screen, the 5 triggers and 4 actions that exist today, how to turn a rule on or off, how to read its run log, and the same thing through the API.

What you need before you start

  • A WACRM Workspace account with at least one project.
  • For the New order, Order fulfilled and Cart abandoned triggers: a connected store — these fire from real store activity, not from a demo. Whether your plan includes a store connection is not listed on the pricing page beyond “Store connector (early access)” on the Advanced plan; check your plan in Settings if you’re unsure.
  • For the Send a template action: at least one approved template, since the action only lets you pick from approved templates.
  • For the API steps only: curl (or any HTTP client that can set a header), and an API key from Developer / API & MCP.

Create an automation in Workspace

  1. Open Automations in Workspace.
  2. Click New automation.
  3. Fill in a Name, then pick a Trigger. If you pick Booking reminder, a Reminder timing field appears — choose 24 hours before or 2 hours before; the rule only runs for that one timing, never the other.
  4. Under Actions, click Add action for each action you want this rule to run when it fires. Pick an Action type and fill in that type’s fields (see the table below). Leaving Actions empty still saves a rule — it fires and gets recorded in the run log, it just doesn’t do anything.
  5. Click Create automation.

The 5 triggers

Trigger (label in Workspace)Fires when
New orderA new order is created
Order fulfilledAn order’s status moves into a shipped/fulfilled state
Cart abandonedAn abandoned-cart signal comes in for a cart
Inbound messageA new inbound WhatsApp or SMS message arrives
Booking reminderA booking reaches its 24-hour or 2-hour reminder window (pick which one in Reminder timing)

New order and Order fulfilled typically back order-confirmation and status-update sends, the kind of message WhatsApp classifies as a Utility conversation, not Marketing.

The 4 actions

Action type (label in Workspace)FieldsWhat it does
Add a labelLabel — pick an existing labelAttaches that label to the event’s contact
Create a ticketTicket subjectOpens a support ticket on the event’s contact
Propose an agent actionTool name, Payload (JSON object)Adds a row to the agent-actions approval queue — always needs approval, never auto-approved, even if auto-send is on
Send a templateApproved template — pick from your approved templates, Variables (JSON, optional)Sends that template to the event’s contact through the same path your other outbound templates already use

An action with no contact to work with (no contact resolved from the triggering event) is skipped, not failed — Add a label and Create a ticket both need one. Propose an agent action is also skipped while the workspace’s AI is paused. Send a template checks contact, AI pause, consent and the template’s approval status, in that order, before it sends anything — the same Approved status Meta’s own template creation flow in WhatsApp Manager requires before a template can be used at all. See “Read the run log” below for what each of those looks like when a rule doesn’t send.

Turn a rule on or off

Each row in the automations list has an Enabled switch, shown as On or Off. Flipping it saves immediately; if the save fails, the switch reverts to its previous state and an inline error appears — nothing changes silently. Disabling a rule stops it from firing on new events; it doesn’t touch runs it already recorded.

To remove a rule entirely, use the row’s Delete action. A confirmation dialog asks you to confirm: “<name>” will be permanently removed. This cannot be undone.

Read the run log

Each row has a Last runs column with a View last runs toggle. Opening it (only when you click it — the table never fetches runs for every rule just from loading the page) fetches the rule’s 5 most recent runs and shows each one’s status:

StatusMeaning
PendingClaimed but not finished yet (or, rarely, a run whose process died before finishing — see below)
OKEvery action ran
SkippedAn action didn’t run for a known reason (no contact, AI paused, no consent, etc.)
FailedAn action threw an unexpected error, or a Send a template action’s send itself failed

A Skipped or Failed run also shows a reason, in plain language: No contact on this event, Contact not found, Label not found, AI is paused for this workspace, Contact hasn’t opted in, Template not found, Template not approved, Send failed, Unknown action type, or Error while running this action. A Send a template action whose send fails for any reason — not just a denied consent check — is always recorded Failed with reason Send failed, never Skipped, so a real delivery problem is never shown the same way as an expected “contact hasn’t opted in” skip.

A run that crashes

A run is claimed the moment its trigger fires and finalized once every action has run. If the process dies in between — a crash, a restart — the run is left Pending and isn’t retried immediately. A scheduled check (today, every 15 minutes) looks for pending runs older than 15 minutes and resumes them from where they left off: any action already recorded in that run isn’t re-run, so a template that already sent is never sent a second time — the same idempotent retry-safety a resumed run relies on. A run gets up to 3 attempts in total; once it’s exhausted them it’s marked Failed, with a reason the run log doesn’t yet have a translated label for — you’ll see the raw value requeue_exhausted instead of a sentence.

The same thing through the API

Automations are also a Core API resource, under /v1/crm-projects/{project}/automations. Reads use the agent:propose scope, writes use agent:approve — tick both under Restrict what this key can do (advanced) → WhatsApp CRM scopes when you create a key in Developer / API & MCP (agent:approve needs a Secret key).

MethodPathScope
GET/v1/crm-projects/{project}/automationsagent:propose
POST/v1/crm-projects/{project}/automationsagent:approve
GET/v1/crm-projects/{project}/automations/{automation}agent:propose
PATCH/v1/crm-projects/{project}/automations/{automation}agent:approve
DELETE/v1/crm-projects/{project}/automations/{automation}agent:approve
GET/v1/crm-projects/{project}/automations/{automation}/runsagent:propose

Create a rule with an action

Code
curl -s -X POST "https://api.wacrm.ai/v1/crm-projects/your-project-uuid/automations" \
  -H "Authorization: Bearer sk_live_your_scoped_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Tag new orders",
    "trigger": "order_created",
    "enabled": true,
    "config": { "actions": [{ "type": "add_label", "label_id": "your-label-uuid" }] }
  }'
Code
{
  "data": {
    "id": "0e2b1c9a-...-automation-uuid",
    "name": "Tag new orders",
    "trigger": "order_created",
    "config": { "actions": [{ "type": "add_label", "label_id": "your-label-uuid" }] },
    "enabled": true,
    "created_at": "2026-11-08T09:00:00+00:00",
    "updated_at": "2026-11-08T09:00:00+00:00"
  }
}

An unrecognized trigger answers 422 invalid_trigger; a config that doesn’t match what that trigger (or that action type) requires answers 422 invalid_config — e.g. booking_reminder without a kind of 24h/2h, or an add_label action whose label_id isn’t one of your own project’s labels.

List a rule’s runs

Code
curl -s "https://api.wacrm.ai/v1/crm-projects/your-project-uuid/automations/your-automation-uuid/runs?limit=5" \
  -H "Authorization: Bearer sk_live_your_scoped_key"
Code
{
  "data": [
    { "event_key": "order:9f2a...", "status": "ok", "reason": null },
    { "event_key": "order:7c10...", "status": "skipped", "reason": "no_contact" }
  ]
}

Newest first, same fields the Last runs panel itself reads, limit 1-100 (default 20). A project id your key doesn’t own, or an automation id from another project, both answer 404 not_found — never 403, so you can’t tell the two apart from the response. A key missing the required scope answers 403 insufficient_scope.

What works today vs. what’s not there yet

What you want to doWorks today?
Create a rule with a trigger and up to 4 action typesYes — Automations → New automation
Build a rule with a visual flow builderNot yet — Pro’s pricing page lists “Flow builder (early access)”; Workspace only has the New automation dialog
Fire New order / Order fulfilled / Cart abandonedNeeds a connected store (Store connector is early access on the Advanced plan)
Send a WhatsApp template from a ruleYes, but only an approved template to a contact with consent — Workspace only lets you pick an approved template, and Core still checks consent at send time
See why a firing did nothingYes — open Last runs on the rule for each run’s status and reason
Edit the actions on an already-saved ruleNot from the screen — only the Enabled switch is editable there. PATCH /v1/crm-projects/{project}/automations/{automation} with a new config.actions works too, or delete and recreate
Recover automatically from a run that crashed mid-flightYes — a stuck pending run is resumed on the next scheduled check, up to 3 attempts
Call the same actions through the APIYes — mint a key with agent:propose/agent:approve

Ready to put this into practice? Request early access to get a Workspace, or have WACRM’s team set up your project for you with Quick Setup.

Talk to an expert

A person from the WACRM team replies.

Ask David a question about “WhatsApp Automations: Triggers and Actions”.

Replies within one working day, usually sooner on WhatsApp.

Frequently asked questions

Is there a visual flow builder for automations?

Not yet. WACRM's pricing page lists "Flow builder (early access)" as a Pro-plan feature, but the Automations screen in Workspace today only has the New automation dialog — a name, a trigger, and a flat list of actions. There is no drag-and-drop canvas to build multi-step flows.

Do the order and cart triggers work without a connected store?

No. New order, Order fulfilled and Cart abandoned all fire from your store's order and cart activity, so they need a connected store first. WACRM's pricing page lists "Store connector (early access)" and "Order automation (early access)" under the Advanced plan — check your plan in Settings if you're not sure whether yours includes it.

Why would a Send a template action never actually send?

The engine checks several things before sending, in order, and records whichever one stops it as the run's reason: no contact on the triggering event, the workspace's AI paused, the contact hasn't opted in, the template not found, or the template not approved. Only a rule whose contact has consent and whose template is approved actually sends.

What happens to a run that crashes partway through?

It isn't lost. A claimed run that never finishes stays pending, and a scheduled check resumes it later without re-running whichever actions it already completed. After repeated failures it's marked failed instead of retried forever — see "A run that crashes" below for the exact numbers.

Can I change the actions on a rule I already saved?

Not from the screen today — the only thing you can change there after creation is the Enabled switch. The name, trigger and actions all change through the API instead: PATCH /v1/crm-projects/{project}/automations/{automation} accepts any subset of name, trigger, config (which holds the actions array) and enabled, so you can edit config.actions directly without deleting and recreating the rule.

Want this set up for you?

Quick Setup connects your number with coexistence in 48 hours, done by a person.