HOMS WhatsApp Order Manager
A premium WooCommerce plugin that routes order confirmations through WhatsApp — giving your customers interactive, one-tap confirm & cancel buttons and your store instant, automatic order status updates.
What it does
Instead of relying on email notifications that go unread, HOMS WhatsApp Order Manager sends your customer a WhatsApp message the moment an order is placed. The message includes order details and two Quick Reply buttons — Confirm Order and Cancel Order. When the customer taps a button, the WooCommerce order status updates automatically and a confirmation message is sent back.
Key Features
Instant WhatsApp Delivery
Order confirmation sent via WhatsApp the moment a customer completes checkout. Zero delay.
Quick Reply Buttons
Twilio Content Template with interactive Confirm & Cancel buttons. One tap — no typing required.
Automatic Status Updates
Button taps update WooCommerce order status instantly — Processing on confirm, Cancelled on cancel.
Custom Message Templates
Four fully editable templates with 10 dynamic placeholders. Customize every word from your dashboard.
Dual Provider Support
Works with both Meta Cloud API and Twilio WhatsApp API. Switch providers from settings without code changes.
Follow-up Reminders
Automatic reminder if a customer hasn't responded within a configurable delay. Fully cancellable.
Retry Queue
Failed messages retry automatically at 5 min, 15 min, and 60 min intervals via Action Scheduler.
Developer Extensible
12+ action hooks and 9 filter hooks. Register custom providers, modify keywords, alter messages.
Installation
Get the plugin running on your WordPress + WooCommerce store in under five minutes.
Requirements
8.0+
8.1+ recommended for best performance
6.0+
Latest stable version recommended
7.0+
HPOS compatible
Step-by-step Installation
Upload the plugin
Navigate to
WordPress Admin → Plugins → Add New → Upload Plugin. Choose the homs-whatsapp.zip file and click
Install Now.
Alternatively, unzip the archive and upload the
homs-whatsapp folder to
/wp-content/plugins/ via FTP.
Activate the plugin
Go to Plugins → Installed Plugins and click Activate next to HOMS WhatsApp Order Manager.
On activation the plugin automatically:
-
Creates the
wp_homs_wa_queueretry database table - Seeds all default option values
- Generates a random Webhook secret token
-
Adds the
manage_homs_whatsappcapability to the Administrator role
Verify the admin menu
After activation you should see a HOMS WhatsApp menu item in your WordPress admin sidebar. Click it to open the Dashboard page.
Uninstalling
To fully remove the plugin, deactivate it and then delete it from the Plugins screen. The plugin's uninstall routine will automatically remove all stored options and the retry queue database table, leaving your database clean.
Getting Started
From zero to sending WhatsApp order confirmations in eight steps.
Choose your WhatsApp provider
The plugin supports two providers. Choose one that fits your business:
- Best for Quick Reply buttons (Content Templates)
- Simple REST API
- Pay-as-you-go pricing
- Requires a Twilio WhatsApp-approved number
- Official WhatsApp Business Platform
- Higher throughput
- Requires Meta Business account
- Template approval required
Obtain API credentials
For Twilio: Log in to the
Twilio Console, copy your Account SID and Auth Token, and
note your WhatsApp-enabled sender number (format:
whatsapp:+14155238886).
For Meta: In the Meta for Developers portal, create an App, add the WhatsApp product, and copy your System User Access Token and Phone Number ID.
Enter credentials in Settings
Go to HOMS WhatsApp → Settings. Select your provider and fill in the credential fields. For Twilio you will also need to paste your Content Template SID (the HX… identifier from the Twilio Console → Content Template Builder).
Create a Twilio Content Template (Twilio only)
In the Twilio Console go to Messaging → Content Template Builder → Create Template. Choose the Quick Reply type. Add two buttons:
-
Button 1 — Label:
Confirm Order| Payload:confirm -
Button 2 — Label:
Cancel Order| Payload:cancel
Add body variables such as {{1}} for customer
name, {{3}} for order number, etc. Submit the
template for approval. Copy the HX… SID into the
plugin settings once approved.
Configure the Webhook URL
Copy the Webhook URL from the plugin dashboard:
https://yoursite.com/wp-json/homs-whatsapp/v1/webhook
Paste this into:
- Twilio: Console → Phone Numbers → Your number → Messaging → "A message comes in" → Webhook
- Meta: App Dashboard → WhatsApp → Configuration → Webhook URL + Verify Token
Set a default test phone number
In Settings → General, enter a phone number
in E.164 format (e.g. +201012345678) as the
default test number. This is used by the
Send Test Message button on the dashboard.
Test the connection
Click Send Test Message on the Dashboard. You should receive a WhatsApp message on your default phone number within seconds. If not, check the Troubleshooting section.
Place a test order
Place a test WooCommerce order using a billing phone number that you can receive WhatsApp messages on. You should receive the confirmation template with the Confirm / Cancel buttons. Tap one — the order status in WooCommerce should update automatically.
Admin Guide
A complete walkthrough of every screen in the HOMS WhatsApp admin panel.
The Dashboard is the first page you see. It shows:
- Connection Badge — Live status of the configured provider (Connected / Not configured / Checking…)
- Webhook URL — Copy button for quick access to the REST endpoint
- Quick Actions — Send Test Message button
- Retry Queue Table — Recent queued, pending and exhausted send jobs with order ID, event type, phone, status, and next attempt time
Settings are organised into panels saved via AJAX — no page reload required.
General
- Enable Plugin — Master switch. Disabling stops all outgoing messages immediately.
- Default Phone (Test) — E.164 phone used by the test button.
- Send Notification on Status — WooCommerce statuses that trigger notifications.
API Provider
- Select Meta Cloud API or Twilio WhatsApp API.
- Provider-specific credential fields appear based on selection.
- Sensitive fields (tokens, auth) have a show/hide toggle.
Automation
- New Order Notification — Send template on new orders.
- Status Change Notification — Send on status transitions.
- Max Retry Attempts — 1–10 retries (default 3).
Follow-Up Reminder
- Enable Follow-Up — Activate automatic reminders.
- Follow-Up Delay — Minutes before the reminder fires (default 30).
- Trigger Statuses — Which order statuses trigger a reminder.
Webhook Security
-
Webhook Secret Token — Auto-generated on
activation. Use as
hub.verify_tokenfor Meta or send asX-HOMS-WA-Secretheader from Twilio.
Logging
- Enable Logging — Writes events to WooCommerce → Status → Logs.
- Log Retention — Days to keep log entries (default 30).
Four message templates can be customised from this page. Leave any template blank to use the built-in default.
new_order
A new WooCommerce order is placed
order_confirmed
Customer taps the Confirm button
order_cancelled
Customer taps the Cancel button
follow_up
Customer hasn't replied after the configured delay
Available Placeholders
{{customer_name}}
{{order_number}}
{{order_id}}
{{order_total}}
{{order_status}}
{{order_items}}
{{payment_method}}
{{site_name}}
{{site_url}}
{{order_url}}
The Logs page shows the retry queue table with filter tabs: All, Pending, and Exhausted. Each row shows the order ID, event type, phone number, attempts remaining, status, and scheduled next attempt time.
Buttons available:
- View WC Logs — Opens WooCommerce → Status → Logs filtered to the plugin log source.
- Clear Logs — Truncates the retry queue table after confirmation. Cannot be undone.
Frontend Experience
What your customers see from the moment they place an order to receiving a status confirmation.
The Customer Journey
1. Order Placed
Customer completes checkout. The plugin instantly captures the billing phone number, normalises it to E.164 format, and fires the WhatsApp notification pipeline.
2. WhatsApp Message Received
Within seconds, the customer receives a WhatsApp message containing:
- Their name and the store name
- Order number, total, payment method
- List of purchased items
- Two quick reply buttons: Confirm Order and Cancel Order
3. Customer Taps a Button
The button tap sends a Webhook POST to the plugin. The plugin verifies the HMAC signature, extracts the button payload, looks up the matching order by phone number, and applies the status transition.
4. Confirmation Message Sent
Immediately after the status update, a confirmation message is sent:
- On confirm: "✅ Your order has been confirmed. We're preparing it now."
- On cancel: "❌ Your order has been cancelled. If this was a mistake, please contact support."
5. Follow-up (if no response)
If the customer hasn't tapped a button after the configured delay (default: 30 minutes), a follow-up reminder is automatically sent. The reminder is cancelled if the order status changes before the timer fires.
Phone Number Normalisation
The plugin automatically normalises billing phone numbers to E.164 format. Country-specific rules are applied:
Egypt (EG): 01012345678 → +201012345678
Saudi (SA): 0512345678 → +966512345678
UAE (AE): 0512345678 → +971512345678
UK (GB): 07123456789 → +447123456789
US (US): 2125551234 → +12125551234
Settings Reference
Complete reference for every option stored in the WordPress options table.
General Options
homs_wa_plugin_enabled
Master switch. Set to
false to suppress all outgoing messages without
deactivating the plugin.
homs_wa_api_providerAccepted values:
meta | twilio
homs_wa_default_phoneE.164 format. Used by the Send Test Message button.
Meta Cloud API
homs_wa_meta_access_token
homs_wa_meta_phone_idhoms_wa_meta_app_secret
homs_wa_meta_api_version
v19.0
Twilio WhatsApp API
homs_wa_twilio_account_sid
homs_wa_twilio_auth_token
homs_wa_twilio_from_number
whatsapp: prefix, e.g.
whatsapp:+14155238886
homs_wa_twilio_template_sid
HXxxxxxxxx)
Automation & Retry
homs_wa_notify_new_order
homs_wa_notify_status_changed
homs_wa_retry_max_attempts
3
homs_wa_followup_enabled
homs_wa_followup_delay
30
Security & Logging
homs_wa_webhook_secret
homs_wa_log_enabledhoms_wa_log_retention30
Troubleshooting
Solutions to the most common issues. Check the WooCommerce log
first: WooCommerce → Status → Logs, filter by
homs-whatsapp.
This means Meta's GET request to your Webhook URL is not
returning the correct hub.challenge value. Check
these in order:
- Confirm your site uses HTTPS with a valid SSL certificate.
- Go to Settings → Permalinks and click Save Changes to flush rewrite rules.
-
Ensure the Verify Token you entered in Meta's dashboard
exactly matches the
homs_wa_webhook_secretoption in plugin settings — no spaces, no extra characters. -
Confirm the Webhook URL is:
https://yoursite.com/wp-json/homs-whatsapp/v1/webhook - Test the URL directly in a browser — you should see a JSON 403 response, not a 404.
The most common causes are:
- The Webhook URL is not configured in your Twilio or Meta dashboard. The webhook must point to your site.
-
The order's billing phone doesn't match the sender phone.
Check the WC log for
no order found for phone. - The order is already in a terminal status (processing/cancelled) — duplicate updates are intentionally blocked.
-
HMAC signature validation is failing. Enable logging and
look for
X-Twilio-Signature validation failed.
If you see duplicate messages, it may be because both the template send pipeline and the legacy text message pipeline are active. Verify that:
- Only one provider is selected and configured.
- The automation hook is not attached twice — this can happen if the plugin is deactivated and reactivated without a clean state.
-
Check the WC log for two consecutive
dispatching WhatsApp messageentries for the same order ID.
This means Twilio couldn't substitute the variables. Check that:
-
Your Content Template in Twilio Console uses numbered
variables:
{{1}},{{2}}, etc. -
The Template SID (
HX…) in plugin settings matches the approved template. - The template status in Twilio Console is Approved — pending templates do not receive variable substitution.
-
The
ContentVariablesJSON being sent is valid — check the WC log for the raw request body.
- Confirm Follow-Up Enabled is toggled on in Settings.
-
Check that Action Scheduler is running — go to
WooCommerce → Status → Scheduled Actions
and look for
homs_wa_send_followupentries. - If the customer tapped a button before the delay, the reminder is cancelled by design.
- If WP-Cron is disabled on your server, ensure you have a real cron job set up.
The homs_wa_api_provider option is empty. Go to
HOMS WhatsApp → Settings → API Provider,
select either Meta Cloud API or
Twilio WhatsApp API, and click
Save Settings.
Developer Hooks
Extend the plugin without modifying core files. All hooks follow WordPress conventions.
Action Hooks
Use add_action() to listen for these events.
homs_wa_event_new_order
( int $order_id, array $order_data )
Fires when a new WooCommerce order is processed and the WhatsApp pipeline begins.
homs_wa_button_clicked
( string $phone, string $button )
Fires when an incoming Webhook button click is captured and
validated. $button is lowercase/trimmed.
homs_wa_send_success
( string $phone, string $message, string $provider_slug
)
Fires after any WhatsApp message is sent successfully.
homs_wa_send_failed
( WP_Error $error, string $phone, string $provider_slug
)
Fires when a send attempt fails. The message is queued for retry after this hook.
homs_wa_order_confirmed_via_webhook
( WC_Order $order )
Fires after an order transitions to processing via the Confirm button.
homs_wa_order_cancelled_via_webhook
( WC_Order $order )
Fires after an order transitions to cancelled via the Cancel button.
homs_wa_followup_sent
( int $order_id, string $phone )
Fires after a follow-up reminder is delivered successfully.
homs_wa_retry_succeeded
( int $job_id, int $order_id, string $event_type )
Fires when a queued retry job succeeds.
homs_wa_retry_exhausted
( int $job_id, int $order_id, string $event_type )
Fires when all retry attempts for a job are exhausted. Status is
set to exhausted.
Filter Hooks
Use add_filter() to modify these values.
homs_wa_register_providers
( array $registry )
Register a custom provider class. Return the array with your provider slug mapped to its class name.
add_filter( 'homs_wa_register_providers', function( $registry ) {
$registry['my_provider'] = My_Custom_Provider::class;
return $registry;
} );
homs_wa_confirm_keywords
( array $keywords )
Modify the list of message body strings that map to a
confirm intent. Default:
['confirm', 'yes', '1', 'تأكيد', ...]
homs_wa_cancel_keywords
( array $keywords )
Modify the list of strings that map to a cancel intent.
Default: ['cancel', 'no', '2', 'إلغاء', ...]
homs_wa_rendered_message
( string $rendered, string $event_type, array $order_data
)
Filter the final rendered message body before it is sent. Useful for appending legal disclaimers or modifying formatting.
homs_wa_template_{event_type}
( string $template )
Filter the raw template string for a specific event. Replace
{event_type} with new_order,
order_confirmed, order_cancelled, or
follow_up.
add_filter( 'homs_wa_template_new_order', function( $template ) {
// Append a custom footer to the new order message
return $template . "\n\n---\nPowered by My Store";
} );