Blog

Release announcements, helpful tips, and community discussion

6.9

Cerb (6.9) is a feature upgrade released on January 26, 2015. It contains over 90 new features and improvements from community feedback.

To check if you qualify for this release as a free update, view Setup » Configure » License. If your software updates expire on or after January 26, 2015 then you can upgrade without renewing your license.

Important Release Notes

  • Always make a backup before upgrading.

Webhook Listeners

A new Webhooks plugin has been added to the Plugin Library (Setup->Plugins). This provides a simple way to catch arbitrary webhooks in Cerb using Virtual Attendants.

Many modern apps and services provide webhooks for real-time “push” notifications about events. These notifications are usually simple HTTP POSTs with either request parameters or JSON/XML payloads. This is in contrast to the less efficient “pull” approach, where a service is constantly polled at a regular interval to check for recent changes.

This plugin enables you to build powerful automation behaviors in response to webhooks, entirely from your web browser and without writing custom code or plugins. Each webhook is given a custom URL that doesn’t require any authentication (although you can enforce any authentication you need using a Virtual Attendant). You can simply paste that URL into the appropriate field in whatever service you’re integrating.

Here are some webhook integrations we’ve been using lately:

  • Freshbooks
    • New invoice and payment notifications are sent to our main room in HipChat.
  • Github
    • New issue and commit notifications are sent to our Development room in HipChat.
  • HipChat
    • Any time we mention @Cerb in HipChat, the message is sent to a Virtual Attendant powered bot. This bot can schedule reminders, schedule calendar events, check any team member’s schedule, create tasks for any team member, open new bug reports and feature requests, report on metrics, etc.
  • JIRA
    • Notifications about new and resolved issues are sent to our Development room in HipChat.
  • Mailgun
    • Notifications about bounced or dropped messages are sent to our main room in HipChat along with a permalink to the ticket. The Virtual Attendant also adds a sticky note to the affected messages with the specific error message, and when appropriate, the recipient is marked as defunct.
  • Loggly
    • Alerts are sent to our main HipChat room when any of our server log monitoring conditions are met. For instance: consecutive failed password attempts, SSH sessions, etc.
  • Twilio
    • When an SMS message is sent to a Twilio-powered phone number, a Virtual Attendant bot provides the same functionality as the HipChat bot above. The same process could be used to run any kind of SMS-based campaign, as well as providing support through that channel.
  • Wit.ai
    • While not specifically a webhooks integration itself, we use Wit.ai to discover the “intent” of natural language messages in Virtual Attendants for the HipChat and Twilio bots. For instance “Schedule Q1 finance meeting on Feb 15th at 2pm for 3 hours” is converted into the intent “schedule_what_when” with entities for the agenda item, date, and duration. Virtual Attendants can then use this structured information for automation behaviors. We’ll be sharing our Wit.ai intents with our existing training data so you can quickly get started doing the same thing.
  • Zapier
    • Zapier helps integrate hundreds of apps and services. You can use their existing ‘webhook’ action to create new webhooks that ping Virtual Attendants in Cerb for thousands of different events. For instance, “when an RSS feed changes”, “when a new file is added to Dropbox”, “when your brand is mentioned on Twitter”, “when a new event is added to your Google Calendar”, etc.

Virtual Attendants can listen for webhooks

  • Added a ‘Webhook received’ event for Virtual Attendant behaviors. The webhook plugin can route incoming HTTP requests to these behaviors for handling. For instance, every time an invoice is paid in Freshbooks, a webhook event can instantly be sent to Cerb, and a Virtual Attendant can load the relevant client/payment information and do anything with it (post to a HipChat room, etc).
  • Virtual Attendant behaviors on the ‘Webhook received’ event can use the HTTP headers and parameters as placeholders.
  • Virtual Attendant behaviors on the ‘Webhook received’ event can now use the value of the HTTP body from the ‘http_body’ placeholder.
  • Virtual Attendant behaviors on the ‘Webhook received’ event can now set the HTTP response headers and body as actions.
  • Added a ‘Set timezone’ action to Webhook Received events in Virtual Attendants. This affects all the date/time parsing and display for the duration of the request, which is useful for localizing interaction with a specific worker.

