Title: inSIM
Author: 2wstechnologies
Published: <strong>December 21, 2022</strong>
Last modified: August 16, 2026

---

Search plugins

![](https://ps.w.org/insim/assets/banner-772x250.jpg?rev=2937563)

![](https://ps.w.org/insim/assets/icon-128x128.png?rev=2837425)

# inSIM

 By [2wstechnologies](https://profiles.wordpress.org/2wstechnologies/)

[Download](https://downloads.wordpress.org/plugin/insim.5.2.0.zip)

 * [Details](https://mri.wordpress.org/plugins/insim/#description)
 * [Reviews](https://mri.wordpress.org/plugins/insim/#reviews)
 *  [Installation](https://mri.wordpress.org/plugins/insim/#installation)
 * [Development](https://mri.wordpress.org/plugins/insim/#developers)

 [Support](https://wordpress.org/support/plugin/insim/)

## Description

**inSIM turns WooCommerce into an SMS marketing and notifications powerhouse.** 
Recover abandoned carts, keep customers updated at every stage of their order, and
run bulk promotional campaigns — all sent straight from your store through the inSIM
service. Connect once and you’re live: either paste your API key or scan a QR code
with the inSIM mobile app to pair your store automatically.

Text messages are opened within minutes and read far more than email. inSIM helps
you put that channel to work for your shop, without ever leaving your WordPress 
dashboard.

#### Why inSIM?

 * **Recover lost sales automatically.** Capture a shopper’s number at checkout 
   and follow up with a timely reminder — including a one-tap link that rebuilds
   their cart on any device — when they don’t complete the order.
 * **Keep customers informed.** Automatic SMS for order confirmations, status changes,
   new-customer welcomes and low-stock alerts — each with its own on/off switch 
   and message.
 * **Run real campaigns.** A guided wizard lets you target the right customers, 
   write your message, review your audience, and send now or schedule for later.
 * **Personalise every message.** Merge tags such as {firstname} and {order_number}
   drop customer and order details into your text automatically.
 * **Reward and track.** Attach a discount coupon to any campaign or reminder and
   see the redemptions and revenue it brought in.
 * **Stay compliant.** Built-in STOP / unsubscribe handling and an optional opt-
   out notice keep your sending clean.

#### Recover abandoned carts

inSIM saves a shopper’s phone number the moment they start checkout, then follows
up after a delay you choose. Your reminder carries a personal recovery link that
restores their exact cart and sends them back to checkout — even on a different 
device. If they place the order in the meantime, the reminder is automatically skipped.

#### Automated order & customer SMS

Switch on the notifications you want and customise the wording of each:

 * Order confirmation
 * Order status updates — with a separate message for each status, so “Processing”,“
   Completed” and “Shipped” can each read differently
 * New-customer welcome
 * Low-stock alerts for you or your team

#### SMS marketing campaigns

A simple four-step wizard — **Recipients  Message  Schedule  Review**:

 * Target customers by criteria such as number of orders, total spent or country.
 * Pick individual customers, or add everyone who matches in a single click.
 * Review your recipient count before you send.
 * Send immediately, or schedule for a future date and time.
 * Save a campaign as a draft and finish it later.

#### Track your results

 * A clear dashboard per campaign: sent, delivered, failed, clicks and click-through
   rate.
 * Live delivery updates while a campaign is going out.
 * One-click retry for any messages that didn’t get through.
 * Export your recipient list to CSV.
 * Overview reports with delivery rate, clicks and totals over the period you choose.

#### Coupons that drive action

Link a discount code to a campaign or an abandoned-cart reminder, and inSIM attributes
every redemption — and the revenue behind it — back to the message that earned it.
See exactly which sends pay for themselves.

#### Built for WooCommerce

 * Works alongside your existing setup with no theme changes.
 * A modern, clean interface designed to stay out of your way.
 * Fully translatable — ships complete in English and French.
 * Reliable background sending that respects your account’s rate limits, with automatic
   retry when needed.
 * Built to WordPress security and coding standards.

inSIM requires an inSIM account at insim.app (create one in minutes). See the “External
services” section below for exactly what data is sent and when.

### External services

This plugin connects to the inSIM API (insim.app) to send SMS messages and manage
your inSIM account. This connection is required for the plugin to function.

When you use the plugin, the following data is sent to the inSIM service (https://
insim.app), operated by 2WS Technologies:

 * Your account login (email) and access key, to authenticate every request.
 * When sending an SMS (campaigns, abandoned-cart reminders, order notifications):
   the recipient’s mobile phone number (in E.164 format) and the message text, which
   may include customer data you insert via merge tags (e.g. first name, last name,
   order number).
 * When creating an account from the plugin: the email and password you enter, plus
   your store URL.
 * When pairing by QR code: a one-time pairing token and your store URL, so the 
   inSIM mobile app can link your store to your account.
 * Your shop name and store URL, and date ranges when requesting statistics.

Data is sent only when you (or an automation you configure) trigger a send, a connection
test, a stats refresh, QR-code pairing, or account creation. No data is sent to 
any other third party.

This service is provided by 2WS Technologies. By using it you agree to their Terms
of Service and Privacy Policy:

 * Terms of Service: https://ardary-insim.com/terms
 * Privacy Policy: https://ardary-insim.com/privacy

## Installation

 1. Upload the `insim` folder to `/wp-content/plugins/`, or install through the WordPress
    Plugin Directory.
 2. Activate the plugin through the Plugins menu.
 3. Go to WooCommerce > inSIM.
 4. Connect your store one of two ways: paste your insim.app login email and access
    key and click Save & Test Connection, or scan the on-screen QR code with the inSIM
    mobile app to pair automatically.
 5. A success indicator confirms the connection.
 6. Open the SMS Automations tab, toggle the events you want, and customise the copy.
 7. Optionally open the SMS Campaigns tab to build and send your first bulk campaign.

#### Requirements

 * WordPress 6.4 or later.
 * WooCommerce 8.0 or later.
 * PHP 7.4, 8.0, 8.1, or 8.2.
 * An active inSIM account at insim.app with a valid access key.

## FAQ

### Do I need an inSIM account?

Yes. inSIM sends through the inSIM service, so you need an inSIM account at insim.
app. Creating one takes a minute — then connect either by copying your access key
into the plugin, or by scanning the pairing QR code with the inSIM mobile app.

### How much does it cost?

The plugin is free, and messages go out through your own paired mobile SIM — there
is no per-SMS cloud credit or balance to buy. A PREMIUM inSIM subscription unlocks
the advanced features (automations, tracking URLs and abandoned-cart recovery); 
see insim.app for current plans.

### Which countries can I send to?

inSIM supports international sending. Because messages are sent through your paired
mobile SIM, the available destinations follow your own mobile plan. You choose a
default country code in Settings and can message any destination your SIM supports.

### Do I need a phone or a SIM card?

inSIM sends through your own paired mobile SIM via the inSIM service, so you connect
a mobile number once — either with just your API key, or by scanning a QR code with
the inSIM mobile app to pair in seconds. Sending itself runs server-side in the 
background; you do not keep a phone tethered to your store.

### Will messages still send if I am not logged into WordPress?

Yes. Automated messages fire on your store’s events (new order, status change, and
so on), and campaign and abandoned-cart sends run in the background through WordPress’s
scheduler. No one needs to be logged in.

### Does it work with guest checkout?

Yes. Abandoned-cart capture works for both logged-in customers and guests, as long
as a phone number is entered at checkout.

### Is it compatible with WooCommerce HPOS (High-Performance Order Storage)?

Yes. inSIM declares full compatibility with High-Performance Order Storage and with
the block-based cart and checkout.

### How do I stay compliant with SMS marketing rules?

inSIM honours STOP / unsubscribe replies — opted-out numbers are skipped automatically—
and can append an opt-out notice to first-contact messages. You remain responsible
for having the consent required to message your customers under your local regulations(
for example GDPR / PECR in Europe or TCPA in the US).

### Can I test a message before sending to everyone?

Yes. Settings includes a “Send test SMS” tool, and the campaign wizard shows the
recipient count before you launch.

### Will it slow down my store?

No. Sending happens in the background in rate-limited batches, so checkout and the
admin stay fast. If the SMS service is momentarily unreachable, your store keeps
working normally and the plugin retries automatically.

### Is it available in other languages?

Yes. The interface is in English by default and ships with a complete French translation.
It is fully translatable into any language using standard WordPress tools.

### What happens to my data if I uninstall?

Deleting the plugin removes its data (tables, options and scheduled tasks). Deactivating
without deleting keeps everything, so you can reactivate later with your settings
intact.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“inSIM” is open source software. The following people have contributed to this plugin.

Contributors

 *   [ 2wstechnologies ](https://profiles.wordpress.org/2wstechnologies/)

[Translate “inSIM” into your language.](https://translate.wordpress.org/projects/wp-plugins/insim)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/insim/), check out 
the [SVN repository](https://plugins.svn.wordpress.org/insim/), or subscribe to 
the [development log](https://plugins.trac.wordpress.org/log/insim/) by [RSS](https://plugins.trac.wordpress.org/log/insim/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 5.2.0

 * Rebuilt on the inSIM platform with the new design.
 * Connect your store by API key or by QR-code pairing with the inSIM mobile app.
 * Sends through your own paired mobile SIM — no cloud SMS credits or balance to
   buy; PREMIUM subscription unlocks automations, tracking URLs and abandoned-cart
   recovery.
 * Campaigns, automations, abandoned-cart recovery, helpdesk and reports.

#### 1.2.0

 * Removed unused bundled third-party libraries (Bootstrap CSS & JS, FontAwesome)
   and dead legacy admin code, so the package ships only first-party, human-readable
   source with no minified vendor bundles and no remote asset calls.

#### 1.1.9

 * All plugin features (automations, abandoned-cart sequences, campaign setup) are
   fully functional and configurable with no account restriction; only the actual
   sending of an SMS uses your connected inSIM account.
 * Security & standards: all admin scripts/styles are enqueued (no inline tags),
   request inputs are unslashed/sanitized, outputs escaped, and no remote assets
   are loaded (the interface uses inline SVG icons).
 * Housekeeping: dropped an unused bundled library, removed dead legacy code, and
   translations now load automatically.

#### 1.1.8

 * Coding standards: full WordPress Plugin Check pass — `date()``gmdate()`, i18n
   placeholder ordering and translators comments, output escaping on a few admin
   views, unslash/sanitize on form inputs, and documented (phpcs-annotated) direct
   queries on the plugin’s own custom tables. No functional change.

#### 1.1.7

 * Housekeeping: removed unused legacy assets from the distributed package (leftover
   images, dead stylesheets, and internal API docs) — smaller download, no functional
   change.

#### 1.1.6

 * Removed the Customer ID field from the account view (the API does not provide
   it).
 * Hardening: unslash/sanitize on server/request inputs, saved SMS message sanitized.
 * Code quality: removed debug console logging; documented safe SQL/output for a
   clean Plugin Check run.

#### 1.1.5

 * New: one-click single sign-on to the inSIM web app — the Helpdesk “Open web app”
   button and the Balance “Buy SMS / See plans” buttons can drop you straight into
   your account, already signed in. Uses a secure, client-scoped one-time login 
   link (your own credentials only; no shared secret shipped in the plugin). Activates
   automatically when the service enables the endpoint; until then the buttons open
   the web app as before.

#### 1.1.4

 * Fix (important): admin CSS and JavaScript were enqueued with a stale, hardcoded
   version, so browsers and caching plugins kept serving old files after every update—
   interface fixes never appeared. Plugin assets now use file-modification-time 
   cache-busting and the correct plugin version, so updates take effect immediately.
   This is what was preventing the campaign-detail toolbar fix from showing.

#### 1.1.3

 * Fix: the campaign detail toolbar buttons (Refresh now / Export CSV / Retry failed)
   now render correctly on every setup — the layout rule moved into the always-loaded
   stylesheet so it no longer depends on a conditional file or page cache.

#### 1.1.2

 * Compatibility: declares support for WooCommerce High-Performance Order Storage(
   HPOS) and the block-based cart & checkout — removes the WooCommerce “incompatible”
   notice.
 * Fix: campaign recipient targeting by order count and total spend now reads the
   correct order data on HPOS stores (previously it could return no matches when
   HPOS was enabled).
 * Docs: rewritten plugin description, expanded FAQ, and added screenshots.

#### 1.1.1

 * Fix: account no longer appears disconnected a few minutes after connecting — 
   the account state now re-hydrates when the short display cache expires and keeps
   you connected through brief API hiccups (only missing or revoked credentials 
   show as disconnected).
 * Fix: campaign detail toolbar buttons (Refresh now / Export CSV / Retry failed)
   no longer overlap — labelled action buttons now size correctly.
 * UI: wider plugin canvas and a clearer distinction between the “Next” and “Launch
   campaign” buttons in the campaign wizard.

#### 1.1.0

 * Reach design refonte across all screens; multi-relance abandoned-cart engine;
   coupon tracking; full English/French i18n; accessibility & responsive improvements.

#### 1.0.16

 * Expiry normalizer (Fix 1): PHP `insim_format_expiry()` and JS `normalizeExpiry()`
   now recurse through the double-nested Mongo extended-JSON shape `{"$date": {"
   $numberLong": "<ms>"}}` observed in real API responses. The old implementation
   only unwrapped one level, so the date rendered as “[object Object]” or “Array”.
   Both normalizers accept: null/empty  `-`, ISO string  first 10 chars, numeric
   ms  UTC date, `{$date: …}` / `{date: …}`  recurse, `{$numberLong/Int/Double: …}`
   resolve to number then date.
 * Balance refresh button (Fix 2): the click handler in `admin.js` now uses a delegated`
   $(document).on(…)` binding for both `#insim-balance-refresh` and `.insim-balance-
   refresh` so it fires regardless of DOM timing (e.g. when the Settings tab is 
   revealed after initial page load). The handler restores the original button label
   after success/failure and updates both `#insim-balance-value` and `.insim-current-
   balance` elements simultaneously.
 * History delivery column (Fix 3): every SMS log row now shows one of four states—**
   Refresh** button (Mongo ID present), **Sent** pill (HTTP 2xx, no error code),**
   Failed** pill (error_code set), or `—` (truly unknown). Previously rows without
   a Mongo ID always showed `—`. New `.insim-status-pill`, `.insim-status-sent`,`.
   insim-status-failed` CSS classes added to `admin.css`. Column header simplified
   to “Delivery” with tooltip (the `?` character was removed from visible text).

#### 1.0.15

 * Campaign Wizard Step 4 “Current balance” (Fix 1): balance is now always populated
   from the freshly-localized `ardarySms.balance` value (set via `InSIM_License_Gate::
   credits()` in `enqueue_scripts()`). Previously, if the 5-minute account transient
   had expired before the page loaded, `data-balance` on the wizard container was
   empty and the balance cell showed “—” even when the account was connected.
 * Refresh delivery button defensive guard (Fix 2): a JS-side check now validates
   the `data-sms-id` attribute against the Mongo ObjectId regex before firing AJAX.
   Buttons that slip through with a non-hex ID are replaced inline with a “—” span.
   Server-side, `ajax_refresh_delivery()` now returns `error_code: NOT_TRACKED` 
   with HTTP 200 (not an unstructured error) so the UI can handle it gracefully.
 * Refresh balance button (Fix 3): a “↻ Refresh” button now appears next to the 
   balance value in both the Settings account card and the Help tab account snapshot.
   Clicking it calls a new `insim_refresh_balance` AJAX endpoint that hits the API,
   refreshes the transient, and updates the displayed balance without a page reload.

#### 1.0.14

 * Credits real-time update (Fix 1): after a successful `send_sms()` call the cached`
   sms_credits` transient is decremented immediately (optimistic local decrement),
   so the balance card in Settings / Help reflects the spend on the very next page
   load without waiting 5 minutes for the TTL to expire.
 * Credits background refresh (Fix 1): after every send pipeline run, an Action 
   Scheduler action (`insim_refresh_account_cache`) is enqueued to pull the authoritative
   balance from the inSIM API and overwrite the transient within ~10 seconds.
 * History delivery Refresh button (Fix 2): the Refresh button in the Recent SMS
   log is now only rendered for rows whose `id_sms_api` value is a valid 24-hex 
   Mongo ObjectId. Rows with internally-generated IDs (e.g. `wp:automation:…`) show
   a `—` with a tooltip instead, explaining that delivery tracking is not available
   and directing the user to ardary-insim.com. The Refresh button handler now always
   updates the row UI — it shows green/amber/red status on success and an inline
   error message on failure, and never silently ignores the response.
 * Delivery column header: a small `?` tooltip explains that live delivery status
   is only available for API-registered SMS.
 * AJAX validation: `ajax_refresh_delivery()` now validates every submitted SMS 
   ID against the Mongo ObjectId pattern server-side and returns a clear error if
   the ID is invalid, preventing wasteful API round-trips.

#### 1.0.13

 * Settings: the “Technical details” collapsible panel under failed test-connection
   cards was removed. Failure cards now show only the human-readable error message(“
   Check your email and access key on ardary-insim.com -> Settings -> API.”). The
   server still emits the `debug` block (URL, HTTP status, body snippet) for support
   log purposes; the merchant UI no longer surfaces it.
 * Settings: the “API base URL (advanced)” input row in Step 4 was deleted. The 
   API endpoint is controlled exclusively by the `INSIM_API_BASE_URL` constant in`
   insim.php`. The activator deletes any pre-existing `insim_api_base_url` option
   on upgrade so every install resolves to the constant. The `api_base_url` POST
   handler in `ajax_save_and_test()` and `_post_process()` was removed.
 * Settings: the Test connection button spinner now has a visible gap before the“
   Testing connection…” label. The button uses `display: inline-flex !important;
   gap: 10px !important;` so the WP `.button-primary` rule cannot override it back
   to `inline-block` (which silently dropped the gap in v1.0.12). The spinner itself
   is now `flex: 0 0 16px` so themes that set `flex: 1` on button children cannot
   squash it to zero width.
 * Settings: success card no longer renders “Connected as Foo Bar ()” when the API
   account payload omits the login echo. The parenthesised login is only included
   when non-empty.
 * Settings + Help: expiry_date is now normalised before display. The API returns
   it as a MongoDB extended-JSON object (`{"$date": "2027-01-01T00:00:00.000Z"}`)
   in some environments, which previously rendered as “[object Object]” (Settings)
   and “Array” (Help). A new shared helper file `includes/class-insim-helpers.php`
   adds `insim_format_expiry()` (PHP) and the matching `normalizeExpiry()` (JS) 
   accept plain ISO strings, `{$date}`, `{date}` and `{$numberLong}` shapes and 
   reduce each to `YYYY-MM-DD`. `sms_credits` is normalised via `insim_format_credits()`/`
   parseFloat` with a `-` fallback so a numeric-shaped object cannot leak through.

#### 1.0.12

 * API base URL updated to production endpoint `https://ardary-insim.com/api/v2/`.
   Existing installs that had the old URL saved as an option override are automatically
   cleared on next plugin load.
 * Debug log feature removed. The “Technical Details” collapsible panel on test-
   connection failures is retained.
 * Test-connection spinner: added `margin-right` and `inline-flex` alignment to 
   the button so the spinner and label are properly spaced.

#### 1.0.11

 * Settings — Diagnostics: new “API base URL (advanced)” field in Step 4. Leave 
   empty to use the built-in default (`INSIM_API_BASE_URL`); enter a full URL to
   override it per-site without a code change. The active URL (option or constant)
   is displayed below the debug-log toggle with an “Override active” badge when 
   an override is in effect. The override is persisted as the `insim_api_base_url`
   option and honoured by every API call. Cleared field deletes the option so the
   default reapplies. The Test Connection button and AJAX save path both respect
   the new value immediately.

#### 1.0.10

 * Settings: the “your inSIM account” anchor on Step 1 now points to https://ardary-
   insim.com/ (the actual web app) with a visible external-link SVG icon. Every 
   WP-admin URL that takes the merchant to the account dashboard, billing or API
   page now uses ardary-insim.com — see html-help.php, class-insim-help-tab.php,
   class-insim-send-tab.php (`upgrade_hint`), class-insim-settings.php (humanize_error
   + WC_Admin_Settings notice), class-insim-news.php and admin/assets/js/campaign-
   wizard.js. Marketing-domain mentions (ardary-insim.com pricing, support email,
   status, the company brand reference) are intentionally kept.
 * Postman collection: a Postman v2.1 collection covering the 8 endpoints the plugin
   uses (account, sendsms, sms, sms/detail, sms/conversation, sms/delivery_status,
   stats/overview, stats/clicks) ships at docs/insim-api.postman_collection.json(
   and inside the dist ZIP at docs/insim-api.postman_collection.json). Each request
   has Content-Type/Accept headers, a raw JSON body referencing `{{login}}` / `{{
   accessKey}}` collection variables and a link back to the matching api/endpoints/*.
   md spec.
 * Test connection loader: the spinner is now 18px / 3px stroke / WP-admin blue 
   on a #dcdcde track so it is visible on the green-ish button. The button is disabled
   while pending, its label is replaced with `<spinner> Testing connection…`, and
   the original label is restored on completion (stored in `data-original-label`).
   A `min-width: 200px` rule prevents layout jump.
 * Diagnostics: every API response now carries a `debug` block (`url`, `http_status`,`
   transport_message`, `body_snippet`). `ajax_save_and_test` returns it on both 
   success and failure, and settings.js renders a collapsible “Technical details”
   section under the error card so the merchant sees the exact URL hit, HTTP status
   and the first 200 chars of the error body without enabling any log.
 * Diagnostics — debug log: a new opt-in setting (`insim_debug_log`, off by default)
   writes one JSON line per API call to `wp-content/uploads/insim-debug.log`. The
   file is truncated to ~1 MB on every write. A “Diagnostics” row was added to Step
   4 of the Settings accordion with the checkbox and a panel showing the live `INSIM_API_BASE_URL`
   value so the merchant can verify which environment is being hit.

#### 1.0.9

 * Save as draft: the success redirect now lands the merchant on the Campaigns list
   as intended. The wizard previously resolved a relative `admin.php?...` URL onto
   whichever route the wizard was rendered through, occasionally landing on Settings.`
   ajax_send_campaign` now returns a canonical `redirect_url` and the JS uses it(
   with `ardarySms.adminUrl` as a fallback). A 1.5s success toast precedes the redirect.
 * Auth lockdown (server + client). Tracking URL field and every Automations checkbox
   + textarea now ship with the `disabled` attribute when `connection_state()` is
   not `connected`, plus a lock hint pointing at Settings. `_post_process` short-
   circuits unconfigured POSTs so DevTools tampering still cannot persist activation.`
   ajax_save_abandoned_settings` now returns HTTP 412 NOT_CONFIGURED with an Open
   Settings link before falling back to feature-flag gating. `connectionState` and`
   settingsUrl` are localized into `window.ardarySms` on every plugin admin page.
 * Helpdesk tab: stripped down to a single CTA opening https://ardary-insim.com/(
   the actual web app) in a new tab with a visible external-link SVG icon. The legacy
   in-WP test-SMS form was removed (Settings already exposes the same form). `ajax_send_test`,`
   helpdesk.js` and the `wp_ajax_insim_helpdesk_send_test` registration were deleted.
 * Action button polish: the Campaign list row actions are now an inline row of 
   30×30 icon-only buttons (View / Edit / Delete) with Feather-style SVG icons, 
   hover + focus states, and a red-tinged hover variant for Delete. The “Create 
   new campaign” button uses an inline SVG `+` so the icon sits cleanly on the button
   baseline regardless of theme overrides.
 * Tab order: the “Settings first until configured” logic now reads from `InSIM_License_Gate::
   connection_state()` directly so all surfaces (tab order, wizard banner, lock 
   hints) agree on a single source of truth.

#### 1.0.8

 * Campaign wizard: fixed a state-sync bug where the first click of “Next” on Step
   2 silently re-rendered the same step. The wizard now exposes `window.insimWizard.
   showStep(n)` and the filter manager uses it, so one click always advances. Per-
   field inline error messages were added.
 * Authentication vs license messaging: new `InSIM_License_Gate::connection_state()`
   helper returns one of `unconfigured` / `unverified` / `inactive` / `connected`.
   The wizard, `ajax_send_campaign` and `ajax_save_message` now distinguish “credentials
   not entered yet” (412 NOT_CONFIGURED with an “Open Settings” link) from “feature
   not on plan” (403 LICENSE_REQUIRED, neutral copy). Step 4 of the wizard surfaces
   the right banner and disables Launch while keeping Save as Draft available.
 * Campaign name persistence: `ajax_send_campaign` now accepts an existing draft`
   campaign_id` and updates that row instead of inserting a fresh one. The temporary`
   CAMPAIGN-<timestamp>` placeholder no longer leaks into the campaign list when
   the merchant typed a real name.
 * Save as Draft: new third action on Step 4 of the wizard between Back and Launch.
   Saves the campaign with `status='draft'` and redirects to the campaign list. 
   The list shows a Draft badge, an Edit button that re-opens the wizard at Step
   2 pre-filled, and a Delete button. A daily Action Scheduler job `insim_drafts_cleanup`
   removes drafts untouched for more than 30 days.
 * UX polish pass: campaign detail page now groups “Refresh now” and “Export CSV”
   in a single right-aligned toolbar with Dashicons icons. “Back to campaigns”, 
   filter chips, wizard nav buttons and “Create new campaign” use a consistent icon
   +label spec. Wizard fields show a red border and inline error message on invalid
   input. Campaign list rows have a hover state and a standardised status-badge 
   spec.

#### 1.0.7

 * Helpdesk tab: simplified to a portal page. SMS conversations are managed in the
   inSIM web app; the in-WP inbox / conversation viewer / reply form was removed.
   Helpdesk now shows a description, an “Open inSIM web app” button, and a “Send
   test SMS” form (phone + message) that reuses the existing Sender pipeline. The`
   ajax_load_inbox`, `ajax_load_conversation`, `ajax_send_reply`, `ajax_add_optout`
   endpoints were removed.
 * Reports tab: module-not-enabled gate dropped. Reports always attempt `stats/overview`
   and degrade gracefully: stat cards on success, “Statistics are not available 
   for your account.” on `LICENSE_REQUIRED`, “Could not load statistics. Try again
   later.” on any other error.
 * Help tab: “Modules enabled” row removed from the account snapshot. The `LICENSE_REQUIRED`
   error card was rephrased to a neutral “Some features require a higher plan.” 
   text with no mention of specific module names.
 * Settings tab order: Settings is now the first tab until the account is configured,
   then moves to last. When the merchant lands on the admin page without a `?tab
   =` query argument and the account is not yet configured, the default tab is Settings.
 * Tab styling: every tab shares the same green top border so the visual treatment
   is consistent.
 * “Create new campaign” button: the `+` icon is a centred round badge to the left
   of the label.
 * License-gate UI surface neutralised: no more “Some automations require the X 
   module” banners or per-row “Upgrade required” badges; the Tracking URL field 
   is no longer gated in the UI. Server-side license checks still run but their 
   error messages are a neutral “Not available on your current account.”

#### 1.0.6

 * Send Campaign tab: removed four unregistered (dead) AJAX handlers including one
   that echoed `$_REQUEST['callback']` (potential reflected XSS if ever wired). `
   ajax_send_campaign` now pre-checks SMS credits before inserting any DB row, returning
   HTTP 402 `INSUFFICIENT_CREDITS` if short.
 * Automations: `on_status_changed()` now honors both the global “Order status update”
   toggle and the per-status checkbox (`ardary_sms_isactive_action_order_status_update_wc-
   <status>`), and uses the per-status message body when one was customised.
 * Settings and Automations forms: added `wp_nonce_field` and `wp_verify_nonce` 
   to the two POST handlers. Posts without a valid nonce are silently dropped.
 * Campaign detail: `ajax_retry_failed` cancels any in-flight `insim_campaign_batch`
   actions for the campaign before re-queuing, to prevent duplicate sends. `admin_post_export_csv`
   streams in 500-row pages with `fflush` between pages.
 * Uninstall: sweep now removes legacy `ardary_sms_*` option keys and their transient
   timeouts in addition to the `insim_*` prefix.
 * `_ajax_process_countRecipientsFromQuery` now requires `manage_woocommerce`.

#### 1.0.5

 * Send Campaign tab: “Add to Campaign” button now adapts to selection. When no 
   rows are ticked it reads “Add all (N) to campaign” and submits the whole filtered
   result via `insim_add_recipients_from_query`. When rows are ticked it reads “
   Add N selected to campaign” and uses the per-ID `insim_add_recipients_by_ids`
   path.

#### 1.0.4

 * Send Campaign tab: recipient cards now expose a tickable checkbox plus a “Select
   all on this page” header row. A new `insim_add_recipients_by_ids` AJAX endpoint
   persists only the chosen rows into the draft campaign.
 * SMS Campaigns tab: default view is now a paginated list of existing campaigns(
   newest first) with status badges, recipient/progress columns and a “Create new
   campaign” CTA. Each row links to a new analytics detail page (`?action=view&id
   =N`) with counters (Sent / Delivered / Failed / Clicks / CTR / Credits used),
   per-recipient table, 10-second auto-refresh polling while sending (paused via
   Page Visibility API), CSV export, and a “Retry failed (N)” button that re-queues
   failed rows through Action Scheduler. History tab campaign names also link to
   the detail page.

#### 1.0.3

 * Automations tab: server-side license gating. AJAX endpoints reject attempts to
   activate any automation whose required feature flag is missing on the account.
   Disabling an automation is always allowed.
 * Campaign wizard: Step 2 gains a Tracking URL field and a Priority radio (Normal/
   High). Both values are forwarded into the per-message `url` and `priority` fields
   on `POST /sendsms`. New columns `tracking_url` and `priority` added to `wp_insim_campaigns`
   via an idempotent schema upgrade (no manual re-activation needed).
 * Help tab: the `LICENSE_REQUIRED` entry now lists the feature flags the plugin
   gates against and the recovery path.

#### 1.0.2

 * Send Campaign tab redesigned as a 4-step wizard (Recipients > Message > Schedule
   > Review) with progress stepper, live SMS preview, GSM-7 segment counter, and
   cost vs balance check before launch.
 * Settings: Step 3 (“Test SMS”) input and button share a single inline row with
   status icons and spinner outside the button label.
 * Settings Step 4: Default country code is now a searchable dropdown of 73 countries(
   was a 2-letter text input). Defaults to FR.
 * New “Help” tab: full reference of every API `error_code` returned by the inSIM
   v2 API, with HTTP status, trigger, recovery action and example response. Includes
   a live account-snapshot panel.
 * API audit: confirmed all endpoints used by the plugin match the documented payload
   and response shapes.

#### 1.0.1

 * Maintenance release.

#### 1.0.0

 * Initial release.
 * Five automation hooks: order confirmation, status update, new account, low stock,
   abandoned cart.
 * Visual campaign filter engine with guest-cart inclusion.
 * Scheduled campaigns and rate-limit-aware batch sending via Action Scheduler.
 * Abandoned-cart recovery with configurable delay, expiry, and recent-order exclusion.
 * Delivery status polling from the History tab.
 * STOP keyword opt-out list.
 * 8 dedicated database tables; full uninstall sweep.
 * i18n ready, .pot file included.

## Meta

 *  Version **5.2.0**
 *  Last updated **13 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.0.4**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/insim/)
 * Tags
 * [abandoned cart](https://mri.wordpress.org/plugins/tags/abandoned-cart/)[sms](https://mri.wordpress.org/plugins/tags/sms/)
   [sms campaign](https://mri.wordpress.org/plugins/tags/sms-campaign/)[sms notifications](https://mri.wordpress.org/plugins/tags/sms-notifications/)
   [woocommerce](https://mri.wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://mri.wordpress.org/plugins/insim/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/insim/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/insim/reviews/)

## Contributors

 *   [ 2wstechnologies ](https://profiles.wordpress.org/2wstechnologies/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/insim/)