WooCommerce Order Alerts to Slack and SMS with Twilio
You can route WooCommerce order alerts to both Slack and Twilio SMS simultaneously using Krom Automation Pro, with no code and no third-party middleware. One workflow, triggered by an Order Created or Order Completed event, fans out to both channels in under 30 seconds. Pro is required for the Slack and Twilio actions.
The gap this fills is real. Tools like Zapier and n8n keep their tutorials at the “what’s possible” level.
Nobody walks through the exact field names, the exact merge tags, and what actually breaks when order volume spikes or a Twilio API key expires. This guide does that.
We will cover building the dual-channel workflow step by step, which fields map to which destinations, when to use Slack versus SMS, and the three failure modes that catch teams off guard.
Browse the full feature list to see what else Krom Automation handles beyond order alerts.
Quick Summary
- Plugin required: Krom Automation Pro (free version handles WooCommerce triggers but Slack and Twilio actions are Pro only)
- WooCommerce triggers used: Order Created, Order Completed
- Destinations: Slack channel message, Twilio SMS to a fixed number or a dynamic customer number
- Setup time: 15 to 20 minutes for both channels on one workflow
- What you need: A Slack Bot token, a Twilio Account SID, Auth Token, and a purchased Twilio phone number
What Gets Synced: Field Mapping Table
Every field below is injected using a merge tag. Merge tags pull live data from the trigger event into the action fields at execution time, so the message your team receives contains the real order values, not placeholders.
| WooCommerce Order Field | Merge Tag | Where It Lands |
|---|---|---|
| Order ID | {{order.id}} |
Slack message body, SMS message body |
| Order total | {{order.total}} |
Slack message body, SMS message body |
| Order status | {{order.status}} |
Slack message body |
| Customer full name | {{order.billing_first_name}} {{order.billing_last_name}} |
Slack message body |
| Customer email | {{order.billing_email}} |
Slack message body |
| Customer phone | {{order.billing_phone}} |
Twilio “To” field (dynamic customer SMS) or logged in Slack |
| Product names | {{order.items}} |
Slack message body |
| Payment method | {{order.payment_method_title}} |
Slack message body |
| Billing city | {{order.billing_city}} |
Slack message body (useful for geographic routing) |
| Admin order URL | {{order.admin_url}} |
Slack message body as a clickable link |
The customer phone field deserves a note. If you want the SMS to go to the customer rather than your operations team, use {{order.billing_phone}} in the Twilio “To” field.
If that field is blank in WooCommerce, the action fails. We cover that failure mode in the troubleshooting section below.
When to Use Slack vs SMS
Both channels carry the same order data, but they serve different team behaviors. Choosing the wrong one for a given situation adds noise rather than speed.
| Situation | Better Channel | Reason |
|---|---|---|
| Team needs to discuss or act collectively on an order | Slack | Threaded replies keep context together; anyone on the channel can pick it up |
| One person is on call and may not have Slack open | Twilio SMS | SMS arrives regardless of app state; no notification settings to misconfigure |
| High-value order requiring immediate human attention | Both | Slack for the team record, SMS to the owner’s mobile as a redundant alert |
| Customer confirmation of their own order | Twilio SMS to customer phone | Customers do not have Slack; SMS is the correct channel |
| Store processing 100+ orders per day | Slack only, with conditional filters | SMS at that volume becomes a nuisance; use conditions to send SMS only above a threshold order total |
| Subscription renewal or repeat order | Slack only | Routine events do not warrant interrupting a phone; log them for visibility only |
Sending every order to SMS is not a notification strategy. It is a way to train your team to ignore their phones.
What You Need Before You Start
Collect these credentials before opening the workflow builder. Missing any one of them mid-setup wastes time.
- Slack Bot Token: Create a Slack app at api.slack.com, add the
chat:writescope under OAuth and Permissions, install it to your workspace, and copy the Bot User OAuth Token (starts withxoxb-) - Slack Channel ID: In Slack, right-click a channel name, choose View Channel Details, and scroll to the bottom. The channel ID looks like
C0123456789. Do not use the channel name; use the ID. - Twilio Account SID: Found on the Twilio console homepage under Account Info
- Twilio Auth Token: Same location, next to Account SID. Treat this like a password.
- Twilio “From” number: A purchased Twilio phone number in E.164 format, for example
+14155551234 - Krom Automation Pro installed and active: The free plugin must also be active alongside it. See the Pro installation guide if you have not done this yet.
Step-by-Step Setup
Step 1: Create a New Workflow
Go to WordPress Admin Krom Automation Workflows Add New. The visual canvas opens on a blank workflow. Give it a name in the Workflow Name field at the top, for example “WooCommerce Order Alert: Slack + SMS”.
Open the visual workflow builder documentation in a separate tab if this is your first time on the canvas. The builder uses ReactFlow with auto layout, so nodes snap into position automatically as you add them.
Step 2: Set the Trigger
Click Add Trigger on the canvas. From the trigger panel, select WooCommerce Order Created if you want the alert at the moment of purchase, or WooCommerce Order Completed if you want it when the order fulfillment is confirmed.
For most physical goods stores, Order Created is more useful operationally. For digital or service stores, Order Completed avoids notifying the team before payment clears.
No additional configuration is required on the trigger node itself. Save the node.
Step 3: Add the Slack Action
Click Add Action below the trigger node. Select Messaging Send Slack Message.
Fill in the following fields exactly:
- Bot Token: Paste your
xoxb-token here - Channel ID: Paste the channel ID, for example
C0123456789. Not the channel name. - Message: Write your alert text and insert merge tags using the tag picker on the right side of the field. A useful starting template:
New order #{{order.id}}, {{order.billing_first_name}} {{order.billing_last_name}}, ${{order.total}}, {{order.admin_url}}
Save the action node. The canvas now shows Trigger Slack Action.
Step 4: Add the Twilio SMS Action
Click Add Action again, parallel to the Slack node rather than below it. You want both actions to fire from the same trigger, not sequentially. Select Messaging Send SMS via Twilio.
Fill in these fields:
- Account SID: Your Twilio Account SID
- Auth Token: Your Twilio Auth Token
- From: Your purchased Twilio number in E.164 format, for example
+14155551234 - To: Either a fixed number for your operations team (for example
+447911123456) or{{order.billing_phone}}if you want the SMS to go to the customer. Choose one, not both in the same action. Add a second Twilio action if you need both. - Message: Keep it under 160 characters to avoid multi-part SMS billing. A template that fits:
Order #{{order.id}}: ${{order.total}} from {{order.billing_first_name}}. Check Slack for details.
Save the action node. The full messaging integrations documentation covers every field for both Slack and Twilio in detail.
Step 5: Add a Conditional Branch (Optional but Recommended)
If you only want the SMS to fire for orders above a certain value, click Add Condition between the trigger and the Twilio action. Set the condition to Order Total [your threshold], for example 150.
The Yes path fires the SMS. The No path fires nothing, or you can route it to Slack only.
The conditions and branching documentation explains how to combine multiple order field conditions, for example filtering by product category or billing country alongside order total.
Step 6: Test with the Simulator
Before activating, click Simulate in the top toolbar. The workflow simulator runs a dry pass through every node using sample data and reports which actions would fire and with what values.
No real Slack message or Twilio SMS is sent during simulation. This catches misconfigured tokens and bad merge tag syntax before a real order triggers the workflow.
Once the simulation passes, toggle the workflow to Active and save.
Test with the simulator before going live. A Twilio Auth Token pasted with a trailing space costs you the first real order alert and five minutes of debugging.
What Does NOT Transfer
Every integration article covers what works. This section covers what does not, because that is the part teams discover at the worst possible moment.
- Order line item images: Slack cannot render WooCommerce product images via a bot message. You get product names via
{{order.items}}, not thumbnails. - Refund and partial refund events: The Order Created and Order Completed triggers fire on creation and completion. They do not fire when a refund is processed. You need a separate workflow on Order Status Changed, filtered to the “Refunded” status.
- Custom order meta fields: Fields added by third-party plugins, such as a custom delivery date picker, are not automatically available as merge tags. You need the HTTP Request action to fetch that data from the WooCommerce REST API if it matters for your alert.
- Two-way SMS replies: Krom Automation sends outbound SMS via Twilio. It does not currently listen for inbound replies. If a customer texts back, that goes to Twilio only and does not appear in Slack or Krom Automation’s execution log.
- Slack interactive buttons: The Slack action sends a standard text message. It does not support Block Kit buttons that trigger actions when clicked. For a “Mark as packed” button in Slack that updates WooCommerce, you would need the incoming webhook receiver plus a custom Slack app configuration.
- Order edits post-creation: If an admin edits the order total or changes the shipping address after the fact, the original alert is not updated. The Slack message and SMS reflect the order as it existed when the trigger fired.
Troubleshooting
Failure Mode 1: Slack Message Not Arriving
The most common cause is using the channel name instead of the channel ID in the Channel ID field. Slack’s API requires the ID format (C0123456789), not #orders or orders. The second most common cause is the bot not being invited to the channel.
In Slack, type /invite @YourBotName in the target channel. Without that invite, the bot has the scope to post but not the access to the specific channel.
Check the execution log in Krom Automation Execution History for the exact error code Slack returns. A channel_not_found error confirms the ID issue. A not_in_channel error confirms the invite issue.
Failure Mode 2: Twilio SMS Fails with a 21211 Error
Error 21211 from Twilio means the “To” number is not a valid phone number. This happens in two situations. First, the customer left the phone field blank in WooCommerce checkout, so {{order.billing_phone}} resolves to an empty string.
Second, the number is in a local format like 07911123456 rather than E.164 format like +447911123456. Twilio requires E.164 for all numbers, including the “From” field.
The fix for blank customer phones is a condition node before the Twilio action: check that {{order.billing_phone}} is not empty, and route the Yes path to the SMS action. The No path can post a note in Slack flagging the missing number.
Failure Mode 3: Alerts Arrive Late or Not at All Under Low Traffic
Krom Automation runs background execution via Action Scheduler, which depends on WP-Cron to fire. On a staging site or a low-traffic store where no page loads happen for hours at a time, WP-Cron fires late, and so does the workflow. The fix is a real server-side cron job that hits wp-cron.php every minute, replacing the default WordPress pseudo-cron.
Most managed WordPress hosts offer this in the control panel. If yours does not, a five-line crontab entry handles it. This affects all Action Scheduler-based plugins, not only Krom Automation.
A workflow that fires 40 minutes after an order lands is not an alert system. Cron on a low-traffic store needs a real server-cron job, not WordPress’s default pseudo-cron.
Cost Breakdown: Year 1 and Beyond
The question most teams do not ask until they get the invoice is what this actually costs across all the moving parts.
| Component | Cost | Notes |
|---|---|---|
| Krom Automation Pro (Basic, 1 site, annual) | $119/year | Covers every Pro feature including all messaging actions |
| Krom Automation Pro (Standard, 5 sites, annual) | $199/year | Useful for agencies running client stores |
| Krom Automation Pro (lifetime, 1 site) | $299 once | Breaks even versus annual at 2.5 years |
| Slack | $0 for alerts | A free Slack workspace receives bot messages. No paid Slack plan required for this use case. |
| Twilio SMS (US domestic) | ~$0.0079 per outbound SMS | At 500 orders per month, that is about $4/month. International rates vary significantly. |
| Twilio phone number | ~$1/month | Per number, per month |
At 500 orders per month, the Twilio cost for sending one SMS per order runs to roughly $5 per month. At 5,000 orders, that is $50 per month.
wpRigel does not charge per workflow execution or per action at any tier, so the Krom Automation cost stays flat regardless of volume. The only variable cost is what Twilio charges.
Going Further: Related Automations Worth Pairing
The Order Created and Order Completed triggers are the most obvious starting points, but WooCommerce stores typically need a handful of other alert and action workflows running alongside them. The WooCommerce Subscriptions integration adds triggers for subscription renewals, failures and cancellations, all of which are worth routing to Slack for your retention team.
If your store uses WPForms or Gravity Forms to collect pre-sale inquiries, those can feed into the same Slack channel using the WPForms integration or the Gravity Forms integration, so lead and order alerts live in one place without switching tools.
For stores preparing for high-volume periods, the post on preparing your WooCommerce store for Black Friday covers the automation stack specifically worth having in place before a traffic spike. The 20 WordPress automations most sites should have is a useful checklist for anything beyond order alerts.
Also from wpRigel
Pollify is our Gutenberg-native poll, survey and quiz plugin. Every poll is a real block inside the block editor, so there are no shortcodes to paste and no separate interface to configure. It fits naturally into product pages, post-purchase thank-you pages, or any content where you want audience input without leaving the editor.
Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K from anywhere in the admin, type what you need, and get there without clicking through menus. It is the only command palette with real WooCommerce depth: you can search orders by number or customer name, change order status, and update product prices directly from the palette.
Our Verdict
If your WooCommerce store processes more than 30 orders per day and your team relies on refreshing the admin dashboard to know what is coming in, a Slack plus SMS alert workflow is not a nice-to-have. It is a basic operational requirement. Setting it up with Krom Automation Pro takes under 20 minutes, carries no per-execution fees, and keeps every credential and execution log inside your own WordPress database rather than a third-party platform.
Who should not bother: stores doing fewer than 10 orders per day where the owner checks the dashboard regularly anyway. At that volume, the setup time exceeds the time saved for at least the first few months. Start with the free version on the WordPress.org plugin directory to get familiar with the workflow builder before committing to Pro.
Who should act now: any agency managing WooCommerce stores for clients, any store with an operations team split across time zones, and any store where an order that sits unacknowledged for 30 minutes causes a real problem. See the full pricing and plan options and pick the tier that matches your site count.
Frequently Asked Questions
Do I need Krom Automation Pro to send WooCommerce alerts to Slack and Twilio?
Yes. The WooCommerce triggers (Order Created, Order Completed) are available in the free version, but the Slack and Twilio SMS actions are Pro-only features. The free version supports 21 actions including HTTP Request, which is an alternative for advanced users comfortable building a custom webhook payload, but for a no-code setup you need Pro.
Can I send the SMS to the customer instead of my team?
Yes. In the Twilio action’s “To” field, use the merge tag {{order.billing_phone}} instead of a fixed number.
If the customer did not provide a phone number at checkout, the action fails. Add a condition node before the Twilio action to check that the phone field is not empty, and route orders without a phone number to a Slack flag instead.
What happens to my alerts if the Twilio API is down?
Krom Automation logs the failed execution and retries automatically with configurable backoff. You will also receive a failure notification by email.
The Slack action and the Twilio action are independent nodes, so a Twilio API outage does not prevent the Slack message from arriving. Your team still gets the order notification in Slack; only the SMS is delayed until the retry succeeds.
Is there a limit on how many workflows I can run per month?
No. Krom Automation does not impose per-execution limits or per-workflow caps at any plan tier.
Every plan, including the free version, runs unlimited executions. The only external usage costs are from Twilio, which charges per SMS sent at approximately $0.0079 per message for US domestic numbers.
Can I route different order values to different Slack channels?
Yes, using conditional branching. Add a condition node after the trigger and set the rule to Order Total greater than your threshold. The Yes path points to a high-value-orders Slack channel, the No path points to a standard-orders channel.
You can chain multiple conditions to create as many tiers as you need. Each branch is a separate Slack action node configured with a different Channel ID.