Plugins can listen for webhooks

  • When defining webhooks, extension-based handlers are now available. By default, webhook requests can be sent to Virtual Attendant behaviors on the ‘Webhook received’ event. Plugins can contribute new webhook handlers for very specialized needs.

Quick Search

[CHD-2466] [CHD-2962] [CHD-3120]

Previously, using quick search required selecting a specific field from a dropdown and then typing some text. This would add a single field and then refresh the targeted worklist. The process was inefficient in many ways; particularly when adding several different fields, as you had to constantly change the dropdown field and wait for the worklist to refresh each time. It also inefficiently caused extra work for the database server. Additionally, new workers found this process confusing because there was no default for the most commonly used search field. After searching with a field, it also became the new default, which required changing the field nearly every time you wanted to search. It was anything but “quick”.

Now, quick search is truly “quick”. It’s a single textbox that targets the most commonly searched field for each record by default (e.g. subject and content for messages, names for workers and orgs, email address and names for contacts). Additional fields can be filtered at the same time by just appending them to the search terms (e.g. “receipt status:open created:(-1 week)”). Many operators are supported (e.g. equals, doesn’t equal, partial/prefix match, in list, not in list, greater/less than, between, etc). All of the quick search filters will be applied at the same time when you press enter, and they will replace any existing filters on the worklist. Your search text stays in place so you can make modifications and submit it again to further filter your results as needed. If you submit a blank search, it will reset the filters on the worklist. Rather than sticking to a 1:1 mapping between search fields and database fields, new “virtual” fields can now be introduced to streamline common search operations (i.e. they can add multiple related filters at once). This also means that the search field names can be more concise and human-readable (e.g. “sender” rather than “ticket first sender email address”).

This new approach also significantly improves integration with external search engines like Sphinx and Elasticsearch. The default for most records can be a fulltext index that combines content from several fields; for instance, the default search for a message could simultaneously search subject, headers, sender, sender name, organization, body. These search platforms usually search every field by default, and then provide a syntax for targeting specific fields when desirable. This is much more user friendly, as most people these days expect to just type a few keywords in a single textbox. We’ll continue to add new fulltext indexes to records where they make sense.

More intelligent quick search behavior

  • Quick search now uses a more intelligent default when searching various text-fields. For instance, when searching ticket masks, names, and email addresses, simple text is now assumed to be a prefix (i.e. the first few letters of the desired match). When searching longer content, like ticket subjects or task titles, simple text is assumed to be a partial match that may occur anywhere in the field. This default behavior can be overriden by providing one or more explicit wildcard asterisks to use instead (e.g. prefix, *partial, *suffix). Previously, and unhelpfully, the search text was always assumed to be an exact match, and wildcards always had to be explicitly provided for partial matches.
  • When viewing any /search page, the quick search textbox will be automatically focused.

Quick search helper menu

  • The quick search textbox now has a down-arrow icon on the far right. Clicking the icon brings up a search help menu that lists all the available fields. Examples are provided for each field in a submenu, and clicking on an example will append both the field and the text to the search textbox. The examples aren’t exhaustive, but they provide a great starting point to teach workers about using quick search. On the development side, each field can now provide its own examples, so something like ‘ticket mask’ can have sensible examples rather than overly generalized ones. Fields with a limited set of possible options, like checkboxes or picklists, can now provide shortcuts to all their possible options through this menu. The menu also remains open until it’s explicitly closed, so multiple selections can be made at once, including in followup searches.
  • The quick search helper menu can now be closed with the escape key.

  • The quick search helper nows provide syntax examples based on the selected search engine (MySQL FT, Elasticsearch, Sphinx). These can be overridden per schema in Setup->Configure->Search.

Quickly filter by custom fields and fieldsets

  • All searchable custom fields are now available through quick search with human-readable aliases. Previously, the quick search dropdown listed custom fields by name but didn’t organize them. Now, custom fields are grouped together by their fieldset (with dot-notation) and their names are simplified (e.g. sla.plan, sla.expires, mobile.number).

