Contact conditions
The Tag, Field, Contact's language, First contact and Follow state rules — what each one reads, which operators it takes and when it can mislead you.
Last updated: September 30, 2026
On this page
Your flow needs to know who it is talking to: has this person bought before, do we know their city, is this their first message, do they follow our account? Contact conditions ask these questions and split the flow according to what is on the contact card. This article covers all five rules one by one: Tag, Field, Contact's language, First contact and Follow state.
💡 These rules live inside a condition step. For how the step is added and how the branches are connected, see The condition step and branching.
In this article you will find:
- The Tag rule
- The Field rule
- The Contact's language rule
- The First contact rule
- The Follow state rule
- Using contact conditions together
- Limits and known issues
- Common mistakes
The Tag rule
Tag is the most used rule of all: it asks whether the contact has or doesn't have a given tag.
- Choose Tag as the rule kind.
- Pick the operator: has or doesn't have.
- Type the tag into the value box. When you tap the box, the tags already in use on your account appear as suggestions; picking from the list removes typos at the source.
Tag comparison ignores case and accents: VIP, vip and vıp are one and the same tag. A tag can be at most 60 characters long.
A tag carries no value — it is either there or it is not. Information like "which city is this person in" belongs in a field, not a tag.
A concrete example: a coffee shop runs a loyalty card. Anyone who gets a card is given the loyalty tag, the condition in the flow asks "Tag · has · loyalty", and the True branch says "We added points for this purchase too"; the False branch explains the card itself to someone who has not heard of it.
The Field rule
The Field rule looks at the value of a piece of information on the contact card. That is the difference from a tag: here there is content, and you compare against it.
- Choose Field as the rule kind.
- In the field picker, pick a built-in field (Name, Email, Phone) or choose Custom field and type its key.
- Pick the operator: equals, doesn't equal, contains, doesn't contain, is empty, is filled, greater than, less than.
- Fill the value box for every operator except is empty and is filled (at most 200 characters).
A custom field key is made of lowercase letters, digits and underscores, starts with a letter and is at most 40 characters long (for example city, cart_total, appointment_date). If you type capitals or accented letters, the panel corrects them for you.
How the comparison is made — case, accents, number conversion — is spelled out in Comparison operators.
⚠️ Note: greater than and less than convert the value to a number. If the field holds "750 USD" the conversion fails and the rule returns false. Write only digits into fields you intend to compare numerically.
The Contact's language rule
The Contact's language rule lets you decide which language to write in.
- Choose Contact's language as the rule kind.
- Pick the operator: is or is not.
- Pick the language from the list: Turkish, English, Arabic, German, French, Spanish, Russian.
The rule reads in this order: first the language on the contact card, and if that is empty, the account's language. There is no automatic language detection — we never guess a language from what the person wrote. The language is chosen by hand in the Language field on the contact card, or set inside a flow with a Write to field action.
That makes a practical arrangement for bilingual businesses: you show "Türkçe / English" buttons at the start of the flow, write the language according to the choice, and every later branch reads this rule.
The First contact rule
The First contact rule tells you whether this is the person's very first contact with your business. Its operator is yes or no, and it has no other setting.
The "first contact" stamp is applied when the contact card holds no earlier incoming message and no earlier event record. The stamp is written when the session starts and does not change during it: even if the person writes a second time mid-flow, they still count as first contact in the same session.
The stamp is not inherited between sessions. If the person taps a button in an old message days later, the new session reads no for first contact. That is deliberate — otherwise a customer you met months ago would get a "Welcome, let's get acquainted" message.
Its typical use is simple: an introduction message and a short menu on the True branch, and a straight-to-business "How can we help?" on the False branch.
The Follow state rule
The Follow state rule asks whether the person follows your Instagram account. It has three values, and understanding the trio is the key to the whole rule:
- yes — Instagram explicitly said they follow.
- no — Instagram explicitly said they do not follow.
- unknown — The information could not be read.
"Unknown" is a real and frequent state: it is the answer when the person has never sent you a DM, when the account field does not return the information, or when Instagram did not respond at that moment. That is why "no" and "unknown" are never the same thing. If you are building a message for people who do not follow, build the rule with no; telling someone in the unknown state "you don't follow me" means offending a customer who does.
The follow information is refreshed from Instagram immediately before the rule is evaluated. That is the only reason "follow first, then we'll send the code" flows work: if the person followed a moment ago, the rule sees the current value. If the round has no time budget left for the refresh, the stored value is used; the session log distinguishes the two with a "refreshed from Instagram" note.
⚠️ Note: This rule is only meaningful on Instagram. On WhatsApp-only accounts it never appears in the rule list, and on an account with both channels the result in WhatsApp conversations is always "unknown" — the pre-publish check reports this as a warning.
On every flow that uses the follow rule, the pre-publish check also raises a warning reminding you of the "unknown" branch. The way to clear it is to genuinely handle the third state: either set the branches up as yes and "everyone else", or chain two conditions and write unknown its own message.
Using contact conditions together
A furniture shop builds its measurement-appointment flow like this:
- First condition: "First contact · yes" → a short introduction on the True branch, then on to the second condition.
- Second condition: "Field · city · is empty" → the city is asked on the True branch and the question is skipped on the False branch.
- Third condition: "Tag · has · vip" → priority appointment slots on the True branch, standard slots on the False branch.
Each step asks a single question. Someone opening the flow months later can read what happens and why, and the logs show which condition picked which branch.
Limits and known issues
- A Tag value is at most 60 characters and a Field value at most 200.
- A contact holds at most 50 tags; once that limit is reached, no new tag is added.
- The Follow state and Post rules are listed only on accounts with Instagram connected.
- In the Contact's language rule, if both the contact card language and the account language are empty, the rule never matches with the is operator.
- Each rule kind is a separate plan feature. If your plan does not cover a rule, the session stops at that step and a "Plan lock" line is written to the log.
- Inside a loop that never waits for the person, the pre-publish check warns that Tag, Field, Contact's language and Follow state "cannot change within the loop": the flow takes the same branch every round.
Common mistakes
- Mixing up tags and fields. Information with a value (city, amount, date) goes in a field; information without one (bought / did not buy) goes in a tag.
- Treating "no" and "unknown" as one in Follow state. Without a third branch, a follower gets the wrong message.
- Writing a unit inside a numeric field. "750 USD" is not a number; the greater than rule returns the wrong result.
- Expecting the language to be detected. The contact's language is picked by hand or written by the flow.
- Treating "first contact" as a permanent tag. The stamp belongs to that session only. To mark the person permanently, add an Add tag action in the same step.
If a contact condition does not take the branch you expected, see My condition takes the wrong branch or contact our Support team.
Related articles
Was this article helpful?