Release announcements, helpful tips, and community discussion


Cerb (6.4) is a feature upgrade released on June 07, 2013. It contains over 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 June 7, 2013 then you can upgrade without renewing your license.

Important Release Notes

  • Make a backup before upgrading.

Custom Fieldsets

  • Custom fieldsets allow groups of related custom fields to be added to records in order to classify them. Previously, adding a new custom field to a type of record (e.g. tasks, tickets) would always display that field on every record. This led to a lot of clutter when custom fields were only used by a single group, worker, or Virtual Attendant behavior; and when a custom field was only related to a subset of records of the same type. With fieldsets, you can optionally add multiple sets of custom fields to a specific record. For example, an asset record could have a ‘Car’ fieldset added to it, with fields that describe mileage, color, make, model, VIN, etc. Another asset record could have a ‘Computer’ fieldset, with fields for CPU speed, RAM, serial #, etc. Both of these records would be assets, but they would be classified separately. These fields would not be mixed between the two records. It is still possible to have global custom fields for all records of the same type, as before; it’s just no longer the only option. Fieldsets can be owned by roles, groups, or workers. Existing group-based custom fields will be converted to group-owned fieldsets during the migration. Fieldsets are managed in the peek popup and can be added using the ‘Add Fieldset’ button which displays a menu of available fieldsets. A fieldset can also be deleted by clicking the red X button that is displayed when hovering over any of its fields.

Group-owned fieldsets

  • The ‘Custom Fields’ tab on Group Setup now manages the custom fieldsets owned by the group, rather than individual global fields.

Modify custom fieldsets from bulk update

  • Custom fieldsets and their fields may be set from the Bulk Update popup for any records that support them.

Modify custom fieldsets while composing mail

  • Custom fieldsets may be set when composing mail. This solves a long-standing issue where desired custom fields couldn’t easily be set when creating a ticket, and instead had to be set by subsequently editing the newly created record. Additionally, custom fields could only be set based on the group associated with the ticket. Now, all custom fieldsets are available when creating a ticket, irrespective of factors like the group. This also simplifies the compose popup by not displaying custom fields that aren’t needed.

Fieldset-aware worklists for subtotals and filters

  • Subtotals and filters on worklists will now automatically adapt the available custom fields based on any active fieldset filters. For example, if there are 10 possible fieldsets for tickets, then you’ll see a lot of custom fields for filtering or subtotaling a worklist. If the same worklist is filtered to a specific kind of fieldset, then only custom fields from that fieldset will be displayed when configuring the worklist. This helps progressively reduce clutter once the intentions of the worker are known to Cerb.

Read and modify fieldsets with Virtual Attendants

  • Virtual Attendants can utilize custom fieldsets on conditions and actions.


  • Calendars are now distinct records that may be owned by workers, groups, or roles. Previously, events were directly owned by a worker and were collectively referred to as a calendar, although no record existed, and each worker could only have a single calendar. Any number of calendars may now be created, and owners may be responsible for several. For example, a group can define its collective working hours (e.g. for SLAs) as a group-owned calendar. The upgrade will create a calendar for each worker and assign their existing events to it.
  • Calendar event worklists can display their parent calendar as a column, and filter or subtotal by calendar. This is particularly useful in calendar event choosers.
  • Added custom fields to calendar event records.

Calendar datasources

  • A calendar may now have multiple datasources. Previously, events always had to be manually created. Now they can come from worklists, or synchronize from other apps and services. For example, a task calendar can display open tasks as one datasource in green, and completed tasks as a second datasource in gray. These colored events would be displayed on the same calendar in order to communicate more information at the same time.
  • Calendars can toggle the ability of workers to create manual events in addition to those provided automatically by datasources. For example, on a calendar that displays task or invoice information, it is likely undesirable to allow manual events to be added to the calendar since all of the data is coming from worklists.
  • Calendars can toggle the ability to allow automated synchronization from other datasources. On a calendar of manual events, synchronization may be disabled to simplify the calendar’s configuration. This will hide the external datasource options.
  • Calendars that display worklist-based content now provide a way to create new records of those types. For example, a task-based calendar can be used to schedule new tasks, in addition to rearrange existing ones. This functionality is available in all the places where calendars are shown: calendar profiles, availability calendars, workspace tabs, and ashboard widgets.
  • Calendars that use worklist-based datasources can now set availability (free/busy) and end dates for the events they generate. This means that in some situations, a datasource (like assigned tasks) may increase or reduce availability.