Quick search popup

  • The quick search popup on worklists now shows the targeted list name in the title. Previously the popup’s title was only “Search”, which made it difficult to tell which worklist would be affected when there was more than one on the same page.
  • All the recent improvements to quick search are now available through the search icon on any worklist. This is particularly useful on workspace pages with several lists, and other locations where a quick search textbox isn’t displayed by default.
  • Quick search queries can now be shared in URLs as the ‘q’ parameter. For instance, /search/ticket?q=receipt

New fulltext indexes for simplified searching

  • Added a full-text search index to worker records. This indexes first and last names, email addresses, titles, and @mention names. All of these fields are now searched by default from quick search on a worker worklist. Previously, each of these fields had to be searched independently.

  • Added a full-text search index to email address records. This indexes email addresses, first/last names, and organization name. These fields are now searched by default from quick search on an address worklist. Previously, each of these fields had to be searched independently.

  • Added a full-text search index to organization records. This indexes name, street, city, state/province, postal code, country, and website. All of these fields are now searched by default from quick search on an org worklist. Previously, each of these fields had to be searched independently.

  • Added a full-text search index to contact person records. This indexes the mailbox and full contact name for all linked email addresses. All of these fields are now searched by default from quick search on a contact worklist. Previously, each of these fields had to be searched independently.

  • Added a full-text search index to snippet records. This indexes the title and content. These fields are now searched by default from quick search on a snippet worklist. Previously, each of these fields had to be searched independently.

  • Added a full-text search index to plugin library records. This indexes each plugin name, id, author, description, and link. All of these fields are now searched by default from quick search in Setup->Plugin Library. Previously, each of these fields had to be searched independently.

Search

Added Elasticsearch support

  • Implemented an Elasticsearch extension for full-text indexing Cerb records. This can be configured in Setup->Configure->Search. Elasticsearch is much faster than MySQL Fulltext, and it’s very easy to get started with (especially compared to Sphinx), since very little configuration is required by default.

Search indexing improvements

  • Search schemas now provide a dictionary of key/values to be indexed. Previously, only a single block of text was provided (usually with multiple fields concatenated together). This change allows search engine extensions to index individual fields as well as the combined content. For instance, with the Elasticsearch extension, you could search (subject:these words) or (mask:ABC).
  • MySQL Fulltext indexes no longer log a PHP error when creating the index table for for the first time.

Filter message worklists by sticky note content

  • Message records can now be filtered by sticky note text.

Filter more records by matching text in comments

  • Contact person records can now be filtered by comment text.

  • File bundle records can now be filtered by comment text.

  • Mail HTML template records can now be filtered by comment text.

Filter message and ticket worklists by mail headers

  • [CHD-2678] Message worklists can now be filtered by message header name/value pairs with multiple operators (=, !=, like, !like, is null). This makes it possible to search for headers like ‘X-Mailer’ or ‘X-Spam-Score’. Virtual Attendants can also match a particular ‘Message-Id’ for threading, etc.

  • The quick search feature on message worklists can now filter by mail headers. Multiple headers can be searched by using ‘ OR ‘; for example: (X-Mailer like Cerb* OR Message-Id like <123*). In Virtual Attendants, these quick search filters can also include placeholders.

  • Ticket worklists can now be filtered by matching the headers of any associated mail messages. This was previously only possible from message worklists.

Filter messages and tickets by the existence of attachments

  • Added a ‘Has Attachments’ filter to ticket worklists. This matches attachments on any message in a ticket’s conversation history.

  • Added a ‘Has Attachments’ filter to message worklists. This can filter the worklist to only messages that either have or don’t have attachments.

Filter messages and tickets by attachment name

  • Added an ‘Attachment Name’ filter to message worklists. This can match wildcards like (.zip), as well as multiple values like (.jpg OR *.png).

  • Added an ‘Attachment Name’ filter to ticket worklists. This can match wildcards like (.zip), as well as multiple values like (.jpg OR *.png). The filter will match any message in the ticket conversation history.

