Profanity: Masking & Screening
This feature provides the ability to screen out profanity in customer-submitted content to ensure safe work environment for team members.
Aside: This has been a hilarious feature to develop and the **** that we've seen screened (actual comments from real people) would blow your mind!! :)
Two features are supported:
- Masking, where the specific offensive words and phrases are masked from view with special characters, and
- Screening, where the entire conversation is removed from view and only available to an administrator via export of screened conversations.
Each method has its own set of offensive words and these words are compared to all comments submitted by team members, admins, and customers.
Profanity filtering is only applied to comments and not other submission types. Both Masking and Screening work with all available Channels (Pulse, Messenger, etc.).
Profanity filtering is mostly useful for customer submitted comments. It does, however, also filter team member or admin comments. When a user submits a masked term, the customer only sees a masked out version of the submitted comment. This behavior will not typically be useful since users should not be using offensive masked terms, but could be useful to protect customers from abuse in the rare occasion.
Term masking can be enabled from Bootstrap → Advanced Settings page. When masking is enabled a Global list of offensive words and phrases is used as the default list of terms that are masked. If an Account wants to add or remove terms from the default list, they can be entered in the Masking Overrides field. Terms that start a line with a + are added to the list and terms that start a line with - are removed from the list. If a line starts with any other character, the line is ignored. Single words, multiple words and regular expressions are all supported. Terms can be entered using any language that uses the Latin alphabet (English, Spanish, French, etc.). Location-level override is not supported. There are no per-language filter list as we don’t currently determine the language a comment is written in automatically.
Here is an example scenario:
Given an account is configured with these settings for Term Screening:
The user experience for the user will look like this, where the right hand side shows customer input, and the left hand side shows Loop Inbox view:
Masked words are saved to the database without modification. Whenever a conversation with words needing to be masked is returned from the database, all of the comments on the conversation are masked using the most recent list of masking overrides. This makes it so users don’t have to see masked words while preserving the original comments in the database should the need arises. Also, updating masking overrides immediately takes effect which ensures that problematic terms can be added to the masking overrides and hidden without delay.
Term screening can also be enabled from the account settings page. Screening Overrides follow the same format as Masking Overrides. If the first comment on a conversation contains a screened word, the conversation doesn't show up in the Loop Inbox. When a screened term is included on an existing conversation, it is removed from view and excluded from the Loop Inbox. If a user has the conversation that is now screened open, the conversation is exited and the user is taken back to the base Inbox view. When conversations are screened, they continue to be included in reporting metrics. Careful consideration has, however, been made to ensure that individual conversations will not have a significant effect on metrics, for example, average response time uses median instead of mean so outliers are ignored. A known limitation of the current implementation of screening is that some reports, such as the Daily Email Digest, will continue to display screened conversations.
The leading “+” means include the word in masking/screening, the leading “-“ means to remove (and has the effect of allowing the word).
A ‘master list’ for each function are managed by Benbria in English and French.
Term screening uses a separate list, and would generally contain words that are worse than ones found in the term masking list.
When using regular expression overrides, careful attention must be taken to insure regular expressions are doing exactly what they intend to do. For example, adding “+yolo.*” results in:
This may be an unexpected result because “yoloing me” gets entirely masked out instead of just “yoloing”. After changing the override to “+yolo.*?”, the conversation excludes “ me” from being masked and works as expected.
For additional help on Regular Expressions, take a look at this interactive regex primer, this starter and even this advanced interactive tool. Things like credit card numbers, or extensions of words can be handled (e.g. “crrraaaaaa…p” and all variations can be handle with a simple expression like “c+r+a+p+”).