smsportal plugin for WordPress: SMS without code, from your own phone

Checked against the docs:

You install the smsportal plugin from a zip file, click "Connect to smsportal.app" and approve access. Then, under Rules, you pick an event such as a completed WooCommerce order and write the text with variables. The SMS leaves from your own Android phone, and the WordPress admin shows the delivery and the customer's reply. No API key, no code.

What you need

  • WordPress 6.2 or newer and PHP 7.4 or newer.
  • A site on https.
  • A smsportal account with an Android phone and SIM card connected.
  • For rules: WooCommerce, Contact Form 7, Amelia or Uncanny Automator. Without them you can still send from your own code.

How to send SMS from WordPress with the smsportal plugin

  1. Install the plugin

    Download https://smsportal.app/downloads/smsportal-wordpress.zip. In WordPress go to Plugins → Add New Plugin → Upload Plugin, choose the file, click Install Now, then Activate Plugin. A WordPress.org plugin directory listing is coming soon.

  2. Connect the site to your account

    In the smsportal menu click "Connect to smsportal.app". Sign in (or sign up), pick the phone and approve. You land back on your site with "Connected to smsportal.app.", and the Overview shows the phone, its battery and this month's SMS count.

  3. Add a rule

    Rules → Add automatic SMS. Pick an event such as WooCommerce: order status changed to "Completed", the recipient Customer, and write the text with variables, e.g. Hi {imie}, order {numer_zamowienia} is ready. {nazwa_sklepu}. The counter under the field shows characters and SMS parts. Save.

  4. Send a test

    Settings → Your phone number. Then, in the rule editor, click "Send a test SMS to me": the text filled with the latest such order goes to your number, and the rule is not saved.

  5. Watch statuses and replies

    The Sent tab lists every SMS: Waiting for the phone, Delivered, Failed or Expired. A customer's reply lands under Replies, in a note on the order and in your inbox.

Customer replies and STOP

Replies need no setup: the plugin gives smsportal its webhook address when it connects and checks the signature of every notification.

  1. The site only gets replies from numbers it texted in the last 7 days. Other SMS to your phone stay in the smsportal dashboard.
  2. A reply to an SMS about a WooCommerce order is added to that order as a private note.
  3. A reply of STOP (also NIE, REZYGNUJE, UNSUBSCRIBE) adds the number to the Blocked tab. This site sends it nothing more until you unblock it.
  4. You can turn off the e-mail about each reply in Settings.
PHP: your own SMS from theme or plugin code
// Your own SMS from theme or plugin code (needs the smsportal plugin, connected).
// dedupe_key makes the same event send at most one SMS.
if ( function_exists( 'smsportal_send_sms' ) ) {
	$result = smsportal_send_sms(
		'+44 7700 900123',
		'Your appointment is confirmed. See you soon!',
		array(
			'dedupe_key'    => 'my-theme|booking-1042|confirmation',
			'event_label'   => 'Booking confirmation',
			'expires_hours' => 12, // 0 = never expires
		)
	);
	if ( is_wp_error( $result ) ) {
		error_log( 'SMS not queued: ' . $result->get_error_message() );
	}
}

Ready-made scenarios

  • Store: order shipped

    A rule on "order status changed to Completed" with {numer_przesylki}. The variable reads the order's _tracking_number field; when it is empty it drops out of the text and the SMS still goes. Setting the same status again does not send a second SMS.

  • Contact form: SMS to you

    A rule on "Contact Form 7: form sent" with the recipient Fixed number (yours) and the form's fields as variables, such as name and subject. To text the person who filled in the form, pick the field with their number.

  • Clinic: appointment reminder

    A rule "Amelia: reminder before the appointment" with the number of hours before it (up to 168). The plugin schedules the SMS when the booking is made, so the reminder goes out on its own.

Errors and fixes

"Your site must use https to connect to smsportal.app."
Cause: The site address under Settings → General starts with http://.
Fix: Turn on SSL with your host and change both addresses under Settings → General to https://.
Status "Waiting for the phone" never changes
Cause: The phone is offline or Android put the smsportal app to sleep.
Fix: Check the Phone tile on the Overview and the phone's internet. After the time in "Do not send if it is late by more than" (12 hours by default) the SMS becomes Expired.
Status "Stopped by the safety limit"
Cause: The customer's number is from a country that is not allowed, or it already got 3 SMS within an hour (10 in 24 hours), or the rule sent 30 SMS within an hour.
Fix: The reason is next to the SMS under Sent. Add countries under Settings → Allowed recipient countries. For a form, turn on spam protection.
Status "Plan limit"
Cause: The account used up its plan's SMS limit (daily or monthly).
Fix: That SMS is not retried. New events send again once the limit resets or you change the plan on smsportal.app.
The Overview asks you to connect again
Cause: The connection was removed in the smsportal dashboard (Integrations → Disconnect) or the key stopped working.
Fix: Click "Connect to smsportal.app" again. Rules and history stay.
No events in the rule's list
Cause: The list only shows events of active plugins.
Fix: Activate WooCommerce, Contact Form 7, Amelia or Uncanny Automator. Without them, send from code with smsportal_send_sms.

Frequently asked questions

Do I have to copy an API key?

No. Connecting works like "Sign in with": the plugin gets its own key with limited access (sending, statuses, connection state) and keeps it only in the WordPress database. Either side can end the connection.

Will a customer get the same SMS twice?

No. Each event, such as "order 1042 completed", sends at most one SMS, even when you set the status again or a send is retried after a network problem.

Does sending slow down checkout?

No. The plugin puts the SMS in a queue and sends it in the background. When smsportal.app does not answer, it retries after 1, 5 and 15 minutes.

Can someone use a form on my site to send SMS from my phone?

The plugin limits it. SMS to numbers typed by customers (forms, guest checkout, bookings, the Uncanny Automator "Send SMS" action) go only to your country (add more under Settings), at most 3 an hour and 10 in 24 hours to one number, and at most 30 an hour from one rule. A stopped SMS shows the reason under Sent, and the plugin screens show a warning. A fixed number in a rule (e.g. yours) has no such limits. Also turn on spam protection in Contact Form 7: Akismet, reCAPTCHA or Cloudflare Turnstile.

What about a staging copy of my site?

A copy at a different address sends no SMS, because the connection belongs to the original. On the copy the plugin asks whether the site moved (then you keep the connection) or whether to connect the copy on its own. Uninstalling the plugin on the copy does not disconnect the original.

What about GDPR?

Numbers are masked in the admin screens, and sent SMS, replies and logs are deleted after 90 days. The plugin adds a suggested privacy policy text and works with WordPress's personal data export and erasure tools. Uninstalling removes all its data.

Where is the plugin in the WordPress.org directory?

The directory listing is in preparation (coming soon). Until then you install it from the zip on smsportal.app; once it is listed, updates arrive the usual way.

Sources

  1. WordPress: Managing Plugins (uploading a zip)
  2. WordPress Plugin Handbook: Privacy (data export and erasure)
  3. WooCommerce: WC_Order source (status hooks)
  4. smsportal: API documentation

More in the guides

Send your first SMS today

Create a free account, connect your phone and see how customers respond to messages from your number.