Guide to rule conditions
Front's rules are made up of three types of conditions:
- When: trigger events that qualify a rule to start scanning for the filter conditions
- If: filters that need to exist in order for the rule to run the actions
- Then: resulting actions that occur from the rule once conditions are met
This article provides a description of each when trigger, if filter, and then action offered in Front's rule engine. For more general information about how rules work, see Understanding Rules.
Rules and rule conditions available in Front differ based on your plan. See the pricing section at the end of the page for more information.
The When section contains triggering events that will cause Front to start evaluating the conditions of your rule and see if they are met.
When - Message
- Inbound message is received: A new message arrives, either a brand new conversation or within an existing thread.
- Conversation is moved*: A conversation is moved from one shared inbox to another shared inbox within the same Team.
- Outbound message is sent (new conversation): The first outgoing message in a new thread is sent (not a reply in an existing conversation).
- Outbound reply is sent (existing conversation): A reply is sent in an existing thread.
- Message delivery fails*: A message fails to be delivered.
When - Status
- Conversation is archived*: A conversation is archived.
- Conversation is reopened*: A conversation is un-archived.
- Conversation is deleted*: A conversation is deleted.
- Conversation is restored*: A conversation is restored from the trash.
- Snooze expired*: When a snooze expires and conversation is reopened.
When - Teammates
- New comment is added*: An internal comment is posted in a conversation, excluding internal discussions (updating an existing comment does not count). You can optionally input the comment author and the comment body content.
- Teammate is mentioned*: When one or more teammates are @mentioned in a comment. Select who the teammates are.
- Assignee is changed*: A conversation is assigned or re-assigned to a teammate. Note that rules with the Assignee is changed trigger will not be triggered over a load balancing rule assigning a conversation.
- Conversation is unassigned*: A conversation is un-assigned from a teammate.
When - Tags
- Tag is added: A conversation is tagged.
- Tag is removed*: A tag is removed from a conversation.
The If section contains the filters you've set that must exist in order for the actions to run.
If - Status
- Conversation is currently archived: Conversation is in an archived state.
- Conversation is open: Conversation is in an open state.
If - Inbox
- Conversation is in specific inboxes: Check off the inboxes the rule should apply to, or choose Any inbox at the top.
- Conversation is in specific channels*: Check off channels the rule should apply to.
- This condition works on the whole conversation, so once a specified channel is associated with the conversation at any point, this condition will be true for the conversation moving forward.
If - Recipient
- From field contains: Specific requirements of the text in the From field, which has sub-filters.
- To field contains: Specific requirements of the text in the To field, which has sub-filters.
- Cc field contains: Specific requirements of the text in the Cc field, which has sub-filters.
- Bcc field contains: Specific requirements of the text in the Bcc field, which has sub-filters.
- To or Cc field contains: Specific requirements for either the To or the Cc field, which has sub-filters.
- Any recipient field contains: Specific requirements of the text in any of the From, To, Cc, Bcc fields, which has sub-filters.
If - Contact
- Contact is in specific group*: Choose the contact group that the contact is in.
- Contact is not in specific group*: Choose the contact group that the contact is not in.
- Custom contact field*: Choose the custom contact field you have created.
If - Tags
- Conversation has specific tag(s): Conversation already has the chosen tag(s).
- Conversation does not have specific tag(s)*: Conversation does not have the chosen tag(s).
- Has no tags*: Conversation has no tags at all.
If - Content
- Email subject contains: Specific requirements of the text in the conversation subject line, which has sub-filters.
- Headers contain*: Specific requirements for certain text or elements that the headers contain, which has sub-filters.
- Message body contains: Specific requirements of the text in the conversation body, which has sub-filters. You can also click the dropdown arrow on the top right to optionally choose whether you want the rule to Include past email history, which refers to whether you want the rule to scan the past email history of the thread when there is a new inbound and/or outbound message.
- HTML message body*: Specific requirements of the HTML text in the conversation body, which has sub-filters. For inbound direction messages, the condition works for the message body and signature. For outbound direction messages, it applies only for the message body and not the signature.
- Message language is*: Language of the conversation body (if the text is too short or contains multiple languages, Front's language detector will not detect the language).
- Message has attachments*: Conversation has attachments.
- Message has no attachments*: Conversation does not have attachments.
If - Message
- Message type is*: Filter the type of message, options being Email, Tweet, Retweet, Direct Message, SMS, Facebook, Intercom, Yalo/WhatsApp.
- Message direction is*: Choose whether conversation is inbound or outbound direction.
If - Time*
- Unreplied after*: Set the amount of time that the message (inbound or outbound) is unreplied, options being Minutes, Hours, Days, Weeks, Months, Years.
- Conversation unassigned and open after*: Set the amount of time that the message (inbound or outbound) is unassigned, options being Minutes, Hours, Days, Weeks, Months, Years.
- Time passed since trigger is*: Set amount of time to pass after the trigger, before the action will run. This condition will work with any trigger.
- During business hours*: Compares time to Business hours defined in Analytics.
- Outside business hours*: Compares time to Business hours defined in Analytics.
- Time is between*: Define the time frame and choose the time zone.
- Day of the week is*: Choose the day(s) of the week you want the rule to apply to.
If - Teammates
- Assignee currently is one of*: Conversation is assigned to one of the people listed.
- Assignee currently is not one of*: Conversation is currently not assigned to one of the people listed.
- Conversation is unassigned*: Conversation is in an unassigned state.
The Then section contains the list of actions that will result when all filters are met.
Then - Teammates
- Assign to teammate(s)*: Assign conversation to a specific teammate (only if conversation is not already assigned) or assign to a group of teammates. If you select more than 1 teammate, a new sub-menu will show to choose the assignment Randomly, Round-robin*, or Load balancing**. Conversations will not be assigned to a teammate who currently has their status set to Unavailable or teammates who do not already have access to that conversation. Conversations being assigned by a load balancing rule will not trigger sequential rules with an Assignee is changed trigger.
- Assign based on a contact field*: Choose from one of the contact fields for this contact.
- Unassign*: Unassign the conversation.
- Notify teammates: This will show the conversation in their Shared with me section. You have the option here whether to notify the teammates if they are Out of Office or Do Not Disturb status. Notifying teammates who didn't have access to the conversation will grant them access.
- Notify assignee (if any)*: this will notify the teammate assigned to the conversation, and bump the conversation up in their Assigned to me folder.
Then - Status
- Archive conversation: Archive the conversation.
- Reopen conversation*: Unarchive the conversation.
- Delete conversation*: Move the conversation to Trash. Note: you cannot set a rule to permanently delete messages automatically.
Then - Organization
- Add tag: Add a specific tag.
- Remove tag: Remove a specific tag.
- Move to a specific inbox: Move conversation to a specific inbox. Note: moving a conversation to a different inbox breaks the sync between Front and Google/Office365 for that conversation.
Then - Message
- Reply with a message template: Reply with a specific message template, either Once or Always (if the conversation already has an outbound message, an outbound reply, or more than one inbound message in it, reply Once will not send anything).
- Forward to*: Forward the email to other addresses (only for email conversations).
Then - Contacts
Add contact to a specific group*: Add the contact to specific contact groups.
Remove contact from a specific group*: Remove the contact from specific contact groups.
Send to Hipchat*: Send the conversation to a specific Hipchat room.
Log message in Hubspot*: Log the message to the contact in Hubspot if the contact exists.
Trigger in PagerDuty*: Trigger an alert in PagerDuty.
Create activity in Pipedrive*: Add content of the message as a new activity for the contact, if the contact exists.
Create lead in Salesforce*: Create lead in Salesforce for the contact if it does not exist already.
Send to Salesforce*: Log message as an activity in Salesforce. The assignee in Salesforce is the author of the message or the assignee of the Front conversation if they're a Front teammate who has signed into the Salesforce integration. After checking the message author and then the assignee, if no owner is found, the activity defaults to assigning the activity in Salesforce to the Front teammate who first enabled the Salesforce Integration.
Send to Slack*: Send the message to a specific Slack channel or user.
Send to a Webhook*: Send the message to your webhook URL.
Send to Zapier*: Send the information to Zapier.
Stop processing other rules
The rule engine runs sequentially by default, meaning that the rule actions in one rule can trigger subsequent rules to run more actions. You have the option to check off Stop processing other rules if you don't want this to happen.
What are sub-filters in the If - Recipient filters?
The If - Recipient filters has these sub-filters:
You can use a semicolon (;) as an or separator to list several items. For example: Is not in domain "domain.com; anotherdomain.com" - this will be true if at least one recipient is not from domain.com or anotherdomain.com. For any Domain filters, do not add the @ symbol before the domain, as the Domain filter includes the symbol by default.
What are sub-filters in the If - Content filters?
The If - Content filters has these subfilters:
The filters below have some specific behaviors:
- Contains: Includes partial matches, such as using Contains: order will match on the word reorder. If you only want to match order, use the Contains full word/phrase selection. It also includes all punctuation you enter into the rule text.
- Contains full word/phrase: Matches full words or phrases. Partial words will not match. It ignores punctuation of these specific characters:
- Contains and Contains full word/phrase: Not case-sensitive and reads consecutive multiple spaces as a single space.
- Starts with and Ends with: Behaves exactly like Contains, except they only match for the beginning or end of the text.
- The text that you enter in any of the If - Content filters should not be in quotes.
Below is a chart of examples for the Contains vs. Contains full word/phrase filters:
How do the And/Or filters work?
You are able to create conditions using And and Or types. Using And will require all the listed conditions to be true in order for the rule to take action. Using Or will require only one of those conditions to be true. You can also use a combination of these two types. More on how to use And/Or statements can be found in this article.
How do I list multiple keywords within an If filter?
Some conditions allow you to type in your own text for the condition (such as Subject, Body, To, From), and you can actually list multiple keywords within one condition if these options are all Or type. You would simply separate the words with a semicolon (;).
For example, if you wanted your condition to be for the Subject to contain the keywords Urgent or SOS; then instead of creating 2 separate Or conditions, you would just create one condition and list the two keywords as:
Should I be using the inbox filter?
A best practice is to always specify an inbox using the Conversation is in specific inboxes filter, unless the rule truly needs to apply to all inboxes in the individual or team workspace. The difference between this filter and the Conversation is in specific channels filter is that the channels filter can apply on any inbox containing messages from the channel, which can happen if conversations are moved away from the channel's default inbox. Specifying an inbox filter ensures the rule only affects that specific inbox.
Is there a difference between conversations vs. messages?
Some rule triggers and conditions apply to the whole conversation, and some apply to a specific message within the conversation. For example, the From condition applies to a specific message, and not the thread as a whole where the sender may change from message to message. Likewise, a tag can only apply to the whole conversation, and not an individual message.
Here are some specific cases:
- When: Tag is added
- If: To contains @company.com
- Then: Assign to Andersen
This rule will check the To recipient of the last message in the tagged conversation.
- When: Snoozed expired
- If: Body contains example
- Then: Move the conversation
This rule will check the body of the last message for the word example.
- When: Inbound message is received
- If: Subject contains Urgent
- Then: Add tag Urgent
This rule will add the tag to the whole conversation, as tags cannot be added to individual messages.
All plans can utilize Front's rules library to set up rules for their team. Our library contains a variety of rule templates which can then be customized to fit your team's needs. Rules using Advanced rule conditions are only available on the Prime plan or above.
Custom rules are also available on the Prime plan or above. Some legacy plans with different names may also have this feature. Custom rules allow you to build rules from scratch using any mix of when/if/then conditions.
I'm hoping there is a way to create a template rule that I can apply to multiple inboxes. I currently manage separate inboxes for 10 academy locations, and each one needs the same rules applied.
Something like this, but in 9 other inboxes for 9 separate brick-and-mortar locations.
Any ideas for me? :)
Hey again! Another question for you guys: If I have a rule set up to automatically assign a team member for a certain automatically generated email, if I set the THEN to also "archive conversation," that will only archive in the team inbox and not in the assignee's inbox, correct? Is that a good way to keep team inboxes clear while still ensuring that the email gets followed up on?
Kevin O'Neal Hi there! If your rule is assigning a conversation to a teammate, then you shouldn't add the archive action as that will archive it for the assignee. Assigning will automatically remove the conversation from the "Unassigned" tab in the team inbox, but will it will remain in the "Assigned" or "Open" tabs. Does that make sense?
Cori Morris Hi! Thank you for the quick reply! Yes, that does make sense. I basically have a team member who isn't good at archiving emails that don't require a email reply but do require follow-up in another system (notifications., auto-generated emails, etc), so I am trying to find an easy way to have them be in her inbox but also take them out of the "open" tab in my team inbox. I guess the easiest way is to just train her to click archive!
The content filters are quite powerful but I need more :-)
Please add support for either one of these:
- wildcards, i.e. "User * has a new request"
- regex, i.e. "User (.*) has a new request"
- Contains: all;the;words in addition to the current Contains any;of;these;words
This would allow filtering on content like "User Jim @jimmyjj has a new request"