Cerb (9.2) is a feature upgrade released on March 07, 2019. It includes more than 118 new features and improvements from community feedback.
- Important Release Notes
- Package Library
- Bot Behavior Library
- Bot Behavior Action Library
- Bot Behavior Decision Library
- Bot Behavior Loop Library
- Calendar Library
- Connected Services Library
- Profile Tab Library
- Profile Widget Library
- Project Board Library
- Task Library
- Workspace Page Library
- Workspace Tab Library
- Workspace Widget Library
- Project Boards
- Data Queries
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
Cerb 9.2 requires PHP 7.0+ and MySQL 5.6+ (or MariaDB 10.2+).
To upgrade your installation, follow these instructions.
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
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
- Freshbooks (Classic)
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
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
- 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
- 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
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.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
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.
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.
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]
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.
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).
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.
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]
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.
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]
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.
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
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
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.