This article explains how to prevent duplicate email or SMS sends when several customer profiles share the same email or phone value. You will learn what soft IDs and customer attributes each do in this context, and how to add a matching check in your scenario so only the intended profile receives the message.
Soft IDs and customer attributes
In our platform, phone and email can exist in two places:
- As a soft ID, it is used for customer identification and profile management
- As a customer attribute, it is used as the destination when sending SMS or email
That difference matters for campaigns. SMS sends to the customer attribute phone. Email sends to the customer attribute email. The soft ID is not the delivery address.
Because of that, configuring phone or email as a soft ID does not by itself stop duplicate sends. Soft ID setup is still useful for identity, but campaign delivery always follows the attribute.
When duplicate sends happen
Duplicate sends usually appear when more than one profile has the same contact value stored as an attribute.
For example, several profiles may have a customer attribute phone = +421900000001. An SMS scenario that targets profiles with that attribute can send the same message to each of them. Even if soft ID phone exists in the project, the campaign still evaluates and sends based on the attribute.
The same pattern applies to email when multiple profiles share the same email attribute.
How to prevent it
To prevent those duplicates, add a condition in the scenario that requires the soft ID to match the attribute used for sending:
- For SMS: soft ID
phoneequals customer attributephone - For email: soft ID
emailequals customer attributeemail
Only profiles that pass the check continue to the campaign node. Profiles with the attribute filled but not matching the soft ID are filtered out.
Using the earlier example, if several profiles have an attribute phone = +421900000001, but only one also has a soft ID phone = +421900000001, only the matched profile receives the SMS.
Before you start
Make sure that:
- Customer attributes
phoneand/oremailexist and use lowercase names. - The same values are also stored as soft IDs where you want this protection.
- New phone numbers and emails are written to both the attribute and the soft ID when you collect them.
If the soft ID is missing or differs from the attribute, the matching condition will block the send for that profile.
How to add the matching check
- Go to Campaigns > Scenarios and open the scenario that sends email or SMS.
- Add a Condition node before the Email or SMS node, and before any other nodes that should run only for the matched profile.
- Configure the condition:
- For SMS: soft ID
phoneequals customer attributephone For email: soft ID
emailequals customer attributeemail
- For SMS: soft ID
- Route the paths:
- If the values match, continue to the campaign node
- If they do not match, end the flow or use a non-sending path
- Test before go-live:
- A profile where soft ID and attribute match should receive the message
- Profiles that share the attribute but do not match the soft ID should not
Confirm the result in scenario runs or campaign events.
Important notes
- Keep soft ID and attribute values consistent when importing or tracking contact data. If they drift apart, valid customers may be filtered out by the condition.
- Use a consistent phone number format. We recommend an international format with
+or00, so comparisons succeed. - Apply this check in every scenario where duplicate delivery to the same email or phone number would be a problem.