Virtual Attendants

Virtual Attendants can access worker localization

  • [CHD-4010] Moved the settings for language, timezone, and time format to built-in fields on worker records. Previously, these were stored in worker settings in a way that made them difficult to use in other functionality. Now, worker-based worklists can display timezones and languages per person, and the list can be filtered and subtotaled by the fields as well. Admins can set the language, timezone, and time format when creating or editing workers. Additionally, snippets and Virtual Attendants behaviors can refer to the language or timezone of each worker to localize the results.

Virtual Attendants can access worker primary calendars

  • [CHD-4008] Moved the ‘availability calendar’ setting to worker records. Admins can set worker calendars from Setup. Snippets and Virtual Attendant behaviors can reference a worker’s primary calendar when creating or displaying events, and when determining availability.
  • Virtual Attendant behaviors that reference workers now have new placeholders for each workers’ primary calendar. This simplifies many schedule-based behaviors.

Create calendar events using calendar variables

  • [CHD-4009] The Virtual Attendant ‘Create calendar event’ action can now create events on calendars based on a behavior list variable. Previously, only a single explicit calendar could be provided, which limited the reuse of a behavior between multiple workers. This change is especially useful for webhook-based VA behaviors (bots) that schedule events for arbitrary workers.

Placeholders for worker availability ranges

  • The ‘Worker availability’ condition on Virtual Attendant worker custom behaviors now accepts placeholders for the ‘from’ and ‘to’ options.

Improved the loading of calendar events from automation behaviors

  • Virtual Attendant behaviors can now change the date of a calendar object by setting the ‘__scope_month’ and ‘__scope_year’ keys in the dictionary at any depth. Previously, VAs could only display the events from a calendar at the current month and year, while the REST API could use the &month and &year parameters to set them.
  • In Virtual Attendant behaviors and REST-API requests, calendar dictionaries now provide an ‘events_occluded’ key . Like the ‘events’ key, this returns a list of events for the selected month and year, but it will filter out any available events that are completely covered with busy events. This could be handled previously with caller code, but this new key saves the extra work.

  • In Virtual Attendant behaviors and REST-API requests, calendar dictionaries now provide a ‘weeks_events_occluded’ key . Like the ‘weeks_events’ key, this returns a list of events for the selected month and year organized as a grid of days and weeks, but it will filter out any available events that are completely covered with busy events. This could be handled previously with caller code, but this new key saves the extra work.

Custom message behaviors

  • Virtual Attendants can now create custom behaviors for message records. This is particularly useful when loading a list of messages into a behavior variable and then running a message-based behavior against each of them.

Improved scripting capabilities

  • Added an xml_encode() function to Virtual Attendant scripts. This allows any node of an XML object to be displayed in text format.

  • Added a nlp_parse() filter to Virtual Attendant templates for natural language processing. This allows more flexibility in communicating with Virtual Attendants through casual written text. The filter acts on a single line of text and accepts an array of patterns to test. The first matching pattern is used. For instance, text like “Remind me to perform server maintenance tomorrow at 5pm” can be summarized with the pattern “remind me [what] [when]”. The natural language processing filter will return a JSON object with ‘what’ and ‘when’ filled in. Previously, this workflow had to be designed using regular expressions, which were less flexible and far less readable or elegant. This feature is very well suited for communicating with VAs as bots in SMS, IM, HipChat, Campfire, IRC, etc. Those channels deal mainly with natural text input rather than structured forms.

  • In Virtual Attendant scripting, added a dict_set(var, key_path, value) function. This provides a simple way to set values for nested keys on arbitrary objects and arrays. The existing ‘set’ command doesn’t support nested keys. The ‘dict_set’ command takes a key path in dot-delimited format, and it will auto-detect object properties or array keys along the way. A key of ‘[]’ can be used to append the value to the end of an existing array. Sample key paths look like “name.first” and “group.members.[]”. See the Help popup in VAs for a usage info.

  • Added an array_diff($array1, $array2) function to Virtual Attendant scripting. This makes it easier to detect changes between two arrays, which is useful for behaviors that compare multi-checkbox custom fields (e.g. Record changed), etc. See the in-app Help popup for an example.

  • Added split_crlf($str) and split_csv($str) filters to Virtual Attendant scripting. These are used to split strings into arrays by linefeeds and commas, respectively. A split() filter already existed, but it was naive (it didn’t automatically handle spaces after commas, remove blanks, etc).

