Cerb Changelog

What's new in Cerb 6.7.9

Sep 6, 2014
  • [Web-API/Search/Tickets] In the Web-API, 'tickets/search.json' now provides a 'links' filter for returning tickets that are linked to other records or record types. This filter should always use the 'in' operator, and the values should be provided as a JSON-formatted array of contexts or context:id pairs.
  • [Web-API/Search/Time Tracking] In the Web-API, 'timetracking/search.json' now provides a 'links' filter for returning time tracking entries that are linked to other records or record types. This filter should always use the 'in' operator, and the values should be provided as a JSON-formatted array of contexts or context:id pairs.
  • [CHD-3829] [Search/Sphinx] When using the Sphinx search engine, errors are now handled more gracefully if the service isn't running.
  • [CHD-3856] [Custom Fields/Files] Fixed an issue with 'file' and 'files' custom fields where the linked attachments could show up multiple times on profiles, peek, and worklists
  • [CHD-3847] [Dashboards/Subtotals] Subtotal widgets may now display more than 20 results.
  • [CHD-3822] [Mail/Relay] Fixed an issue where relayed messages could contain blank names in the 'From:' header.
  • [CHD-3717] [Notifications/Usability] Fixed an issue where clicking some non-record notifications didn't automatically mark them as read.
  • [CHD-3810] [Migration/Custom Fields] Retroactively fixed an issue where certain non-text custom fields (e.g. date, number, worker) weren't properly migrated from groups to fieldsets in 6.4
  • [CHD-3574] [Mail/Compose/Drafts] Compose drafts now properly restore the 'owner' field.
  • [Mail/Compose/Drafts] Compose drafts now properly restore the 'watchers' field.
  • [CHD-3880] [Mail/Compose/Custom Fields] Fixed an issue with composing mail where file-based custom fields could be attached to the message rather than set as a field value.
  • [CHD-2563] [Mail/Merge] When viewing the profile of a deleted ticket that was merged, a helper message will display the new ticket location.

New in Cerb 6.6.3 (Feb 25, 2014)

  • [Virtual Attendants/Email Relay] Fixed an occasional "PHP Notice: Undefined variable: worker_address" log entry from the 'Relay email' action of Virtual Attendant behaviors.
  • [CHD-3019] [Scheduler/Maintenance/Platform] Miscellaneous /storage/tmp/php* files are now deleted by maintenance (cron.maint) once they are at least 12 hours old. These are usually created when someone uploads an import file on a worklist and then abandons the process.
  • [CHD-3665] [Scheduler/Maintenance/Platform] Miscellaneous /storage/tmp/mime* files are now deleted by maintenance (cron.maint) once they are at least 12 hours old. These are created by mailparse and left on the disk if the parser fails before completing. The original messages are moved to /storage/mail/fail/, and these temporary files serve no further purpose.
  • [Plugins/Activity Log/Localization] Activity Log events defined in the plugin.xml now provide a 'string_key' parameter that links their strings.xml key. This formalizes the translations for activity logs, which makes it easier to work with this data procedurally (e.g. in plugins and the REST API).
  • [Plugins/Activity Log] Activity Log events defined in the plugin.xml manifest may now provide an 'options' parameter containing the value 'api_create' in order to authorize their creation through the REST API.
  • [Plugins/Activity Log/Watchers] Activity Log events defined in the plugin.xml manifest may now provide an 'options' parameter containing the value 'no_notifications' to exclude the event from triggering watcher notifications. This is particularly useful when logging activities through the API.
  • [Profiles/Usability] The permalink URLs generated on worklists and in snippet placeholders will now Romanize accented and non-latin characters (e.g. รค to a). Previously these characters were replaced with spaces, which generated some difficult to read URLs.
  • [Web-API/Activity Log] Implemented 'GET /rest/contexts/activity/events.json' in the Web-API for retrieving the list of Activity Log events with IDs, names, options, and translation info. This data is useful for creating or interpreting Activity Log entries through the API. See: http://cerbweb.com/book/latest/developer_guide/rest_api/contexts.html#list-events
  • [CHD-3667] [Web-API/Activity Log] Implemented 'POST /rest/contexts/activity/create.json' in the Web-API for creating Activity Log entries. The given Activity Log event must have 'api_create' in its 'options' parameter in plugin.xml in order to authorize this method of creation. Most Activity Log entries are created automatically based on worker actions, but API-created entries are useful for automatically recording external actions back to Cerb records (e.g. licensing, purchases, store visits, calls, and anything else). See: http://cerbweb.com/book/latest/developer_guide/rest_api/contexts.html#create
  • [Plugins/SDK] Added an 'example.activity_log.event' plugin to the SDK to demonstrate how to add new Activity Log events.
  • [Mail/Parser] The mail parser would previously choose a sender address from either the 'Reply-To:', 'From:', or 'Return-Path:' headers (in that order), but if one turned out to be malformed then the others wouldn't be checked. Now the subsequent headers will be checked until a match is found.
  • [Mail/Parser] The mail parser is now more tolerant of malformed 'From:' headers when processing new messages, and will fallback to a simpler email address search if the personal name doesn't comply with RFC-2822. For instance, all commas in a personal name should be quoted (e.g. "Last, First" ). When this wasn't the case, messages were being sent to /storage/mail/fail/.
  • [Mail/Parser] Suppressed a PHP Notice in the mail parser when mbstring doesn't support the given encoding. This doesn't affect message processing in any way.
  • [CHD-3673] [Virtual Attendants] Fixed a PHP notice ("Undefined index: _types") in Virtual Attendants when editing an outcome with a 'Worklist Type' condition on a '[UI] While displaying a worklist' behavior.
  • [CHD-3670] [Platform/Usability] Fixed the broken 'spinner' image when URL rewriting is disabled. For instance, when replying to a ticket the "Loading, please wait..." popup should have an animated image. When the page URLs contained '/index.php/' this image was broken.
  • [Mail/Usability] When replying to a message, the 'suggested recipients' will now ignore invalid addresses in the original From/To/Cc headers.
  • [CHD-3614] [Mail/Relay/Usability] Worker replies that are received through the mail relay will now have any leading blank lines automatically removed.
  • [CHD-3672] [Web-API/Groups/Buckets] Implemented 'GET /groups/123.json' in the Web-API for retrieving information about a specific worker group. The optional parameter 'expands' supports the following comma-delimited values: 'buckets' (a full list of the group's bucket) and 'members' (a full list of the group's managers and members). See: http://cerbweb.com/book/latest/developer_guide/rest_api/groups.html#retrieve
  • [CHD-3672] [Web-API/Groups/Buckets] Implemented 'POST /groups/search.json' in the Web-API for filtering the full list of worker groups. See: http://cerbweb.com/book/latest/developer_guide/rest_api/groups.html#search
  • [Web-API/Usability] When performing a 'POST /rest/.../search/' in the Web-API, the '_labels' and '_types' dictionaries are now consolidated in a top-level 'results_meta' key. Previously these were repeated for every result, which wasted cycles and bandwidth.

