Title: ForthFocus SMS – OTP Verification, Order Notifications &amp; Indian DLT for WooCommerce
Author: ForthFocus
Published: <strong>May 14, 2026</strong>
Last modified: May 28, 2026

---

Search plugins

![](https://ps.w.org/forthfocus-sms-otp/assets/banner-772x250.png?rev=3533591)

![](https://ps.w.org/forthfocus-sms-otp/assets/Icon-256x256.png?rev=3533591)

# ForthFocus SMS – OTP Verification, Order Notifications & Indian DLT for WooCommerce

 By [ForthFocus](https://profiles.wordpress.org/forthfocus/)

[Download](https://downloads.wordpress.org/plugin/forthfocus-sms-otp.1.0.2.zip)

[Live Preview](https://mfe.wordpress.org/plugins/forthfocus-sms-otp/?preview=1)

 * [Details](https://mfe.wordpress.org/plugins/forthfocus-sms-otp/#description)
 * [Reviews](https://mfe.wordpress.org/plugins/forthfocus-sms-otp/#reviews)
 *  [Installation](https://mfe.wordpress.org/plugins/forthfocus-sms-otp/#installation)
 * [Development](https://mfe.wordpress.org/plugins/forthfocus-sms-otp/#developers)

 [Support](https://wordpress.org/support/plugin/forthfocus-sms-otp/)

## Description

ForthFocus SMS is built for Indian WooCommerce stores that need DLT-ready transactional
SMS, order notifications, OTP verification, and operational visibility in one place.
It sends order-status notifications to customers and adds phone-number OTP verification
to important store touchpoints such as login, registration, cart, and checkout.

It is built for production: instant order-status sends with optional async queue,
a custom log table with filtering, search, retry and CSV export, per-template DLT
enforcement, real rate-limiting on OTP requests and verifications, segment-aware
authoring with live variable-syntax linting, HTTP diagnostics for gateway communication,
and a 3-step setup wizard so first-time configuration takes minutes instead of hours.

The plugin currently supports SMSGatewayHub and ForthFocus SMS Gateway. Additional
providers (MSG91, Gupshup, Twilio, Kaleyra) are on the roadmap. The architecture
is provider-agnostic — the same templates, OTP flows, and logging continue to work
as new providers are added.

#### What makes it different

Most SMS plugins focus only on sending a message or adding a basic OTP form. ForthFocus
SMS is focused on the Indian WooCommerce + DLT workflow: every enabled template 
needs its own DLT Template ID, template syntax is checked before sending, customer
OTP flows are rate-limited, gateway responses are logged, balance checks are available
inside WordPress, and Diagnostics shows the actual WordPress HTTP request lifecycle
for supported gateway communication.

#### What it sends

 * **Order Processing** — when an order moves to Processing
 * **Order Completed** — when an order is marked Completed
 * **Order Cancelled** — when an order is cancelled
 * **Order Refunded** — when a refund is issued
 * **OTP for login** — alongside the standard email/password login
 * **OTP for registration** — verify the phone number before account creation
 * **OTP at checkout** — verify the phone before the customer hits “Place Order”(
   cuts down on fake / COD fraud orders)

#### Why DLT compliance matters

In India, every commercial SMS must use a sender ID and template registered on the
DLT (Distributed Ledger Technology) portal of your telecom operator. Sending unregistered
content gets rejected at the operator side, often silently. This plugin enforces
DLT correctness at every layer:

 * Each template requires its own DLT template ID before it can be enabled.
 * The plugin refuses to send any template that has no DLT ID — and logs the attempt
   so you can see what was skipped and why.
 * A live syntax linter catches the most common authoring mistakes (`{order_id)`
   instead of `{order_id}`, `{#var#}` placeholders pasted verbatim from the DLT 
   portal) before they cause silent rejections.

#### Privacy

 * The plugin sends data to the configured SMS gateway only when an SMS-related 
   action is performed, such as sending an order notification, sending an OTP, testing
   a template, or refreshing the SMS balance.
 * For SMS sending, the data sent to the selected gateway may include the recipient
   phone number, rendered SMS message body, sender ID, route, channel, Entity ID,
   DLT Template ID, and the site owner’s selected gateway API key.
 * For balance checks, the plugin sends the site owner’s selected gateway API key
   to that gateway’s balance endpoint.
 * Plugin scripts, styles, and images are loaded locally from the plugin folder.
   The plugin does NOT load anything from external CDNs or third-party servers on
   either admin or customer-facing pages.
 * The plugin does NOT send usage analytics, telemetry, tracking events, or call-
   home data to ForthFocus.
 * OTP codes are hashed (with a per-phone salt) before storage. Plaintext OTP codes
   are redacted from log entries.
 * Store owners are responsible for ensuring that their SMS use complies with applicable
   consent, privacy, telecom, DLT, and customer communication rules.

### External services

This plugin connects to the SMS gateway selected by the site owner to send transactional
SMS messages and fetch SMS balance information. A gateway account, API key, approved
sender ID/Header, Entity ID, and approved DLT templates are required for live SMS
delivery.

The plugin currently supports the following gateway endpoints:

 * `https://www.smsgatewayhub.com/api/mt/SendSMS` — used when the site owner sends
   an SMS through SMSGatewayHub, such as an order-status notification, OTP message,
   or template test. The plugin sends the recipient phone number, rendered message
   body, sender ID, route, channel, Entity ID, DLT Template ID, and the site’s SMSGatewayHub
   API key.
 * `https://www.smsgatewayhub.com/api/mt/GetBalance` — used when the dashboard or
   gateway settings page fetches the SMSGatewayHub balance. The plugin sends the
   site’s SMSGatewayHub API key.
 * `https://sms.forthfocus.com/api/mt/SendSMS` — used when the site owner sends 
   an SMS through ForthFocus SMS Gateway, such as an order-status notification, 
   OTP message, or template test. The plugin sends the recipient phone number, rendered
   message body, sender ID, route, channel, Entity ID, DLT Template ID, and the 
   site’s ForthFocus SMS Gateway API key.
 * `https://sms.forthfocus.com/api/mt/GetBalance` — used when the dashboard or gateway
   settings page fetches the ForthFocus SMS Gateway balance. The plugin sends the
   site’s ForthFocus SMS Gateway API key.

SMS content and phone numbers are sent to the selected gateway only when the site
owner enables the plugin and performs an SMS-related action or when a configured
WooCommerce/OTP event triggers an SMS.

Service provider: SMSGatewayHub
 Terms and Conditions: https://www.smsgatewayhub.
com/terms-and-conditions Privacy Policy: https://www.smsgatewayhub.com/privacy-policy
API Documentation: https://www.smsgatewayhub.com/free-sms-gateway-developer-api

Service provider: ForthFocus SMS Gateway
 Terms and Conditions: https://forthfocus.
com/terms-and-conditions/ Privacy Policy: https://forthfocus.com/privacy-policy/
Website: https://forthfocus.com/

#### Compatibility

The plugin works on both classic (shortcode-based) and block-based WooCommerce checkout,
but the depth of integration differs:

 * **Classic checkout** (`[woocommerce_checkout]` shortcode, used by Storefront,
   Astra, GeneratePress, Flatsome, URNA, Dokan-style themes, and any site with the
   WC checkout shortcode) — full integration. The OTP gate renders above the checkout
   form, the billing phone field is automatically locked to the verified number 
   once verification is complete, and the user uses a “Change phone” link if they
   need to switch numbers.
 * **Block-based checkout** (the new WC Checkout Block, used by Twenty Twenty-Five
   and other FSE themes by default) — basic integration. The OTP gate renders above
   the checkout block. The billing phone field inside the React-managed block cannot
   be locked from outside the block API, so the user is technically able to edit
   it after verifying. However, the server-side Store API guard rejects order placement
   if the submitted phone does not match the verified number — so the verification
   is still enforced, just at submission rather than at the field level. Tightening
   this into a native checkout-block extension is on the v1.1 roadmap.

For the strictest UX and behavior (auto-locked phone field, no possibility of submitting
a mismatched number), use the classic checkout. To switch from block-based to classic
on a Twenty Twenty-Five site, edit the Checkout page and replace the “Checkout” 
block with the `[woocommerce_checkout]` shortcode.

#### Setup wizard

A 3-step setup wizard guides you through:

 1. Gateway selection and credentials (provider, API key, sender ID, route, channel,
    entity ID)
 2. Notification templates (DLT ID + approved message body for each order event you
    want to notify on)
 3. OTP verification (which flows to enable, and the OTP message templates)

You can re-run the wizard from the Dashboard at any time, or skip it entirely if
you prefer to configure manually.

### Trademark Notice

ForthFocus is a trademark of FORTHFOCUS GROUP.

WordPress, WooCommerce, and Woo are trademarks of their respective owners. This 
plugin is not affiliated with, endorsed by, sponsored by, or officially associated
with the WordPress Foundation, Automattic Inc., WooCommerce, or Woo.

SMSGatewayHub, MSG91, Gupshup, Twilio, and Kaleyra are trademarks or brands of their
respective owners. This plugin currently integrates with SMSGatewayHub and ForthFocus
SMS Gateway. MSG91, Gupshup, Twilio, and Kaleyra are referenced only as examples
of additional providers planned for future releases. The plugin is not officially
endorsed by or affiliated with third-party gateway brands unless stated through 
a formal partnership.

## Screenshots

 * [[
 * Dashboard with live SMS balance, status checklist, and quick actions
 * [[
 * Gateway settings — credentials, master switches, and a “test an approved template”
   panel
 * [[
 * Notification templates page — DLT-required template management with live segment
   counter and variable linter
 * [[
 * OTP configuration — module switches and per-flow OTP message templates
 * [[
 * Logs page — filterable, searchable, with detail modal and CSV export
 * [[
 * Setup wizard — 3-step flow for first-time configuration

## Installation

 1. Upload the plugin folder to `/wp-content/plugins/`, or install it through the WordPress
    Plugins screen.
 2. Activate the plugin.
 3. Go to **ForthFocus SMS  Dashboard** in the WordPress admin.
 4. Click **Run Setup Wizard** and follow the 3-step flow.

## FAQ

### Does this work without WooCommerce?

The plugin requires WooCommerce. The OTP module also works on the standard WordPress
login (wp-login.php) regardless.

### What gateways are supported?

The plugin currently supports SMSGatewayHub and ForthFocus SMS Gateway. Adapters
for MSG91, Gupshup, Twilio, and Kaleyra are planned for upcoming releases. The plugin’s
architecture is provider-agnostic — once a new adapter is added, the same templates
and OTP flows continue to work.

### Will this work with my existing SMS provider?

Right now the plugin sends through SMSGatewayHub or ForthFocus SMS Gateway. If you
have an account with a different provider (MSG91, Gupshup, Twilio, etc.), you have
three options: (1) use one of the currently supported gateways, (2) wait for the
planned multi-provider release, or (3) hook into our `ffsms_before_send` filter 
and dispatch to your own provider in custom code while still benefiting from our
DLT enforcement, logging, and OTP machinery.

### I am getting error 0024 when sending — what does it mean?

0024 means your message body does not match the DLT-approved template registered
with your operator. The most common causes are: extra text outside what was registered,
wrong punctuation, malformed variable syntax (use `{curly_braces}` not `{round_braces}`
or `{#var#}`), or emojis that the operator does not accept. The plugin’s live linter
catches most of these as you type.

### Does this support OTP only for COD orders?

Per-payment-method OTP gating is planned for the next release. In the current version,
OTP at the cart page applies to all payment methods. You can also wire it via custom
code using the `ffsms_before_send` filter.

### How does the plugin handle DND (Do Not Disturb) numbers?

DND handling is enforced at the operator side, not in the plugin. If you send to
a DND-registered number using a template approved under the “Promotional” or “Explicit”
category, the operator returns code 640-659 and the plugin marks the send as failed
with the operator’s reason. To deliver to DND numbers, get your template approved
under the “Service” or “Implicit” category on the DLT portal.

### Can I send promotional SMS / campaigns / cart abandonment?

Not in the free version. Those features are planned for the upcoming Pro tier.

### Where are OTP codes stored?

OTP codes are stored in a dedicated `wp_ffsms_otp` database table, hashed with a
per-phone salt and a per-site secret. Plaintext OTP values never persist. Codes 
have a configurable expiry (default 10 minutes) and a resend cooldown (default 30
seconds). The plugin enforces a max-attempts lockout to prevent brute-forcing.

### Will this work with international phone numbers?

Phone numbers are normalized to E.164-style digits (country code + national number,
no `+`). The default country code is configurable in Gateway settings. If your DLT
registration covers Indian numbers only, sends to non-Indian numbers may be rejected
by the operator — that is a DLT/operator policy, not a plugin restriction.

### Does the plugin work with the new WooCommerce Checkout Block?

Partially, with a documented limitation. The OTP verification gate renders above
the Checkout Block on Twenty Twenty-Five and other FSE themes that use it, and the
server-side guard rejects orders where the submitted phone does not match the verified
number. However, because the Checkout Block’s phone input is managed by React inside
the block, it cannot be auto-locked from outside the block API — the user can technically
type a different number after verifying. Verification is still enforced (at order
submission), but the experience is tighter on the classic shortcode-based checkout
where the phone field can be locked at the field level. Native checkout-block integration
is on the v1.1 roadmap. For the strictest behavior in the meantime, use the classic
checkout shortcode.

The plugin declares compatibility with WooCommerce’s High-Performance Order Storage(
HPOS) and the Cart/Checkout Block APIs. All order-related operations use the HPOS-
safe `WC_Order` API rather than legacy postmeta queries.

### How do I extend the plugin?

Three filters and one action are exposed:

 * `apply_filters('ffsms_render_message', $message, $template_id, $vars, $opts)`—
   modify the rendered body before send
 * `apply_filters('ffsms_before_send', $params)` — modify dispatch parameters (phone,
   message, dlt_template_id) just before the gateway call. Returning empty cancels
   the send.
 * `do_action('ffsms_after_send', $result, $phone, $message, $template_id)` — observer
   hook fired after the gateway responds
 * `do_action('ffsms_dispatch_sms', $phone, $template_id, $vars)` — programmatic
   send: routes through Sender::send_template with full DLT enforcement, logging,
   and dedupe. Note: this hook is intentionally named `ffsms_dispatch_sms` (not `
   ffsms_send_sms`) to avoid colliding with the plugin’s internal Action Scheduler
   queue hook.

### How do I report a security vulnerability?

Please email security details to support@forthfocus.com (or open a private message
via forthfocus.com) instead of posting to the public .org support forum or opening
a public GitHub issue. We aim to acknowledge reports within 2 business days and 
ship a coordinated fix before any public disclosure. Include a clear reproduction,
plugin version, WordPress version, WooCommerce version, and any logs that demonstrate
the issue.

### Is this plugin DLT compliant?

Yes. India’s Telecom Regulatory Authority (TRAI) requires all commercial SMS to 
be sent under DLT (Distributed Ledger Technology) registration, with a registered
Header (sender ID), an approved Entity ID, and an approved DLT Template ID for every
message body. The plugin enforces this end-to-end: every template requires a DLT
Template ID before it can be enabled, the placeholder syntax is validated against
DLT-style variable rules, and the gateway request always includes the EntityId +
dlttemplateid + sender ID parameters. Templates without a DLT ID are blocked from
sending.

### Can I use this for COD (Cash on Delivery) order verification?

Yes — the cart-page and checkout-page OTP gates are designed exactly for this. Verifying
the customer’s phone number before “Place Order” cuts down on fake / abandoned COD
orders that would otherwise generate failed deliveries and return-shipping costs.
Per-payment-method gating (e.g. require OTP only for COD orders, skip for prepaid)
is on the roadmap.

### What is the difference between transactional and promotional SMS in India?

Transactional SMS (channel 2 in our gateway settings) is for order confirmations,
OTPs, delivery updates, and other essential service messages. It is delivered 24/
7 even to DND-registered numbers. Promotional SMS (channel 1) is for marketing campaigns
and offers — it is restricted to 9am–9pm and is blocked for DND numbers. The plugin
defaults to transactional channel for all order and OTP templates because that is
the appropriate category for the messages it sends. Make sure your DLT template 
registration matches the channel you select.

### Can I use my existing SMSGatewayHub account?

Yes. Select SMSGatewayHub in the setup wizard, then paste your SMSGatewayHub API
key, sender ID, Entity ID, and the DLT Template IDs you’ve already registered. There’s
nothing to migrate — the plugin works on top of your existing account and SMS credit
balance. The Dashboard shows your live SMS balance via the gateway’s GetBalance 
API.

### How much does SMS cost in India?

SMS is billed per segment, not per message. Indian transactional SMS pricing typically
ranges from ₹0.10 to ₹0.30 per segment depending on your gateway provider and volume
tier. A “segment” is 160 characters for plain English (GSM-7 encoding) or 70 characters
for Unicode (Kannada, Hindi, Marathi, Tamil, etc.). Multi-segment messages count
as multiple sends. The plugin shows a live segment counter in the template editor
so you can see exactly how many segments each message will use before sending. Long
DLT-registered templates with personalization variables can easily span 2–3 segments—
worth checking before bulk sends.

## Reviews

![](https://secure.gravatar.com/avatar/6a3cdb161a679bc221f2fc06b4d0118e4c18afc208a9b6303be9a49a3b3f7101?
s=60&d=retro&r=g)

### 󠀁[Reliable SMS & OTP Solution for WooCommerce](https://wordpress.org/support/topic/reliable-sms-otp-solution-for-woocommerce/)󠁿

 [Chandana G M](https://profiles.wordpress.org/chandanagm/) May 29, 2026

Very useful plugin for WooCommerce stores in India. The OTP verification and order
notification features work smoothly, and the DLT support makes the setup much easier
for Indian SMS compliance requirements. The interface is clean, simple, and easy
to manage, even for beginners. Overall, a reliable solution for SMS automation and
customer communication.

![](https://secure.gravatar.com/avatar/ac743f693c7b935fba2c7b2ba414d17874c63e8860ecf634a90159e8e16f48c0?
s=60&d=retro&r=g)

### 󠀁[ForthFocus SMS – OTP Verification](https://wordpress.org/support/topic/forthfocus-sms-otp-verification/)󠁿

 [varshinijm](https://profiles.wordpress.org/varshinijmbhat/) May 29, 2026

ForthFocus SMS – OTP Verification is a well-designed plugin for WooCommerce stores
that need OTP verification and transactional SMS notifications. The setup is simple,
and features like DLT support, order status SMS alerts, logs, and diagnostics make
it practical for day-to-day operations. It helps streamline customer communication
while supporting Indian SMS compliance requirements. Overall, it’s a reliable, feature-
rich solution with a clean user experience. Highly recommended!

![](https://secure.gravatar.com/avatar/0ab1be01ca4bf575194d7da2dcd041c7febe27948378ecd2201396cc43d623ed?
s=60&d=retro&r=g)

### 󠀁[Reliable SMS and OTP plugin for WooCommerce stores in India](https://wordpress.org/support/topic/reliable-sms-and-otp-plugin-for-woocommerce-stores-in-india/)󠁿

 [oormaniangadi](https://profiles.wordpress.org/oormaniangadi/) May 28, 2026

We are using this plugin for our WooCommerce store, and it has been very helpful
for managing OTP verification and order-related SMS notifications. The setup is 
simple, and the options are easy to understand even if you are not very technical.
The Indian DLT Template ID support is especially useful for Indian stores, because
SMS delivery issues are often linked to DLT compliance and template mismatches. 
The plugin also gives good visibility through logs and diagnostics, which makes 
troubleshooting much easier. Overall, it feels practical, well thought out, and 
built for real WooCommerce use cases in India. Highly recommended for Indian WooCommerce
store owners who need OTP and transactional SMS support. 5 stars.

 [ Read all 3 reviews ](https://wordpress.org/support/plugin/forthfocus-sms-otp/reviews/)

## Contributors & Developers

“ForthFocus SMS – OTP Verification, Order Notifications & Indian DLT for WooCommerce”
is open source software. The following people have contributed to this plugin.

Contributors

 *   [ ForthFocus ](https://profiles.wordpress.org/forthfocus/)
 *   [ vgnavada ](https://profiles.wordpress.org/vgnavada/)

“ForthFocus SMS – OTP Verification, Order Notifications & Indian DLT for WooCommerce”
has been translated into 1 locale. Thank you to [the translators](https://translate.wordpress.org/projects/wp-plugins/forthfocus-sms-otp/contributors)
for their contributions.

[Translate “ForthFocus SMS – OTP Verification, Order Notifications & Indian DLT for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/forthfocus-sms-otp)

### Interested in development?

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

## Changelog

#### 1.0.2

 * Added ForthFocus SMS Gateway as a separate provider with its own provider path.
 * Added gateway selection to the setup wizard and Gateway settings page.
 * Made SMS sending, balance checks, and diagnostics provider-aware.
 * Improved diagnostics with gateway labels, response summaries, collapsible developer
   traces, and a more readable responsive table layout.
 * Fixed skip_dedupe so OTP and template-test sends can bypass Sender-level dedupe
   when intended.
 * Marked DLT Entity ID as a required gateway readiness field.
 * Added server-side validation so individual templates cannot be saved without 
   a DLT Template ID.
 * Improved OTP settings UX so child OTP options are inactive unless the master 
   OTP module is enabled, without wiping saved selections.
 * Added ffsms_http_audit cleanup to uninstall.
 * Added clearer WordPress Playground guidance for live SMS tests where external
   API requests may behave differently from hosted WordPress.

#### 1.0.1

 * Confirmed compatibility with WordPress 7.0.
 * Added WordPress Playground preview support.
 * Improved Playground testing guidance for temporary browser-based environments.
 * Improved SMSGatewayHub-compatible request headers.

#### 1.0.0

 * First public release.

## Meta

 *  Version **1.0.2**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.0**
 *  PHP version ** 7.4 or higher **
 *  Languages
 * [English (US)](https://wordpress.org/plugins/forthfocus-sms-otp/) and [Kannada](https://kn.wordpress.org/plugins/forthfocus-sms-otp/).
 *  [Translate into your language](https://translate.wordpress.org/projects/wp-plugins/forthfocus-sms-otp)
 * Tags
 * [otp](https://mfe.wordpress.org/plugins/tags/otp/)[sms](https://mfe.wordpress.org/plugins/tags/sms/)
   [transactional sms](https://mfe.wordpress.org/plugins/tags/transactional-sms/)
   [woocommerce](https://mfe.wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://mfe.wordpress.org/plugins/forthfocus-sms-otp/advanced/)

## Ratings

 4.7 out of 5 stars.

 *  [  2 5-star reviews     ](https://wordpress.org/support/plugin/forthfocus-sms-otp/reviews/?filter=5)
 *  [  1 4-star review     ](https://wordpress.org/support/plugin/forthfocus-sms-otp/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/forthfocus-sms-otp/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/forthfocus-sms-otp/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/forthfocus-sms-otp/reviews/?filter=1)

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

[See all reviews](https://wordpress.org/support/plugin/forthfocus-sms-otp/reviews/)

## Contributors

 *   [ ForthFocus ](https://profiles.wordpress.org/forthfocus/)
 *   [ vgnavada ](https://profiles.wordpress.org/vgnavada/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/forthfocus-sms-otp/)