Improved the scripting help popup

  • In the Virtual Attendants scripting help popup, added a new example for how to use regular expressions to filter text.
  • In the Virtual Attendants scripting help popup, added examples for JSON decoding, modification, and encoding.
  • In the Virtual Attendants scripting help popup, added examples for XML decoding, encoding, xpath, and working with namespaces.
  • Expanded the Virtual Attendant help popup with examples for: date/time display, date manipulation, and timezone handling.
  • Added sections to the Help popup for Virtual Attendant scripting for: Arrays and objects, Modifying objects and arrays, and JSON prettification.
  • In the Virtual Attendant scripting Help popup, the most relevant example code for each section is now highlighted in bold for readability.

Usability

  • Added the ‘json_pretty’ filter to the scripting auto-suggestions in Virtual Attendants.

  • In Virtual Attendants, the ‘run behavior’ and ‘schedule behavior’ actions, as well as the simulator’, will now automatically expand textbox heights as the worker types additional content.

  • [CHD-4028] Fixed an issue with the ‘Ticket has owner’ condition in Virtual Attendant behaviors. It was always evaluating to “false”.

Profiles

  • Profiles now summarize a record’s links in a fieldset at the top of the page. This displays a count of the links for each type of record. Clicking on the record type displays all the links of that type in a worklist on a popup. Previously, workers had to click into the Links tab for each record to see this information. Now, workers can quickly see if there are links of a specific type on the current record, view them, and modify them, without leaving the current tab (which is especially helpful when replying to a ticket).
  • Address profiles now also display a link summary for their parent organization.

  • Calendar event and recurring event profiles now also display a link summary for their parent calendar.

  • Contact person profiles now also display a link summary for the primary email address.

  • Opportunity profiles now also display a link summary for their primary email address.

  • Ticket profiles now also display a link summary for their parent organization. This simplifies many support workflows where workers check a sender’s organization for a domain, license, SLA, etc.

  • Calendar event profiles now display their parent calendar as a link in properties.

  • Group profiles now display a Links tab for managing record links.

Contacts can be linked to other records

  • Contact person records can now be searched and linked from the Links tab on other record profiles.

Added more fields to worker profiles

  • More properties are now displayed at the top of worker profiles: link to email address, active/disabled, language, timezone, @mention name, and authentication method.

Mail

  • In the email parser, when Cerb generates a plaintext part for an HTML-only incoming message, links are now converted in a more useful way. Previously, link tags were simply removed and the label of the link (like “click here”) was kept; which stripped many clickable links from messages. Now, these HTML links are converted to Markdown style links: click here. This preserves the link text as well as the clickable link (and they can be easily converted back to HTML links in outgoing messages). When the label and link are the same, only the link is shown.
  • [CHD-3920] When viewing a ticket worklist, records that have a worker currently writing a draft reply are indicated with a special icon. This will help workers save time when picking a new ticket to work on, since they can avoid tickets that someone else is already working on without having to click into each record to check for a draft.

Localization

  • Cleaned up the translation language packs in install/extras/translations/ (English, German, Spanish, Italian, Dutch, Portuguese, and Russian) to remove unused phrases. Proper TMX headers were also added to make these files easier to edit with external translation tools.

  • Modified how the database stores translation text to prevent a distinction between ‘NULL’ and blank translation strings. This makes it possible to cleanly filter a translation worklist with “Default Translation is blank; My Translation is blank” in order to create ‘to do’ list for translation work. Previously, some text was considered blank, and others NULL, which resulted in inconsistrent filtering.

Web API

