Personalize a WhatsApp Campaign with Claude: First Names and Custom Fields (2026)
A message that starts with the person's name gets read. Tell Claude which fields to use, test the campaign on a list of one, and check the counters before it goes to everyone.
Daniel Roth6 min read

On this page
- How does personalization work in a campaign?
- Where do the custom values live?
- What do you need before you start?
- Step one: test on a list of one
- Step two: the real audience
- What happens when a field is missing?
- How do you watch it and stop it?
- What can go wrong?
- Is it safe to let Claude start campaigns?
- Related guides
- Frequently asked questions
The flower shop has 40 customers who ordered for Mother's Day last year. The reminder is the same for all of them, except for the first name, and the bouquet they bought. Typing 40 messages is the slow way, and a copy of one text to all 40 is the cold way.
With the Blueticks WhatsApp MCP connector, Claude can run a campaign where every recipient gets their own name and details filled in. This guide covers the part that goes wrong most often, which is the fields. It covers what a token is, where it comes from, what happens when one is missing, and how to test on a list of one before the real send.
How does personalization work in a campaign?
The campaign text can contain tokens in single curly braces, like {firstName}. For each recipient, Blueticks replaces the token with that person's value. Matching is not case-sensitive, so {firstname} and {firstName} are the same token.
Two kinds of token exist:
| Kind | Tokens | Where the value comes from |
|---|---|---|
| Built in | {whatsappname}, {displayname}, {phone}, {mobile} | Always available, no setup |
| Custom | Any name you choose, such as {firstName} or {product} | The variables you attach to each contact in the audience |
A custom token wins over a built-in one with the same name. If you set a variable called whatsappname for a contact, that value is used instead of their WhatsApp profile name.
Where do the custom values live?
In the audience. Each contact in an audience has a phone number (or a chat id) and, optionally, variables: pairs like firstName = "Dana" and product = "peonies". Claude adds them with audiences, action append_contacts, and every variable name becomes a token you can use in the text.
A contact is a phone number in international format, a chat id, a group id or a channel id. A plain name is not a valid contact, so Claude has to look the person up first if you give it only a name.
What do you need before you start?
A linked WhatsApp number in Blueticks and the connector added to Claude. If you have not done that, how to connect WhatsApp to Claude covers it. The connector URL is https://api.blueticks.co/mcp and you sign in with OAuth.
The campaign sends from the engine connected to your account, so it has to be online. The other tools are listed in the WhatsApp MCP tools guide.
Step one: test on a list of one
A campaign starts sending as soon as it is created. So test it on an audience that contains only you.
Using Blueticks, create an audience called "Test, me only" with one contact: my own number +972501234567, with the variables firstName = "Dana" and product = "peonies". Show me the audience before you go on.
Then run the real wording against it:
Create a campaign called "Reminder test" for the "Test, me only" audience with this text: "Hi {firstName}, your {product} order from last year was a hit. Want me to hold the same bouquet for May 10?" Before you create it, show me the audience and the text, and wait for my yes. When it has been created, tell me the campaign's status and counters.
You get one message on your own phone, with "Dana" and "peonies" in the right places. If the text looks wrong, fix the wording before it goes anywhere near a customer.
Step two: the real audience
Build the real audience the same way, one line per customer:
Add these contacts to the audience "May reminders", with the variables firstName and product: +972501111111 Noa, peonies; +972502222222 Eli, tulips; +972503333333 Maya, roses. Show me the audience when you are done.
Claude calls append_contacts with the numbers and variables. Check the list it shows you against your source before you go on, because every token in the text must have a value for every contact.
Then create the campaign with the text you tested. The tool takes a name, the audience, the text, and optionally a file with a caption.
What happens when a field is missing?
That is controlled by one setting, on_missing_variable:
fail, the default. If any contact lacks a field the text uses, the campaign is rejected when it is created. Nothing is sent. This is the safe choice.skip. The campaign is accepted, and for the contacts who lack the field, the token text is left as it is. That person receives a message with the raw{product}text in it.
For a customer-facing message, leave it on fail. Use skip only when you can live with a gap and have checked the text still reads right with the token left in.
How do you watch it and stop it?
Ask Claude for the campaign's status: "How is the May reminders campaign doing?" It reads the campaign with its status and delivery counters. You can also say:
- "pause the campaign", then "resume it" later;
- "cancel the campaign".
A cancelled campaign cannot be resumed. If you want to continue after a cancel, create a new campaign for the people who are left.
What can go wrong?
- A token with a typo.
{firstNme}has no value, so the create is rejected underfail, or goes out as plain text underskip. The test on a list of one catches it. - A variable named differently from the token. Name the variable exactly as the token, such as
firstNamefor{firstName}. - A name instead of a number. Give each contact as a phone number or chat id.
- The engine is offline. Check the engine status in Blueticks, reconnect WhatsApp, and ask again.
- Sending to people who did not expect it. Send to customers who asked to hear from you. A personal message to a stranger is still a message to a stranger.
Is it safe to let Claude start campaigns?
Creating a campaign sends messages to every contact in the audience, and a sent message cannot be taken back. Anthropic's custom connector guide says that during Research, Claude can use connector tools without further approval, so do this in a normal chat instead. When Claude asks for approval, read the audience name, the text and the number of contacts before you allow it, and avoid "Allow always" for a connector that can send messages.
The line "wait for my yes" in the prompt is a request to Claude. In a normal chat, your approval of each call is what stops an action.
Related guides
For the one-message version of this, see scheduling WhatsApp messages from Claude, which also introduces campaigns. To check what went out, there is the daily check with Claude. Plans and prices are on the pricing page, and you can start free.
Frequently asked questions
Can Claude put each person's name in a WhatsApp campaign?
Yes. Write the text with a token such as {firstName}, store each person's first name in the audience, and Blueticks fills it in per recipient.
Where does the name come from? From the variables on each contact in the audience. If you set none, the built-in tokens are still available, such as the person's WhatsApp profile name.
What happens if a contact has no value for a field?
By default the campaign is rejected when it is created, and nothing is sent. With skip, the message goes out with the token text left in.
Can I test a campaign before the real send? Yes, and you should. Make an audience of one, with your own number, and run the same text against it.
Can I stop a campaign that is running? Yes. Ask Claude to pause or cancel it. A paused campaign can be resumed, and a cancelled one cannot.


