Skip to content
Expedify
Your First AI Agent

Module · Real Channels & AI

Reaching your customer: messaging nodes

Lesson 7 of 8 · 7 min

A workflow that decides correctly and tells nobody has done nothing. This lesson is about the last node — the one that reaches an actual human — and about the fact that the channel you pick decides more of your build than any other choice except the trigger.

Every node in this lesson is irreversible. The product classifies sends as external and irreversible, and it means it: there is no unsend. Up to now a mistake cost you a wrong CRM field. From here a mistake reaches a customer. Test with your own address before you test with anyone else's.

Two ways to send, and they are not interchangeable

Almost every send you build is one of these two, and picking the wrong one is the most common structural mistake in this part of the product.

The send node you have already used is Send Template Message — lesson 1's welcome.

What it sends

Send Template Message
a template from your library, by id
Email Send
content you write in the node itself

Channels

Send Template Message
email · sms · whatsapp
Email Send
email only

Who it goes to

Send Template Message
a contact, resolved from CRM data
Email Send
an address you supply

Tracked in Marketing

Send Template Message
yes — it creates a campaign, so opens and clicks are attributable
Email Send
no

Reach for it when

Send Template Message
the message is a repeatable business message: a welcome, a reminder, a receipt
Email Send
the message is one-off, internal, or assembled from workflow data

The send you have already run

Five fields, and three of them are about resolving who this is going to.

Scroll for all 4 steps →

A reply is not a send

There is a third shape, and it is easy to miss because it looks like the other two. WhatsApp Output replies inside a conversation that is already open — which means it only works in a workflow that a WhatsApp message started. It is not a way to message someone out of the blue.

  • Proactive — you start the conversation. Send Template Message, with a template. Works from any trigger.
  • Reactive — they started it. WhatsApp Output, in a workflow whose trigger was their message. Free-form, because a conversation is open.

This distinction is not Expedify's invention. It is how WhatsApp itself works, and every platform has to obey it. Understanding it once explains a whole category of “why won't this send?”.

What each channel costs you before it works

This is the wall people hit, and it is better to hit it now, on a page, than three hours into a build:

Web chat

What you need first
nothing — it is built in
How hard
start here

Email

What you need first
an email integration connected, and a sending domain you have verified
How hard
an afternoon, mostly waiting for DNS

WhatsApp

What you need first
a Business Solution Provider account, a connected number, and a template approved by Meta before you may send it
How hard
days, and the approval is not yours to rush

SMS

What you need first
a provider, and sender-id rules that differ by country
How hard
varies wildly by country

The WhatsApp template rule catches everyone. You cannot send WhatsApp text you just wrote to someone who has not messaged you. You send an approved template, and the send node needs four separate ids to do it — the template, the integration, plus the segment and campaign that track it. This is why a WhatsApp build is never “just add a send node”, and why the sensible order is to get the workflow right on email first and switch the channel once the logic is proven.

Where the recipient comes from

Look again at the send node above. There is no “To” field, and that surprises people who expect one. Instead there is contact_source and contact_input_variable — because the node addresses a CRM contact, not an address. You hand it the contact and it resolves the email or the number from the record.

That is why lesson 1's send needs only {{new_contact.new_data.id}} and lesson 2's scheduled version needs only {{each.current_item.id}}. Same node, same field, different source — and neither one ever handles an email address directly. Keeping contact details in the CRM instead of in workflow config is what makes an unsubscribe or a corrected number work everywhere at once.

The product's own warning on this node: WhatsApp send needs channel: whatsapp + FOUR ids (template_id, integration_id, workflow_segment_id, workflow_campaign_id).

Also contact_input_variable + a tracking_options.template_parameters typed map (param_N: {type, field, entity}).

Key takeaways

  1. Sends are irreversible. Test on yourself first — the product classifies these nodes accordingly.
  2. Send Template Message for repeatable business messages; Email Send for one-off content you write.
  3. A reply inside a live chat (WhatsApp Output) is a different node from a proactive send, and only works when their message started the workflow.
  4. Web chat needs nothing, email needs a verified domain, WhatsApp needs a BSP and an approved template.
  5. A send node addresses a contact, not an address — it resolves the details from the CRM record.
  6. Build and prove the logic on email, then switch the channel.

Try it yourself

Pick the message you would most like to automate and answer the two questions that decide the whole build before you open the builder: is it proactive or a reply, and does it already exist as an approved template? Those two answers choose your node, your channel, and how long you will be waiting before anything can send.

Next: Go live — activating a workflow, and adapting a real marketplace template into your own org.