Blog

Release announcements, helpful tips, and community discussion

9.2

Cerb (9.2) is a major feature update released on March 08, 2019. It includes more than 118 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 February 28, 2019 then you can upgrade without renewing your license. Cerb Cloud subscribers will be upgraded automatically.

Important Release Notes

Package Library

The main limitation of packages has been that only administrators can use them. Many teams have asked for a way to more broadly use packages to automate workflows that involve the creation of records.

A new package library feature addresses this feedback by allowing workers to make selections from a list of pre-approved templates that are curated by administrators. We’ve provided many useful defaults, and admins can add new packages based on the specific needs of their team.

The package library is organized into sections (i.e. extension points) that determine where specific packages are available – when creating a new project board, adding widgets to a dashboard, etc.

Packages can save a lot of time by creating multiple related records at once. For example, when creating a new project board in one-click using the ‘Kanban’ template, a board is created with three columns (TODO, In Progress, and Completed), along with the automation to close tasks when moved into the completed column. Previously, all of these elements had to be created and configured individually.

Packages in the library may also contain prompts that gather input from workers to customize each use – targeting a specific worker, providing a name, selecting a date range, etc.

The library drastically simplifies some workflows that are currently being done with bot interactions. For instance, creating a chain of related tasks on a ticket as a single action. These options are now available in the standard (+) popup editor when creating records.

Administrators can manage the package library from Setup » Packages » Library or from Search » Packages.

Bot Behavior Library

The packages library is available when creating bot behaviors.

  • Auto-Reply: A behavior that automatically replies to new messages
  • Chat interaction with worker: A template for building worker-based chat bot interactions

Bot Behavior Action Library

The packages library is available when adding actions to bot behaviors.

  • Execute HTTP request: Make an HTTP request to an external API and process the response
  • Search records: Search any record type with a query
  • Set placeholder: Set the value of a custom placeholder

Conversation with worker

  • Close chat window: Close the current chat window in bot interactions
  • Prompt for input:
    • Buttons, Chooser, Date, File Upload, Images, Text, and Wait
  • Respond with text: Respond to the worker with a text-based chat message

Handle interaction with worker

  • Start conversation: Start a conversational behavior

Bot Behavior Decision Library

The packages library is available when adding decisions to bot behaviors.

  • Yes/No: A binary decision with ‘yes’ and ‘no’ outcomes
  • Multiple outcomes: A decision with multiple outcomes

Bot Behavior Loop Library

The packages library is available when adding loops to bot behaviors.

  • Loop with break: A loop that stops early if a certain condition is true
  • Loop record search results: Loop through results from a record search query

Calendar Library

The packages library is available when creating calendars.

  • U.S. Holidays: A calendar with recurring U.S. holidays
  • Work Schedule: A calendar with a recurring work schedule

Connected Services Library

The packages library is available when creating connected services. This makes it much easier to set up new services. Previously, connected service packages had to be copied and imported from the project website. Now integrations like Twilio and Amazon Web Services can be configured in a single click.

The following services can be quickly configured from the library:

  • Amazon Web Services
  • Dropbox
  • Facebook
  • Freshbooks (Classic)
  • GitHub
  • GitLab
  • Google
  • LinkedIn
  • Nest
  • Salesforce
  • Slack
  • Stripe
  • Twilio
  • Twitter

Profile Tab Library

The packages library is available when creating profile tabs.

  • Activity Log: A log of activity on this record
  • Package Overview: The default overview for package records
  • Ticket Overview: The default overview for ticket records

Profile Widget Library

The packages library is available when adding profile widgets.

  • Ticket Owner: A widget that display the current ticket owner and allows quick assignment
  • Ticket Participants: A list of the participants on this ticket

Project Board Library

The packages library is available when creating project boards.

  • Kanban: A three column task management board

Task Library

The packages library is available when creating tasks.

  • New task for me: A new task assigned to the current worker

Workspace Page Library

The packages library is available when creating workspace pages.

  • Home: A home page showing the current worker’s tickets, tasks, reminders, and calendar
  • Mail: A page for mail processing with open tickets, sent messages, and drafts
  • Reports: A page with customizable reporting dashboards

Removed the ‘Help me create a page’ option when creating workspace pages. These same options are now available in the library (e.g. Home, Mail, Reports).

Workspace Tab Library

The packages library is available when creating workspace tabs.

  • Dashboard: A dashboard with customizable widgets
  • Dashboard with filters: A dashboard with customizable widgets that update from user-editable filters
  • World Clocks: A dashboard with world clocks across major timezones

