CloudWave Bulk SMS — Docs

Integration guide · WordPress & WooCommerce

WordPressWordPress Plugin

Send SMS from your WordPress site and WooCommerce store — order receipts, status updates, new-user and comment alerts — using the same wallet as your Bulk SMS portal. This guide takes you from download to a working test SMS in about 10 minutes.

Type
WordPress plugin
Works with
WordPress + WooCommerce
Requires
WP 5.6+ · PHP 7.4+
Talks to
https://sms.cloudwavebd.com/api

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.
The plugin authenticates with a per-site API key + secret. Your portal login is never stored on the site, and no database is shared between WordPress and the portal.

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).

Install this ZIP through Plugins → Add New → Upload Plugin. Do not unzip it into the server manually unless you know the correct folder layout.

4. Install & activate

  1. UploadIn WordPress go to Plugins → Add New → Upload Plugin, choose cloudwave-WP-plugin.zip and click Install Now.
  2. ActivateClick Activate Plugin. Activation creates the {prefix}cw_sms_log and {prefix}cw_sms_queue tables and schedules the two WP-Cron events.
  3. Open the pluginA new CloudWave SMS menu appears in the left sidebar. Start on Dashboard.
Prefer FTP? Upload the cloudwave-sms folder to wp-content/plugins/, then activate it from the Plugins list.

5. Get your API credentials

  1. Open the portalGo to https://sms.cloudwavebd.com and sign in (this uses your WHMCS client login).
  2. 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.
  3. Copy both valuesCopy the API Key (starts with cw_) and the API Secret.
  4. 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.

SettingWhat to put
Portal base URLhttps://sms.cloudwavebd.com — no trailing slash.
API key / API secretThe values from step 5.
Default Sender IDOptional. Blank = the portal account default.
Staff SMS recipientsYour numbers for staff alerts — one per line.
Send event automationsMaster switch for the automatic event SMS (section 8).
Keep a delivery logRecords 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 callUp to 500 (the portal's cap).
Messages per queue runHow many queued messages each 5-minute run sends.
API timeoutHTTP timeout for portal calls (default 30s).
After saving, go to Dashboard and click Test API connection — it shows your live wallet balance and Sender IDs. Then click Send a test SMS.

7. Plugin screens

ScreenWhat it is for
DashboardLive wallet balance, Sender IDs with per-part rates, delivery counters, connection test, test send, recent activity, plus an optional wp-admin dashboard widget.
Send SMSSend now to pasted numbers, a role, all users, or all WooCommerce customers. Also the bulk campaign form and the opt-out list.
TemplatesEnable/disable and reword each automation, with a live preview and the merge-tag table.
Delivery LogEvery attempt with recipient, source, event, parts, cost (BDT), status and error text. Filterable and paginated.
SettingsCredentials, staff numbers, toggles and throughput limits.

8. Automations

Enable and reword each event on the Templates screen.

WordPress

EventTriggerSent to
New User Registrationuser_registerthe new user
Password Reset Requestpassword reset email filterthe user — with the reset link
New Comment on Your Postcomment_postthe post author
Staff Alert: New Useruser_registeryour 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

EventTriggerSent to
Order Placed (receipt)woocommerce_checkout_order_processedcustomer
Order Status: each statuswoocommerce_order_status_changedcustomer
Staff Alert: New Orderwoocommerce_checkout_order_processedstaff

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:

GroupTags
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:

  1. cw_sms_phone user metaWritten automatically the first time a send resolves a number.
  2. billing_phone user metaSet by WooCommerce.
  3. phone / mobile user 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:

HookIntervalPurpose
cw_sms_process_queue5 minutesSends queued bulk / personalised messages.
cw_sms_prune_logdailyDeletes log rows past the retention window.
WP-Cron only runs when the site gets traffic. On a low-traffic or high-volume store, add a real system cron entry:
*/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

  1. Test API connectionDashboard → shows your live wallet balance and Sender IDs.
  2. Send a test SMSDashboard → send to your own mobile, then check the Delivery Log.
  3. One-off sendSend SMS → a role or pasted numbers.
  4. AutomationTemplates → enable one event (e.g. New User) and trigger it.
  5. Bulk campaignSend SMS → bulk form → create a small campaign and confirm it drains on the next cron run.
  6. WooCommercePlace a test order and check the receipt / status automation.

13. Troubleshooting

SymptomLikely cause & fix
“Not configured yet” bannerAPI key/secret missing on the Settings screen.
Invalid API key or secretKey copied incompletely, or credentials revoked in the portal.
Insufficient wallet balanceTop up the portal wallet — a send is only accepted if the balance covers it.
No SMS on order status changeThat status' template is disabled, or the master automation switch is off.
Order SMS arrives twiceThe receipt cancels its own status template (empty → pending is skipped); check no other plugin sends the same status.
Queue never drainsWP-Cron is not running — add a system cron entry (section 10).
Customers receive nothingNo 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.
Looking for the REST API itself? See the API Reference. Using WHMCS? See the WHMCS module guide.

CloudWave Bulk SMS · WordPress plugin guide · Last updated 23 Oct 2026.