caller_email existsplan_type is equal to "premium"detected_topics contains "refund"- AI match: “caller wants to reschedule an appointment”
- Cases define where the call can go.
- Conditions define when the call is allowed to take that route.

Use Cases
Here are common scenarios where the filter block is useful:- Routing based on caller type: Direct callers to different paths depending on who they are. For example, If caller_type = existing_customer, route to account manager; otherwise, to sales intake.
- Time-based call handling: Handle calls differently based on time or day. For example, If current_time is after 6 PM, route to after-hours voicemail; else continue to live agent.
- Service level routing: Serve customers according to their plan or service tier. For example, If plan_type = premium, send to priority support; if not, route to standard support.
- Geographic routing: Route calls based on caller location or language preference. For example, If caller_country = USA, connect to US team; if caller_country = South Africa, route to Cape Town Team.
- Priority-based escalation: Automatically escalate high-priority or urgent cases. For example, If ticket_urgency = High and customer_status = VIP, route to sscalation queue.
How routing works in the Filter block
When a call reaches a filter block, Phonely doesn’t evaluate one big “true/false” decision. Instead, it evaluates your cases in order and picks the first case that matches. Here’s the routing behavior to keep in mind:- Phonely starts with Case 1 and checks the conditions inside it.
- If Case 1’s conditions are met, the call immediately routes to Case 1’s output path.
- If Case 1 does not match, Phonely checks Case 2, then Case 3, and so on.
- If no case matches, the call routes to the Else path.

Set Up a Filter Block
In your flow, click the “+” icon after any existing block. Under Flow Actions, choose Filter. The Filter block will appear with two output paths: Case 1 and Else.Create a case (the routing path)
Click the filter block to open the Filter block configuration panel. Under Cases, you’ll see Case 1 by default. A case is the actual route you will connect on the canvas. Think of it as:“If this case matches, send the call down this path.”To add another route, click Add Case. This creates a new output path on the canvas (e.g., Case 3)

Define Your Conditions inside a case
Each condition is a rule that tells Phonely what to check. Click the filter block to open its configuration panel. Under Conditions, click into Condition 1. You’ll see three main fields:| Field | Description |
|---|---|
| Define Field | The variable or data point you want to evaluate (e.g., caller_phone, customer_name, response). |
| Comparison Operator | Defines how the field is compared, options include: • exists • doesn’t exist • is equal to • is not equal to • is an array containing • matches condition (AI) • does not match condition (AI) |
| Value Type & Comparison Value | Select the data type (String, Number, or Boolean) and specify the value to compare against. AI-based operators do not require a value type, they evaluate natural-language intent statements. |
Choose Available Variables
Click inside define field, this opens the available variables panel. Here you’ll find:- Call Variables – System-generated details like caller ID, phone number, or call metadata.
- Custom Variables – Variables you’ve defined manually.
- Auto-Gather Variables (Beta) – Prompts the caller at the moment a block needs a value (name, email, date, etc.) no extra Talk block required.
- Collect Caller Details – Inputs from Collect or Ask Exactly blocks (e.g.,
caller_name,caller_phone).
Select the Comparison Operator
Click the dropdown that says “is equal to” to see other options:exists
Checks whether the variable has any value. Useful for verifying that earlier blocks captured caller input.
Doesn’t exist:
Use this when you want a fallback path if a value is missing. True when the variable is empty, null, or was never set.
is equal to
Use this when you want exact matching. Best for categories, flags, status fields, or known inputs
is an array containing:
Used when the variable is a list and you need to check if it contains a specific item.
matches condition (AI)
Uses AI to evaluate whether the caller’s message or extracted intent semantically_matches_ a natural-language condition you define.
Enter the Comparison Value
Under the comparison dropdown, click the small menu and choose the correct type of the value you want to compare against.| Data Type | When to Use |
|---|---|
| String | For text values like names or words. |
| Number | For numeric comparisons like age, amount, or count. |
| Boolean | For true/false logic (e.g., is_verified = true). |
Add multiple conditions inside the same case (AND vs OR)
A case can contain more than one condition. When you add multiple conditions, you must choose how they combine:| Logic Option | Description |
|---|---|
| And | All conditions must be true for the case to match. |
| Or | Only one condition needs to be true for the case to match. |
caller_name existscaller_phone exists
- AI match: “caller wants a refund”
Configure Advanced Settings
Here’s what you can adjust advanced settings let you fine-tune what the caller hears while the Filter evaluates cases, and optionally tag the call outcome for reporting. Scroll down to Advanced Settings section. Click to expand.Interim Message
Enable Interim Message to play a short message to the caller while Phonely processes the filter logic (for example, evaluating conditions or selecting the matching case). This helps avoid awkward silence and makes the experience feel intentional. You can choose how the interim message is generated:- Fixed: You write the exact message Phonely should say every time. Example: “One moment while I check that.”
- Promptable: You provide a prompt and Phonely generates a friendly 3–7 word interim message based on your instruction. Example prompt: “Generate a friendly 3–7 word interim message to inform the caller that you are working on their request.”

Post Interim Message Delay
Enable post interim message delay to add a short wait after the interim message is spoken, before the flow continues to the selected case path. Use the Delay Duration slider to set the delay in seconds. This is helpful when you want the interim message to land naturally (instead of the flow moving immediately into the next block).Call Outcome Tagging
Use Call Outcome Tagging to label the call at this point in the flow. You can select an existing outcome or type a custom one. This is useful for analytics because it lets you track how often a specific routing decision occurs (for example, how many calls were escalated vs. handled normally), and later filter/group performance reporting by those outcomes. Example outcome tags:vip_escalationbilling_routedmissing_required_infoappointment_booking_path
Save the Filter
Click Done to confirm and exit. Once done:- The block shows True and False outputs.
- Connect the True path to actions to perform if all conditions pass.
- Connect the False path to fallback or error handling actions.
Example: Using Variables in Filter Logic
Let’s say your Collect block gathered two inputs from the caller:caller_phonecaller_zip_code
“Sorry, we couldn’t find a nearby store based on your location. Please check your ZIP code and try again.”