Workspace Widget Library

The packages library is available when creating workspace widgets.

  • Categories: A data query driven categories visualization
    • Messages sent per worker by group
    • Tickets per group by status
  • Clock: A clock widget with a configurable timezone
    • Berlin, Denver, Johannesburg, Kolkata, London, Los Angeles, Moscow, New York, Sao Paolo, Shanghai, Sydney, Tokyo, Winnipeg, etc
  • Counter: A widget displaying a single metric value (e.g. count, average)
    • Open Tickets: A counter widget displaying the current number of open tickets
    • Avg. Response Time: A counter widget displaying the average worker response time over the past 30 days
  • Donut:
    • Orgs by Country: A donut chart of top countries by organizations with click-to-search
    • Tickets By Status: A data query driven donut chart visualization
  • Map:
    • U.S. States: A zoomable map of U.S. states with points of interest from a data query
    • World Countries: A zoomable map of world countries with points of interest from a data query
  • Table: Tabular results from a data query
    • Bot Behaviors By Event
    • Tickets By Status
    • Worker Reply Leaderboard
    • Workers by Group
  • Time Series: A data query driven stacked bar chart visualization
    • Tickets created per month by group
    • Tickets created per week by group
  • Worklist: A filterable, pageable, and sortable worklist of records
    • Active Workers
    • My Reminders
    • My Tasks
    • My Tickets
    • Open Tickets
    • Overdue Tasks

Roles

Automatic role membership with queries

Simplified role management for large or frequently changing teams. Membership in a particular role is now determined using a search query that matches the desired worker records.

For instance, an “Administrator” role may define membership as isAdmin:yes, and its roster will automatically update to always include every worker with administrator privileges. Previously workers had to be assigned to roles manually. The members of a role are granted its privileges.

Define read and write access for role-owned records