Recurring calendar event improvements

  • Recurring calendar events are now virtualized. Rather than generating thousands of event records, recurring events are generated on-the-fly for any given date range. This cleans up a lot of redundant clutter in the database, and it also means that you can advance a calendar 10 years ahead and still see your recurring events, where previously such events were limited to displaying through the end of the current year (plus one month). The scheduler job for calendar scheduling is no longer needed and has been removed. Existing recurring events have been converted to the new format.
  • The process of creating recurring events no longer relies on a rigid UI that forces a choice between daily, weekly, monthly, or yearly repetition. Recurring events may now be easily and quickly created using natural language, like “Weekdays”, “Monday”, “December 25”, “15th”, etc. Previously, it wasn’t possible to set up recurring events like the U.S. holidays of Labor Day and Thanksgiving where they change every year. Now, recurring events can be created with patterns like “first Monday of every month” and “fourth Thursday in November”.
  • Recurring calendar events may now specify a timezone to be used when scheduling by relative times (e.g. 02:00 to 20:00). Previously, the timezone of the current worker was always assumed, but this made it difficult to deal with times that were intentionally in another timezone. Now a recurring event can be scheduled in London time while working in Los Angeles time.

Notifications on calendar event creation

  • When a worker adds a new event or recurring event to a calendar, a notification will be sent to any watchers of that calendar. This makes it really easy for a worker to notice when someone adds an event to their calendar for them.

Availability calendars

  • Rather than displaying a fixed calendar as before, worker profiles now display an Availability Calendar which takes the events from an existing calendar and converts them into availability windows. This is what a Virtual Attendant sees when it’s scheduling a task or looking for an available worker. Each worker can elect one of their calendars to determine their availability, which then becomes visible on their profile. This approach is particularly helpful in situations where a worker’s schedule may change frequently between various shifts. A calendar for each shift can be created, and when the schedule changes it’s a single click to activate a new calendar. To temporarily remove their availability entirely (e.g. vacation, leave of absence, maternity/paternity, sabbatical, code marathon), a worker can simply break the link between their availability and an existing calendar. They don’t need to modify or delete any of the existing events, which makes it much easier to resume working later on.
  • Converted the use of the ‘worker calendar’ worklist filter to the new ‘worker availability’ filter. Rather than checking a single calendar, this now checks workers’ preferred availability calendar.

Calendar workspace tabs

  • Existing calendar-based workspace tabs have been automatically converted to calendar records. These tabs now have access to all the functionality improvements related to calendars. An existing calendar may now be displayed on a workspace in a few clicks, and the same calendar may be displayed in multiple places and by multiple workers.
  • Calendars displayed as workspace tabs may be edited directly from from the workspace by clicking on the gear icon. This removes the need to leave the workspace to modify the underlying calendar.
  • The events from calendars on workspace tabs are now clickable. Previously, clicking on one of these events did nothing, which made it difficult to do anything useful with the calendar other than looking at it. Each event will open its peek popup depending on its type (e.g. tasks, tickets, events).

Virtual Attendants can use calendars

  • Virtual Attendants can now set any date-based fields, custom fields, or behavior variables using calendars. This allows scheduling based on “work hours” to automatically skip nights, weekends, and holidays.
  • Virtual Attendants behaviors that use the ‘Worker calendar’ condition have been migrated to the new ‘Worker availability’ condition instead. This compares against each workers’ preferred availability calendar.

Smart date input fields

  • Implemented smart date input fields. Previously, you could only enter relative (“+2 hours”) or absolute (“Jan 9 2020”) dates into these fields. Now it’s possible to schedule a relative date in ‘working hours’ using any calendar (for example, following an SLA schedule). A calendar is selected with the ‘@” symbol (e.g. +2 hours @SLA). This works whether you’re scheduling a task due date, a ticket reopen, any custom field, or anything else. You can press ENTER in a date field to have any date text automatically converted into your current timezone. This allows workers to verify the final date before saving the record (where before, the relative date text was sent blindly to the server).
  • As an additional convenience on smart date input fields, you can also convert dates and times from other timezones into your current timezone. For example, if you’re in Los Angeles and you need to schedule a due date for 2pm tomorrow in London time, you can type “tomorrow 2pm Europe/London” into the date field and press ENTER. As a shortcut, you can also type “tomorrow 2pm Lon” and autocomplete the rest.

