1. What it does
The CloudWave SMS plugin connects your WordPress site to your CloudWave Bulk SMS account. It lets you:
- See your SMS wallet balance and available Sender IDs in wp-admin.
- Send a one-off SMS to pasted numbers, a user role, all users, or all WooCommerce customers.
- Run bulk campaigns, throttled by WP-Cron.
- Automate event SMS: new user, password reset (with the reset link), comment alerts, order receipts and per-status WooCommerce updates, plus staff alerts.
- Keep a delivery log with cost and status.
2. Requirements
- WordPress 5.6+ on PHP 7.4 or newer.
- WooCommerce (optional) for order/status automations. The WordPress automations work without it.
- A CloudWave Bulk SMS account — the portal at
https://sms.cloudwavebd.com. - Funds in your portal SMS wallet (top up under Add Funds).
- Outbound HTTPS from your web host to the portal (most hosts allow this by default).
3. Download
Download the plugin ZIP and install it from your WordPress admin.

cloudwave-WP-plugin.zip
Contains the cloudwave-sms/ plugin folder (WordPress + WooCommerce integrations).
4. Install & activate
- UploadIn WordPress go to Plugins → Add New → Upload Plugin, choose
cloudwave-WP-plugin.zipand click Install Now. - ActivateClick Activate Plugin. Activation creates the
{prefix}cw_sms_logand{prefix}cw_sms_queuetables and schedules the two WP-Cron events. - Open the pluginA new CloudWave SMS menu appears in the left sidebar. Start on Dashboard.
cloudwave-sms folder to wp-content/plugins/, then activate it from the Plugins list.5. Get your API credentials
- Open the portalGo to
https://sms.cloudwavebd.comand sign in (this uses your WHMCS client login). - Create a dedicated keyOpen API & Plugins in the sidebar and click Generate API credentials. Use a separate key for this site so you can revoke it independently.
- Copy both valuesCopy the API Key (starts with
cw_) and the API Secret. - Top up if neededUnder Add Funds, add wallet credit (bKash or a WHMCS invoice).
6. Configure the plugin
Go to CloudWave SMS → Settings and fill in the fields below, then click Save.
| Setting | What to put |
|---|---|
| Portal base URL | https://sms.cloudwavebd.com — no trailing slash. |
| API key / API secret | The values from step 5. |
| Default Sender ID | Optional. Blank = the portal account default. |
| Staff SMS recipients | Your numbers for staff alerts — one per line. |
| Send event automations | Master switch for the automatic event SMS (section 8). |
| Keep a delivery log | Records every message. Turn off on high-volume sites. |
| Log retention (days) | Older log rows are deleted daily by WP-Cron (default 90). |
| Recipients per API call | Up to 500 (the portal's cap). |
| Messages per queue run | How many queued messages each 5-minute run sends. |
| API timeout | HTTP timeout for portal calls (default 30s). |
7. Plugin screens
| Screen | What it is for |
|---|---|
| Dashboard | Live wallet balance, Sender IDs with per-part rates, delivery counters, connection test, test send, recent activity, plus an optional wp-admin dashboard widget. |
| Send SMS | Send now to pasted numbers, a role, all users, or all WooCommerce customers. Also the bulk campaign form and the opt-out list. |
| Templates | Enable/disable and reword each automation, with a live preview and the merge-tag table. |
| Delivery Log | Every attempt with recipient, source, event, parts, cost (BDT), status and error text. Filterable and paginated. |
| Settings | Credentials, staff numbers, toggles and throughput limits. |
8. Automations
Enable and reword each event on the Templates screen.
WordPress
| Event | Trigger | Sent to |
|---|---|---|
| New User Registration | user_register | the new user |
| Password Reset Request | password reset email filter | the user — with the reset link |
| New Comment on Your Post | comment_post | the post author |
| Staff Alert: New User | user_register | your staff numbers |
The password-reset listener reuses the reset key WordPress just generated, so the SMS link stays valid. Comments are only sent for approved comments, and never to a user about their own comment.
WooCommerce
| Event | Trigger | Sent to |
|---|---|---|
| Order Placed (receipt) | woocommerce_checkout_order_processed | customer |
| Order Status: each status | woocommerce_order_status_changed | customer |
| Staff Alert: New Order | woocommerce_checkout_order_processed | staff |
One customer template exists per order status your store has (pending, processing, on hold, completed, cancelled, refunded, failed — plus any custom statuses). The listener skips the initial empty → pending transition so the receipt is not sent twice.
Merge tags
All templates support {site_name}, {site_url}, {date}, {time}, plus:
| Group | Tags |
|---|---|
| User | {user_id} {user_login} {user_name} {user_email} {user_phone} {first_name} {last_name} {reset_link} |
| Order | {order_id} {order_number} {order_total} {order_status} {order_items} {order_url} {payment_method} {customer_name} {customer_email} {customer_phone} |
| Comment | {post_title} {comment_author} {comment_excerpt} {comment_url} |
Unknown tags are stripped before sending.
9. Sending behaviour
- Up to 500 recipients per API call. Bigger audiences go through the queue.
- Bodies containing merge tags are personalised per recipient and queued one call each. Identical bodies are packed into single multi-recipient calls.
- Failed recipients are retried three times before being parked as failed.
- The opt-out list is checked on every path — automations, manual sends and bulk campaigns alike. Nothing overrides it.
- Messages containing Bangla are sent as Unicode automatically; the send screen shows the encoding and the number of billed parts.
Where phone numbers come from
For each WordPress user, in order:
cw_sms_phoneuser metaWritten automatically the first time a send resolves a number.billing_phoneuser metaSet by WooCommerce.phone/mobileuser metaAs used by many themes.
Only valid Bangladeshi mobile numbers (017…, 8801…, +8801…) are accepted — the value is normalised to 8801XXXXXXXXX before it leaves the site.
10. Cron
WP-Cron drives two jobs:
| Hook | Interval | Purpose |
|---|---|---|
cw_sms_process_queue | 5 minutes | Sends queued bulk / personalised messages. |
cw_sms_prune_log | daily | Deletes log rows past the retention window. |
*/5 * * * * wget -q -O - "https://example.com/wp-cron.php?doing_wp_cron" >/dev/null 2>&1
…or define DISABLE_WP_CRON and call wp-cron.php directly from your system scheduler.
11. Custom events (for developers)
Add your own automation with the cw_sms_events_catalogue filter, then fire it from your code.
add_filter( 'cw_sms_events_catalogue', function ( $events ) {
$events['my_custom_event'] = array(
'label' => 'My Custom Event',
'group' => 'staff',
'target' => 'staff',
'description' => 'Fired by my own code.',
'tags' => array( '{user_name}' ),
'default' => 'Custom alert about {user_name}',
'enabled' => 0,
);
return $events;
} );
Then trigger it:
CW_SMS_Sender::trigger(
'my_custom_event',
array( 'user_name' => 'Rahim' ),
array( 'user_id' => $user_id )
);
12. Testing checklist
- Test API connectionDashboard → shows your live wallet balance and Sender IDs.
- Send a test SMSDashboard → send to your own mobile, then check the Delivery Log.
- One-off sendSend SMS → a role or pasted numbers.
- AutomationTemplates → enable one event (e.g. New User) and trigger it.
- Bulk campaignSend SMS → bulk form → create a small campaign and confirm it drains on the next cron run.
- WooCommercePlace a test order and check the receipt / status automation.
13. Troubleshooting
| Symptom | Likely cause & fix |
|---|---|
| “Not configured yet” banner | API key/secret missing on the Settings screen. |
| Invalid API key or secret | Key copied incompletely, or credentials revoked in the portal. |
| Insufficient wallet balance | Top up the portal wallet — a send is only accepted if the balance covers it. |
| No SMS on order status change | That status' template is disabled, or the master automation switch is off. |
| Order SMS arrives twice | The receipt cancels its own status template (empty → pending is skipped); check no other plugin sends the same status. |
| Queue never drains | WP-Cron is not running — add a system cron entry (section 10). |
| Customers receive nothing | No valid BD mobile on file, or the number is on the opt-out list (both are visible in the log). |
14. Uninstall
- Deactivate (Plugins → Deactivate) stops all sending but preserves settings and data.
- Delete the plugin (Plugins → Delete) runs
uninstall.php, which removes the plugin options and both tables.
CloudWave Bulk SMS · WordPress plugin guide · Last updated 23 Oct 2026.