Before you touch the template, look at the field. A blank merge field can mean nothing ever wrote to it, and a fallback only hides that.
Two ways this shows up
The first is loud. You add a pipe filter to a merge tag so contacts with an empty field still get a sensible word, and the send fails with a template parser error. In the case we recorded it was a send from the conversation composer, and nothing went out.
The second is quiet. An email arrives with a gap where the merge field should be, because the field on that contact is empty and nothing told HighLevel what to show instead.
Neither one shows in the editor. The composer we used displayed raw merge tokens before sending, so the message looked the same whether the field was filled, empty, or about to break the send.
Why the pipe filter fails
The '| default:' syntax comes from Liquid templates. In the send we recorded, HighLevel's parser didn't skip over it. It rejected the whole message.
A Handlebars-style conditional did work when we tested it in email. That's the pattern we use for fallbacks outside the email builder, with one limit we hold to: it's proven in email, and we haven't verified it by sending a text.
The fix in an email
The email builder has its own fallback, and it's the one HighLevel documents. The default text appears only when the field is empty, and it never changes the value stored on the contact.
HighLevel's help page also documents a default helper you can type into the email builder. If you use it, insert the field from the field picker and keep the token exactly as it comes out. The page's own examples spell the first-name field two different ways, so a token copied from an example can fail without telling you. HighLevel has changed this before, so check the current screen.
- Open the email and click the merge tag you want to cover.
- Type the fallback text in the Default Text Editor.
- Click Save.
- Repeat for every other place the same tag appears. Defaults are set per occurrence, so the greeting's default doesn't carry to the sign-off.
- Check the subject line and preview text as well. Defaults work there, not just in the body.
The fix in a snippet
The Default Text Editor belongs to the email builder. In a snippet, the fallback has to live in the text itself. Take the pipe filter out, then write a conditional in its place:
{{#if contact.your_field}}{{contact.your_field}}{{else}}your fallback text{{/if}}
Swap contact.your_field for the exact token your field picker inserts, in both places. Our test proved this block in an email send. Treat a text snippet as untested until your own SMS send says otherwise.
- Remove the '| default:' filter from the snippet.
- Add the if/else block, using the field token from your picker.
- Send it to an internal test contact whose field is empty, and check that the fallback text arrives.
- Fill the field on that contact, send again, and check that the real value arrives.
- Only then put it in front of real contacts.
Prove it twice by sending: once with the field empty, once with it filled. The editor won't show you either result.
Check the field before you blame the template
A fallback covers an empty field. It doesn't explain it. When a value goes missing for some contacts, open one of them and ask what was supposed to write that field.
We've seen a blank that looked like a time zone problem turn out to be a field nothing had ever written. Adding a fallback there would have made the message read fine and left the real fault in place.
- Open a contact where the value came out blank and look at the field itself.
- Find the workflow, form or import that's meant to fill it.
- Check whether that contact ever went through it.
Rather have it set up for you?
We'll find what should be writing your fields, put in fallbacks that are tested to work, and prove them with real sends, starting with a 30-minute 1:1 with Rob.
Mistakes that bring it back
A fixed fallback can break again the next time someone edits the message. Watch for these.
- Trusting the composer, which shows raw tokens rather than what the contact will read.
- Treating an email test as proof for SMS.
- Setting one default and assuming it covers every copy of the same tag.
- Typing a field token from an example instead of inserting it from the picker.
- Using a fallback to cover a field that a broken workflow should be filling.
