Title: Joinotify
Author: MeuMouse.com
Published: <strong>Agustus 28, 2026</strong>
Last modified: Oktober 1, 2026

---

Nggoléki Plugin

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

![](https://ps.w.org/joinotify/assets/icon.svg?rev=3669756)

# Joinotify

 Dening [MeuMouse.com](https://profiles.wordpress.org/meumouse/)

[Ngundhuh](https://downloads.wordpress.org/plugin/joinotify.2.5.1.zip)

 * [Detil](https://jv.wordpress.org/plugins/joinotify/#description)
 * [Mācā ulang](https://jv.wordpress.org/plugins/joinotify/#reviews)
 *  [Pemasangan](https://jv.wordpress.org/plugins/joinotify/#installation)
 * [Pangembangan](https://jv.wordpress.org/plugins/joinotify/#developers)

 [Sokong](https://wordpress.org/support/plugin/joinotify/)

## Katrangan

Joinotify — from _join_ and _notify_ — turns things that happen on your site into
WhatsApp messages, without writing code. You draw the automation on a canvas: pick
a trigger (an order is paid, a form is submitted, a user registers), add conditions,
delays and loops, and attach the messages you want sent.

The plugin is free and has no locked features. Building, saving, testing and exporting
workflows all work out of the box. Sending messages requires a Joinotify account,
because messages are delivered through the official WhatsApp Cloud API — see **External
services** below.

#### Visual workflow builder

 * Drag-and-drop canvas with triggers, actions, conditions, delays and loops
 * Branching logic with true/false paths
 * Placeholders and custom variables to personalise every message
 * Import and export workflows as JSON
 * Ready-made workflow templates

#### WhatsApp messaging

 * Text, media, audio, documents and stickers
 * Interactive messages: reply buttons, option lists and link buttons
 * Location messages, contact cards and reactions
 * Meta-approved message templates, listed inside the builder with preview, language
   and approval status
 * Real delivery confirmation: sent, delivered, read and failed, with the reason
   reported by Meta
 * Multiple numbers and multiple WhatsApp Business Accounts on the same account

#### Integrations

 * WooCommerce — order status, refunds, subscriptions, digital product delivery,
   abandoned carts
 * WPForms, Elementor Forms and Flexify Checkout
 * WordPress user events
 * Telegram and Resend (e-mail) as additional delivery channels
 * AI-generated message content through the WordPress AI Client, using the provider
   set up in Settings  Connectors (optional)

#### Operations

 * Message history with per-message status
 * Processing queue for scheduled and retried messages
 * Debug log with configurable retention
 * Passwordless login (OTP) over WhatsApp
 * A PHP extension API: register your own actions, triggers, integrations, conditions,
   placeholders, REST routes and channels with filters only

### External services

This plugin connects to external services. Nothing is contacted until you supply
the corresponding credential in the setup wizard or in the settings screen.

The AI actions are the exception: they do not call any provider directly. They go
through the WordPress AI Client, so the request is made by WordPress to whichever
provider you configured in Settings  Connectors, under that provider’s own terms.

**Joinotify API — https://api.joinotify.com**
 Delivers your WhatsApp messages through
the official WhatsApp Cloud API, lists the numbers on your account, syncs Meta-approved
message templates, serves the catalogue of ready-made workflow templates shown in
the template picker, and receives delivery events. Used only once you paste the 
API key issued for your site. Each request sends your API key, the recipient phone
number and the message content you configured. When you connect the site from the
Joinotify panel, that one request also sends your site address, so the key can be
named and revoked from there. Terms: https://joinotify.com/terms-and-conditions —
Privacy: https://joinotify.com/policy-privacy

**Joinotify telemetry — https://api.joinotify.com/telemetry**
 Optional and **off
by default**. Contacted only after you switch on “Share anonymous usage data”, either
in the setup wizard or in Settings  About. It receives a random identifier generated
on your site, your Joinotify API key (the same one used to send messages), the plugin,
WordPress and PHP versions, your locale and time zone, whether the site is multisite
and whether WooCommerce, Elementor and HTTPS are in play, how many workflows exist,
which integrations are switched on, and a list of named events: which feature ran,
whether a message succeeded or failed, and normalized error codes. It never receives
your site address, admin e-mail, phone numbers, contacts, message content or workflow
content. Sent at most once every few hours, and once more when you switch the option
off — that last request is what tells the service to stop counting this installation.
To have the data already collected for your installation erased, use the removal
request page below. Terms: https://joinotify.com/terms-and-conditions — Privacy:
https://joinotify.com/policy-privacy — Data removal: https://joinotify.com/remove-
data

**Joinotify Cloud sync — https://api.joinotify.com/site-events, /contacts/sync, /
sites/me and /sites/me/erasures**
 Optional and **off by default**. Contacted only
after you switch on “Joinotify Cloud sync” in Settings  General or on the Sources
tab of Joinotify  Audiences & Contacts; the sync’s settings window lists what is
sent before you turn it on. It receives the name, e-mail and phone number of your
customers and of users who register; for each order, its number, status, totals,
payment and shipping method and the customer’s order count, total spent and first
and last purchase dates; the order’s items and full addresses only if you allow 
them in the same window (city and state are always sent); the form submissions and
abandoned carts you choose to sync; the user or order meta you map to custom fields
on the Sources tab of Audiences & Contacts, the tags you set there, and, for a form
whose rule names a consent field, that the person ticked it, with the text you set,
the form and when; the phone, e-mail, name, tags, custom field values and consent
that the “Save contact” and “Tag contact” actions of your workflows send; and, for
the site itself, its address, name, the Joinotify version and which WooCommerce,
form and checkout plugins are active, with a made-up sample of each event it sends.
If you also ask customers for marketing consent, it receives whether they agreed,
the checkbox text and when, and an opt-out made in My account; the site’s webhook
endpoint is then also told when a customer opts in or out on Joinotify. When you
run WordPress’s “Erase Personal Data” tool for a customer, the site asks Joinotify
to erase the contacts it sent for that person, identified by their user id or a 
hash of their e-mail. Events are queued on your site and sent in batches from a 
scheduled task, never during a page load. Switching it off stops it at once; data
already received is kept in your Joinotify account, where you can erase contacts.
Terms: https://joinotify.com/terms-and-conditions — Privacy: https://joinotify.com/
policy-privacy

**Joinotify contact base — https://api.joinotify.com/contacts, /audiences and /suppressions**

Contacted only when an administrator opens Joinotify  Audiences & Contacts on a 
site already connected to Joinotify. That screen lists and edits the contacts, custom
fields, tags, audiences and suppression list of your Joinotify account, so each 
request sends your API key and what the administrator types or picks there: a search
term or filter, the name, phone number, e-mail, custom field values, tags and consent
evidence of a contact they add or edit, a phone number they add to the suppression
list, and, when they import a CSV file, the columns they mapped of each row (the
file is read in the browser and never stored on the site). Nothing is sent from 
the front end of the site. Opening the screen also asks Joinotify what the site’s
key may do, which sends only the key. Terms: https://joinotify.com/terms-and-conditions—
Privacy: https://joinotify.com/policy-privacy

**Webhook URLs you set in a workflow**
 Optional. Contacted only when a workflow
you built has a “Send webhook” action and reaches it, at the URL you typed in that
action. It receives either the data of the trigger (the order with its customer 
history and links, the user, the cart or the form entry) or the JSON you wrote in
the action, with any headers you added. Local and private network addresses are 
refused. The terms and privacy policy are those of the service you point it to.

**Joinotify panel — https://app.joinotify.com**
 Opened in your browser when you
click to create or manage an API key. No data is sent from your site by the plugin
itself. Terms: https://joinotify.com/terms-and-conditions — Privacy: https://joinotify.
com/policy-privacy

**Telegram Bot API — https://api.telegram.org**
 Optional. Contacted only if you
enable the Telegram integration and supply a bot token. It receives the chat id 
and message content of Telegram actions. Terms: https://telegram.org/tos — Privacy:
https://telegram.org/privacy

**Resend — https://api.resend.com**
 Optional. Contacted only if you enable the 
Resend integration and supply an API key. It receives the recipient address, subject,
body and attachments of e-mail actions. Terms: https://resend.com/legal/terms-of-
service — Privacy: https://resend.com/legal/privacy-policy

#### Usage data

Sharing anonymous usage data is **off by default** and entirely optional. If you
turn it on, the setup wizard shows you the exact payload and sample events beforehand.
It never includes your site address, admin e-mail, phone numbers, contacts, message
content, workflow content or any credential.

Your site is identified by a random value generated on the site itself — never derived
from your address — together with the API key you already use to send messages. 
Reports are batched and sent at most once every few hours, from a scheduled task,
never during a page load. The identifier is shown in Settings  About so you can 
quote it in a support ticket, since the service has no way to look your site up 
by domain.

Switching the option off stops collection, deletes anything still waiting to be 
sent, and sends one last request asking the service to stop counting this installation.
If you would rather it stayed completely silent, the `Joinotify/Telemetry/Send_Opt_Out`
filter suppresses that final request.

Switching it off stops future reports but does not erase what was already received.
To request the erasure of the data tied to your installation, use https://joinotify.
com/remove-data and quote the identifier shown in Settings  About.

### Source code and build

Nothing here is obfuscated, and no compiled file ships without the source that produced
it.

#### The plugin’s own code

The PHP under `admin/src` and `templates/` is not compiled: it is the code that 
runs.

The admin screens are Vue 3 applications bundled with Vite. Their complete, unminified
source ships inside the package under `app/src` (242 files, of which 167 are Vue
components), together with `app/package.json`, `app/package-lock.json`, `app/vite.
config.js`, `app/tailwind.config.js`, `app/postcss.config.js` and `app/tsconfig.
json`. To reproduce `app/dist` from it:

    ```
    cd app && npm install && npm run build
    ```

PHP dependencies are declared in `admin/composer.json` and installed with `cd admin&&
composer install --no-dev`.

The development repository, including the script that assembles the release package,
is public at https://github.com/meumouse/joinotify

#### Bundled third-party libraries

    ```
    app/dist also carries the libraries below. Each is installed from npm and used unmodified; the version in this release is pinned in `app/package.json` and `app/package-lock.json`, both shipped. Their source is at:
    ```

 * Vue — https://github.com/vuejs/core (MIT)
 * Pinia — https://github.com/vuejs/pinia (MIT)
 * Vue Flow, with the background, controls and minimap plugins — https://github.
   com/bcakmakoglu/vue-flow (MIT)
 * Headless UI — https://github.com/tailwindlabs/headlessui (MIT)
 * VueUse — https://github.com/vueuse/vueuse (MIT)
 * Boxicons for Vue — https://github.com/box-icons/boxicons-vue (MIT)
 * intl-tel-input — https://github.com/jackocnr/intl-tel-input (MIT)
 * vue3-emoji-picker — https://github.com/delowardev/vue3-emoji-picker (MIT)
 * @wordpress/i18n — https://github.com/WordPress/gutenberg (GPL-2.0-or-later)

The country-name chunks under `app/dist/chunks/index-*.js` are intl-tel-input’s 
translated country lists, split out by Vite so a screen only downloads the locale
it needs.

    ```
    admin/vendor holds the Composer dependencies, installed with `composer install --no-dev` from `admin/composer.json`:
    ```

 * giggsey/libphonenumber-for-php-lite — https://github.com/giggsey/libphonenumber-
   for-php (Apache-2.0) — used to validate and format phone numbers. The “lite” 
   build of the same library, without the offline geocoding, carrier and timezone
   datasets the plugin never reads
 * symfony/polyfill-mbstring — https://github.com/symfony/polyfill-mbstring (MIT)—
   a dependency of the above

## Gambar conto

[⌊The visual workflow builder.⌉⌊The visual workflow builder.⌉[

The visual workflow builder.

[⌊The workflow actions library.⌉⌊The workflow actions library.⌉[

The workflow actions library.

[⌊Message history with delivery status.⌉⌊Message history with delivery status.⌉[

Message history with delivery status.

[⌊Settings, with integrations and senders.⌉⌊Settings, with integrations and senders
.⌉[

Settings, with integrations and senders.

## Pemasangan

 1. Upload the plugin to `/wp-content/plugins/joinotify`, or install it from the Plugins
    screen.
 2. Activate it. The setup wizard opens automatically.
 3. Work through the wizard: default country, Joinotify API key, optional AI provider,
    documentation, usage-data choice.
 4. Build your first automation from Joinotify  Add new workflow.

You can reopen the wizard at any time from `wp-admin/admin.php?page=joinotify-onboarding`.

## FAQ

### Do I need a paid account to use the plugin?

The plugin itself is free and every feature is unlocked. Building, testing and exporting
workflows works with no account at all. Delivering messages requires a Joinotify
account, because WhatsApp messages go through Meta’s official Cloud API and that
access is provisioned per account.

### Where do I get the API key?

Create it for your site on the Joinotify panel at https://app.joinotify.com, then
paste it in the setup wizard (step 2) or in Settings  General  WhatsApp Cloud API.

### Can I send a message to anyone at any time?

No — that is a WhatsApp rule, not a plugin limitation. Outside a 24-hour window 
opened by the contact writing to you first, only Meta-approved message templates
can be delivered. The builder lists your approved templates so you can pick one.

### Does it work without WooCommerce?

Yes. WooCommerce is one integration among several; WPForms, Elementor, Flexify Checkout
and core WordPress user events all work on their own.

### Where is the uncompiled JavaScript?

It ships with the plugin, under `app/src`, together with the build configuration
needed to reproduce `app/dist`. See **Source code and build** above, which also 
lists the source of every third-party library bundled into it.

### Is this plugin affiliated with WhatsApp or Meta?

No. Joinotify is not affiliated with, endorsed by or sponsored by WhatsApp LLC or
Meta Platforms, Inc. WhatsApp is a trademark of WhatsApp LLC.

## Mācā ulang

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

### 󠀁[O Melhor Plugin Whatsapp Automação](https://wordpress.org/support/topic/o-melhor-plugin-whatsapp-automacao/)󠁿

 [sevenshine](https://profiles.wordpress.org/sevenshine/) Oktober 7, 2026 1 reply

Excelente plugin! Muito fácil de configurar, intuitivo e funciona perfeitamente.
A integração com o WooCommerce é simples e os recursos de notificações e automações
ajudam bastante no relacionamento com os clientes. Também gostei muito da facilidade
de personalização e da quantidade de opções disponíveis. O suporte é atencioso e
o plugin vem recebendo melhorias constantemente. Recomendo para quem busca uma solução
eficiente e profissional para melhorar a comunicação e as notificações no WordPress
e WooCommerce.

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

### 󠀁[Simplesmente um dos melhores plugins para notificação!](https://wordpress.org/support/topic/simplesmente-um-dos-melhores-plugins-para-notificacao/)󠁿

 [jefersoncolaco](https://profiles.wordpress.org/jefersoncolaco/) Oktober 1, 2026

O plugin está bem otimizado e tem muitas integrações, está sendo muito útil

 [ Read all 2 reviews ](https://wordpress.org/support/plugin/joinotify/reviews/)

## Contributors & Developers

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

Kontributor

 *   [ MeuMouse.com ](https://profiles.wordpress.org/meumouse/)

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

### Interested in development?

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

## Caathetan Owahan

#### 2.5.1

 * Fixed: the plugin ships its translations again (Brazilian and European Portuguese,
   Spanish, German, French and Italian). Sites in those languages showed Joinotify
   in English since 2.5.0. A WordPress.org language pack, once a locale has one,
   still takes precedence.
 * Fixed: counts such as “%d contacts” or “%d days” use the plural form in every
   translated language instead of the singular.
 * Fixed: the labels of the workflow post type are translated.

#### 2.5.0

 * New: Joinotify  Audiences & Contacts, a screen for the contact base of your Joinotify
   account. List, search, filter and export contacts; add them by hand or import
   a CSV file; edit, opt in, opt out, merge, export or erase a contact; and manage
   custom fields, tags, saved audiences and the suppression list. The base stays
   on Joinotify and the API key never reaches the browser. A key restricted to some
   numbers makes the screen read only.
 * New: Joinotify Cloud sync, off by default under Settings  General. Once switched
   on, it sends this site’s customers and events to your Joinotify account: WooCommerce
   orders and subscriptions, new customers, WordPress sign-ups and profile changes,
   WPForms and Elementor forms, and Flexify Checkout leads and carts. It says what
   it sends before you turn it on, lets you leave out forms, carts, order items 
   and full addresses, and tags every contact with the site’s name or a tag of your
   choice.
 * New: the sync delivers in batches from a scheduled task, never during a checkout
   or a page load. A failed batch is tried again. A revoked key, a site removed 
   from the panel or a copy of the site at another address pauses the sync instead
   of sending test orders to real customers. Its window shows what is waiting, sent
   or given up on and why it is paused, with a “Try again” button.
 * New: “Send existing customers” sends the users and guest buyers the store already
   has as contacts, once and in the background, without starting any flow.
 * New: an optional marketing consent checkbox, unticked by default, for the classic
   and block checkouts, the sign-up forms and My account. Consent is recorded on
   Joinotify with its evidence, and an opt-in or opt-out made on Joinotify updates
   the customer’s preference on the site.
 * New: each source can add its own tags and send user and order meta into custom
   fields, and each WPForms or Elementor form can get a rule choosing its phone,
   e-mail, name, consent checkbox, tags and custom fields.
 * New: “Save contact” and “Tag contact” workflow actions, in a new Contacts tab
   of the action library, create or update the contact on Joinotify from any trigger.
   They need the Cloud sync switched on.
 * New: “Send webhook” workflow action, which posts the trigger’s data or a JSON
   of your own to any public URL, with optional headers and an HMAC signature.
 * New: developers can send their own events to Joinotify flows with `joinotify_track(
   $name, $data, $contact )`.
 * New: WordPress’s “Export Personal Data” and “Erase Personal Data” tools cover
   the sync’s consent records and queued events, and erasing also asks Joinotify
   to erase the contacts this site sent.
 * New: after ten minutes of use, the settings screen and the builder ask administrators
   to rate Joinotify on WordPress.org. “Maybe later” hides the request for a week.
 * New: action settings declared with the `placeholder` component get the trigger’s
   variable picker.
 * Changed: the admin screens and the OTP login form draw every icon with Boxicons,
   and builder steps that only named an icon now show it.
 * Changed: focused fields are outlined by a solid border in the primary color instead
   of a soft glow, so their text no longer moves.
 * Fixed: the strings of the Vue admin screens now reach translate.wordpress.org,
   and language packs load them for every part of those screens.
 * Fixed: the “New order” trigger never ran for orders placed with the WooCommerce
   checkout block.
 * Fixed: the WPForms PayPal Standard trigger raised PHP warnings and sent an empty
   entry id.
 * Fixed: the “Connect to Joinotify” button ended in “invalid code”.
 * Fixed: a workflow step’s description could run script in the builder when it 
   came from an imported workflow, a template or an AI-generated flow.
 * Fixed: actions added with `joinotify_register_action()` lost their description
   in the action library.

#### 2.4.2

 * New: the workflows, message history and processing queue screens export to a 
   JSON file. Export one row from its “Export” action, the rows you selected, or—
   in the history and the queue — everything matching the current filters. A single
   workflow downloads as the same file the builder exports, so it can be imported
   again; several download together in one file. The processing queue gained row
   selection for this. A history export stops at the 5,000 most recent records and
   tells you when it does.
 * New: the workflows, message history and processing queue tables have an “Items
   per page” selector with 10, 25, 50, 100 or 200 rows. Each screen remembers your
   choice, and changing it keeps the first visible row on screen instead of jumping
   back to page 1.
 * New: the `{{ wc_shipping_method_total }}` variable returns the shipping cost 
   and method of a WooCommerce order as plain text, for example “R$ 20,00 via SEDEX”,
   or only the method name when shipping is free.
 * Changed: when WhatsApp refuses a message, its own explanation now appears in 
   the builder test after the description, and the debug log keeps it for every 
   failed send.
 * Changed: the tables show 25 rows per page by default instead of 20.
 * Fixed: template variables go out as one line of plain text, as WhatsApp requires.
   Line breaks become commas and HTML is removed, so a multi-line address no longer
   gets the template refused and a WooCommerce price no longer arrives as raw HTML.
 * Fixed: templates built outside the builder — by an extension, the OTP login or
   a retry queued by an earlier version — were still refused with error 132018 because
   of line breaks. Every template send now follows the same one-line rule.
 * Fixed: saving the test number and running the test announced a refused message
   in a success notice.
 * Fixed: deleting records or cancelling a resend in the message history, or running
   or cancelling an item in the processing queue, reloaded the table without its
   filters, so it showed unrelated rows while the filter still looked active.
 * Fixed: until someone opened the template picker, template sends were recorded
   in the message history with only the template name and variables. The first send
   on a site now loads the template text by itself.
 * Fixed: `{{ wc_shipping_address }}` was described as the shipping address, but
   it has always returned the shipping cost and method. Its value is unchanged, 
   so existing messages send what they always sent, but it now arrives as plain 
   text instead of price markup, and the builder describes and previews it as a 
   cost. If you used it for the delivery address, switch to `{{ wc_shipping_full_address}}`.

#### 2.4.1

 * New: the message history shows what a template message actually said. The record
   keeps the template text with each value filled in, and the details window lists
   the template’s language and the value given to each variable.
 * New: while debug mode is on, the debug log records every message delivered — 
   template, text or media — not only the ones that fail. A failed template send
   always includes the template name, language and values.
 * New: login codes sent by template are never written to the history or the log.
   Developers can hide the values of other templates with the `Joinotify/Api/Template_Dispatch_Log`
   filter.
 * Changed: the debug log viewer lays structured details out over indented lines,
   so they are easier to read.
 * Fixed: templates with named variables, such as `{{nome}}`, were refused by WhatsApp.
 * Fixed: login codes and builder test messages were listed under the “API” source
   in the message history, instead of “OTP” and “Test message”.
 * Fixed: the message history showed the raw word “template” in the type column 
   instead of a translated label.
 * Fixed: the country list in the setup wizard opened behind the wizard itself.
 * Fixed: the “Joinotify account” field looked empty after a key was saved, instead
   of showing the key’s masked prefix.
 * Removed: the “Plugin updates” row in Settings  About, which repeated what the
   plugins screen already shows.

#### 2.4.0

 * New: how many times a failed message is retried, and how long the first wait 
   is, are now settings under Settings  General  Delivery retries. The default is
   5 attempts starting 30 minutes apart, replacing the fixed budget of 120 attempts
   used until now. Choosing “Do not retry” keeps a failed message out of the queue
   altogether.
 * New: a resend that has not run yet can be cancelled from the message history.
   Select the records and use “Cancel resend”; they settle as “cancelled”, a new
   status with its own tab. Records whose retry already ran are left alone.
 * New: the message history has an Error column, showing why a message failed without
   having to open the details.
 * Changed: the setup wizard now uses the same visual style as the rest of the admin
   screens.
 * Fixed: a message left in “queued” stayed that way forever, even after the retry
   had succeeded or run out of attempts. Those records now settle as sent or failed.
 * Fixed: a test message refused by WhatsApp was announced as a success, in a green
   notice that carried the failure text.
 * Fixed: the reason a send failed never reached the screen. Failures now explain
   what happened and what to do about it — in particular, sending outside the 24-
   hour customer service window says so and points to template messages, instead
   of leaving the cause in the log.

#### 2.3.4

 * Fixed: a fatal error could take the whole site down, login page included, whenever
   the plugin wrote a log entry early in the request. Sites on PHP 8 with debugging
   enabled were the ones affected.
 * Fixed: the workflow post type was never actually registered with WordPress. Workflows
   themselves kept working, but the permissions declared for them did not apply,
   so an Editor could open and delete workflows that were meant to be restricted
   to administrators.
 * Fixed: the plugin was reported as incompatible with WooCommerce’s High-Performance
   Order Storage, because the compatibility declaration was sent after WooCommerce
   had stopped listening. HPOS can now be enabled with Joinotify active.

#### 2.3.3

 * No change to the plugin itself: the code, the interface and the translations 
   are the same as 2.3.2. Only the release pipeline that publishes the package to
   WordPress.org was fixed.

#### 2.3.2

 * Changed: the phone number library moved to giggsey/libphonenumber-for-php-lite
   9.0.37. The version shipped until now was the last one supporting PHP 7.4, released
   in February 2025 and no longer updated, which would have frozen the country numbering
   rules the plugin validates against. PHP 8.1 remains the minimum.
 * Removed: the legacy Evolution relay, in full. Messages now go through the official
   WhatsApp Cloud API only.
 * Security: the plugin shipped an embedded slots-manager API key, encrypted with
   its decryption key on the next line. It was the same credential in every installation
   and anyone could extract it. Both it and the hand-rolled encryption around it
   are gone.
 * Removed with the relay: the Proxy API and its endpoints, the “Message transport”
   selector, phone registration by QR code and OTP, the per-number connection check
   and the WhatsApp group listing. None of them exist on the official API.
 * Removed: the scheduled task that polled phone connections every six hours. Upgrading
   unschedules it.
 * Changed: `Transport` always resolves to the official API and gained `Transport::
   is_ready()`, which reports whether the site has a key to send with. The `Joinotify/
   Transport/Active` filter went away with the transport choice.
 * Changed: `slots-manager.joinotify.com` was dropped from the external services
   list, since the plugin no longer contacts it.
 * Added: a “Source code and build” section in this readme, documenting where the
   uncompiled frontend source lives, how to rebuild it, and the source of every 
   third-party library bundled into the package.
 * Changed: the build step that strips the emoji picker’s CDN URL now targets the
   library constant rather than the address, so no remote asset URL appears anywhere
   in the plugin.

#### 2.3.1

 * Changed: WordPress 7.0 is now required. The AI features run on the AI Client 
   that ships with it.
 * Changed: AI content is generated through the WordPress AI Client. Choose a provider
   and store its key once in Settings  Connectors and every AI action uses it — 
   Joinotify no longer keeps a key of its own, nor calls a provider directly. The
   OpenAI and Anthropic integrations were removed, so a site using AI has to set
   the provider up again in Connectors.
 * Removed: the “PHP Snippet” action, which executed arbitrary PHP. Saved workflows
   still open, but that step no longer runs.
 * New: the builder warns when a step cannot open a conversation on the official
   API. Text, media, interactive messages and AI copy only reach a contact within
   24 hours of their last reply, so a workflow that starts the conversation has 
   to lead with an approved template.
 * Improved: the OTP login template is now picked from the templates approved on
   your account instead of typed by name, and its language comes from the template
   itself.
 * Fixed: an account with more than 100 message templates lost the rest from the
   template pickers.
 * Changed: translations are delivered by translate.wordpress.org instead of being
   bundled with the plugin.
 * Changed: the Joinotify menu moved below the WordPress items instead of sitting
   among them.
 * Changed: the standalone “Joinotify OTP Login” plugin is no longer deactivated
   on its own. You are told it duplicates the built-in login and decide what to 
   do.
 * Removed: country detection by IP address, which contacted a third-party service
   that was not declared and was never actually used.
 * Removed: the button offering to install the cart recovery add-on from an external
   download. It had done nothing since 2.0.0.
 * Improved: the phone number library was updated, and the builder styles and the
   setup notice now go through the standard WordPress asset queue.

#### 2.3.0

 * New: anonymous usage reporting now actually delivers. Still off by default — 
   nothing leaves the site until you agree in the setup wizard.
 * New: the site is identified by a random value generated locally, never derived
   from your address. It is shown in Settings  About so you can quote it in a support
   ticket.
 * New: reports are batched and sent by a scheduled task, never during a page load.
   Repeated events collapse to one per day.
 * New: the consent screen also shows sample events and explains how the site is
   identified.
 * New: switching usage reporting off deletes anything still queued and asks the
   service to stop counting the installation.
 * New: actions for extensions — `Joinotify/Settings/Saved` (with the settings before
   and after each save), `Joinotify/Sender_Selected`, `Joinotify/Notification_Queue/
   Item_Retried` and `Joinotify/Debug_Log/Recorded`.
 * New: six-step setup wizard shown after activation, covering the default country,
   the Joinotify API key, an optional AI provider, the documentation, the usage-
   data choice and the first automation.
 * New: anonymous usage reporting, off by default, with the exact payload shown 
   before you agree.
 * New: WhatsApp connection through the official Joinotify API, replacing the Proxy
   API over Evolution.
 * New: Meta-approved message templates listed inside the builder, with a dedicated
   template action.
 * New: interactive messages — reply buttons, option lists, link buttons, location,
   contact cards, stickers and reactions.
 * New: real delivery confirmation through account events (delivered, read, failed).
 * The plugin is now free software under the GPLv2 and every feature is unlocked—
   the licensing system and its activation screen were removed.
 * Changed: updates are now delivered by WordPress.org; the plugin no longer contacts
   an update server of its own.
 * Changed: the Proxy API is off by default on new installs. It remains deprecated
   and will be removed.
 * Removed: the extension installer that downloaded plugin packages from an external
   URL.
 * Improved: OTP login codes are delivered through an authentication template on
   the official API.
 * Improved: the workflow template library is now served by the Joinotify API at
   the same address as the account, counts an install when a template is used, and
   picks up revised templates on its own.
 * Fixed: deactivating the plugin left all of its scheduled tasks behind. They are
   now cleared. Nothing else is deleted — deactivating is not uninstalling.
 * Deprecated: the Proxy API setting under Settings  General.

#### 2.2.0

 * New: “Loop” action that walks a collection and runs its body once per item.
 * New: loop variables available inside the loop body.
 * Removed: WhatsApp disconnection notice.
 * Fixed: the default country code was not applied to numbers typed without one.

#### 2.1.0

 * New: WooCommerce digital product delivery straight from the workflow builder.
 * New: attachments on e-mail (Resend) and WhatsApp media actions.

## Meta

 *  Version **2.5.1**
 *  Last updated **1 pekan sing kepungkur**
 *  Active installations **30+**
 *  WordPress version ** 7.0 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 8.1.0 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/joinotify/)
 * Tags
 * [automation](https://jv.wordpress.org/plugins/tags/automation/)[Notifications](https://jv.wordpress.org/plugins/tags/notifications/)
   [whatsapp](https://jv.wordpress.org/plugins/tags/whatsapp/)[woocommerce](https://jv.wordpress.org/plugins/tags/woocommerce/)
   [workflow](https://jv.wordpress.org/plugins/tags/workflow/)
 *  [Nonton lanjutan](https://jv.wordpress.org/plugins/joinotify/advanced/)

## Peringkat

 5 out of 5 stars.

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

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

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

## Kontributor

 *   [ MeuMouse.com ](https://profiles.wordpress.org/meumouse/)

## Sokong

Got something to say? Need help?

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