Configuration Filters & Eligibility
Not every interaction needs every analysis. Fabius provides two key mechanisms on the Analysis Configuration to control what gets analyzed and if it qualifies for scoring: Filter Templates and Score Eligibility Questions.
Filter Templates
Filter Templates are the primary gatekeeper, determining if a configuration should even be considered for an incoming event (Call, Document, Opportunity stage change).
- Purpose: To ensure the right configuration runs for the right event.
- Location: Set on the Analysis Configuration detail page.
- How it Works:
- Uses Go’s template language.
- Evaluates to
true or false based on the event’s data.
- If
true, the configuration proceeds (potentially to Eligibility checks). If false, the configuration is skipped for this event.
- Available Data (
ClassifiableEvent): Your template has access to information about the event. Key functions/properties include:
- Call Data:
.Call.Call.Title: The title of the call.
.Call.Call.Scheduled: Call start time (Unix timestamp).
.Call.Call.Duration: Call duration in seconds.
.Call.Call.Purpose: Call purpose string (if available).
.Call.Call.Attendees: List of participants (internal/external, names, titles).
TitleContains "search string": Checks if the call title contains the substring (case-insensitive).
PurposeEQ "purpose string": Checks if the call purpose exactly matches (case-insensitive).
CallLengthGT seconds: Checks if duration is greater than seconds.
TranscriptLinesGTE lines: Checks if the transcript has at least lines number of lines (useful for skipping very short/empty calls).
Users(id1, id2...): Checks if specific internal user IDs (from Gong/Zoom) were primary hosts/participants.
Attended(id1, id2...): Checks if specific internal user IDs attended the call.
- Opportunity Data (Contextual to the Event):
.OpportunityStageChange.Edges.Opportunity.Name: Opportunity name (if triggered by stage change).
.OpportunityStageChange.StageName: The stage being entered (if triggered by stage change).
.AssociatedOpportunities: List of opportunities linked to the call/document at the time of the event.
OppCallStageIn "Stage1" "Stage2": Checks if any opportunity linked to the call was in one of the listed stages at the time of the call. Use "" for no stage.
OppCurrentStageIn "Stage1": Checks if the opportunity triggering a stage change is now in one of the listed stages.
OppNameContains "search string": Checks if the opportunity name contains the substring.
- Document Data:
.Document.Name: Document name.
.Document.DocumentType: Type of document.
DocumentNameContains "search string": Checks if the document name contains the substring.
- Account/Contact Data:
.Account.Name: Associated account name.
.Contact.Name: Associated contact full name.
.CustomerCustomerName: Returns Account name if available, otherwise Contact name.
- Custom Fields:
HasCustomFieldWithValueMatching "field_id" "value_regex": Checks if a specific custom field (identified by its Fabius UUID) linked to the event’s primary object (Call, Opp, Doc, Account, Contact) has a value matching the provided regular expression.
- User/Team Data:
UserOnTeam "team_uuid": Checks if the primary user associated with the event belongs to the specified team (User Group) UUID.
- Syntax: Uses standard Go template actions:
{{ function "arg" }}, {{ .Field.SubField }}, {{ and condition1 condition2 }}, {{ or condition1 condition2 }}, {{ not condition }}.
- Examples:
- Only analyze calls with “Discovery” in the title:
{{ .TitleContains "Discovery" }}
- Analyze calls for Opportunities in “Proposal” or “Negotiation” stage:
{{ OppCallStageIn "Proposal" "Negotiation" }}
- Analyze stage changes into “Closed Won”:
{{ .OppCurrentStageIn "Closed Won" }}
- Analyze calls hosted by specific users (User IDs need to be looked up):
{{ .Users "user_id_1" "user_id_2" }}
- Analyze calls for the “Sales Team” group:
{{ .UserOnTeam "team_uuid_from_url" }}
- Complex: Discovery calls OR calls for deals in Proposal stage:
{{ or (.TitleContains "Discovery") (.OppCallStageIn "Proposal") }}
Start simple and test your filters carefully. An incorrect filter can prevent
analysis from running or cause it to run on the wrong events.
Score Eligibility Questions
This check happens after the Filter Template passes, specifically for configurations that involve Score Fields.
- Purpose: To prevent scoring interactions that weren’t meaningful or don’t fit the scoring criteria, even if they passed the initial filter.
- Location: Configured as a list of questions on the Analysis Configuration detail page.
- How it Works:
- An AI reads the interaction content (e.g., transcript).
- It answers “Yes” or “No” to each of your custom questions and a set of standard built-in checks:
- No-Show: Did the client not attend?
- Cut Short: Was the discussion materially incomplete?
- Personal: Was the topic unrelated to business/product?
- Stop Record: Did the external party ask to stop recording?
- If the answer is “Yes” to any of your custom questions OR any of the standard checks, the interaction is deemed ineligible, and the entire analysis for this configuration is skipped for this event.
- Example Questions:
- “Was this purely an internal preparation call without the client present?”
- “Did the primary topic revolve around rescheduling or technical difficulties?”
- “Was this call less than 5 minutes long with minimal substantive discussion?”
Eligibility questions act as exclusion criteria. A “Yes” answer skips the
analysis. Phrase your questions accordingly (e.g., ask if a reason to
exclude is true).
By combining Filter Templates and Score Eligibility Questions, you gain fine-grained control over your analysis workflows, ensuring efficiency and relevance.
Next: Managing Analysis Fields