Read calendar data from the Web API


  • Implemented ‘/rest/calendars/123.json’ in the Web API for retrieving calendar details. This can include a query parameter named ‘expand’ with the options ‘weeks’ (week and day data for drawing a calendar), ‘events’ (flat list of events during the calendar month), and ‘weeks_events’ (events grouped into days). Additionally, the arguments ‘month’ and ‘year’ may be provided to change the time period.
  • Implemented ‘/rest/calendars/list.json’ in the Web API for retrieving a list of all accessible calendars for the current worker.
  • Implemented ‘/rest/calendars/search.json’ in the Web API for searching calendars.


Calendar widgets

  • Calendar widgets are now available on dashboards. These widgets offer a quick summary of a calendar without taking up much screen space. There’s a count of events occurring for each day, and the full list is displayed when hovering. You can also click each event to open its peek popup and modify it; and those changes will be immediately reflected on the calendar. This allows you to get more work done from your dashboard — rescheduling tasks, chasing overdue invoices, etc. You’ll also notice a small gear button at the top of the widget. If you have edit permission on the calendar, you can modify it directly from your dashboard as well.

Clock widgets

  • A new world clock widget is available on dashboards. The clocks support 12-hour or 24-hour display, and the closest timezone can be quickly selected from the list of major cities organized by continent and country. These widgets are particularly useful for coordinating with international team members or sales prospects.

Countdown widgets

  • A new countdown widget is available on dashboards. You can use these widgets as gentle reminders of upcoming events. For example, on a development dashboard you can display a countdown to the next milestone (an iteration or release). On a sales dashboard, you can display the time left in the current period (quarter, year).

Widget improvements

  • Dashboard widgets now display a single icon in the top right with a dropdown menu. This provides a place to add more options. Previously, every option was an icon, which limited the amount of space available to display the widget title. The new menu will be used to provide options like duplicating widgets or exporting their data.
  • Worklists that are used as widgets on dashboards now label each field they display. Previously, a worker had to constantly refer to the horizontal order of the headings to figure out the vertical values being displayed for each row. The new approach uses a little more space but improves usability dramatically.
  • Fixed an issue where scatterplots didn’t display any plots if the dataset only had a single sample.

  • Fixed an issue on dashboards where worklist-based counters and gauges didn’t load values from custom fields that weren’t in the filters. For example, a counter intended to SUM the value of a custom field may have displayed ‘0’ even though several values existed. The reason for this is very technical, but has to do with how worklists intelligently use the most efficient way to load values based on how they are needed. When filtering, a slower LEFT JOIN is needed. For just displaying a value, a quick subquery is used without any joins. Counters and gauges always need to join values for aggregate functions.

  • Fixed an issue on worklist-based chart widgets where custom fields as axes may not display the proper values when they aren’t used as filters on the underlying worklist. This had to do with how worklists interact with the database. The process is now more intuitive and custom fields can be selected without any other considerations.

  • Dashboards now send a ‘dashboard_heartbeat’ event to all widgets every second. This can be used for timed behavior (clocks, etc) without having to implement timers for every widget. With timers for each widget, it is possible for two clocks on the same page to update at different intervals, which is visually distasteful and distracting.

Import and export dashboard widgets

  • All workspace widgets now support the ability to export their configuration to a plaintext format (JSON). This option may be accessed by clicking the configuration menu in the top right of the widget, and selecting ‘Export Widget’. Using this feature, widgets may be saved and transferred electronically; providing the beginnings of a community exchange for useful widgets.
  • Dashboard widgets may now be imported from the ‘Add Widget’ popup (using the same JSON format that they export to). The popup now has tabs for ‘Build’ and ‘Import’. This addresses several requests, including the ability to move and clone widgets, and to share widgets between workers or Cerb installations. This was the last missing piece blocking an official repository of widgets from being created.
  • When importing dashboard widgets, the import file may now specify any number of fields that should prompt the current worker for additional information. The answers to these prompts can customize the widget before it is imported, rather than needing to instruct workers to make edits later. This also handles the situation where data like workers or groups are different between Cerb installs. For example, a counter widget that reports on the number of overdue tasks owned by a specific worker can now prompt for which worker to use when being imported.

Export widget data

  • All widgets can now export their data directly from the UI formatted as JSON or CSV.


  • Workspace pages now display a configuration menu in the top right instead of a toolbar. This provides space for more options without adding visual clutter. The tab-related options (e.g. Edit Tab) are now hidden when the currently selected tab doesn’t support those options (e.g. the built-in ‘+’ tab).

