FlowsEditorTriggers

Message Received

Fire a flow when a contact sends a message that matches a rule

The Message Received trigger matches an incoming message against a rule. It's the everyday workhorse of flow building — use it for keyword menus, slash commands, media filters, and routing by profile data on top of the message.

Message Received trigger overview

What It Matches

In the second step of the setup modal you pick what the trigger should look at. The rule editor shown in the next step adapts to that choice.

RefinementWhat it matchesTypical use
The message is…The text content of the messageKeyword menus, slash commands, exact greetings
The media type is…The non-text type of the messageRoute photos to an OCR flow, voice notes to transcription, documents to a file handler
The profile field is…A field on the contact's profile at the moment the message arrivesRoute by language, tags, custom CRM fields
Pick the refinement (step 2)

Text Matching

Pick The message is… to match on the text body of the message.

Text rule editor

Operators

OperatorBehavior
EqualsText matches exactly (case-sensitive)
Not equalsText is anything except the given value
ContainsText includes the value anywhere in the body
Not containsText does not include the value
Starts withText begins with the value
Ends withText ends with the value
Matches regexText matches the supplied regular expression
Is emptyMessage has no text body
Is not emptyMessage has any text body

Example — keyword menu: Operator Contains, value /support → matches "/support", "/support please", "hi /support".

Command matching

Messages that start with / (like /start, /menu, /support) use word-boundary matching rather than a plain substring search. This prevents /start from accidentally matching /starting or /starter.

RuleMatchesDoes not match
Contains /start"/start", "/start help", "please /start now""/starter", "/starting"
Equals /menu"/menu""/menu now", "main /menu"

The / prefix is a convention inherited from Telegram bot commands. Use it in your rules the way Telegram users type them — the engine normalises the boundary for you.

Media Type Matching

Pick The media type is… to trigger on non-text messages.

Media type rule editor

Supported media types:

ValueWhat it is
PHOTOAn image attachment
VIDEOA video attachment
VOICEA voice note (push-to-talk audio)
AUDIOAn audio file (song, sent audio)
DOCUMENTA generic file attachment
STICKERA sticker
LOCATIONA shared location pin
CONTACTA shared contact card

Example — route voice notes to AI transcription: Refinement The media type is…, value VOICE → runs an AI Text-to-Speech flow on every voice note.

Profile Matching on Message

Pick The profile field is… to match the sending contact's profile fields at the moment the message arrives.

Profile field rule editor

Combine with AND connectors to build narrow routes:

  • "German-speaking VIPs asking for help": profile.language EQUALS de AND message CONTAINS help AND profile.tags CONTAINS VIP.

The field picker covers system fields (language, tags, phone, email), and every custom field defined in your CRM. The same picker is used for the audience filter on Scheduled triggers.

Review & Create

Review the Message Received trigger

The final step shows a single summary card with the attribute, operator, and value you picked. Tap Create Trigger to save; use the back arrow to adjust any value.

Priority & Overlaps

Message Received is a mid-priority trigger. When multiple flows match the same message, the engine prefers:

  1. More specific matches — three rules all matching beats one rule matching
  2. Webhook, schedule, first-visit, and returning-user triggers (all higher priority than a plain Message Received)
  3. The most recently updated flow (tiebreaker)

Use Catch All for the fallback — don't write not equals "" rules to emulate it.

On this page