Use a Campaign to message a list of people once, and an Initiative
when you need waits, reminders, a conversation with the agent, or sends held
for approval (drafts). See initiatives.
How it works
- Your system records an event, for example
payment_link_created, for a person. - Boom starts one run for that event and sends each message you set up: the email first, then the WhatsApp.
- The run ends. Every event starts its own run, so two payment links created at the same time send two messages.
paymentLinkId. Each value sends once, ever, per customer: if an event with the same
paymentLinkId arrives again, no second message goes out. That is what makes
retries from your side safe.
Before you start
- Transactional turned on for your organization. Boom enables it per
organization. If you don’t see Transactional in the sidebar, or creating
one over the API returns
transactional_not_ready, ask your Boom contact. - A channel. A connected WhatsApp number, a verified email domain, or both.
- A template per channel. A WhatsApp template approved by Meta, or a
published email template. Its variables (like
{{1}}or{{customer_name}}) are filled from the event or from the customer’s profile. - An API key for your organization, to send events. See authentication.
Set it up
1
Create the Transactional
In Boom, open Transactional in the sidebar and create a new one. Click
its title to rename it (picking the event names it for you until you do).
Everything below is on the same screen.
2
Pick the event
Under Choose when it sends, pick the event that sends the message. If your
system has not sent it yet, type its name. Event names use letters, numbers
and underscores only:
payment_link_created, not payment_link.created.3
Pick the messages
Under Choose which message to send, click Add a message, pick a
channel and its template. Add a second message to send on both channels.
4
Fill the template
For each template variable, choose where its value comes from: a field of the
event (like
customerName or paymentUrl) or a field of the customer’s
profile (like their first name). A field the event has not sent yet can be
typed as a new field.Every variable must be filled. A message with an empty variable would reach
the customer with the raw {{1}} in it, so Boom refuses to launch until
each one is set.5
Choose what identifies each send
Under What identifies each send?, pick the event field that changes
with every event, usually an id such as
paymentLinkId or orderId. Each
value is sent once per customer. See
how each send is identified.6
Create and launch
Click Create, then Launch on the page that opens. From now on, every matching event sends a message. The
panel on the right shows the exact request your system has to send.
Send the event
Make sure the customer exists, with the phone number and email Boom should use:nameis the event you picked in step 2.externalIdis your id for this event. Recording the sameexternalIdtwice stores it once. What keeps a retry from messaging the customer twice is the field that identifies each send: a value that already sent never sends again.personExternalIdis the customer’s id in your system. Their phone and email come from their profile, not from the event.propertiescarries the fields your messages use, plus the field that identifies each send.
Do it from code or an agent
Everything above can also be done over the API or MCP, in three calls:- Create it with the whole setup:
initiatives_create(POST /api/v1/initiatives) with atransactionalobject. - Check it is ready:
initiatives_transactional_get(GET /api/v1/initiatives/{id}/transactional) returnsreadyToLaunchand amissinglist, each item with how to fix it. - Launch:
initiatives_launch(POST /api/v1/initiatives/{id}/launch).
engagement.workflowState.<property> for a property of the event,
person.<field> for a field of the customer’s profile, or literal:<text>
for fixed text. Every WhatsApp placeholder needs one. Email variables without
one use the template’s own value.
To change it later, send only what changes to
initiatives_transactional_configure
(PATCH /api/v1/initiatives/{id}/transactional); null removes a field. A
launched Transactional starts using the change right away.
Find the ids with journeys_message_channels (WhatsApp numbers),
journeys_message_templates (approved WhatsApp templates for a number) and
journeys_email_templates (published email templates).
Troubleshooting
Nothing was sent. Check that the Transactional is launched, that the event name matches exactly, and that you used the single-event endpoint. Then open Executions on the Transactional to see each event it received. The customer did not get the WhatsApp. Their profile needs a phone number in E.164 format (+52...). If it has one, Meta may have declined to deliver the
template. The Transactional then counts it as failed, not sent, and the
inbox shows why. The most common reason is error 63049: Meta limits how many
template messages one person receives. The limit is per recipient, not only
per burst. A number that received several templates it didn’t answer can have
every later template dropped for hours, even a single one. What helps:
- File order and payment messages under the Utility category, not Marketing. Meta limits Marketing templates much more.
- Don’t send the same person several templates within seconds. Combine them into one message when you can.
- Expect some drops, and send the email too for anything the customer must receive.
pagos@yourcompany.com rather than no-reply@, and start
with a low volume that you raise over a few days.
A tool or field from the docs is missing in your agent. MCP clients keep
the tool list they loaded when they connected. After a Boom release, reconnect
the Boom MCP server so the client picks up new tools and fields.
A second event sent nothing. Its identifying field had a value that was
already sent to that customer. Each value sends once, ever. See
how each send is identified.
Launch is disabled. Every step of the setup list must be done, including
filling every template variable.