# Create a custom filter to send a flow message just once

Section: Flows

Description: Label visitors with a custom contact property and check it in your flows, so a message (like a discount code) is sent to each person only once.

Verified against Tidio panel 12.304.0

Last updated: 2026-11-05

Source: https://help.tidio.com/articles/send-flow-once-filter/

Do you want your flow to send a specific message (e.g. a discount code) only once to a particular visitor, but none of the current conditions matches your scenario? In this case, the best way is to **label** the person with a custom contact property and use it as a filter later on.

 



 

A good example would be sending a discount code to a user who abandoned the cart but has not made a purchase yet (i.e., if the client already bought something - don't send him the discount code when they abandon the cart on the next purchase). There are, of course, other variations available, too, covered at the end of the article.

 



 

**In this article, you'll learn: **

 

- [How to create a flow with a custom filter](<https://help.tidio.com/articles/send-flow-once-filter/#create-a-bot>)
- [How to use the flow with a custom filter](<https://help.tidio.com/articles/send-flow-once-filter/#how-to-use-the-bot>)

 



 



 

## Create a flow



[Video](<https://help.tidio.com/article-media/send-flow-once-filter/walkthrough.mp4>)



Silent walkthrough. Mark buyers with a contact property, then skip them in another flow with a condition.

 



 

The first step is to create a custom contact property, this will be custom information you can save about your clients (so it can be used not only in flows but during a conversation as well, it's basically like adding a new field on the visitor details panel on the right side). For the sake of the example, we'll create a property called: "Has purchased"

 



 

You can do it via **Settings \> Fields**: open the **Contact properties** tab and click on **Create contact property**. Fill in the **Property Label** (e.g. Has purchased), check the **Internal Property Name**, choose **Text** as the **Property Type**, and hit **Create**:

 



 

![The Create a new contact property window opened from Settings \> Fields \> Contact properties, with "Has purchased" in Property Label, "has\_purchased" in Internal Property Name, Text in Property Type, and the Create button](<https://help.tidio.com/article-media/send-flow-once-filter/78.1.png>) Fields \> Contact properties, with "Has purchased" in Property Label, "has\_purchased" in Internal Property Name, Text in Property Type, and the Create button" width="523" height="573" loading="lazy" decoding="async"\>

 



 

You can also add a new property straight from the flow editor - the property list in the **Update contact property** action has an **Add new contact property** option.

 



 

The next step is making the flow assign that property (and a correct value) once someone makes a purchase. This one can be done via the **Flows** section, by setting a **Visitor opens a specific page** trigger and specifying the address of your 'Thank you, your order has been completed' page.

 



 

If the URL is dynamic, set just a part of it (e.g. **/order-completed/**) and select **Address contains** in the trigger's settings (it's selected by default). Once that's done, connect the action called **Update contact property** and use the previously created **Has purchased** property, and make the action **Set** a **yes** value to it.

 



 

![A flow with the Visitor opens a specific page trigger connected to an Update contact property action; the action's settings show the Has purchased property, Action: Set and the value yes, with "Update another contact property" below](<https://help.tidio.com/article-media/send-flow-once-filter/78.2.png>)

 



 

#### The logic:

 

If the person reaches the page where the order is done, the chat will assign a Has purchased: yes info to that person, in this particular form:

 



 

![The customer Info panel has the contact property "Has purchased: yes" outlined.](<https://help.tidio.com/article-media/send-flow-once-filter/legacy-13305857910172.webp>)

 



 

Now, head over to the abandoned cart flow (for example, the [Cart abandoned](<https://help.tidio.com/articles/abandoned-cart/>) flow), and at the very beginning of it (just after the trigger), add a **Based on variable** condition.

 

In it, select the **Has purchased** property and type the **yes** value. Then use the **Else** option when connecting the condition to the rest of the flow:

 



 

![An abandoned cart flow with a Based on variable condition right after the New event trigger, its Else output connected to the rest of the flow; the condition's settings show the Has purchased property, the "is equal to" operator, the value yes and the Else output](<https://help.tidio.com/article-media/send-flow-once-filter/78.3.png>)

 



 

#### The logic:

 

If the person doesn't have a **Has purchased: yes** property assigned to them - the flow will move on according to the setup and send the discount code.

 



 



 

## How to Use the Flow

 



 

#### Not sending an automatic message when the visitor has contacted you

 



 

Suppose you'd like a specific message not to fire when someone has already contacted you. In that case, you can 'mark' that person with a flow that starts with the **Agent doesn't take the conversation** trigger and uses **Update contact property** to set a custom contact property (e.g. Contacted us) indicating that the person has reached out to you.

 



 

![A flow with the Agent doesn't take the conversation trigger connected to Update contact property; the action's settings show the Contacted us property, Action: Set and the value yes](<https://help.tidio.com/article-media/send-flow-once-filter/78.4.png>)

 



 

Once that's set, you can use the **Based on variable** condition to make the message or flow not fire if the person was in touch earlier.

 



 

![A flow with the Visitor returns to the site trigger followed by a Based on variable condition; its settings show the Contacted us property, "is equal to", the value yes and the Else output](<https://help.tidio.com/article-media/send-flow-once-filter/78.5.png>)

 



 

### Multiple flows using the same message

 



 

If you have different flows that send the same message, but you want it to be sent just once, you can mark visitors with a property like **Message received**, and set up each flow first to check if the person got the specific message already, and if not - send it to them.

 



 

![A flow with Visitor opens a specific page, then a Based on variable condition (Message received, "is equal to", yes) whose Else output leads to Update contact property](<https://help.tidio.com/article-media/send-flow-once-filter/78.6.png>)

 



 

The **Update contact property** action should then add the label to the person.

 



 

![The Update contact property settings in the same flow, with the Message received property, Action: Set and the value yes, and "Update another contact property" below](<https://help.tidio.com/article-media/send-flow-once-filter/78.7.png>)

 



 

## Further reading

 

- [Tracking an Abandoned Cart using Tidio](<https://help.tidio.com/articles/abandoned-cart/>)
- [Flow editor: Triggers](<https://help.tidio.com/articles/flow-editor-triggers/>)
- [Flow editor: Actions](<https://help.tidio.com/articles/flow-editor-actions/>)
- [Conditions](<https://help.tidio.com/articles/glossary/#conditions->)
