Joinotify

Joinotify Cloud sync

The Joinotify Cloud sync sends this site's customers and events to your Joinotify account, where they become contacts and start the Cloud flows. It is what ties the store to the dashboard's campaigns, inbox and audiences.

It ships off. You switch it on under Settings → General, with the Configure button for its options, or in the Sources tab of Audiences & Contacts. The settings window says exactly what is sent before you switch it on.

What is sent

SourceEvents
WooCommerceOrder created, paid, every status change, completed, cancelled, failed, refunded; new customer
WooCommerce SubscriptionsCreated, activated, renewed, renewal failed, expired, cancelled
WordPressSign-ups and changes of phone, name or e-mail
WPForms and ElementorForm submissions that carry a phone or an e-mail
Flexify CheckoutCollected leads and abandoned, recovered and lost carts

Each order goes out with the customer's purchase history (how many orders, how much they spent, first and last purchase) and the links to pay, view and review it. "Created" and "paid" go out once per order, however often the status changes, and a failure building an event never interrupts the checkout.

In the same window you can leave out forms, carts, order items and full addresses (city and state always go), and tag every contact with the site's name or a tag of your own. Each option in the window, with its default, is in Connecting WordPress and WooCommerce; the exact list of what each send carries is in the External services section of the plugin's readme.txt.

How events go out

Nothing is sent during a checkout or a page load. Events go into a queue in a table of their own and leave in batches, from a scheduled task. A batch that fails waits and tries again.

The sync pauses on its own — instead of sending test orders to real customers — when:

  • the API key was revoked;
  • the site was removed from the dashboard;
  • the site looks like a copy at another address (a staging site cloned from production, for example).

The sync's window shows whether it is on, why it paused (with a Try again button), how many events are waiting, how many were sent and how many it gave up on — which can be sent again or discarded.

Sending the customers you already have

Send existing customers sends, once, the users and guest buyers the store already has, with their order history and without starting any flow. Before you confirm, the screen shows how many would be sent. The send runs in the background, in steps that resume after a failure, and at the end says how many went out, how many were left out for having no phone and how many your plan's contact limit kept out.

Also off by default. When on, an unticked checkbox, with the text you write, shows up in the classic and block checkouts, the sign-up forms and My account.

  • Whoever ticks it is recorded as opted in on Joinotify, with the checkbox text, where and when, as evidence.
  • Whoever unticks it in My account is opted out there too.
  • An opt-in or opt-out made on Joinotify updates the customer's preference on the site.
  • In the block checkout, a customer who already agreed sees the checkbox ticked, and what they send in it does not change the consent they already gave.

WPForms and Elementor forms can have a rule of their own that points to which checkbox is the consent — see Audiences & Contacts.

Personal data

WordPress's Export Personal Data and Erase Personal Data tools cover the sync: the consent records and the person's events still in the queue. Erasing also asks Joinotify to erase the contacts this site sent for them.

Switching the sync off stops everything at once. What was already received stays on your Joinotify account, where the contacts can be erased.

For developers

joinotify_track() queues an event of your own, which reaches the Cloud flows through the same queue. The name is custom. followed by one to three [a-z0-9_] segments; the function returns the event id, or false when the sync is off or the name is outside the custom.* space.

joinotify_track(
    'custom.quote.requested',
    array( 'quote' => array( 'id' => 991, 'total' => '1290.00' ) ), // in flows: {{trigger.quote.total}}
    array(                                                          // optional: who the event is about
        'ref'        => array( 'kind' => 'wp_user', 'id' => (string) $user_id ),
        'phone'      => '+5541987654321',
        'email'      => '[email protected]',
        'first_name' => 'Ana',
    )
);

Without ref, the event is recorded but reaches no contact. The kind is wp_user, wc_customer, wc_guest or lead; for the last two the id must be a hash (the plugin uses the SHA-256 of the lowercase e-mail), never personal data in the clear.

FilterWhat it is for
Joinotify/Cloud_Sync/CatalogDescribe a custom.* event, so the Cloud flow editor offers it with its fields
Joinotify/Cloud_Sync/Event_DataAdd data to an event, or return false to drop it
Joinotify/Cloud_Sync/Order_DataAdd an order meta to every order sent
Joinotify/Cloud_Sync/LinksReplace an order's links — for example, with the pages of a headless store
Joinotify/Cloud_Sync/Contact_BlockAdd a tag or an attribute to the contact of every event
Joinotify/Contacts/Sources/FormsList a form from another plugin on the Sources tab
Joinotify/Builder/Webhook_Action/Trigger_BodyChange what the Send webhook action sends in "trigger's data" mode

The Joinotify/Cloud_Sync/Ready action fires when the sync is on and listening — the place to hook your own emitters. How events reach the Cloud and become a flow trigger is in Site events.