Import and export workspace pages and tabs

  • Workspace pages and tabs support the ability to export their configuration to a plaintext format (JSON). This option may be accessed from the page menu (gear icon) in the top right.
  • Workspace pages and tabs may be imported (in the same JSON format they export to). This provides a simple way to clone or share useful workspace configurations, either within a Cerb environment or externally. Pages can be imported from the create page popup; tabs can be imported on a specific workspace page from its ‘+’ tab.

Smart column headings on worklists

  • Worklists now determine the width of their columns without regard for the length of column headers. This was becoming a problem when long field names (particularly from custom fieldsets) were forcing columns to be much wider than their contents, which stole width from other columns that needed it more. For example, a column heading of “Organization SLA Is Expired” likely only needs to display values that are Yes/No. Under the new behavior, this column would now be narrower than its heading, and the extra space would be given to other columns. This functionality is also useful if you want to display many columns, because columns without any values in them won’t waste screen space by displaying their full heading.

Wrapping subtotal headers

  • Since custom fieldsets have increased the length of many custom field names, the title of the subtotals sidebar on worklists will now be wrapped when necessary.

Access workspaces and dashboards from the Web API


  • Implemented a ‘GET /workspaces/pages/list.json’ method to the RESTful Web-API. This retrieves a list of all workspace pages accessible by the current worker; owned by them, their groups, or roles. The ‘expand’ parameter includes additional information about each page’s owner, tabs, widgets, or worklists. This is very useful for bringing workspace data into external interfaces (such as mobile apps).
  • Implemented a ‘GET /workspaces/pages/123.json’ method to the RESTful Web-API. This retrieves a specific page. The ‘expand’ parameter includes additional information about the page’s owner, tabs, widgets, or worklists.
  • Implemented a ‘GET /workspaces/tabs/123.json’ method to the RESTful Web-API. This retrieves a specific worklist tab. The ‘expand’ parameter includes additional information about widgets, widget data, or worklists. The data for all widgets on the tab may be retrieved in a single request, which makes it very easy to empower remote scripts and apps with the ability to monitor and report on Cerb dashboards. For example, a dashboard tab could summarize information about a series of servers in a datacenter, and a remote script could check those metrics against thresholds, whether they’re counters, gauges, charts, etc. This is useful, since Cerb dashboards are very informative but they don’t get a worker’s attention if they aren’t proactively monitored.
  • Implemented a ‘GET /workspaces/widgets/123.json’ method to the RESTful Web-API. This retrieves information about a specific workspace widget, and always includes the widgets raw data. This has all the same advantages for remote monitoring and reporting as pulling a workspace tab.
  • Implemented a ‘GET /workspaces/worklists/123.json’ method to the RESTful Web-API. This retrieves information about a specific workspace worklist. The response provides search results with support for sorting and paging. By setting up the desired filters on the Cerb dashboard, a remote API consumer doesn’t have to concern itself with filtering results. For example, a remote app could display the ‘Available tickets’ worklist from an existing workspace, which may use a dozen filters to highlight the appropriate tickets. This not only saves the API consumer a lot of work in listing that information, but it also means that remote apps don’t need to update every time the filters on the underlying worklist change.

Virtual Attendants

Import/export Virtual Attendant behaviors

  • [CHD-2530] [CHD-2688] All Virtual Attendant behaviors now support the ability to export their decision trees to a plaintext format (JSON). This option may be accessed by clicking on the behavior and selecting ‘Export Behavior’ from the menu. Using this functionality, VA behaviors can now be duplicated, shared, or saved. The project can also maintain an official repository of useful VA behaviors that can be easily installed.
  • The Virtual Attendant ‘Export Behavior’ option on the /debug page now uses the same JSON format as ‘Export Behavior’ does in the app. Previously, this used a special XML format which was only intended for human review but not importing. The new format allows imports by developers and QA to assist customers with troubleshooting. The advantage of using this option is that it exports all behaviors at once. It may also be used by administrators to review or make backups of all VA behaviors.
  • Virtual Attendant behaviors may now be imported from the ‘Create Behavior’ popup (using the same JSON format that they export to). The popup now has tabs for ‘Build’ and ‘Import’. This addresses several requests, including the ability to move and copy behaviors, and to share behaviors between groups, workers, or Cerb installations. For example, once setting up a complex auto-responder behavior for a group, it can be quickly copied to several other groups without having to tediously repeat the whole process of adding decisions, outcomes, and actions. This also makes it possible for the project to maintain an official repository of useful behaviors that can be easily imported into any Cerb instance.
  • When importing Virtual Attendant behavior, the import file may now specify any number of fields that should prompt the current worker for additional information. The answers to these prompts can customize the behavior before it is imported, rather than needing to instruct workers to make edits later. This also handles the situation where data like workers or groups are different between Cerb installs. For example, a custom behavior that assigns tickets to a particular worker can now prompt for which worker to use when the behavior is imported in a new environment.