Quick search from the Web API

  • Implemented quick search for all the record types in the REST API. You can now send a ‘q’ parameter with the quick search query in addition to, or instead of, the criteria/oper/value parameter triplets. Parameters can still be added to force additional constraints, such as limiting a client’s full-text search to their own history.

Automatic localization in the Web API

  • The REST-API will now use the authenticating worker’s language, timezone, and time format settings for responses. Previously, responses were always returned in GMT/UTC. This wasn’t a problem for most timestamps, where the caller could convert them, but it did affect other areas like the display of calendar events when using options like ‘weeks_events’.

Setup

  • When creating or modifying worker accounts, admins can now create a new calendar at the same time. Previously, workers had to create their own calendar (or admins had to do so while impersonating them), which added unnecessary complexity to the on-boarding process.

Platform

Added the updated field to more records

  • Added an ‘updated’ field to worker records to simplify synchronization with other apps and services. This can be used to filter to only records which have been updated since the last check.

  • Added an ‘updated’ field to organization records to simplify synchronization with other apps and services. This can be used to filter to only records which have been updated since the last check.

  • Added an ‘updated’ field to contact records to simplify synchronization with other apps and services. This can be used to filter to only records which have been updated since the last check.

  • Added ‘created’ and ‘updated’ fields to group records to simplify synchronization with other apps and services. This can be used to filter to only records which have been updated since the last check.

Choosers usability

  • Chooser popups will no longer “jitter” based from resizing when focusing or unfocusing the quick search textbox. This issue was caused by the previous method of displaying quick search ‘hints’. The new quick search uses a floating menu, and it doesn’t resize the popup.

Updated dependencies

  • Updated jQuery from 1.10.2 to 1.11.2

  • Updated jQuery UI from 1.10.4 to 1.11.2

  • Updated Twig template library from 1.15.1 to 1.16.2

  • Updated Smarty template engine from 3.1.7 to 3.1.21

  • Removed PHP Markdown library (we use Parsedown for everything now)

  • Updated Parsedown text formatting library

  • Updated SwiftMailer library from 4.1.5 to 5.3.1

Developers

  • Added a reusable DevblocksPlatform::compareStrings($str1, $str2, $oper) method for comparing arbitrary strings with operators (is, !is, like, !like, contains, !contains, regexp, !regexp). These comparisons take place a lot in functionality like worklist filtering and Virtual Attendants.

Maintenance Updates

6.9.1

Cerb (6.9.1) is a maintenance update released on February 11, 2015; it contains 10 minor features, fixes, and usability enhancements from community feedback covering the recent 6.9 update. You can follow these instructions to upgrade.

  • [CHD-4030] [Setup/Mail/Reply-To] Fixed an issue in Setup->Mail->Reply-To when there are no default reply-to addresses. This inconsistent state is usually only possible after an import. Cerb will now automatically assign the first reply-to as the default in these cases.

  • [Setup/Plugins] Fixed an issue with the full-text search index in Setup->Plugins->Library. The /update process was clearing the index after checking for plugin updates, but it was never reindexed. The sync button in Setup could also clear the index if no new updates were found. The content is now reindexed every time the plugins are synced, whether there are updates or not.

  • [Virtual Attendants/Behaviors] Fixed an issue with the ordering of Virtual Attendant behaviors on the same event. Behaviors are supposed to run in the order they appear in the VA (and they can be dragged). They were being run in alphabetical order instead. This caused problems if subsequent behaviors depended on changes from the first behavior (such as moving a ticket to spam, etc).

  • [Workspaces/Dashboards] Fixed an issue where counters, gauges, and pie charts were being too granular when displaying dates in the ‘seconds’ format. Now they use the two least granular groupings (e.g. weeks, days) rather than everything down to seconds (e.g. weeks, days, hours, mins, secs).

  • [Installer] Fixed an issue in the installer where the database wasn’t creating properly in some environments.

  • [Platform/Library] Updated the Parsedown library to the 1.5.1 version. This fixes an issue with some links and inline images not displaying properly in the knowledgebase when Markdown formatted.

  • [Impersonate/Localization] When an admin uses the ‘impersonate’ feature, the current session will now use the target worker’s language, timezone, and time format settings. When switching back to the original admin worker, these settings will be restored automatically from their settings. Previously, the language and timezone of a target worker was not used automatically, and after changing it from the Settings page, it would persist even when the admin worker switched back.

  • [Code Cleanup/Performance] Fixed an issue where community portal worklists pulled their results from the database twice.

  • [Snippets/Usability] Fixed an issue where closing the snippets chooser popup re-focused the browser window on the button that opened it. Focus is now always returned the textbox. This issue occurred due to a change in the default behavior of jQuery UI 1.11.

  • [Snippets/Usability] The snippets chooser popup is now scrollable again based on the height of the browser window (it won’t require scrolling the page to view its contents), and it remains in a fixed position as the page scrolls. This is how it behaved prior to the 6.9 update. In 6.9, changes in jQuery UI 1.11 required several modifications to the way we implemented popups (e.g. removing fixed positioning and scrolling dialogs if any floating menus or autocompletes could be displayed).

