Joinotify

Builder actions

After the trigger, a workflow is a sequence of actions. They live in the library that opens when you click the + on a canvas node, split into tabs. Clicking an action already on the canvas opens its settings in the side panel.

Only the actions of the integrations enabled under Joinotify → Settings → Integrations show up — the Telegram one, for example, only exists with the Telegram integration switched on.

WhatsApp messages

Every WhatsApp action asks for the sender (one of the account's numbers) and the recipient, which takes a phone number or a placeholder such as {{ wc_billing_phone }}.

ActionWhat it sends
WhatsApp: Text messageText with formatting, emoji and placeholders
WhatsApp: Media messageAn image, video, audio or document, with a caption
WhatsApp: Template messageA Meta-approved template — the only kind that starts a conversation
WhatsApp: Reply buttonsText with up to three quick reply buttons
WhatsApp: Option listA menu with sections and options
WhatsApp: Link buttonText with a button that opens a URL
WhatsApp: LocationA point on the map, with a name and address
WhatsApp: Contact cardA contact card the customer can save
WhatsApp: StickerA sticker
WhatsApp: ReactionAn emoji in reply to a message

The 24-hour window

Free-form text, media and interactive messages only reach someone who wrote to the number in the last 24 hours. Outside that, only the Template message is delivered. The builder warns on the steps that depend on the window, and the WhatsApp 24-hour window condition lets the workflow choose on its own. The full concept is in The 24-hour window.

Template message

The action lists the account's approved templates, with language, category and a preview, and asks for a value for each template variable — fixed text or a trigger placeholder. Since 2.6.0 it covers everything Meta offers in a template:

  • Image, video or document header — the file comes from a link, a placeholder or the media library. The action will not save without it, because Meta refuses the send. A document goes out with its file name.
  • Location header — latitude and longitude, with an optional name and address.
  • URL button — the variable completes only what comes after the button's fixed address. For a link to your own site, use the remove_home_url modifier or {{ wc_first_product_review_path }} — see Modifiers.
  • Copy-code button of a marketing template, filled with the coupon you provide.
  • Code button of an authentication template, which repeats the code from the body when left empty.
  • Limited-time offer — the expiration takes a date, a timestamp or a relative time such as +2 days.
  • Carousel — each card asks for its own header file, variables and buttons.

The variable values go out on a single line, as WhatsApp requires: line breaks become commas and HTML markup is removed, so a multi-line address or a WooCommerce price does not get the template refused by Meta.

Workflow control

ActionWhat it does
DelayPauses the workflow for an interval (seconds to years) or until a fixed date and time
ConditionSplits the workflow into two paths, true and false
LoopRepeats the body actions once for each item of a collection
Stop automationEnds the workflow at that point

Delays depend on WP-Cron — see Minimum requirements.

Condition

The available conditions depend on the trigger: order status and total, purchased products, payment and shipping method, user role and metadata, form fields and whatever else the trigger registers.

WhatsApp 24-hour window

Offered on every trigger since 2.6.0. At the moment the workflow reaches it, it asks the platform whether a recipient's window is open, closed or unknown (when the platform could not be asked). It takes the recipient — a phone number or a placeholder — and the sender number whose window is read.

The typical use is to send free-form text on the "open" path and an approved template on the other:

graph LR;
  A["Order completed"] --> B{"Window open?"};
  B -- "yes" --> C["Text message"];
  B -- "no" --> D["Template message"];

Loop

Walks a collection — the order's digital files, the purchased items — and runs the body actions once per item, with the {{ loop_* }} placeholders described in Placeholders.

Integrations with other systems

ActionWhat it does
Send webhookSends the trigger's data, or a JSON of your own, to a URL — n8n, Zapier, Make, an ERP
HTTP requestCalls any public API and keeps the response for the next actions

Both are described in Webhooks and HTTP requests.

Contacts

In the library's Contacts tab, since 2.5.0:

ActionWhat it does
Save contactCreates or updates the contact on your Joinotify account: name, e-mail, tags, fields and consent
Tag contactAdds and removes tags on a contact

They need the Joinotify Cloud sync switched on and go through its queue, so the workflow never waits on Joinotify and a failure is retried. Neither of them starts a Joinotify Cloud flow.

The contact is the trigger's customer or user only when the phone or e-mail typed in the action is theirs; anyone else becomes a separate lead. Marketing consent should only be ticked when the trigger means the person agreed — a form with a consent checkbox, for example — and it goes out with the evidence of where and when.

WooCommerce

ActionWhat it does
Discount couponCreates a WooCommerce coupon, whose data is available in the {{ joinotify_coupon_* }} placeholders

Artificial intelligence

ActionWhat it does
WhatsApp: AI messageWrites the message with the AI model from an instruction of yours
AI: Smart variableGenerates a text the following actions use as {{ ai:NAME }}

AI goes through the WordPress AI Client: the provider and its credentials are set up once under Settings → Connectors, in WordPress itself, and Joinotify uses whatever is there. The plugin has not stored an OpenAI or Anthropic key since 2.3.1.

The builder also generates a whole workflow from a text description. That generator never uses the HTTP request action.

Other channels

ActionWhat it sends
Telegram: messageA text message through a Telegram bot
Send e-mail (Resend)An e-mail with attachments via Resend

Both need the integration enabled and the service's credential under Settings → Integrations.

Removed actions

ActionRemoved inWhy
Group actions2.3.0The official WhatsApp API does not send to groups
PHP Snippet2.3.1It relied on eval(). Steps already saved with it no longer run

Test before activating

The builder sends the workflow to a test number, set in the builder itself. When WhatsApp refuses the send, the notice shows the reason Meta gave — closed window, refused template, invalid number — instead of a generic error.

Your own action

Any plugin can register an action, with its settings form, with PHP alone — see Developer resources.