Virtual Attendants can modify worklists

  • Implemented a new Virtual Attendant event for ‘[UI] While displaying a worklist’. This allows behaviors that automate modifications to worklists in the browser using jQuery actions. These behaviors can target worklists by type (e.g. ticket, task) as well as by unique identifier. This means modifications can be made to all worklists of a certain type anywhere in Cerb (widgets, workspaces, search, choosers), or such changes can be targeted to a specific instance of a worklist (e.g. just ticket choosers, or a single task worklist widget). These VA behaviors can be owned by Cerb, roles, or workers. A global behavior (e.g. role-owned) would be applied to displayed worklists for all workers. There are many use cases for this event: a date-based custom field can be colored red when overdue; a priority custom field can display colors for each level; relative dates (e.g. 2 hours) can be converted to absolute dates (e.g. June 3 2013 2pm); column headers can be relabeled; etc.
  • When a Virtual Attendant modifies a worklist, a robot icon is now displayed next to the worklist’s title. Clicking this icon will display a list of the behaviors that were executed against the list (e.g. color rows by priority; color overdue due dates red; display dates as date+time).


POP3 mailboxes

  • [CHD-2930] [CHD-3082] A failing POP3/IMAP mailbox will no longer be auto-disabled after 5 consecutive failures. Instead, a delay of two minutes will be incurred for each consecutive failure up to a maximum delay of 30 minutes. This ensures that the mailbox will be retried within a reasonable amount of time. Previously, mailboxes could remain disabled over a weekend if no admins were available. Saving a mailbox in setup will reset the failure and delay counters.

  • Failing POP3 mailboxes are now marked with an icon in “Setup->Mail->POP3 Accounts”. A message is also displayed when editing a failing mailbox that reads “Error! This mailbox has failed to check mail for (n) consecutive attempts”. This should help admins spot potential issues more easily.

  • Improved the process of deleting a mailbox from “Setup->Mail->POP3 Accounts”. This is now more consistent with the rest of the app. Previously, you had to check a box at the bottom of the form to delete the mailbox. Nothing else in Cerb works like that.

Subtotal ticket worklists by Last Action

  • Ticket worklists may now be subtotaled by the ‘Last Action’ field. The possible actions are New Ticket, Worker Replied, or Recipient Replied.

New keyboard shortcuts while replying

  • When replying to a ticket, the Ctrl+Shift+Enter keyboard shortcut will instantly send the message.

  • When replying to a ticket, three new shortcuts will automatically set the status of the ticket. Ctrl+Shift+O (open), Ctrl+Shift+W (waiting), Ctrl+Shift+C (closed). This saves extra mouse clicks, or the use of TAB to navigate down the page.

  • When replying to a message and entering a ‘wait until’ date, the Ctrl+Shift+Enter shortcut will convert the date and then send the message in a single keystroke.

Custom fields are no longer set while replying

  • When replying to a ticket, custom fields will no longer be displayed at the bottom of the form. The main problem with the previous approach is that it led to overwriting any custom field changes that took place on the same record while a long reply was being drafted. This is because the form set the value of all fields, rather than only setting a few specific fields. This functionality can be reintroduced later in a better way. For now, custom fields may be set from the peek popup using the edit button after replying to a ticket.

Plugin Library

  • When upgrading from the /update page, Cerb will now attempt to download the latest version of all installed plugins from the Plugin Library. This should spare admins from having to manually update and re-enable all third-party plugins after an upgrade.

  • The ‘Download updates’ button in the Plugin Library will now automatically download any updates for all installed plugins. Previously, it just updated the version information but an admin had to update each plugin by clicking a button in the list. If a ‘.git’ development directory exists in a plugin then it won’t be automatically updated (as this would interfere with development).


  • On the profile for every record type, the toolbar has been moved to the very top of the page. Since custom fieldsets are now displayed at the top of profiles, this helps the page flow better.