6.9.2

Cerb (6.9.2) is a maintenance update released on February 25, 2015; it contains 10 minor features, fixes, and usability enhancements from community feedback covering the recent 6.9 update. You can follow these instructions to upgrade.

  • [Platform/Logo] Cleaned up the default Cerb logos in preparation for the 7.0 release (e.g. removing references to the 6.x version, removing the tagline, etc).

  • [Virtual Attendants/HTTP/Simulator] When using the ‘Execute HTTP Request’ action in Virtual Attendant behaviors, the behavior simulator now shows the structure of the response placeholder (content_type, body, etc). Previously, these weren’t clearly documented.

  • [Virtual Attendants/HTTP] When using the ‘Execute HTTP Request’ action in Virtual Attendant behaviors, the response placeholder now includes any error message and additional information about the request (HTTP status code, etc).

  • [Virtual Attendants/HTTP/Simulator] When using the ‘Execute HTTP Request’ action in Virtual Attendant behaviors, the behavior simulator will now display any HTTP errors when configured to execute live requests. For instance, this makes it much easier to troubleshoot SSL validation issues (e.g. self-signed certs).

  • [Virtual Attendants/HTTP] When using the ‘Execute HTTP Request’ action in Virtual Attendant behaviors, the DELETE method is now properly implemented.

  • [Virtual Attendants/HTTP] When using the ‘Execute HTTP Request’ action in Virtual Attendant behaviors, a new option allows disabling SSL certification validation (e.g. self-signed certificates).

  • [Virtual Attendants/HTTP] When using the ‘Execute HTTP Request’ action in Virtual Attendant behaviors, a new option is provided for “Don’t attempt to auto-convert the response body”. This is useful when you want to capture the literal response. Otherwise, Cerb will attempt to convert JSON responses into an array, images into base64 encoded text, etc.

  • [CHD-4031] [Worklists/Mail/Usability] When closing tickets from the shortcut button on worklists and profiles, the reopen time will now be zeroed out. Previously, the reopen time was left intact (e.g. on a waiting ticket), which could lead to closed tickets unexpectedly reopening.

  • [CHD-4053] [Worklists/Subtotals] Fixed an issue where worklist subtotals were counted improperly if the recipient filter matched multiple addresses with a wildcard.

  • [Worklists/Bulk Update/Usability] Fixed an issue where rapidly clicking on the checkboxes to the left of custom fields on a Bulk Update popup could cause them to become out of sync (i.e. when selected, their contents are hidden rather than shown).

6.9.3

