Automations are background workflows that fire in response to events — a new message arrives, a keyword matches, a contact is created — and then execute a sequence of steps such as sending a reply, tagging the contact, or hitting a webhook. They are distinct from Flows, which are interactive conversational menus that guide a contact through a multi-step dialogue inside WhatsApp. Automations run silently in the background; Flows take over the conversation.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/ArnasDon/wacrm/llms.txt
Use this file to discover all available pages before exploring further.
Triggers
Every automation begins with a trigger — the event that causes it to run. Wacrm fires the automation once per matching event, then walks through the step list in order.new_message_received
Fires on every inbound WhatsApp message, regardless of whether the contact is new or returning. Use this for always-on rules like out-of-office replies.
first_inbound_message
Fires the first time a contact sends any message to your number. Catches both brand-new contacts and manually added or imported contacts on their first-ever reply — making it the right choice for welcome messages.
new_contact_created
Fires when a contact is added to Wacrm — either manually through the UI or via CSV import. No inbound message is required.
keyword_match
Fires when an inbound message body contains (or exactly matches) one or more configured keywords. Case-sensitive matching is optional. Useful for routing pricing or support enquiries.
conversation_assigned
Fires when a conversation is assigned to an agent — either manually or by another automation step. Use it to notify the assignee or send an acknowledgement to the contact.
tag_added
Fires when a specific tag is applied to a contact. Combine with a
send_message step to start a nurture sequence the moment a contact is marked as a lead.time_based
Fires on a cron-style schedule (e.g. every weekday at 09:00 in your timezone). Requires cron infrastructure — see Cron setup below.
Step types
Steps are executed in order after the trigger fires. Acondition step can branch execution into a yes path and a no path; all other steps execute linearly.
send_message
Send a plain-text WhatsApp reply to the contact. The message is sent from your connected WhatsApp number. Supports static text only — use a
send_template step if you need approved template messages.send_template
Send an approved WhatsApp message template. Accepts a template name, language, and optional variable values.
add_tag / remove_tag
Apply or remove a tag on the contact. Tag IDs are selected from your existing tags in the builder. Useful for segmentation and triggering downstream
tag_added automations.assign_conversation
Assign the open conversation to a specific agent or to the next agent in a round-robin rotation.
update_contact_field
Write a value to a built-in contact field (
name, email, company) or to any custom field using the custom:<field_id> prefix. Supports {{ vars.* }} and {{ message.text }} interpolation at runtime.create_deal
Open a new deal in one of your pipelines. Specify the pipeline, stage, deal title, and an optional monetary value.
condition
Branch execution based on a predicate. The yes path runs when the condition is true; the no path runs otherwise. Supported subjects are listed in the Conditions section below.
wait
Pause execution for a configured duration — minutes, hours, or days — before continuing to the next step. Requires cron infrastructure. See the warning below.
send_webhook
POST a JSON payload to any external HTTPS URL. Accepts custom headers and a body template. Use it to push events into Zapier, Make, your own API, or any HTTP endpoint.
close_conversation
Mark the conversation as closed without assigning it to an agent. Useful as the last step in self-service deflection flows.
Conditions
Acondition step evaluates a predicate and routes execution down the yes or no branch. The following subjects are available:
| Subject | What it tests |
|---|---|
contact_field | Compares a named contact field (e.g. company, email) against a value using equals or contains. |
tag_presence | Checks whether the contact currently has a specific tag applied. |
message_content | Tests whether the inbound message body contains a given substring. |
time_of_day | Matches a time window in HH:mm-HH:mm format (e.g. 18:00-09:00 for out-of-hours). |
Pre-built templates
When you click New automation you can start from a blank slate or pick one of the four starter templates. Each template pre-fills the trigger, step list, and sample text so you can activate it with minimal editing.Welcome Message
Trigger:
first_inbound_messageSends a greeting message the first time a contact writes in, then applies a tag. A good default for every new Wacrm install.Out of Office
Trigger:
new_message_receivedUses a time_of_day condition (18:00–09:00) to detect off-hours. If the message arrives outside business hours, it sends an auto-reply letting the contact know when to expect a response.Lead Qualifier
Trigger:
keyword_match — keywords: pricing, quote, buyResponds with a qualifying question, waits 10 minutes for a reply, then assigns the conversation via round-robin to an available agent.Follow-up Reminder
Trigger:
new_message_receivedWaits 1 day and then sends a gentle nudge if the contact hasn’t received a further reply. Keeps leads from going cold.Building an automation
Open the builder
Navigate to Automations in the sidebar and click New automation. Optionally pick a template from the dialog.
Name and describe it
Give the automation a clear name and an optional description so your team understands its purpose at a glance.
Choose a trigger
Select the event type from the trigger dropdown and configure any trigger-specific options (keywords, tag, schedule).
Add steps
Click Add step to append steps to the list. For a
condition step, configure the subject and operand; the builder creates a yes branch and a no branch automatically. Drag to reorder steps within a branch.Cron setup for Wait steps
wait steps and time_based triggers pause or schedule execution and resume it at a later time. Wacrm stores pending executions in the database and drains them when GET /api/automations/cron is called.
To enable this, you need two things:
- Set
AUTOMATION_CRON_SECRETin your.env.local:
- Configure an external scheduler (cron job, GitHub Actions scheduled workflow, Vercel Cron, Uptime Robot, etc.) to call the endpoint on a regular cadence:
GET /api/flows/cron, so a single pinger can hit both endpoints.
Execution logs
Every time an automation runs, Wacrm writes a log entry recording the trigger event, which steps ran, their per-step status (success, skipped, or failed), and an overall status (success, partial, or failed).
To view the execution history for a specific automation:
- Open Automations in the sidebar.
- Click the automation you want to inspect.
- Select the Logs tab — or navigate directly to
/automations/[id]/logs.