Plugin Development

  • Implemented DevblocksPlatform::intClamp($n, $min, $max) for conveniently constraining a numeric value within a given range.

  • Implemented DevblocksPlatform::strFormatJson($json) to format JSON in a human-friendly output. Nested properties are indented, and one key/value pair or array element is displayed per line.

  • Implemented DevblocksPlatform::jsonGetPointerFromPath() for making arbitrary changes at any depth to a JSON object by using an XPath-like path. This is used by the Virtual Attendant and Dashboard Widget import functionality to allow guided customizations prior to import. This helper method can be reused anywhere that similar functionality is required.

  • The devblocks-dao.php script in /install/extras/sdk will now assist with creating the initial code and templates for contexts, profiles, and peeks. It also adds several useful virtual fields to the generated worklist: context links, watchers, and ‘has fieldset’. Custom fields are enabled by default. The ‘delete’ option on peeks uses the two-step verification rather than the gaudy browser confirmation popup.

  • Implemented DevblocksCalendarHelper::getCalendar($month, $year) which generates a calendar grid for use by multiple areas of functionality.

Maintenance Updates


Cerb6 (6.4.1) is a maintenance update released on June 14, 2013; it contains 13 minor fixes and usability enhancements from community feedback covering the recent 6.4 update. You can follow these instructions to upgrade.

  • [CHD-3370] [Custom Fieldsets/Code Cleanup] Deleting custom fieldsets is not possible.

  • [CHD-3369] [Custom Fieldsets/Code Cleanup] Fixed an issue where custom fieldsets didn’t link when applied to newly created tasks. The fields were set properly, but the fieldset itself didn’t show up on peek or profile.

  • [Platform/Automation] Updated the SQL automation scripts for 6.4 in the install/extras/automation/ directory. These allow the creation of a default database without having to run the installer.

  • [Mail/Attachments] When displaying an HTML attachment in the browser, the UTF-8 character set will now be used. Many browsers were defaulting to Latin-1, which was showing corrupt characters for multibyte languages (like Chinese).

  • [Workspaces/Wizard] Fixed an issue in the ‘Help me create a page’ wizard that was creating unusable workspaces.

  • [CHD-3374] [Calendars/Usability] Reimplemented the floating calendar helper for picking dates in all date-based input fields (e.g. task due, ticket waiting until, custom fields).

  • [Worklists/Aesthetics] The CSS styles for worklist hovering and selecting are now marked !important so they always override any other colorization. This is helpful when making VA behaviors that add new styles to worklists based on priority, etc.

  • [CHD-3380] [Knowledgebase] Fixed an issue with knowledgebase navigation in workspace tabs.

  • [Gravatar] If a message is from a worker then their gravatar is used rather than the reply-to address.

  • [CHD-3381] [Mail/Reply/Custom Fields] Custom fields and fieldsets can now be set again while replying to tickets. Previously, this functionality set values for all custom fields regardless of whether or not they changed. This caused problems because workers that were changing the custom fields on a ticket during the course of a long reply would have their changes overwritten when the reply was sent. Now the worker sending a reply may choose which custom fields to set, and the values for everything else will remain unchanged.

  • [CHD-3383] [Mail/Reply/Usability] When replying to a ticket, the “Would you like to move this conversation?” question now shows the current group and bucket in the default answer. For example: “No, leave it in the inbox of Support”. Previously, workers had to open the picklist and scroll around to find where the conversation was currently located before they could decide if they wanted to move it – this wasted the time spent moving a conversation only to find out that it’s already at the destination.

  • [Dates/Usability] Fixed a few rounding errors in relative dates displayed throughout the UI. For example, a relative time of ‘59 minutes 31 seconds’ was being rounded up to ‘60 minutes’, when it should display either ‘59 minutes’ or ‘1 hour’.

  • [CHD-3384] [Calendars/Recurring] Recurring calendar events may now specify a starting date to complement the ending date.


