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
| Source | Events |
|---|---|
| WooCommerce | Order created, paid, every status change, completed, cancelled, failed, refunded; new customer |
| WooCommerce Subscriptions | Created, activated, renewed, renewal failed, expired, cancelled |
| WordPress | Sign-ups and changes of phone, name or e-mail |
| WPForms and Elementor | Form submissions that carry a phone or an e-mail |
| Flexify Checkout | Collected 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.
Marketing consent
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.
| Filter | What it is for |
|---|---|
Joinotify/Cloud_Sync/Catalog | Describe a custom.* event, so the Cloud flow editor offers it with its fields |
Joinotify/Cloud_Sync/Event_Data | Add data to an event, or return false to drop it |
Joinotify/Cloud_Sync/Order_Data | Add an order meta to every order sent |
Joinotify/Cloud_Sync/Links | Replace an order's links — for example, with the pages of a headless store |
Joinotify/Cloud_Sync/Contact_Block | Add a tag or an attribute to the contact of every event |
Joinotify/Contacts/Sources/Forms | List a form from another plugin on the Sources tab |
Joinotify/Builder/Webhook_Action/Trigger_Body | Change 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.