Roles are now much more flexible about who can view and edit their owned records. [#883]

Previously, role-owned records were readable by all members of the role and editable only by admins. This left groups as the only way to share edit privileges on a record.

Now, when creating or editing a role, two new options are available for “Records owned by this role are visible to these workers” and “Records owned by this role can be edited by these workers”. Like the membership improvement, these options provide a search query to determine which workers may view or edit the role’s records. The editors and users of role-owned content are no longer required to members of that role.

Deep search roles from worker records

On worker worklists, new role.editor: and role.reader: deep-search filters make it easy to segment workers by the ability to respectively edit or use role-owned records.

Deep search workers from role records

On role worklists, there are new deep-search filters for member:, editor:, and reader:. These find roles with matching workers who are granted role privileges (members), able to edit role-owned records (editors), or able to read/use role-owned records (readers).

Profile images for roles

Added profile pictures to role records. These are displayed on cards, worklists, and profile pages.

Workspaces

Owners are displayed on workspace pages

Workspaces now display their owner in the top right of the page. Clicking on that name opens their card. For roles, this makes it easy to see who the editors are.

Dashboards

Click to search on subtotal-based categories charts

On ‘Chart: Categories’ dashboard widgets using a worklist.subtotals data query, clicking on a bar segment will open a search worklist automatically filtered to the underlying records.

Click to search on subtotal-based pie charts

On ‘Chart: Pie’ dashboard widgets using a worklist.subtotals data query, clicking on a segment or legend label will open a search worklist automatically filtered to the underlying records. [#896]

Click to search on subtotal-based time series charts

On ‘Chart: Time Series’ dashboard widgets using a worklist.subtotals data query, clicking on a data point will open a search worklist automatically filtered to the underlying records. [#898]

Category charts in background tabs

Fixed an issue with dashboards where ‘Categories’ widgets didn’t load properly when opened in a new background tab in the browser. [#731]

Bots

Customize record editors with bot behaviors

Added a “[UI] Record editor opened” event to bot behaviors. This allows custom client-side functionality on record editor popups. For instance, based on an actor or record fields, a set of custom fieldsets can be automatically linked to the record being edited. Certain fields may be hidden and default values may be overriden. [#759]

Behavior aliases (URIs)

Added an optional uri field to bot behaviors. This provides a more portable alternative to using IDs when referencing behaviors.

Usability improvements to bot-powered HTTP requests

Bot behaviors on the ‘[UI] Respond to Ajax HTTP Request’ events can now be accessed from the endpoint /ui/behavior/<uri>. This uses a worker’s existing browser session to serve bot-powered JSON, HTML, scripts, images, etc.

This is primarily used by custom widgets on dashboard and profiles.

Packages

Picklist prompts in packages

Packages now support a ‘picklist’ prompt type, which allows the user to select from a pre-defined list of options.

Conditional import of package contents

In packages, records can now include an _exclude key with a dynamic value based on prompts and scripting. A value of true will skip the record when importing package contents.

This allows some package members to be optional. A package may select one of several alternative implementations based on prompted input.

This is used by dashboard widgets in the package library to provide a picklist of ‘Dataset:’ options, which are implemented as a set of widgets from which only one is selected.

Import nodes on existing behaviors with packages

In packages, behavior nodes (e.g. decision, action, loop) can be added to an existing behavior. Previously, it was only possible to add entire behaviors.

Dynamic parent bot in behavior packages

In packages, the bot_id of a behaviors record can now be specified using placeholders.

Packages menu in setup

Packages now have their own menu in Setup » Packages. This includes the packages library and the ability to import arbitrary packages (previously Setup » Configure » Import Package).

Project Boards

Default task status action on project boards

On project boards, a built-in action is now available for automatically changing task statuses (e.g. completed) when cards are dropped on the column. Previously this very common workflow had to be implemented using bot behaviors, which added unnecessary complexity.

Records

Emoji support

Cerb now uses ‘utf8mb4’ (4-byte UTF-8) encoding for the database connection. This is backwards compatible with the 3-byte ‘utf8’ encoding we’ve used historically, while allowing us to begin transitioning the schema and data to full support for the full UTF-8 range (Emoji, Chinese, etc).

On all record fields that don’t currently support 4-byte Emoji characters (i.e utf8mb4), such characters will now be automatically filtered from input (browser, bots, API) rather than generating an error or refusing to save.

  • The ticket “Subject” field now properly supports Emoji characters. [#855] [#59]

  • The worker “Location” and “Title” fields now properly support Emoji characters.

  • Comments and sticky notes on records now properly support Emoji characters. [#796] [#59]

Image Editor

Arbitrary sizes in the image editor

The image editor on records can now specify arbitrary dimensions. Previously this was fixed to 100x100 pixels.

Default white background in the image editor

The image editor on records now defaults to a white background. When using the monogram option it switches to a dark background. When uploading or fetching an image it switches to a white background.

Usability

Spinners on record popup editors

When editing records from card popups, the ‘Save Changes’ button now shows a spinner icon while in progress. The save button is also disabled to prevent accidental double-clicks.

Add empty fieldsets to records in automation

In the records API, every record type that supports custom fieldsets may include a ‘fieldsets’ key with a JSON array or comma-separated list of fieldset IDs. This allows custom fieldsets to be linked to a record before any values are set.

Created date on email address records

Email address records now track created_at as a field. [#517]

Performance

Faster multiple record lookups

Improved the performance of retrieving multiple records by IDs by reducing extraneous database queries when a server-side cache exists (e.g. workers, groups). This is frequently used in bot behaviors, data queries, dashboard widgets, and the API.

Data Queries

Subtotal date-based custom fields as histograms

In data queries of type:worklist.subtotals, it’s now possible to subtotal by: using date-based custom fields with histograms like by:[dateCustomField@month]. Previously these always grouped by the exact timestamp (in seconds).

Subtotal workers by group membership

With worklist.subtotals data queries, worker records can now be subtotaled by group. This makes it possible to create widgets like a groups roster.


type:worklist.subtotals
of:worker
by.count:[group~100]
query:()
format:table

Sample geo points

Added a sample.geo.points data query type for generating format:geojson output. This is necessary for demonstrating map widgets because there aren’t any core record types with a coordinates field. The input is a set of series.<alias>:() that contain a list of keys like new_york:(name:"New York" coordinates:"POINT(-73.935242 40.73061)"). The coordinates: key is required (long/lat order), but the other keys are arbitrary and passed through to hover/click events.


type:sample.geo.points
series.cities:(
  lihue:(name:"Lihue" coordinates:"POINT(-159.342222 21.978611)")
  new_york:(name:"New York" coordinates:"POINT(-73.935242 40.73061)")
  seattle:(name:"Seattle" coordinates:"POINT(-122.350876 47.620499)")
  berlin:(name:"Berlin" coordinates:"POINT(13.393236 52.504043)")
  sydney:(name: "Sydney" coordinates:"POINT(151.21 -33.868)")
)
format:geojson

Metadata for worklist subtotal queries

Data queries of type worklist.subtotals now return series metadata in the response for all format: options. This generates a query field for each data point which can be used to quickly run searches from dashboards, bots, or the API.