Release announcements, helpful tips, and community discussion


Cerb (9.0.4) is a maintenance update released on September 7, 2018. It includes 32 minor features and fixes from community feedback covering the 9.0 update. You can follow these instructions to upgrade.

  • [Setup/Developers/Data Queries] Added a ‘Developers’ menu to the Setup page with a ‘Data Query Tester’ option. This makes it much easier to test data queries and see their errors and raw output. [#730]

  • [Dashboards/Data Queries/Usability] On dashboards, the ‘Chart: Categories’ and ‘Chart: Time Series’ widgets no longer expect users to configure the ‘x-axis labels’ and ‘x-axis format’ options. These are now automatically configured from the data query results. For instance, you can now change a worklist.subtotals data query from created@month to created@year without having to change any other properties.

  • [Profiles/Tickets/Permissions] Fixed an issue on ticket profiles with the default ‘Actions’ widget in the right sidebar. It wasn’t checking permissions properly for the ‘Delete’ and ‘Merge’ shortcuts.

  • [Records/Cards/Editors] Fixed an issue on some record editor popups where typing <ENTER> in an input box could prematurely submit the form in the full browser window. [#734]

  • [Knowledgebase] Fixed an issue in the knowledgebase where a category could have its parent set to one of its distant subcategories. This prevented the category tree from displaying. [#736]

  • [Profiles/Workers/Settings] In worker settings, fixed an issue on the ‘Availability’ tab where the selected calendar didn’t open its card when clicked. [#740]

  • [Profiles/Tickets/Permalinks/UX] On ticket profiles, fixed an issue where permalinks to specific messages didn’t expand them if they were collapsed. [#725]

  • [Time Tracking/UX] Fixed an issue on the time tracking editor popup. Entering dates for the ‘Log Date’ field once again accepts date strings and provides a calendar popup. [#729]

  • [Records/Cards/Links] Fixed an issue on cards in the ‘Links’ section. When a search popup opened from a links button, the subtotals on that worklist required scrolling the popup. It now properly overflows the popup window. [#741]

  • [Worklists/Quick Search/UX] Fixed an issue with the quick search menu on worklists. When there are a lot of available filters the menu could cover the menu toggle and prevent it from being closed. [#726]

  • [Profiles/Tabs/UX] When configuring tabs on a profile, a “(+)” button is now prominently visible for adding new tabs. Previously, tabs had to be added by first opening the chooser and then adding them from the worklist popup.

  • [Bots/Mail/Filtering] On mail filtering bot behaviors, the “Replace text in message content” action can now match the plaintext and/or html versions of the message. Previously text was only replaced in the plaintext version. [#679]

  • [Bots/Mail/Filtering] On mail filtering bot behaviors, the {{body_html}} placeholder is now available. This includes the raw HTML content of the incoming message.

  • [Bots/Conversations/Prompts] Fixed an issue with conversational bots. If a file chooser prompt was shown and the user closed it without uploading anything, the conversation couldn’t continue. [#744]

  • [Bots/Conversations/Prompts] Fixed an issue with conversational bots. In “Prompt with buttons” actions, any configured button colors weren’t being used for worker-facing bots. These only worked for customer-facing (portal) bots. [#745]

  • [Dashboards/Mobile/UX] On profile and workspace dashboards, improved how charts display on narrow screens like mobile devices.

  • [Dashboards/UX] On profile and workspace dashboards, ‘Chart: Scatterplot’ and ‘Chart: Time Series’ widgets can now be configured to display axis labels.

  • [Bots/Export] On bot card popups an ‘Export’ button generates a single package for the bot and all of its behaviors. Previously, each bot behavior had to be exported individually. This makes it much easier to create and share bots, make backups, put bots in version control, etc.

  • [Dashboards/Mobile] On profile and workspace dashboards, ‘Chart: Scatterplot’ widgets that use ‘Time elapsed mins/secs’ formatting for their axes now use a more abbreviated version. E.g. “2h,5m” vs “2 hours, 5 minutes”.

  • [Bots/UI/Developers] In bots, added a new “[UI] Respond to Ajax HTTP request” event. This can be used by customizable UI elements (bot interactions, dashboard widgets, profile shortcuts) that require server-side functionality for interactivity.

    For instance, most dashboard widgets render their output and are done. However, some dashboard widgets could accept user-input to modify their output. Similarly, keyboard shortcuts on profile widgets have been limited to actions that already exist on the server. Previously, there wasn’t a way to run a bot behavior directly from the user’s browser and return the results in JSON.

    Ajax requests can now be made to c=ui&a=ajaxBotBehavior&behavior_id=123 with additional arbitrary parameters. The responding behavior has control over the HTTP response, content-type, and status code. This can return anything a client’s browser may need (e.g. Ajax, HTML, images, etc).

  • [Files/Upload] Fixed an issue with uploading files in the browser when the file name contains special (non 7-bit) characters; e.g. ö. [#747]

  • [Workspaces/Dashboards] Customizable and user-editable filters can be added to the top of workspace dashboards. These filters automatically apply to all of the dashboard’s widgets. Each filter is associated with a new placeholder that can be used when configuring widgets (e.g. quick search, data queries).

    There are three initial filter types: ‘picklist’ (a single selection from a menu of pre-defined options), ‘chooser’ (single or multiple selection of a specific record type from a search popup), and ‘date range’ (a continuous date range, like “-6 months to now”).

    For example, a reporting dashboard can provide filters for a date range, date grouping (e.g. year/month/day), and a specific list of workers. Its various charts and worklists will adapt in real-time to changes in those filters from a single place.

    Previously, each widget had to be filtered individually; which could only be done by admins, and would then apply to all workers. The new dashboard filtering is specific to each worker and will be remembered between page visits and logins. The dashboard owner can configure the initial defaults. [#748]

  • [Dashboards/Time Series/UX] On dashboards, ‘Chart: Time Series’ widgets now interpolate missing date intervals on the x-axis. Previously, charts could have bizarre x-axis ticks with sparse data (e.g. a monthly bar chart with data for 3 of 12 months). This also resolves issues with line charts where missing data wasn’t treated as zero, but instead, a line was drawn between any two points no matter their distance. This change significantly improves the usability of these charts. [#738] [#754]

  • [Reports/Pages] Updated the built-in ‘Reports’ package to use the new ‘dashboard-wide filters’ feature. A new reports page can be created from the pages menu, then the ‘Help me create a page!’ button.

  • [Dashboards/Time Series/UX] On dashboards, ‘Chart: Time Series’ widgets now use abbreviated time intervals when the y-axis is set to ‘seconds elapsed’ or ‘minutes elapsed’. For example, what was previously “5 weeks, 2 days” is now “5w,2d”. This leaves more room for the actual chart.

  • [Dashboards/Worklists] On dashboards, when configuring ‘Worklist’ widgets, the ‘Required query’ and ‘Default query’ fields are now multiple line code editors. Previously these were a single line of text. This change simplifies working with complex queries and placeholders.

  • [Worklists/Search] In worklist search queries, filter groups with any number of filters can now be negated together with !(). Previously, only some filters supported exclusive operators (e.g. not in, not equals). For example, an attachments query like !(mimetype:image/png size:<24kb) !(mimetype:image/jpeg size:<=69kb) finds attachments that aren’t a PNG smaller than 24KB, and also aren’t a JPEG smaller than 69KB. The results would include larger PNGs and JPEGs, as well as any other attachment file type. [#750]

  • [Platform/Developers] Added a DevblocksPlatform::dateLerp($array,$step,$format) helper method to the platform. This interpolates dates in an array of dates of the given $format (e.g. 2018-01, 2018-02, 2018-05). The $step defines the desired interval (e.g. year, month, week, day).

  • [UI/Popups/UX] On popups throughout Cerb, the minimize option now attaches the popup header to the top of the browser window. It is fixed in place so it remains there even as the page scrolls. When maximizing the popup contents again, the popup reverts back to its previous mode (e.g. “fixed” for bot chat interactions, or scrolling with the page for most everything else). This should particularly improve the user experience on ticket profiles where reply popups can be minimized to review the underlying ticket conversation while drafting a reply message.

  • [Dashboards/Data Queries/UX] In data queries, added a type:sample.xy data provider which generates configurable random data for demonstrating ‘Chart: Scatterplot’ widgets. [#733]

  • [Dashboards/Data Queries/UX] In data queries, added a type:sample.timeseries data provider which generates configurable random data for demonstrating ‘Chart: Time Series’ widgets. [#733]

    	label:"# Tickets"
    	label:"# Tasks"
    	label:"# Calls"
  • [Packages/Satisfaction] Fixed an issue with the ‘Customer Satisfaction’ package where links didn’t work properly on these widgets: ‘NPS: Render recent ratings on dashboard’, ‘CSAT: Render recent ratings on dashboard’, ‘CES: Render recent ratings on dashboard’. [#753]