=== Pay4All SMS ===
Contributors: pay4all
Tags: sms, campaign, seven.io, marketing, multilingual
Requires at least: 5.9
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.3
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Send SMS marketing campaigns from WordPress via seven.io. Multilingual signup, double opt-in, cron batching, web and STOP unsubscribe.

== Description ==

Pay4All SMS turns your WordPress site into a self-service SMS marketing tool powered by [seven.io](https://www.seven.io/).

* Public **signup shortcode** with a flag / international-format picker (intl-tel-input, 200+ countries).
* Server-side **E.164 validation** and phone normalisation.
* Optional **double opt-in** : the visitor confirms via a 6-digit code sent by SMS.
* **Web unsubscribe** : every outbound SMS carries a token-based link to a confirmation page (auto-generated page or a shortcode on a WordPress page of your choice).
* **STOP inbound** : hook seven.io Inbound-SMS to a webhook URL and the plugin marks « STOP », « STOPP », « ARRÊT », « BASTA » replies as unsubscribed automatically.
* **Multilingual campaigns** : write the SMS body once per language (fr/de/it/en). Each contact receives the version matching their `lang`.
* **Cost-safe batching** : the wp-cron tick sends a merchant-configured maximum number of SMS per minute.
* **Delivery log** : one row per attempt with the provider id, cost, and delivery status.
* **Pay4All Shop bridge** : one-click import of existing customers, plus an opt-in checkbox in the order form.

== External services ==

This plugin connects to the **seven.io** SMS gateway API (`https://gateway.seven.io/api`), operated by seven communications GmbH & Co. KG, to send text messages. Nothing is sent until you enter your own seven.io API key under *Pay4All SMS > Settings*.

What is sent, and when:

* **Sending an SMS** (campaign, test SMS, double opt-in confirmation code) : the recipient's phone number, the message text, the sender ID and an internal reference of the message.
* **Estimating the cost of a campaign** (campaign editor) : the default country and one sample recipient phone number.
* **Showing your account balance** (plugin dashboard) : no personal data, only your API key.

If you configure them in your seven.io account, seven.io also calls your site back on the webhook URLs shown in the settings : delivery reports and inbound « STOP » replies.

* seven.io terms of service : https://www.seven.io/en/company/terms/
* seven.io privacy policy : https://www.seven.io/en/company/privacy/

== Privacy ==

Contacts are stored in your WordPress database only : phone number, first name, language, country, subscription status, and the date and IP address of the consent. A log of sent messages (phone number, status, cost, beginning of the text) is kept as proof of sending. The plugin sends no data to Pay4All. Unsubscribed contacts are kept with a « stopped » status so they are never messaged again.

== Third-party libraries ==

* **intl-tel-input 29.5.5** (MIT license) - phone field with country flags. Source code : https://github.com/jackocnr/intl-tel-input
* Its bundled validation utilities are compiled from Google **libphonenumber** (Apache License 2.0). Source code : https://github.com/google/libphonenumber

The minified build files (`intlTelInputWithUtils.min.js`, `intlTelInput.min.css`, flag sprites) and the library's LICENSE are bundled in `assets/public/vendor/intl-tel-input/` ; the human-readable sources are in the repositories above.

== Installation ==

1. Upload the `pay4all-sms` folder to `/wp-content/plugins/`.
2. Activate the plugin from the Plugins screen.
3. Sign up on [seven.io](https://www.seven.io/) and paste your API key + sender under *Pay4All SMS > Settings*.
4. Drop `[pay4all_sms_signup]` on the page where visitors should subscribe.
5. Create a campaign under *Pay4All SMS > Campaigns > New campaign*, write the message in each language, click « Send ».

== Frequently Asked Questions ==

= Do I need a paid seven.io plan? =

You need an API key + credit on seven.io. Pricing depends on the destination country ; see seven.io for the current rate card.

= How do I let subscribers reply STOP? =

Rent a virtual inbound number in the seven.io dashboard and configure the Inbound-SMS webhook to POST to the URL shown under *Settings > Unsubscribe > STOP webhook*. Set a shared secret and paste it into the plugin settings. STOP-like keywords in every EU language are recognised automatically.

= Is web unsubscribe enough for GDPR? =

Every outbound SMS ships a token-based unsubscribe link, and every consent is logged with a timestamp. Consult your DPO for a full audit.

== Changelog ==

= 1.0.3 =
* Traductions française, allemande et italienne ajoutées.

= 1.0.2 =
* Removed stale intl-tel-input v18.2.1 file left over in the vendor folder.
* Confirmed intl-tel-input v29.5.5 bundle is the only phone-input library shipped.

= 1.0.1 =
* Pay4All Shop opt-in checkbox now injected automatically into every order form, with a merchant toggle in Settings.
* Consent IP recorded on every signup (shortcode and Shop order) for GDPR proof.
* intl-tel-input bumped to 29.5.5.

= 1.0.0 =
* Initial public release : signup shortcode with intl-tel-input, per-language campaign editor, cron-batched send, double opt-in, web + STOP unsubscribe, seven.io API client, Pay4All Shop bridge.
* Web unsubscribe in two steps (confirmation button + nonce), so link previews in messaging apps can't unsubscribe anyone.