Cerb (6.9.3) is a maintenance update released on March 05, 2015; it contains 8 minor features, fixes, and usability enhancements from community feedback covering the recent 6.9 update. You can follow these instructions to upgrade.

  • [Security] Added a ‘norobots.txt’ file and ‘robots’ meta headers to prevent most search engines from trying to index private worker-side Cerb URLs. For instance, if a vulnerability was discovered, a quick Google search could uncover many sites running the affected versions.

  • [Mail/Parser/Localization] Improved the way the incoming email parser deals with invalid encodings. Previously, if a specific encoding was stated then Cerb trusted it, which led to some messages being truncated prematurely at the first invalid character. Now, the validity of the given encoding is checked, and if the test fails then Cerb attempts to detect the encoding on its own. This is particularly useful when an encoding like UTF-8 or ISO-8859-1 is incorrectly presented as something like US-ASCII (especially when this is implied because of a lack of any encoding information at all in the email headers).

  • [Mail/Quick Search] Added the ‘org.id’ filter to quick search for ticket worklists. This filters by tickets that match the given organization ID in the original sender, on the ticket, or on any recipient. The ID filter is less useful to workers, but it’s very useful for API-based searches and Virtual Attendants. It’s used by the new ‘Cerb for Salesforce’ app.

  • [Mail/Quick Search] Added the ‘participant.id’ filter to quick search for ticket worklists. This filters by the address IDs of any ticket recipients. The ID filter is less useful to workers, but it’s very useful for API-based searches and Virtual Attendants. It’s used by the new ‘Cerb for Salesforce’ app.

  • [CHD-4017] [Virtual Attendants/Create Task] Fixed an issue with the ‘Create task’ action in Virtual Attendant behaviors where a worker list variable is allowed when setting a single worker custom field. Previously, this generated an error. Now, a random worker from the given array will be selected.

  • [CHD-4033] [Search/Mail] The search index for message content now includes the sender first/last name, sender email address, and organization name. Previously, this only included the ticket mask and subject, in addition to the message content. These extra fields will be included on new messages, but to have them indexed for existing messages you’ll need to re-index all your message content.

  • [CHD-4041] [Comments/Usability] Fixed an issue where an in-progress comment popup could be replaced by any new peek popup.

  • [CHD-4049] [Calendars/Recurring] Fixed an issue where adding or removing recurring events on a calendar didn’t refresh it.

6.9.4

Cerb (6.9.4) is a maintenance update released on April 2, 2015; it contains 11 minor features, fixes, and usability enhancements from community feedback covering the recent 6.9 update. You can follow these instructions to upgrade.

  • [Comments/Usability] Fixed an issue with the code comment popup not closing after saving.

  • [Calendars/Recurring] Fixed an issue where a new recurring event on a calendar could be created twice.

  • [Platform/Update] Fixed an intermittent error (primarily with APC): Cannot redeclare class ‘C4_AbstractViewModel’.

  • [CHD-4071] [Virtual Attendants/Workers] When using the ‘Set Worker’ action in VA behaviors with the load balance option, if multiple workers have the same lowest load then one is randomly selected. Previously workers were always selected in the same order, which could lead to the same worker receiving most of the assignments if they acted quickly.

  • [Pages/Helper/Usability] The default ‘Mail’ page created by the helper is simplified to only show a single worklist (e.g. Open Conversations) instead of two (My Conversations + Needing Attention from Anyone). The ‘owner’ column is added to the single worklist. This is easier for new workers to understand, and it alleviates some of the most common onboarding questions (e.g. “How do I auto-refresh the top assignments worklist when I take a ticket in the bottom available worklist?”)

  • [CHD-4070] [Comments/UX/Usability] The ‘Use @mentions’ tooltip no longer fades in and out constantly while adding comments to records.

  • [CHD-4069] [Notifications/Watchers] Deactivated/inactive workers no longer receive notifications from any records they’re still watching.

  • [Workers/Search/Calendars] Fixed an issue with the ‘Calendar availability’ filter on worker worklists. This wasn’t properly identifying each worker’s primary calendar.

  • [CHD-4073] [Workers/Search/Calendars] Added ‘isAvailable’ and ‘isBusy’ quick search filters to worker worklists. These are also available through the API.

  • [CHD-3974] [Virtual Attendants/Watchers] Deleted or inactive workers will now be ignored as targets in Virtual Attendant actions (e.g. add watchers, send notification, etc).

  • [CHD-4075] [Files/Localization] Added various strings from the /files page to the translation system.