Cerb6 (6.4.2) is a maintenance update released on June 25, 2013; it contains 8 minor fixes and usability enhancements from community feedback covering the recent 6.4 update. You can follow these instructions to upgrade.

  • [Virtual Attendants/Simulator] Implemented simulator output for ticket/message behaviors: set spam training, set status, set subject, move to.

  • [CHD-3371] [Setup/Custom Fieldsets] Custom fieldsets can now be managed from the Setup->Custom Fields section.

  • [Calendars/Virtual Attendants] Added Virtual Attendant macros for Calendar records. This allows the creation of behaviors that are aware of calendar-wide automatically generated events (e.g. worklist, recurring).

  • [Calendars/Snippets/Code Cleanup] Fixed a few issues with lazy loading calendar event data from snippets.

  • [Virtual Attendants/Mail] Added the ability to use ticket_initial_message_* and ticket_latest_message_* placeholders in ‘Before sending worker reply’ behaviors.

  • [CHD-3395] [Worklists/Custom Fields/Subtotals] Fixed an issue where worker-based custom fields could display two ‘(nobody)’ subtotals depending on if the fields were NULL or zero.

  • [CHD-3393] [Virtual Attendants/Worker/Availability] When setting a worker variable from a Virtual Attendant action, workers may be now be filtered by their calendar availability.

  • [CHD-3389] [Mail/Worklists/Usability] Ticket worklists can now display and export the given name (first) and surname (last) of the ‘first wrote’ and ‘last wrote’ sender email addresses.


Cerb6 (6.4.3) is a maintenance update released on July 12, 2013; it contains 23 minor fixes and usability enhancements from community feedback covering the recent 6.4 update. You can follow these instructions to upgrade.

  • [CHD-3405] [Worklists/Usability/Compose] Multiple compose popups may be opened from ticket worklists.

  • [CHD-3418] [Addresses/Import] Fixed an issue that prevented CSV data from being imported on an address worklist if it included an organization field.

  • [CHD-3409] [Mail/Parser] Fixed an error message in the parser from Virtual Attendant actions using certain kinds of worklists: “PHP Fatal error: Call to a member function getMemberships()”

  • [CHD-3410] [Maintenance/Scheduler/Custom Fieldsets] Fixed a SQL issue in the maintenance scheduled job involving the deletion of orphaned custom fields from previously deleted fieldsets.

  • [CHD-3412] [ACL/Permissions] Removed the ‘Mail page’ and ‘Activity page’ itemized permissions since those options no longer exist in versions 6.0+.

  • [CHD-3413] [Pages/Mail/Wizard] The default ‘Mail’ page created by the ‘Help me create a page’ wizard now expands the subtotals sidebar on the ticket worklists and sets it to ‘Groups’ by default.

  • [Devblocks/Plugins/Explore] The devblocks-dao.php helper script now generates ‘explore mode’ code for any new contexts.

  • [CHD-3416] [Calendars/Availability/Usability] We’ve been receiving support requests from new users asking why they can’t add events to their availability calendar, and Cerb wasn’t providing any feedback about their calendar not being configured. When a worker doesn’t have an availability calendar configured, viewing the ‘Availability’ tab on their profile now discloses this fact. A worker viewing their own non-configured Availability will be provided with the option to select or create their availability calendar. Viewing another worker’s non-configured Availability will display a warning that they haven’t configured the feature. This should provide a much better experience for new workers.

  • [Calendars/Availability] Deleting a calendar will now remove it from use as any worker’s availability calendar.

  • [Virtual Attendants/Custom Scripts] All Virtual Attendant behaviors can now use a ‘Custom Script’ condition to determine outcomes. A custom script allows conditional logic, basic math operations, and the evaluation of any combination placeholders. Any output provided by the script is evaluated as the condition’s result. For example, a custom script can check the value of multiple placeholders in a single condition and output ‘true’ if any of them match the desired value. Similarly, a custom script can perform mathematical operations (e.g. add, multiply) on a combination of placeholders and evaluate the result against a threshold (e.g. num_spam/(num_spam+num_nonspam) > 0.9). Some Virtual Attendant actions also have the ability to set custom placeholder values; for instance, in response to an HTTP request, a record lookup, or a complex calculation. A custom script can be used to evaluate the contents of these dynamic placeholders. This feature was originally implemented so the JIRA plugin could create issues through JIRA’s API as a Virtual Attendant action. The VA behavior can then read the status from a custom placeholder to determine if the issue was created or if an error occurred. On error, the actual error from JIRA’s API can be created as a notification to the VA’s owner.

  • [CHD-3420] [Calendars/Worklists] Fixed a bug that prevented calendars with worklist-based events from displaying long-running events on multiple days.

  • [Gravatar/Profiles] Gravatar icons will now only be displayed on worker and group profiles if the Gravatar plugin is enabled. This addresses a conflict of interest for Cerb users who compete with Wordpress.

  • [Mail/ACL/Usability] When a worker moves a ticket from their profile page into a group they are not a member of, they will now be redirected to their default page rather than being shown a cryptic “Access denied” error page.

  • [CHD-3411] [Import/Worklists/Usability] After importing a file of CSV records into a worklist, the number of imported records is now displayed above the worklist. This provides a visual cue to workers, as many people weren’t sure that anything had happened after a file was uploaded.

  • [CHD-3415] [Virtual Attendants/Comments/Attachments] The ‘Relay to worker email’ Virtual Attendant action on ‘New comment on conversation’ now includes comment attachments in the outgoing messages.

  • [Import/Worklist/Usability] When importing on a worklist, any custom fields that are members of custom fieldsets will now be grouped together.

  • [Custom Fieldsets/Import/Virtual Attendants] Fixed an issue on imports and Virtual Attendants where setting individual custom fields from a fieldset didn’t link that fieldset to the record. This led to the values being set, but when viewing the record they weren’t displaying.

  • [CHD-3430] [Mail Filtering/VA/Simulator] Fixed an issue where Virtual Attendant simulator output didn’t display for the ‘Set header’ action in Mail Filtering behaviors.

  • [CHD-3429] [Mail Filtering/Headers] Mail Filtering VA behaviors that use the ‘Set header’ action can now use placeholders in the ‘Header’ and ‘Value’ fields.

  • [Mail/Parser/Relay] Fixed an issue with the ‘#comment’ action on relay replies.

  • [Calls/Activity Log] Implemented activity log entries for creating call records.

  • [Calendars] Fixed a notice in calendars when using PHP 5.4+.

  • [Virtual Attendants] All Virtual Attendant behaviors can now utilize a new ‘(Set a custom placeholder)’ action to create synthetic placeholders using snippets and scripts. This is similar to using private behavior variables, but custom placeholders don’t need to be formally defined before they are used.