New in Cerb 6.6.2 (Feb 18, 2014)

  • [CHD-3650] [Workspaces/Widgets] Fixed an issue with drag reordering on workspace widgets not saving their positions. This had to do with changes to the jQuery API.
  • [CHD-3649] [Explore/Messages] When using explore mode on a messages worklist, the specific messages in a conversation will now be focused. Previously each message displayed its parent ticket and the focused the latest message.
  • [CHD-3648] [Workspaces/Quick Search] The following field types now support boolean 'OR' searches from quick search on any worklist: single line text, multiple line text, url, picklist, multi-checkbox, number, and date. To perform an OR search, include the word 'OR' in capital letters with spaces between the terms. For example: Recipient "[email protected] OR [email protected]".
  • [CHD-3647] [Worklists/Search] Fixed a bug where UTF-8 characters weren't displaying properly in tooltips for the "is in any of (x objects)" filter bubbles.
  • [Worklists/Search/Custom Fields] Fixed an issue where the custom field tables weren't joining properly in a search if the field only occurred in nested search parameters (e.g. OR, AND).
  • [Mail/Parser/HTML] Fixed an issue that corrupted some UTF-8 characters when displaying an original_message.html attachment in the browser if the PHP 'tidy' extension was loaded. These attachments worked fine if downloaded instead since they skipped the tidy/purify step.
  • [CHD-3660] [Support Center/Attachments] Fixed an issue with attachments being uploaded in Support Center contact forms.
  • [CHD-3659] [Notifications/Mail/Notes] Watchers will no longer receive a notification about their own sticky notes on tickets.
  • [CHD-3654] [Virtual Attendants/Mail/Owner] When using the 'Set owner' action on ticket-based Virtual Attendant behaviors, the owner information will now immediately update in the placeholders. Previously, additional actions on the same VA behavior would still refer to the previous owner.
  • [Virtual Attendants/Orgs] When using the 'Set organization' action on ticket-based Virtual Attendant behaviors, the org information will now immediately update in the placeholders. Previously, additional actions on the same VA behavior would still refer to the previous org.
  • [CHD-3661] [Mail/HTML] When using HTML mode to send email, the 'Code Format' button will now automatically detect whether the selection contains multiple lines. Previously, the button always used inline code formatting (ideal for variable and file names). Multiple lines are now wrapped in code block tags (```).
  • [CHD-3653] [Worklists/Custom Fields] Fixed an issue with a "Subquery returns more than 1 row" error being displayed on a worklist if a single-value custom field in fact had multiple values in the database. This only seems to be the case for long-running databases that had imported data into version 4.x from earlier versions.
  • [Mail/HTML] When HTML messages are converted to plaintext, lists (UL and OL) now have their items prefixed with a '*' bullet point. Previously these were just being converted into sentences, which lost some readability.
  • [Search/Mail] The search indexes for 'Message Content' now include the text from the subject line. This makes it easier to use the same filter for matching the subject or message body.
  • [Search/Mail] When a worker uses the 'Message Content' filter on ticket or message worklists, the search terms will now automatically be phrase quoted if they don't contain any spaces, quotes, or wildcards. This should dramatically improve both the performance and relevancy of searches for terms like email addresses, domains, URLs, phone numbers, IP addresses, etc. Previously, an email address like '[email protected]' without quotes was being parsed as 'jeff OR cerbweb OR com', which is neither intuitive or particularly relevant.
  • [Search/Mail] When a worker uses the 'Message Content' filter on ticket or message worklists and includes quoted phrases as search terms, the terms will have stop-words (e.g. the, an, by) removed so that they match the search index exactly. This should significantly improve the relevancy of results for these types of searches.
  • [CHD-3067] [Search/Snippets] Fixed an issue where Search->Snippet worklists for some users became unusable if they had contained previously deprecated filters.
  • [Parser/Localization] The parser can now detect the encoding of text if none is given. This is particularly useful when extracting part of a message (e.g. an inline bounce) that may not have been encoded properly. For instance, some inline bounces (*cough* Exchange) may be in UTF-8 when their envelope is in a different encoding.
  • [CHD-3655] [Parser/Localization] When invalid characters are encountered by the mail parser and the iconv extension is used, they will now either be converted or ignored. Previously they were displaying a PHP notice and truncating the content.
  • [Mail/Parser/Usability] When a mail server (e.g. Exchange) sends an inline copy of the full message source from a bounced message, Cerb will now automatically convert it to an attachment, and correct the encoding if necessary.
  • [Web-API/Time Tracking] Implemented 'GET /timetracking/activities.json' in the Web-API for listing available time tracking activities.
  • [CHD-3664] [Web-API/Time Tracking] Implemented 'POST /timetracking/create.json' in the Web-API for creating time tracking entries.
  • [Web-API/Time Tracking] Implemented 'PUT /timetracking/123.json' in the Web-API for updating time tracking entries.

New in Cerb 6.6.1 (Feb 12, 2014)

  • [Virtual Attendants] Fixed an issue with a few conditions showing up blank when editing Virtual Attendant "New message on a watched conversation" behaviors.
  • [Code Cleanup/Attachments] Added missing translation text for the 'SHA-1 Hash' field on attachment worklists.
  • [CHD-3631] [Workspaces/Pages/Tabs] Fixed an issue that prevented the drag reordering of workspace pages and tabs. This had to do with a change to the jQuery library.
  • [Code Cleanup] Fixed the extra HTTP requests made by jQuery looking for an HTML5 Javascript .map file.
  • [Support Center] Fixed a PHP notice when Support Center contact forms were submitted with no attachments. This had to do with the switch to HTML5 multiple file uploads.
  • [Support Center] Fixed an issue when tickets were created from Support Center contact forms with custom fields from fieldsets, and the fieldsets weren't being linked to the ticket.
  • [CHD-3572] [Snippets] Added an 'updated' field to snippet records. This makes it easier to identify changed snippets from the UI, and enables syncing through the API.
  • [CHD-3632] [UI/Accessibility/Search] The global search menu can now be accessed using the TAB key for vision-impaired users. Previously the menu only opened with a mouse 'hover' event, but it now responds to clicks (and ENTER) as well. When clicking or pressing ENTER, the first item in the search menu will be focused automatically.
  • [CHD-3629] [Setup/Branding] When setting a logo or favicon URL from Setup->Configure->Branding, the URLs will be tested before they are saved. Some users were entering URLs without a scheme (e.g. example.com/logo.png vs. http://example.com/logo.png) and having trouble.
  • [CHD-3635] [Mail/Compose] Tickets can now be opened without any recipients, and the form will act like the "Start a new conversation without sending a copy of this message to the recipients" option was selected. This creates a ticket record without sending any mail. Several users have asked for the ability to create tickets as the result of phone calls or Twitter messages without requiring an email address.
  • [UI/Usability/Popups] Popup windows can be resized again, and they'll respect a maximum height of 85% of the browser window.

New in Cerb 6.6 (Feb 4, 2014)

  • This major update includes 70 new features.
  • Workers and Virtual Attendants can send HTML formatted messages (including inline images) when composing, replying, or broadcasting.
  • Cerb automatically converts CSS blocks to inline attributes for maximum compatibility with mail readers.
  • Workers can relay specific messages to external email accounts without first having to set up a Virtual Attendant behavior.
  • Cerb detects when a new storage object duplicates an existing one, and a link will be created to the same file.
  • Workers can enable the display of Activity Log entries on the ticket timeline.

New in Cerb 6.5.5 (Jan 23, 2014)

  • [CHD-3615] [Virtual Attendants/Scheduled Behavior] Fixed a bug where a deleted Virtual Attendant behavior could remain in the scheduled behavior queue and cause an error when viewing an associated profile.
  • [CHD-3494] [Virtual Attendants/Relay] Fixed an issue where new tickets created by workers from the UI didn't relay their attachments to external worker email addresses.
  • [CHD-3616] [Mail/Merge/Usability] Fixed an issue where the merge popup on a ticket profile failed to complete properly if any of the tickets in the chooser had their peek popup opened during the process.
  • [CHD-3617] [Mail/Reply] Fixed an issue that occurred when multiple workers attempted to reply to the same ticket within a short time period. Normally this displays a warning with a 'Continue replying' option, but clicking this button wasn't doing anything.
  • [CHD-3444] [Mail/Peek/Usability] Added the relative time to the 'Date:' header on the ticket peek popup. For example: "Tue, 21 Jan 2014 01:30 am (45 mins ago)". Previously this only showed the absolute date.
  • [CHD-3414] [Mail/Profiles/Masks] Fixed an issue with ticket mask patterns that are purely numeric (e.g. date-based like: 201401220001) which prevented their profiles from displaying. This had to do with Cerb assuming their masks were internal IDs. Now masks are always checked first, and IDs are only checked if there's no match. The performance of this lookup was also improved, because it was previously looking up ticket metadata in two database queries (mask->id, then id->metadata). A single query (mask->metadata) now retrieves the record in most cases. For sanity's sake, it is still important that ticket masks don't overlap with IDs, so a date-based mask format would be improved by adding hyphens between the components (e.g. 2014-01-22-0001).

New in Cerb 6.5.4 (Jan 16, 2014)

  • [Activity Log/Usability] Fixed an issue where some Activity Log entries were still being created with hardcoded actor permalinks. These are now generated using a dynamic format which will adapt if Cerb is moved to a new base URL.
  • [Activity Log/Migration] Fixed an issue in the 6.0.0 migration script where knowledgebase articles referenced in the Activity Log weren't converted to the new ctx:// URL format.
  • [Activity Log/Migration] Fixed an issue in the 6.0.0 migration script where a query attempted to retrieve *all* of the Activity Log entries as a single resultset in order to convert them to a new format. This could overwhelm the available PHP memory_limit and prevent an upgrade from completing. These records are now broken up into chunks of 5,000 rows.
  • [Workspaces/Migration] Fixed an issue from the 5.6.0 migration script where certain ticket worklist filters weren't fully converted to their newer counterparts. This resulted in worklists with nameless filters on them which didn't filter as expected. While these could be cleaned up manually after the upgrade, some Cerb instances have hundreds of worklists and this process would be tedious. These rows will be converted properly for people migrating from a version earlier than 5.6.0, and the rows will be fixed retroactively for any later versions by the 6.5.4 upgrade script.
  • [Development/POP3] Added a script to /install/extras/developers/ for running a mock POP3 server in order to debug esoteric issues (like sporadic 30+ second connection timeouts). These conditions are harder to simulate with a live mail server.
  • [Virtual Attendants/Migration] Fixed an issue in the 5.4.0 migration script where Group Inbox Routing rules were not properly converted to Virtual Attendant group behaviors if there was only a 'To/Cc' condition.
  • [Virtual Attendants/Migration] The 5.4.0 migration script will now create separate 'To:' and 'Cc:' header checks when converting Group Inbox Routing 'To/Cc:' rules to Virtual Attendant behaviors. Previously it just created a 'To:' header check.
  • [Update/Plugin Library] Fixed an issue in 4.x and 5.x migrations where the Plugin Library attempted to download its updates before the 5.7.0 patch created its database tables. This didn't interrupt the upgrade process, it just logged an error.

New in Cerb 6.5.3 (Jan 3, 2014)

  • [Virtual Attendants/Snippets/Placeholders] Implemented a new 'xml_decode()' function for placeholder scripts. This converts an XML string into an associative array of nested nodes. Attributes can also be accessed through an '@attributes' key on any node. Check the Cerb docs for more details.
  • [Web-API/Tickets] Ticket records can be filtered using 'group_id' and 'bucket_id' in the Web-API.
  • [Quick Search/Performance] When using the quick search feature, text-based searches will no longer include leading and trailing wildcards by default. This was requiring every record to be scanned in the database. Instead, wildcards can be explicitly specified with an asterisk (e.g. *@example.com).
  • [Mail/Parser] Fixed a bug in the parser where multiple 'attached_message.txt' (message/rfc822) or 'delivery_status.txt' (message/delivery-status) attachments on an incoming message were ignored and only the last one was kept. They are now sequentially numbered like 'attached_message_001.txt'.
  • [CHD-3596 [Worklists/Custom Fields] Fixed an issue where number-based custom fields didn't sort properly as worklist columns. Rather than sorting in numerical order (e.g. 64, 256, 1024) the results were sorted lexicographically (e.g. 1024, 256, 64). This bug was introduced by an earlier feature that separated multiple custom field values with commas, as it converted the field to text from integers.
  • [CHD-3595 [Parser/HTML] Fixed an obscure issue with nonbreaking spaces in HTML-only mimeparts encoded in quoted-printable format as Unicode (=A0). These were not being treated as whitespace, and code like hyperlink-detection was including them.
  • [CHD-3590 [Worklists/Quick Search] Fixed an issue when using quick search on the ticket 'spam score' column with decimal numbers (e.g. '> 0.33').
  • [CHD-3585 [Workspaces/Tabs/Usability] Fixed an issue where pressing ENTER in the 'Label:' field when adding a new tab would lead to a JSON response from the Ajax request being printed in the browser.
  • [Platform] Updated the copyright years in the footer to 2002-2014.
  • [Storage/Devblocks/Platform] The Devblocks storage service will no longer unarchive objects for attachments or message content. The original purpose of the unarchiving feature was to relocate frequently accessed objects back to active storage (e.g. from S3 back to the local filesystem). This was causing issues because large objects could be constantly moved between storage engines like S3 and the local filesystem based on minor activity. Generally, once an object is moved to a long-term storage engine like S3 it is desirable to always retrieve it from there in the future.
  • [Storage/Devblocks/Platform] The Devblocks storage service will now only archive objects that are currently in the active storage profile. Previously, any objects would be archived if they weren't already in the archive storage profile. This caused problems if some objects (e.g. very old or large) were moved to a different storage profile manually. It is now possible to partition the storage of objects in whatever way is desirable, and the auto-migration features of the storage service won't get in the way.
  • [CHD-3603 [Virtual Attendants/Usability] When attempting to view the profile of a non-existent Virtual Attendant (e.g. after deleting it), a worker will be redirected to a worklist of valid VAs using the /search page.
  • [CHD-3598 [Scheduler/POP3] Previously, Cerb was incapable of determining if a POP3/IMAP connection timed out while downloading the contents of a message. This could lead to tickets being created with valid headers but blank content. Cerb will now discard a message if it took more than 95% of the IMAP_READTIMEOUT value (default 60 seconds) to download it, and it will retry the next time the mailbox is checked.
  • [Scheduler/POP3/Performance] The POP3 scheduler job now saves message contents directly to the disk rather than reading them into memory first. This uses significantly less memory and can handle much larger message sizes.

New in Cerb 6.5.2 (Oct 22, 2013)

  • [CHD-3569] [Virtual Attendants/Mail/Headers] In 'Before sending worker message' Virtual Attendant behaviors, the 'Set header' action is now capable of replacing existing headers like 'Subject:' and 'X-Mailer:'. Previously, duplicate headers were being added.
  • [CHD-3519] [Virtual Attendants/Mail] In the 'Before sending worker message' Virtual Attendant behavior, the 'Bucket' condition is now available again.
  • [CHD-3568] [Worklists/Usability] Fixed an issue when editing 'Owner' filters on worklists where the existing values weren't displayed as defaults. This meant if you were filtering by a list of 5 owners, you had to reselect them in addition to any other changes you were making.
  • [Virtual Attendants/Groups] Fixed an issue with bucket names always being 'Inbox' in some Virtual Attendant behaviors.
  • [CHD-3508] [Virtual Attendants/Usability] When building Virtual Attendant outcomes and actions, the 'Insert placeholder' menu will now include the '|date' modifier on placeholders by default. Otherwise they are displayed as Unix timestamps (e.g. 1381874586). This used to happen in earlier versions, but the '|date' option was hardcoded for various fields; now it happens automatically based on the field type.
  • [CHD-3470] [Mail/Reply/Usability] On ticket profiles, if the reply form is already open then clicking the 'Reply' button or pressing the 'r' shortcut will focus the existing form rather than discarding its contents and opening a new one.
  • [CHD-3433] [Mail/Setup/Usability] Added a warning to POP3 setup that downloaded messages will be deleted from the mailbox. There have been a few instances where users included an IMAP mailbox with a long history where clearing the mailbox was not desirable.
  • [CHD-3378] [Virtual Attendants/Worklists] 'While displaying a worklist' behaviors can now be created by role-owned Virtual Attendants.
  • [Setup/Custom Fields/Usability] In Setup, custom fields can now be quickly dragged into the desired order rather than having to manually number them.
  • [Setup/Custom Fields/Usability] When deleting custom fields in Setup, a confirmation step is now shown prior to deleting the fields and their data.
  • [CHD-3372] [Setup/Custom Fields/Fieldsets] In Setup, global custom fields can now be easily migrated to fieldsets of the same type.
  • [CHD-3341] [Mail/Reply/Usability] After clicking the 'Reply' button in a ticket conversation, a loading indicator is shown in a popup until the form is displayed. This was requested several times by clients who experience occasional latency so they have a visual cue that something is happening.

New in Cerb 6.5.1 (Oct 8, 2013)

  • An 'Also execute in simulator mode' option was added to the HTTP request action in Virtual Attendants.
  • Virtual Attendants can simulate delegated behaviors in the simulator.
  • A 'Get links' action was implemented in Virtual Attendants for loading links of any type into a custom placeholder.
  • The ability to customize the browser favicon was added.
  • Buttons for 'Create behavior' are now properly shown on the mail filters setup page.
  • A bug in the Support Center that ignored the configured order of the menu options was fixed.
  • An error in time tracking profiles was fixed.

New in Cerb 6.5.0 (Sep 27, 2013)

  • Core:
  • [CHD-3425] [Virtual Attendants/Code Cleanup] Fixed a PHP error regarding "Undefined variable: func in abstract_view.php" when Virtual Attendant behaviors contained list variables with a specific combination of parameters.
  • [Contacts/Snippets] Fixed an issue where the names of Contact Person records always displayed '(contact person)' in snippets and Virtual Attendant placeholders.
  • [Virtual Attendants/Variables] Virtual Attendant behavior variables now support parameters based on each type of variable. This provides more control over how they operate, and it also makes new variable types possible (like a picklist of pre-defined options).
  • [Virtual Attendants/Variables] Text-based Virtual Attendant behavior variables can be configured for single-line or multiple-line input. Previously, all text variables were single-line input, which made it difficult to enter certain kinds of data (e.g. long comments).
  • [Virtual Attendants/Variables] Virtual Attendant behavior variables can be reordered by dragging them in the UI
  • [Virtual Attendants/Variables] Virtual Attendant behaviors may specify picklist (drop down) variables. Picklists require a worker to pick an option from a list of predefined options. Previously, only freeform text entry was available. This is particularly useful for macro behaviors.
  • [Snippets/Tester/Usability] The snippet tester now displays output with a fixed width font that preserves whitespace. Previously, tester output stripped whitespace. This made it impossible to check the style of indentation (e.g. at the beginning of paragraphs, or in fragments of code).
  • [Virtual Attendant/Usability] The Virtual Attendant action for entering custom scripts no longer auto wraps the contents of the text box. This makes it easier to read source code.
  • [Virtual Attendant/Simulator/Usability] Added an indent to the form elements in the Virtual Attendant Simulator to improve readability.
  • [Virtual Attendants/Simulator/Variables] The public variables of Virtual Attendant behaviors may now be changed from within the simulator. This makes it much easier to test macros.
  • [Comments/Snippets] Implemented two new placeholders for comment records. The record_watchers placeholder is a list of watchers on the record containing the comment. The record_watchers_emails placeholders contains a comma-delimited list of watcher email addresses. This was requested by several people who wanted a way to relay an email to all watchers about comments on records of any type using Virtual Attendants; however, it can also be used to display a list of watchers anywhere the comment is referenced.
  • [Plugins/Choosers] Choosers can be opened in 'single selection' mode, where the first selection closes the chooser and returns control to the caller. This provides all the benefits of choosers for situations where a single record must be selected.
  • [Virtual Attendants/Simulator/Usability] The output of the Virtual Attendant simulator no longer has a maximum height before introducing scrollbars. Having multiple scrollable sections made it more difficult to read the output or to scroll down the page.
  • [Virtual Attendants/Simulator] When using the Virtual Attendant simulator, it is now possible to choose the exact record that the current behavior is being tested against. Previously, the simulator would choose random records to help test behaviors, but this often required opening up the simulator many times in order to find a suitable record. For macros, it was possible to run the simulator from a record profile in order to test using that record, but this option wasn't available to events like 'New message on a group conversation'.
  • [Virtual Attendants/Simulator/Usability] In the Virtual Attendant simulator, data entry for parameters and values have been moved to tabs. When a behavior provides parameters (public variables for entry by a worker), the parameters section is shown by default and the long list of values is hidden on a second tab, which improves usability by reducing clutter.
  • [Virtual Attendants/Snippets] Implemented a new json_decode() function for snippets and placeholders to convert a JSON string to an associative array. This can be used to easily reference JSON results from API calls within Virtual Attendant behaviors (or snippets in special situations).
  • [Virtual Attendants/Snippets] Implemented a new json_pretty filter for snippets and placeholders to optimize the human readability of a JSON string. This is mainly useful for advanced Virtual Attendant actions that exchange JSON with remote apps and services.
  • [Virtual Attendants] Virtual Attendants are now first-class records (like groups and workers), with worklists, profiles, peek, ownership rights, etc. Previously, Virtual Attendant behaviors were owned directly by roles, groups, and workers; but this was creating clutter and confusion because some behaviors are related but there was no indication of this in the UI. Now, multiple Virtual Attendants can be created to contain any number of behaviors, and each VA can be owned by a worker, group, or role. All existing behaviors have been migrated to a new default Virtual Attendant record for each distinct owner. Virtual Attendants now show up in the global 'Search' menu, and clicking into a VA profile is where you will find the behavior trees and scheduled behavior. This also provides many new possibilities for future expansion; for example, Virtual Attendants can log errors to their profile in an easy-to-find tab. You can export and import behaviors between Virtual Attendants to place related behaviors together.
  • [Messages/Performance/Snippets] The placeholder for message content is now lazy-loaded only when it is needed. This reduces extraneous queries from hitting the database when Virtual Attendants or snippets use message fields but ignore content.
  • [Virtual Attendants/Macros/Profiles] The 'Virtual Attendants' button on profiles now organizes behaviors by Virtual Attendant. This makes it much easier to find the behavior you're looking for. Additionally, the macro menu no longer displays two lines for each entry; instead, behaviors are indented below their Virtual Attendant. This allows more options to be displayed in a smaller space, and it's less visually confusing.
  • [Virtual Attendants/Activity Log] Activity Log entries that are created in response to Virtual Attendant actions will now log each Virtual Attendant as the actor. Previously, these entries were created as if the behavior's owner (e.g. worker, group) had performed them, which could lead to some confusion of accountability. Since Virtual Attendants are now first-class objects, they can be held accountable individually for actions they take. The Activity Log will also specify the name of the responsible behavior next to the Virtual Attendant.
  • [Debug/Virtual Attendants] The /debug/export_attendants page will now export all behaviors grouped by Virtual Attendant.
  • [Virtual Attendants/Scheduled Behavior] The 'Scheduled Behavior' tabs have moved to Virtual Attendant profiles. Previously, scheduled behavior was shown on worker and group profiles, since those records directly owned behaviors. The records targeted by scheduled behavior still show a summary at the top of their profile.
  • [Mail/Reply/Virtual Attendants/Macros] The 'Virtual Attendants' button that is displayed when replying to a message will now display macros grouped by Virtual Attendant.
  • [Setup/Virtual Attendants] The 'Setup->Configure->Virtual Attendants' page now displays a worklist of Virtual Attendants with links to profiles. Previously, a funky interface was used that required an admin to pick an owner from a list to view their owned behaviors in a tab. The new process is consistent with the way the rest of Cerb works.
  • [Virtual Attendants/Snippets] Implemented a new jsonpath_set() function for snippets and placeholders to dynamically create deeply nested JSON objects from inside scripts. This is mainly useful for advanced Virtual Attendant actions that exchange JSON with remote apps and services.
  • [Setup/Mail/Filtering/VAs] The Setup->Mail->Filtering page now shows the mail filtering behavior from all global Virtual Attendants on a single page. Previously, it was only possible to have a single global Virtual Attendant and its use was implied on this page.
  • [Setup/Mail/Filtering/VAs] When an admin views the Setup->Mail->Filtering page for the first time, Cerb will offer to create the first global Virtual Attendant if one doesn't exist already. This improves the onboarding experience.
  • [Virtual Attendants] Virtual Attendants may now be disabled, which treats all of their behaviors as being disabled. These behaviors will not trigger during events, and will now show up as macros on profiles. This makes it very simple to simultaneously deactivate related behaviors, which was tedious in earlier versions. Additionally, a worker can disable a Virtual Attendant while building and testing its behaviors.
  • [Activity Log] Activity Logs for actor profiles (address, worker, group, virtual attendant) now display entries where the record was either an actor or a target of the activity. Previously, the log only showed actor activity for those records, and target activity for everything else. This meant that when viewing an address's activity from its profile, you wouldn't see log entries for when that address replied to conversations (as an actor), only when workers performed actions on that address (as a target). This change provides a more comprehensive view of the activities a record was involved with.
  • [Activity Log/Groups] Group profiles now display an Activity Log tab.
  • [Virtual Attendants/Custom Fieldsets] Virtual Attendants can own custom fieldsets, providing them with long-term storage for arbitrary data on any record. This enables some very interesting new automation workflows. For instance, a monitoring Virtual Attendant can remember the last time it notified each worker about something by using a custom fieldset with a date on worker records. Similarly, a sales Virtual Attendant can keep track of its progress through an automated sales process with a custom fieldset that it saves on opportunities.
  • [Virtual Attendants/Macros] Application-owned Virtual Attendants can now create custom behaviors for any record type. This allows global macros that are accessible by all workers, which greatly simplifies many workflows. Previously, these macros could only be created by VAs owned by groups, roles, or workers.
  • [Virtual Attendants/Macros] Implemented a 'Custom virtual attendant behavior' event. This is the ideal place to implement generic behaviors that don't rely on a specific record type. For example, a Twitter Bot could schedule a recurring behavior to look for new @mentions, and it wouldn't make sense to target this behavior to any particular record. Previously, we had recommended to bind these generic behaviors on worker records just because it made them easy to manage from a profile. Now we recommend that these behaviors be migrated to Virtual Attendant profiles.
  • [CHD-3113] [Support Center/Logins/Usability] When a Support Center page requires a login, a visitor will be redirected to their original destination after successfully logging in. Previously, the Support Center didn't even provide a login form to anonymous visitors if they requested a protected resource, it just displayed the default page. The new process should make it much easier to send contacts direct links to a specific ticket history, or protected knowledgebase articles.
  • [Support Center/Usability] By default, the logo image on the Support Center is now a shortcut link back to the default page.
  • [CHD-3441] [Support Center] When a customer views a ticket in the Support Center, there is now a reply button per message and no reply from is shown by default. Previously, a single reply form was always displayed at the top of the ticket which led to much confusion.
  • [CHD-3148] [Support Center] When a customer replies to a ticket in the Support Center, the original message will now be automatically quoted in the response.
  • [Platform/Popups/Usability] Popups are now limited to a height no more than 85% of the current browser height. Previously, popups could be so tall that they scrolled off the page. This made them difficult to work with; particularly when dragging them around.
  • [Virtual Attendants/Macros/Plugins/Platform] Any Virtual Attendant behaviors that respond an event trigger will now be returned along with a snapshot of their data at their conclusion. This allows the caller to retrieve detailed information from those responders, and in an arbitrary way.
  • [Virtual Attendants/Actions/Run Behavior] Virtual Attendant behaviors may now use a global '(Run behavior)' action. This is similar to 'Schedule behavior', except it runs the behavior immediately and allows the caller to retrieve values from the delegate behavior. For example, if one Virtual Attendant delegates another VA's behavior in order to create a task, then the caller can afterwards retrieve information about the created task from the delegate. This greatly improves the reusability of Virtual Attendants, as specialized VAs can handle routine actions, and helper VAs can delegate requests to them. This also makes it possible to build mediator VAs that listen on channels like SMS, IM, and Campfire; with requests being delegated to VAs that can do almost anything possible in Cerb: send reminders; create and complete tasks; check and change calendars; interact with Twitter, Facebook, JIRA; etc.
  • [Virtual Attendants/Scheduled Behavior] Fixed an issue with the 'Schedule behavior' and 'Unschedule behavior' actions in Virtual Attendants. Disabled behaviors were not included in the list of available options, so if the actions referred to a behavior while it was disabled, and that action was edited and saved, then it would no longer refer to the behavior afterwards. Disabled behaviors are now displayed in the action, but they're marked as being disabled in case this is unintentional.
  • [Virtual Attendants/Actions] When a Virtual Attendant action is missing, the behavior editor will now provide more helpful information, including an indication of what it was supposed to be. Previously, a blank action box was shown without providing any clue about what was missing.
  • [Support Center/History/Reply] Fixed warnings created by the Support Center when a customer replies to a ticket without any attachments.
  • [Virtual Attendants/Actions/Variables/Usability] In Virtual Attendants, the actions for setting variables are now displayed at the top of the available actions. As with other global actions, they are surrounded by parentheses. Previously these were sorted alphabetically with other 'Set' options, which made them more difficult to find.
  • [CHD-1050] [Worklists/Custom Fields] When displaying a multiple value custom field as a worklist column, all of the selected values will now be displayed. Previously, only a single value per custom field was displayed based on what matched the search filters.
  • [CHD-1086] [Custom Fields/Attachments] Implemented two new custom field types: file and multiple files. These types allow arbitrary attachments to be attached to records through custom fields. Internally, these fields use the attachments system and they store file IDs.
  • [Virtual Attendants/Scheduled Behavior] The 'Schedule behavior' and 'Unschedule behavior' actions in Virtual Attendants are now global. They are available in all events and plugin-provided events do not need to implement them. Additionally, the action names are wrapped in parentheses so they appear at the top of the list of available actions.
  • [Custom Fieldsets] Custom fieldsets may now be owned by the application. These fieldsets are readable by all workers but only configurable by admins.
  • [Virtual Attendants/Custom Script] The 'custom script' condition in Virtual Attendant outcomes now a placeholders menu and script tester.
  • [Calendars/Virtual Attendants] Calendar records can now also be owned by Virtual Attendants or the Application.
  • [CHD-3460] [Virtual Attendants/Calendars] All Virtual Attendant behaviors may now use 'calendar availability' as a condition in outcomes. For example, this can be used to send different auto-replies based on availability.
  • [CHD-2866] [Virtual Attendants] The 'new message on a watched conversation' event will now always include a ticket's owner even if they aren't a watcher.
  • [Setup/Localization] A Setup->Configure->Localization page has been added for selecting the default date/time format for everywhere dates are displayed. Admins can choose between 12hr or 24hr formats, and this selection will cover all workers that don't have an established preference.
  • [CHD-3064] [CHD-2973] [Preferences/Localization] Each worker can choose their desired time format (12-hour or 24-hour) from the 'Settings' page in their worker menu.
  • [Virtual Attendant/Events] Added a new application-level 'Before sending worker message' event. Previously this was only possible at the group level.
  • [Virtual Attendant/Events] Added a new application-level 'After sending worker message' event. Previously this was only possible at the group level.
  • [CHD-3340] [Virtual Attendants/Mail] Virtual Attendant behaviors on the 'Before sending worker message' event may now add custom mail headers to the outgoing message. This was requested as a way to force read receipts, among other workflows.
  • [Virtual Attendants/Behaviors] Virtual Attendant macro behavior may now be marked as public or private. A public behavior is visible to everyone with access to the VA (on profiles, etc). A private behavior is only visible to the VA itself. Private behaviors are useful for implementing helper macros within a VA that shouldn't be exposed to the outside world. These are generally used from 'Run behavior' or 'Schedule behavior' actions.
  • [Virtual Attendants/Permissions/Events] Admins can choose which events each Virtual Attendant is capable of creating behaviors for. The options are 'allow all', 'allow these:', and 'deny these:'. This provides a way to offer limited Virtual Attendant functionality to workers with all use cases requiring prior approval. After the upgrade, all existing Virtual Attendants will default to 'allow all' events.
  • [Virtual Attendants/Permissions/Actions] Admins can choose which plugin-provided actions a Virtual Attendant is capable of using in behaviors. The options are 'allow all', 'allow these:', and 'deny these:'. For example, the actions for JIRA and Twilio may be restricted to admin-controlled global VAs that worker VAs can delegate to. Actions that directly communicate with external apps and services can be restricted from use by most workers. After the upgrade, all existing Virtual Attendants will default to 'allow all' actions.
  • [Virtual Attendants/Simulator/Actions] The Virtual Attendant 'Set custom placeholder' action can specify a format for its output of either 'text' or 'JSON'. JSON output will be automatically be converted to an object when it is saved to a placeholder. This is particularly useful to simulate JSON responses from actions that perform API calls.
  • [Virtual Attendants/Simulator/Actions] The Virtual Attendant 'Set custom placeholder' action can be configured to only set the placeholder when in simulator mode. This assists with providing test data in the simulator without affecting the outcome of a behavior when it runs normally.
  • [Virtual Attendant/Simulator] Public worklist variables in Virtual Attendant behaviors can now be tested properly in the simulator.
  • [Virtual Attendants/Actions] The 'Schedule behavior' and 'Run behavior' actions in Virtual Attendants can now include placeholders in the parameters being passed to the other behavior.
  • [Virtual Attendants/API] Implemented '/rest/va/list.json' in the Web API for retrieving the list of Virtual Attendants that are visible to the current worker. This can include an 'expand' parameter with the option 'behaviors' to list all of the defined behaviors.
  • [Virtual Attendants/API] Implemented '/rest/va/123.json' in the Web API for retrieving the a particular Virtual Attendant. This can include an 'expand' parameter with the option 'behaviors' to list all of its defined behaviors.
  • [Virtual Attendants/API] Implemented '/rest/va/behavior/123/run.json' in the Web API for running a 'Custom API request' Virtual Attendant behavior. This provides a standardized way for external applications and services to communicate with Virtual Attendants in Cerb. For example, a Campfire Bot can listen for messages in a chat room and relay a specific pattern (e.g. "@Cerb do something") to a specific VA behavior through the Cerb API. The response is a dictionary of all the behavior's values after running, including public and private variables. If a behavior retrieves a list of tickets, then their details will be available in the response for use outside of Cerb.
  • [Virtual Attendants/API] Added a new 'Custom API request' event to Virtual Attendants. This can be utilized by app-owned and worker-owned VAs. These behaviors work similarly to macros, except they are only triggered through the API from external apps and services. This allows for interaction with Virtual Attendants through mobile text messages, email, instant messages, Campfire/Hipchat, mobile applications, browser plugins, etc. Custom API request behaviors always target the owning Virtual Attendant, and they provide an 'Add to API response message' action that appends text to the _response value of the API response. Using the _response value is optional, but it provides for generalized interaction with Virtual Attendants through the API. For example, an iOS app could display a list of all Virtual Attendants and their API-enabled behaviors. Running any behavior could prompt for its public parameters, and the response message could be displayed. It's also possible to use the 'custom placeholder' action for additional outputs.
  • [Virtual Attendants/API] When a Virtual Attendants dictionary is converted to an array (e.g. for use by the Web API), any nested dictionaries will also be converted to arrays. Previously, if a behavior contained extra dictionaries (e.g. a list of records from a worklist search), it would return the IDs of those records but not their values.
  • [Virtual Attendants/Simulator] When simulating the Virtual Attendant 'Run behavior' and 'Schedule behavior' actions, the simulator output will now show behavior variables being set.
  • [Virtual Attendants/Simulator] Implemented Virtual Attendant simulator output for the 'Send email to notified worker' action in 'New notification for me' behaviors.
  • [Setup/Mail/Parser] Raw email messages can be imported from Setup->Mail by pasting them into a textbox. This simplifies development, training, and evaluations. Previously, these messages had to be saved in the /storage/mail/new/ directory and then the parser scheduler job had to be manually run.
  • [CHD-957] [CHD-3037] [CHD-3173] [Setup/Mail/Parser] Incoming mail messages that failed to parse can now be viewed, retried, or deleted from the Setup->Mail->Failed Messages page. Previously, administrators had to proactively monitor these files on the disk in the /storage/mail/fail/ directory, occasionally move them to /storage/mail/new/, and run the parser scheduled job manually in order to inspect the output. Failed mail is now displayed in a familiar worklist format with a peek popup to view each message source.
  • [Web-API/Usability] Added a QR code image to the Web API Credentials peek popup. This allows mobile apps to quickly scan the QR code to copy the access and secret keys rather than requiring a user to laboriously type them.
  • [Contexts/Messages] The generic label for Message records now shows the sender email, ticket mask, and ticket subject. Previously this just showed an unhelpful '(message)' placeholder. The label is used in Virtual Attendants, the Web-API, and the mobile app.
  • [Contexts/Activity Log] Activity Log contexts now provide actor_* and target_* placeholders. These can be used in Virtual Attendant behaviors, snippets, and the Web-API.
  • [Contexts/Activity Log] Activity Log contexts now provide a human-readable 'event' placeholder to describe the activity being logged. This can be used in Virtual Attendant behaviors, snippets, and the Web-API.
  • [Contexts/Workers] Worker contexts now provide is_disabled and is_superuser placeholders. These can be used in Virtual Attendant behaviors, snippets, and the Web-API.
  • [Snippets/VAs/Workers] Added 'last activity date' to worker placeholders.
  • [Devblocks/Workspaces/Charts/Plugin Development] The Devblocks HTML5 charting library now mediates all mouse interaction with the charts. Listeners can bind to 'devblocks-chart-click' or 'devblocks-chart-mouseover' to receive updates about user input. The returned event includes information about the closest data point to the mouse cursor, including chart coordinates. This saves the caller a lot of work when designing interactive charting elements.
  • [Workspaces/Dashboards/Line Charts] Line chart dashboard widgets now display a horizontal line through the selected data point to make lateral comparisons easier.
  • [Workspaces/Dashboards/Scatterplots] Scatterplot dashboard widgets now display crosshairs that intersect at the selected data point. This makes comparisons easier in both dimensions by creating quadrants.
  • [Workspaces/Dashboards/Gauges] Gauge dashboard widgets now display their labels below the widget for uniformity.
  • [Virtual Attendants/Variables/Lists] When a Virtual Attendant behavior has a list variable, the resulting worklist view_id will now be saved in the dictionary in the format var_name_view_id. This allows reuse of the underlying worklist for all kinds of functionality. Notably, it's currently used to send worklists to the mobile app. It could also overcome the 100 object limit of list variables now.
  • [Calendars] Fixed an issue where long-running calendar events that started before and ended after the current month wouldn't be displayed as spanning the entire month.
  • [Platform/Contexts/Plugins] Added a getPropertyLabels($dictionary) method to Extension_DevblocksContext extensions. This provides more terse human-readable text for labels when dictionaries are used on worklists and profiles (particularly in the mobile interface where spaces is limited). For example, "Ticket initial message sender address" can be abbreviated to "First wrote".
  • [Mail/Display] Fixed an issue when displaying tickets where very long messages (i.e. over 1MB) could cause a PHP timeout before the page was displayed. This was caused by attempting to auto-hyperlink URLs found within the email message, and it was exacerbated if 'read all' mode was always enabled when reading tickets. Cerb will no longer attempt to auto-hyperlink URLs within messages that are greater than 512KB in length.
  • [Platform/Plugins/Search] Devblocks now provides an OPER_CUSTOM operator for DevblocksSearchCriteria objects. This allows the caller to provide their own WHERE clause. For example, in some situations a query needs to modify a value before doing a comparison on it (e.g. fieldvalue+5 > otherfield_value).
  • [Devblocks/Placeholders/Usability] The 'devblocks_prettytime' modifier in placeholders now outputs 'just now' instead of '0 secs'.
  • [Calendars/Datasources/Performance] On calendars, worklist datasources were previously inconsistent in that the 'end date' could use placeholders while the 'start date' required a specific date field. This option was provided so that events could be arbitrary lengths; however, it wasn't possible to efficiently determine the events that needed to be displayed for a given month because the placeholders would have to be evaluated for every record in the database. In order to fix this issue, the 'end date' for worklist datasources on calendars now requires an explicit date field. Event durations can be set by using the new 'offset' fields for the start and end dates. For example, an event can end using the same field as the start date, but with a "+2 hours" offset. These offsets are much more efficient to process algorithmically in the database than open-ended placeholders.
  • [CHD-3515] [Calendars/Datasources] Fixed an issue with displaying worklist records on calendars when the events didn't start and end within the same calendar month. For example, if an event started on August 31 2013 and ran for 3 days, it wasn't being displayed on the September calendar.
  • [Virtual Attendants/Actions/HTTP Requests] A new 'Execute an HTTP request' action in Virtual Attendants allows them to send and receive data with other apps and services. The results of an HTTP request are stored in a custom placeholder that can be used by subsequent outcomes and actions. JSON responses are automatically converted to an object. Image resources as a response (e.g. PNG, GIF, JPEG) are converted to base64 text. For example, when new mail is received a Virtual Attendant could send relevant details to an external URL (like a webhook). A behavior could also request information from any source as a URL; e.g. datacenter temperature, website traffic, monitoring metrics, etc.
  • Mobile plugin:
  • [CHD-1056] [CHD-1108] [CHD-2378] [Mobile/Plugins] A 'Mobile Interface' plugin has been added to the Plugin Library. We had originally held off on creating a mobile interface because most workers use desktop computers and Cerb's UI workflow design is heavily dependent on multiple layers of popups to enable multiple actions from the same page. With the introduction of custom workspace pages in 6.0 and distinct Virtual Attendants in 6.5, the components of a mobile interface clicked into place. Rather than seeking to replace all the functionality in Cerb's normal UI, the mobile UI provides a access to previously curated content. The primary focus is on providing access to notifications, workspaces, and special Virtual Attendant mobile behaviors. The mobile plugin is built using jQuery Mobile, so there is a large list of supported devices: iPhone, iPad, Android, Windows Phone, Blackberry, WebOS, etc. We feel that a slim web interface is an ideal mobile strategy for Cerb because the functionality is contained within a plugin that is always in sync with the version of the main project. With mobile apps in various app stores using Cerb's API, users would constantly run into issues with version incompatibilities. Once logged in, the mobile interface can be accessed from any mobile browser by visiting the '/w' page at your normal Cerb URL. This can be bookmarked or saved to your device's home screen.
  • [Mobile] Notifications can be viewed in the mobile interface. At the moment they open up a new browser tab to the full Cerb UI. In the near future we plan to implement mobile-friendly profiles for all record types. A count of unread notifications is displayed on a badge at the bottom of the app.
  • [CHD-891] [Mobile/Workspaces] Workspaces can be viewed in the mobile interface. All workspaces that the current worker has access to will be displayed. The worker is prompted in several steps to select a workspace, a tab, and finally a worklist or a widget. The pages for tabs, worklists, and widgets provide shortcuts to jump back to the previous selections (for instance, from a widget to a page or tab). A filter box above the list narrows down the choices (for example, only showing pages with a specific owner). At the moment, clicking on a worklist row opens up the record in the full Cerb UI in the default browser.
  • [Mobile/Virtual Attendants] Added a new 'Mobile behavior' event to Virtual Attendants. These behaviors can be run from mobile devices for any kind of workflow. For instance, mobile behaviors can create or search tickets, create tasks or notifications, search external systems for information, etc. Any public behavior variables will prompt the current worker for additional information. These behaviors can also be implemented on app-owned VAs so they are available to all workers by default. Mobile behaviors can respond with various types of messages that are displayed in a mobile device (e.g. text, html, maps, etc).
  • [Mobile/Virtual Attendants] Virtual Attendants with mobile behaviors can be viewed in the mobile interface. All VAs that the current worker has access to will be displayed. When a Virtual Attendant is selected, a list of its available mobile behaviors is displayed. Selecting a behavior will prompt for the input of any public behavior variables (for instance, a mobile behavior to create a task would prompt for the task's name and due date). The response from the Virtual Attendant is displayed in a message reminiscent of a chat bubble. This functionality is incredibly powerful; Virtual Attendant powered mobile behaviors can provide workers with shortcuts to accomplish almost any workflow. Those behaviors are built inside Cerb's normal web interface.
  • [Mobile/Plugin/iOS] The Cerb mobile interface now supports being added to the iOS home screen as a web app. This removes the location bar and footer from Mobile Safari so the experience feels more like a native app. Device-specific icons and start screens are provided (e.g. iPhone, iPad, retina).
  • [Mobile] Implemented a sidebar panel in the mobile interface. This provides access to more functionality than can fit in the footer shortcuts: favorites, compose, pages, search, etc.
  • [Mobile/Workspaces/Pages] The mobile interface now provides access to both workspaces and pages. The distinction is that a workspace is a page added by a worker to their navigation menu. Pages represent everything that a worker could choose to add to their menu as a workspace.
  • [Mobile/Workspaces] The Workspaces shortcut in the mobile footer now displays a worker's workspaces in the same order that they appear in the full site. Previously this was displaying a list of all pages in alphabetical order.
  • [Mobile/Profiles] The mobile interface now provides a profile page for every record type in Cerb. This makes it possible to gather more information without leaving the mobile site. Profiles also provide automatic links between related records. For example, from a ticket profile you can quickly view the sender's profile, their org's profile, the assigned group's profile, the ticket owner's profile, etc.
  • [Mobile/Search] The mobile interface now provides a 'Search' page in the menu panel. This displays a list of every record type in Cerb. When a record type is selected then a mobile worklist is displayed with the matching records. Clicking on a record displays its mobile profile. The profile also contains a link to open the record in the full site. This improvement makes the mobile interface very useful for workers who need to perform quick record lookups while away from their desk.
  • [Mobile/Workspaces] Mobile worklists now display their current filters above the list. Clicking a filter removes it.
  • [Mobile/Workspaces] New filters can be added to mobile worklists using quick search functionality. Clicking the filters button above the list opens a popup that displays all searchable fields.
  • [Mobile/Workspaces] Mobile worklists can use existing filter presets. After clicking on the filters button, all presets are displayed as buttons in a popup. Clicking one of these buttons will instantly replace the filters. This is particularly useful in a mobile environment, especially when performing ad-hoc searches rather than using prebuilt workspaces.
  • [Mobile/Workspaces] Mobile worklists can be sorted in ascending or descending order on any available column. The field currently being sorted by is displayed above the list, and the arrow next to the label indicates the sort direction (i.e. asc, desc).
  • [Mobile/Workspaces] Mobile worklists can be paged forward and backward. On subsequent pages, an option is provided to instantly jump back to the first page. In a slight deviation from the full UI, paging displays the current and total pages along with the total number of results. In the full UI, paging displays the current position in the results and the total number of results (i.e. no indication is given for the total number of pages).
  • [Mobile/Workspaces] Mobile worklists can now display any number of fields for each row. Since screen space is generally limited on mobile devices, these fields are not displayed as horizontal columns like in the full UI, but as smaller vertical rows beneath each result's heading. At the moment, the displayed fields are based on useful defaults for each record type. In the near future this feature will support the ability to decide which fields should be displayed per worklist or worklist type. This functionality is actually more advanced than the main UI, since it uses the placeholders from Virtual Attendants and snippets instead of being confined by the results from the database. In the main UI, only a limited amount of information from related records is available as columns (e.g. ticket -> organization). With the placeholder approach, even content at the end of a long chain of related records can be displayed (e.g. ticket -> first message -> sender -> org -> custom field).
  • [Mobile/Virtual Attendants] Mobile Virtual Attendant behaviors now return their response on a new page. Previously the response was displayed below the submit button. The state of the response page is now cached so that the back button works properly. This allows responses to include links to new records, with the back button returning to the response without re-running the behavior. By not caching the behavior page, the mobile app can now instantly see any changes made to the behavior in Cerb.
  • [Mobile/Workspaces] Mobile worklists can now be paged, sorted, filtered, and searched in place using Ajax. Previously, these actions were initiating a full page reload due to the way that popups work in jQuery Mobile. The reload was displaying a 'flash of unstyled content' on mobile devices.
  • [Mobile/Virtual Attendants] Mobile Virtual Attendants can now return different types of responses. Previously, all messages had to be text-based.
  • [Mobile/Virtual Attendants] Mobile Virtual Attendants can return HTML responses. Any provided Javascript is evaluated, which makes interactive responses possible. For example, a Virtual Attendant can return a real-time chart using an HTML5 canvas.
  • [Mobile/Virtual Attendants] Mobile Virtual Attendants can return interactive worklists as responses. Previously, behavior variables that contained a list of records had to be displayed as text with links back to each record. Now any list variable on the behavior can be sent to a worker's mobile device. This displays a mobile worklist that's sortable, pageable, and filterable. The results also display properties about each record, and clicking on a record will display its mobile profile. The back button can be used to return to the worklist. For example, a mobile VA can send a list of tasks or tickets to a worker, and the worker can use that worklist in place as if they had searched for those results themselves.
  • [Mobile/Virtual Attendants] Mobile Virtual Attendants can return multiple responses to a single request. For example, a text response can state "Here are the results I found for you" and a second response can display the results as an interactive worklist.
  • [Mobile/Performance] Implemented caching for the common navigation pages in the mobile interface: search, workspaces, workspace tabs, pages, and Virtual Attendants. The content in these pages rarely changes; they'll now be pulled from the server once per session. Closing and reopening the app, or switching to the app from another app, will clear the cache. This significantly reduces mobile bandwidth usage and improves perceived performance.
  • [Mobile/Profiles/Plugins] Implemented a 'mobile.profile.block' extension point for plugins to provide custom content on profiles in the mobile interface.
  • [Mobile/Profiles/Ticket] Ticket profiles in the mobile interface now display the most recent message on the ticket, and the conversation history can be paged forward and backward.
  • [Mobile/Profiles/Ticket] Tickets can be replied to from the mobile interface. The reply button will automatically quote the currently displayed message, and the status and reopen date can be set. In order to reduce extra work from a mobile device when pruning quotes, only the most recent message worth of comments is displayed. In other words, quotes like ">>> Something said three messages ago" are automatically removed. When possible, signatures in quoted text are also automatically removed.
  • [Mobile/Profiles/Ticket] Basic ticket properties can be edited from mobile profiles: status, reopen date, owner, and spam training.
  • [Mobile/Profiles/Task] Basic task properties can be edited from mobile profiles: title, status, and due date.
  • [Mobile/Profiles/Message] Message profiles in the mobile interface show the full email content.
  • [Mobile/Calendars] Calendars are now displayed in a compact format in the mobile interface. These mobile calendars are displayed on workspace tabs, in workspace widgets, and on calendar profiles. Days that have events are indicated with a white circle. Clicking a day will select it, denoted by a pale blue circle, and its events will be listed below the calendar. Clicking an event from the list will display its profile, and the back button will return to the list with the previously selected date still highlighted.
  • [Mobile/Calendars] In mobile calendars, the current day is now highlighted as a filled in circle compared to the outlined circles denoting days with events.
  • [Mobile/Calendars] Mobile calendars can be paged forward and backward to adjacent months. A 'today' button is also provided to quickly reset the calendar on the current month with the current day selected. The selected month and year will be remembered per calendar for the duration of the session.
  • [Mobile/Calendars] Mobile calendars now tag daily events as a block of 'available' or 'busy' time.
  • [Mobile/Profiles/Virtual Attendants] Virtual Attendant custom behaviors are now available on mobile profiles. These are the same behaviors that show up in the desktop interface, enabling powerful automation from mobile devices.
  • [Mobile/Bookmarks/Usability] The mobile interface now allows any page to be added to the menu as a bookmark. This provides one-click access to frequently used widgets, profiles, Virtual Attendant behaviors, etc. To add a bookmark, navigate to a page and then click the 'menu' button in the top right. In the bookmarks section there will be an 'add' button if the page isn't a bookmark yet, and a 'remove' button if it is. Bookmarks are stored locally on each device, so different devices can have different mobile bookmarks even when the same user is logged in. Bookmarks are currently organized alphabetically.
  • [Mobile/Mail/Compose] Added a 'Compose' page to the mobile interface. This can send mail from any group the current worker is a member of. The 'To' field offers autocompletion for multiple email address recipients. An 'Insert signature' button will use the proper signature for the selected group and bucket. After sending the message, the worker will be redirected to the new ticket's profile.
  • [Mobile/Profiles/Addresses] Basic email address properties can be edited from mobile profiles: first name, last name, is banned, is defunct, and organization.
  • [Mobile/Profiles/Addresses] Mobile email address profiles provide a 'Search ticket history' button that lists all tickets where the address is a requester.
  • [Mobile/Profiles/Addresses] Mobile email address profiles provide a 'Compose' button that switches to the compose page with the email address pre-filled. This provides a similar workflow to the full interface where an organization is selected in order to determine the appropriate contacts.
  • [Mobile/Profiles/Orgs] Basic organization properties can be edited from mobile profiles: name, street, city, province, postal, country, phone, and website.
  • [Mobile/Profiles/Orgs] Organization mobile profiles provide a 'Search contacts' button which lists all associated email addresses in a worklist.
  • [Mobile/Profiles/Orgs] Organization mobile profiles provide a 'Search ticket history' button which lists all associated tickets in a worklist.
  • [Mobile/Notifications] Clicking on a mobile notification will now display its profile instead of opening up a browser to the full site. This allows a notification to be researched without leaving the mobile interface.
  • [Mobile/Notifications] Mobile notification profiles provide a 'Mark as read' button that clears the notification and returns to the previous page. This allows notifications to be saved for later if they're not currently actionable.
  • [Mobile/Notifications] The unread notification count in the mobile interface now updates every time a new page is displayed. The count is still efficiently cached on the server.
  • [Mobile/Profiles/Comments] Mobile profiles now display all the comments on a record. The most recent comment is displayed first, and buttons allow navigation forward and backward.
  • [Mobile/Profiles/Comments] New comments can be created from mobile profiles, with the ability to notify specific workers.
  • JIRA plugin:
  • [JIRA/Plugins] Added a 'JIRA Integration' plugin to the Plugin Library. This automatically synchronizes JIRA project and issue information. It also extends Virtual Attendants with the ability to remote control JIRA data. JIRA Projects and Issues can be accessed from Cerb's global Search menu. JIRA data can also be linked to other records (e.g. addresses, orgs) to track customer interest in issues and provide Virtual Attendants with data for following up on that interest.
  • [JIRA/Virtual Attendants] Implemented an 'Execute an API request to JIRA' action in Virtual Attendants. Rather than being restricted to a few options, this can make any API calls to JIRA that the given credentials are authorized to do. For this reason, it is important to restrict this action to only trusted Virtual Attendants. Other VAs can still delegate actions to the behaviors on trusted VAs with access to JIRA. Check the online documentation for examples.
  • [JIRA/Issues/VAs] Implemented Virtual Attendant custom behaviors for JIRA Issue records. For example, a 'Resolve' behavior could close a JIRA issue from Cerb.

New in Cerb 6.4.4 (Aug 6, 2013)

  • [Consistency] Updated links from cerb5.com to cerbweb.com
  • [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.

New in Cerb 6.4.2 (Jun 26, 2013)

  • [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.

New in Cerb 6.4.1 (Jun 19, 2013)

  • [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.

New in Cerb 6.4 (Jun 11, 2013)

  • This major update includes 118 new features.
  • Related custom fields can be grouped into optional fieldsets.
  • Workspace pages, tabs, widgets, and Virtual Attendant behaviors can be imported and exported.
  • Workspace and calendar data can be read from the API.
  • Widget data is exportable from the UI.
  • New widgets provide calendars, clocks, and countdown timers.
  • Multiple calendars can be created by roles, groups, and workers.
  • Virtual Attendants can use calendars to schedule dates in "working hours".
  • Recurring event patterns are more flexible.
  • Plugins are auto-updated during an upgrade.

New in Cerb 6.3.1 (Apr 4, 2013)

  • [CHD-3312] [VA/Send Email] Fixed a fatal error when using the 'Send Email' action in Virtual Attendants with an address list variable as the 'To:' field.
  • [CHD-3310] [VA/Orgs] Virtual Attendants can now use the 'Send Email' action on organization-based behaviors.
  • [VA/Knowledgebase] Virtual Attendants can now use the 'Send Email' action on knowledgebase article behaviors.
  • [VA/Time Tracking] Virtual Attendants can now use the 'Send Email' action on time tracking behaviors.
  • [CHD-3315] [Platform/Database] Added an informative error message when the database connection disappears. Devblocks will now gracefully shut down in this case. Previously, this was giving vague errors about 'getVisit() on a null object', as Cerb would continue to try to process the request anyway.
  • [CHD-3320] [Mail/Usability] Worked around an issue in Firefox where the reply textbox didn't auto-focus.
  • [CHD-3313] [Mail/Setup/Reply-From] If there is no default reply-to address then the first result will be used. This fixes an issue on some 4.x to 6.x direct upgrades where no reply-to address was flagged as the default, which caused various issues (inability to create workers because the welcome email failed, etc).
  • [Sessions/Usability] Fixed an issue where PHP was expiring inactive sessions from the database after 24 hours regardless of the Cerb session cookie duration that was set in Setup->Security. The cookie lifetime is now used when pruning inactive sessions, so using the "1 week" or "1 month" expirations should work properly now in all environments.
  • [CHD-3308] [Mail/Keyboard/Usability] Fixed a few issues with keyboard shortcuts while composing or replying and using Ctrl+Shift text selection. This particularly affected Opera.

New in Cerb 6.3 (Mar 27, 2013)

  • Virtual Attendants now track usage statistics.
  • Virtual Attendants can set cross-record custom fields, add headers to sent mail, add recipients to mail, set organizations on tickets, and post comments as their owner. Macros integrate jQuery for automation while replying.
  • Workers may upload multiple attachments at once.
  • URLs can link directly to messages.
  • Comment creation triggers events.
  • Calendars can plot dates from any worklist.
  • Admins can list sessions.
  • Snippets track daily usage.
  • The Web API can upload files, search comments, and compose mail.

New in Cerb 6.2.5 (Mar 2, 2013)

  • [Code Cleanup/Session] Fixed a bug where all sessions were prematurely logged out if a worker reset their credentials from Settings->Security.
  • [CHD-3282] [Mail/Usability] When merging tickets from a worklist, the merge confirmation popup will now auto-focus the 'OK' button. This doesn't interrupt keyboard shortcut workflows.
  • [Virtual Attendants/Custom Fields/Code Cleanup] Fixed an issue where custom field changes weren't being cached properly in VA behaviors. This didn't affect the actual records in the database, it just affected subsequent conditions and actions that used the newly set values.
  • [CHD-3286] [Security/Login] The 'Remember me' cookie for the login process now uses the 'httponly' option. This prevents the cookie's contents (i.e. a valid worker email address) from being read in Javascript, which could potentially disclose some information to a malicious script in the browser.
  • [CHD-3285] [Security/Attachments] Mail attachments with HTML content are now filtered through the HTMLPurifier library. This strips Javascript code that would otherwise execute when the attachment is displayed in the browser. Most email clients do not permit Javascript in HTML email, and Cerb shouldn't behave any differently.
  • [CHD-3283] [Login/Google Auth/IE] When using Internet Explorer 8 and setting up two-factor Cerb logins using Google Authenticator, the QR code should now display properly. If the element isn't available, then the code will instruct the jQuery QR Code plugin to fall back to rendering.
  • [Security/Community Portals] The session cookie in Community Portals now uses the 'httponly' option to help protect against malicious browser scripts.

New in Cerb 6.2.4 (Feb 19, 2013)

  • [Activity Log/Code Cleanup] Fixed the default labels for Activity Log entries when used in Virtual Attendant behavior.
  • [Translations/Localization] Updated the Portuguese translation (Thanks to Weblevel.pt!)
  • [Virtual Attendants/Code Cleanup] Fixed a bug in the 'abstract list' condition in Virtual Attendant behaviors. It's unlikely that this affected anything in production, but new functionality uses this template to present arbitrary lists to the user for making multiple selections in VA outcomes.
  • [Virtual Attendants/Code Cleanup] Fixed a bug in the 'Send Mail' action of Virtual Attendant behaviors that prevented the 'From:' address from being set properly in some cases.
  • [CHD-3277] [Dashboards/Worklists] The placeholder for 'Current Worker' may now be used when filtering dashboard widgets; including worklists, gauges, charts, and counters.