Cerb6 (6.4.4) is a maintenance update released on August 1, 2013; it contains 13 minor fixes and usability enhancements from community feedback covering the recent 6.4 update. You can follow these instructions to upgrade.

  • [Consistency] Updated links from to

  • [Virtual Attendants/Relay] The ‘Relay email to workers’ action in Virtual Attendants will include a ticket mask in the default subject line. This helps Blackberry/Exchange users have their replies properly associated with existing conversations, since that stack often doesn’t include the ‘In-Reply-To:’ and ‘References:’ standard mail headers.

  • [CHD-3435] [Web-API/Attachments] Fixed an issue with filters not being applied when searching attachment records through the Web-API.

  • [Custom Fields/Fieldsets] Fixed an issue where deleting custom fieldsets could leave behind their fields.

  • [Import] Fixed an issue on importing where the ‘Upload’ text on the import popup wasn’t translated if the CRM plugin was disabled.

  • [Setup/Mail/Reply-To] Fixed a bug introduced in CHD-3344 that prevented reply-to addresses from being deleted.

  • [Virtual Attendants/Workers] The ‘Set (variable) worker’ action of Virtual Attendants is now capable of including additional lists of workers using behavior variables. This is useful when workers are being included from an external source like the ShiftPlanning plugin, and the ‘set worker’ action is picking one of them with a load balance, random, or round robin strategy. This also provides a cleaner way to select a worker from a subset based on any criteria that isn’t handled by the action now: skills, location, language, etc.

  • [Virtual Attendants/Simulator/Workers] The simulator for the ‘set (variable) worker’ action will now show worker names instead of IDs.

  • [Worklists/Tickets/Import] Ticket worklists now provide the import option. This allows content from CSV files to update records and custom fields. The ‘status’ field accepts one of these values: open, waiting, closed, deleted. The ‘watchers’ field can accept a comma-separated list of worker names; e.g. “Jeff,Dan”, “-all,Darren”, or “-Dan,+Jacob”. This feature is particularly useful when importing custom field information from external systems (including Cerb2 and Cerb3).

  • [Parser/Scheduler] An error will now be logged in the parser when there is no default group configured.

  • [Virtual Attendants/Support Center/Contacts] Implemented a new ‘Contact registered in Support Center’ event for Virtual Attendant behavior. This provides an event hook for automation when visitors successfully register a new account through the Support Center.

  • [Support Center/Register] When visitors register for a new Support Center account, they will be prompted for their first and last name. If provided, this information will be set on their address record. This allows automation with the new Virtual Attendant events to include a name, when otherwise this would have been provided by the user at some point after registration.

  • [CHD-3463] [Virtual Attendants/Snippets] Implemented a ‘regexp_match_all’ function in snippets which can match a pattern multiple times and return an array.