Blog

Release announcements, helpful tips, and community discussion

6.6

Cerb (6.6) is a feature upgrade released on January 31, 2014. It contains over 70 new features and improvements from community feedback. There are 64 additional improvements provided in 4 maintenance updates.

To check if you qualify for this release as a free update, view Setup » Configure » License. If your software updates expire on or after January 31, 2014 then you can upgrade without renewing your license.

Important Release Notes

  • Make a backup before upgrading.

Mail

Send HTML formatted messages

  • [CHD-786] Workers can now send HTML formatted email replies from Cerb. This feature was a long time coming, as we wanted to implement it in a way that was consistent with Cerb’s spirit of productivity and automation, which are heavily based on the efficient processing of large amounts of text. To facilitate this, the feature is divided into two parts: HTML templates and Markdown syntax. Multiple HTML templates (e.g. letterhead and stylesheets) can be created from the Setup->Mail->HTML page. Each group and bucket can be configured to use a specific template by default, which determines the style of their HTML replies. Templates can contain any valid HTML, although most mail apps will sanitize the messages (e.g. removing Javascript). Rather than introducing a visual HTML editor which obscures the underlying text, workers can reply with Markdown syntax to bold, italicize, link, embed images, quote, and to add headings, code blocks, and lists. Markdown is a markup language that was designed for use in email to preserve human readability. This “progressive enhancement” approach provides workers with greater flexibility in their replies without compromising efficiency. Outgoing messages in the Cerb history are still displayed as plaintext. Additionally, Virtual Attendant behaviors are capable of working with Markdown syntax much easier than with HTML directly.
  • When sending an HTML message, Cerb will automatically convert CSS

  • [CHD-786] When workers are replying to mail, an editor is now provided to assist with using Markdown formatting. By default the editor starts in plaintext mode, which behaves the same as Cerb always has (i.e. only sending text responses). In this case the toolbar only displays a single button that toggles rich text functionality. Once that button is clicked, the toolbar expands to provide: bold, italics, unordered and ordered lists, embedded images, external images, links, quotes, code blocks, and a preview option. The preview option displays the HTML version of the current reply in a popup window. It will also use the HTML template of the current group and bucket, if available. The preview window can be left open while responding, and it will update its contents every time the RETURN key is pressed.

  • Added HTML message support to the compose popup. The preview feature will display the template for the currently selected group and bucket.
  • Added a worker preference for “Always switch to HTML mode” while replying to mail.

Send inline images in replies

  • Workers can now send inline images in their replies. A new ‘Upload an Image’ button is available in the toolbar when replying to mail with HTML formatting. This button displays the file chooser popup, which automatically generates the syntax for an embedded image once saved. The image is visible in the preview popup, and once the message is sent Cerb will automatically convert it to an embedded image for the recipient (i.e. replacing the link to Cerb with a self-contained MIME part).

Workers can choose an HTML template per message

  • Workers can now optionally choose a specific HTML template when replying. If nothing is selected, the current group/bucket’s default is used.
  • Workers can now optionally choose a specific HTML template when composing a new message. If nothing is selected, the given group/bucket’s default is used.

Virtual Attendants can send HTML messages

  • The ‘Send mail’ action in Virtual Attendant behaviors now supports sending messages using Markdown and HTML templates.
  • The ‘Send mail to recipients’ action in Virtual Attendant behaviors now supports sending messages using Markdown and HTML templates.

Set default HTML templates on Reply-to addresses

  • Reply-to addresses can now specify a default HTML template for outgoing mail. The template set on the default reply-to address is the global default. When a group doesn’t have its own HTML template it will default to the one on its reply-to address.
  • The upgrade script for 6.6 now automatically creates a default HTML template and associates it with the default reply-to address. This allows HTML replies to “just work” without any manual configuration.

Send HTML broadcasts

  • Implemented HTML message support in ticket worklist broadcasts from bulk update.
  • Implemented HTML message support in address worklist broadcasts from bulk update.

  • Implemented HTML message support in opportunity worklist broadcasts from bulk update.

  • Workers can now optionally choose a specific HTML template when broadcasting from ticket worklists. If nothing is selected, the default for the group/bucket is used instead.

  • Workers can now optionally choose a specific HTML template when broadcasting from email address worklists. If nothing is selected, the default for the given group/bucket is used instead.

  • Workers can now optionally choose a specific HTML template when broadcasting from opportunity worklists. If nothing is selected, the default for the group/bucket is used instead.

HTML to plaintext conversion

  • When sending HTML mail, Cerb will generate a new plaintext part that cleans up Markdown formatting. This plaintext part is sent along with the HTML message (e.g. for mobile and automated mail readers), and it’s also what’s stored in the conversation history.
  • When generating a plaintext part from an HTML-only message, Cerb now attempts to preserve whitespace in pre-formatted (PRE) and CODE blocks.

  • When generating a plaintext part from an HTML-only message, Cerb now attempts to prefix nested BLOCKQUOTE content with ‘>’.

View inline images on incoming messages

  • When viewing an original_message.html attachment in the browser, inline images will now be properly displayed in the content. For instance, this is useful when customers send screenshots by embedding them in the middle of their reply. Previously, such images were included as attachments on the ticket but they weren’t displayed in the HTML contents (technical note: The IMG tags still referenced the MIME content-id header). These IMG links are now rewritten to use Cerb file paths. This process works for all new messages that are received in version 6.6 or later, but it will not fix existing original_message.html attachments.

Display inline activity log entries on the conversation timeline

  • Workers can now enable the display of Activity Log entries on the ticket timeline. This displays a mix of messages, comments, and activity log data in a single place without having to click into the ‘Activity Log’ tab. The option is located on the Settings page that is accessed from the menu displayed when a worker clicks on their name in the top right of the UI. Consecutive log entries will be combined in a single block, and those that take place with a similar timestamp are grouped together for readability. This option is also compatible with the ‘Read all’ option where the timeline is displayed expanded in ‘oldest first’ order rather than ‘newest first’.

Support for additional languages using iconv

  • Cerb will now use the ‘iconv’ PHP extension if it is loaded. This is capable of converting a wider range of encodings than ‘mbstring’. For instance, TIS-620 (Thai) and WIN-1258 (Vietnamese) were not properly converted to Unicode by Cerb when only using mbstring.

Improved usability when moving tickets

  • When viewing the peek popup for a ticket, its group and bucket are now shown as two linked dropdowns. Changing the group in the first dropdown will change the list of available buckets in the second one. Previously, the group and bucket were only visible by clicking the dropdown and looking for the (*) marker, which was cumbersome. Additionally, the previous dropdown also combined groups and buckets into a single long list which was difficult to use.
  • When composing mail, the ‘From:’ option now displays the group and bucket in two linked dropdowns instead of one big list.
  • When replying to a message, the “Would you like to move this conversation?” option now shows the groups and buckets in two linked dropdowns. Changing the group in the first list automatically displays the available buckets in the second list. Previously, the current group and bucket was displayed as a default “No, leave it in the [name] bucket of [group]” option, and moving the conversation required using a long combined list of all the buckets which was difficult to navigate. The new way is also more efficient when using keyboard shortcuts.

Miscellaneous usability improvements in mail

  • When using Search->Ticket, the results will no longer be restricted to only a worker’s own groups. The group filter is now added by default but it can be removed from the editable filters. Previously it was a required filter that couldn’t be removed. This has been requested several times by organizations that want workers to see the “Access denied” listing for a ticket when searching by mask or participant, instead of having zero results shown (which leads people to believe they’re doing the search wrong).

Miscellaneous performance improvements in mail

  • When using the “Is in groups of [worker]” filter on ticket worklists, the database query is now optimized if the worker is a member of every group. Previously, this inefficiently checked the group_id on every result anyway.

  • The ‘original_message.html’ attachment is now created more efficiently for new incoming messages. Previously its contents were written to a temporary file that was then read into long-term storage. Now it is saved directly from memory into storage. This improvement also made it easier to modify the contents of the HTML message to improve usability (e.g. rewriting links for inline attachments to Cerb URLs).

Mail Relay

Manually relay messages to worker email accounts

  • Workers can now manually relay specific messages to external email accounts without having to set up a Virtual Attendant behavior first. The reply menu on each message contains a new ‘Relay to worker email’ option. Selecting the relay option displays a popup where worker email accounts can be filtered and selected. This feature is particularly useful for situations where workers may need to reply while offline, such as during transoceanic flights or cruises. A worker can relay messages from Cerb to their mobile email application, reply at their leisure, and their messages will be delivered when network access is restored. The feature is also useful when certain workers handle requests through email without logging into the Cerb interface (e.g. temps, interns, consultants). A human dispatcher can route messages to these workers on an as-needed basis.

Activity log entries for relay actions

  • An Activity Log entry is now created when messages are relayed to an email account by a worker or Virtual Attendant. This notifies other workers that work may be taking place on the ticket from outside of Cerb, and it also serves to keep a better history of the actions of Virtual Attendants. Previously, there was no record on a ticket that it had been relayed unless a comment was explicitly created to say so.

Fixed wrapping comments in relay replies

  • [CHD-2711] When a worker is replying to a relayed message from an external email account, the ‘#comment’ tag will now allow comments to span multiple lines. The comment will be terminated when it encounters a blank line or a line starting with another #tag. This was necessary because some email applications, like Gmail, force text/plain content to hard wrap on spaces before 76 characters, and quoted-printable encoding isn’t used to preserve the original wrapping. The comment will still appear as a single paragraph in Cerb.

Support for multiple line comments in relay replies

  • [CHD-2711] A new ‘#start comment’ tag is available to workers that respond to relayed messages through an external email account. This allows multiple line comments where linefeeds will be preserved. This is especially useful for chunks of formatted text like code fragments and patches. A multiple line comment is terminated with an ‘#end’ tag on its own line. If a worker’s mail application adds hard linefeeds to their comment content, those will be preserved in the comment created by Cerb.

Custom Fields

Owner custom fields

  • [CHD-3582] Added a ‘Send worker notifications’ option to worker-based custom fields. This makes it easy to add an ‘owner’ field to any kind of record. More advanced workflows are also possible; for example, having two owner fields for a ‘salesperson’ and ‘sales support’. Owners receive watcher notifications about record activity for the duration of their assignment. They don’t need to explicitly watch or unwatch records.
  • Implemented a new ‘Record Link’ custom field type. This is similar to how the Links tab works, except the custom field is formalized and the fields of the linked record will be shown in Virtual Attendant behaviors, snippets, etc. For instance, a time tracking entry could have a custom fieldset with fields for an organization and a domain. Time tracking records could then be filtered based on those links, and the related record information could be used in Virtual Attendants, worklists, and the API.

Storage

Automatic duplicate file detection in storage

  • Cerb now automatically detects when a new storage object duplicates an existing one, and an additional link will be created to the same underlying file. A file is only removed when there are zero links pointing at it (e.g. message or comment attachments). Duplicate attachment detection is implemented for incoming mail, worker replies through the UI, the worker proxy, messages imported from an ImpEx export, and files uploaded through the API. This should save a considerable amount of storage space in environments where the same attachments (e.g. PDFs, forms, ebooks) are sent by workers on a regular basis. Similarly, when the same senders include logos and other content in their signature these can be condensed into a single storage object. Currently, existing storage objects are not hashed since this would be very intensive on busy systems. New duplicates will be prevented from version 6.6 onward. However, we’ll be providing instructions on how to retroactively hash existing storage objects and remove redundancy (technical note: this involves providing SHA1 hashes in the attachment.storage_sha1hash database column, and redirecting attachment_link records based on that).
  • [CHD-3377] Attachment worklists once again provide links to the records containing the files (i.e. the ‘Context’ column). Previously, a link was provided to the ticket but workers had to dig for the message containing the file. Now, when clicking on the permalink for an email message attachment that specific message will be expanded and focused.

Support for bulk deletions in storage

  • The storage service now has the ability to queue multiple delete operations to perform them in a single transaction. This is useful for storage engines where incremental deletes would be very expensive. For instance, S3 would generate an HTTP request per file being deleted, which could potentially be hundreds or thousands. Waiting for that many HTTP requests during cron.maint is undesirable. It is now possible for hundreds of objects to be deleted in a single request.

Improvements to the S3 storage engine

  • The S3 storage engine now supports a ‘Path prefix’ configuration option. Previously all content was saved starting at the top-level of a bucket. Now a single bucket can be shared between multiple instances of Cerb.
  • When configuring the S3 storage engine, the secret key parameter is no longer displayed in the profile popup form. If left blank it will remain unchanged. This is far more secure than transmitting it.
  • When testing a new S3 storage engine profile, a temporary object will be saved, read, and deleted to verify that the credentials work for all actions. Previously the contents of the bucket were listed, but this didn’t verify that content could actually be stored and retrieved.

  • Implemented batch delete functionality in the S3 storage engine. Up to 500 objects can be deleted from S3 in a single HTTP request.

Miscellaneous storage improvements

  • Attachments can now be requested by their SHA-1 hash in a URL, in addition to the globally unique ID of any of their links. This makes it possible to refer to attachments that have been uploaded but not linked to anything yet. For instance, this is useful for implementing embedded images in mail and knowledgebase articles; those images would need to be previewed before the record (and link) is created.

  • The /files page now provides cache control headers for the content it serves. This allows a worker’s browser to cache certain resources (like images) after their first retrieval so they aren’t requested from the server again. This is useful now that content like embedded images in HTML messages are displayed through this page.

Explore Mode

Miscellaneous usability improvements to Explore mode

  • [CHD-3622] Improved the way the last accessed time is recorded for explorer sets. Previously the access timestamp only updated 20% of the time in order to reduce extraneous UPDATE database queries when someone quickly paged through the list. Now, instead, the access time is updated any time at least 30 seconds has elapsed since the last recorded access time. Additionally, the access time is now always recorded when the set is created. The prior inefficiency rarely caused problems, but it would manifest if an explorer set was created shortly before the maintenance scheduled job ran, or if the maintenance job was set to run very often instead of nightly. This could result in explorer sets being purged while they were still in use.

Web-API

List contexts in the Web-API

See: http://cerbweb.com/book/latest/developer_guide/rest_api/contexts.html#list

  • Implemented ‘GET /rest/contexts/list.json’ in the Web-API for retrieving a list of context IDs and names. The context IDs are used for making various kinds of requests (e.g. attachment links, comments, record links) and there wasn’t a comprehensive list available anywhere. This API request will also include any contexts that were added through plugins, which the standard documentation wouldn’t include.

See: http://cerbweb.com/book/latest/developer_guide/rest_api/contexts.html#link

  • [CHD-3562] Implemented ‘POST /rest/contexts/link.json’ in the Web-API for adding any number of links to a record.

See: http://cerbweb.com/book/latest/developer_guide/rest_api/contexts.html#unlink

  • [CHD-3562] Implemented ‘POST /rest/contexts/unlink.json’ in the Web-API for removing any number of links from a record.

Support Center

Miscellaneous usability improvements in the Support Center

  • The ability to upload multiple files in the Support Center now uses a browser’s HTML5 support.

  • The file type is now set properly on attachments uploaded through the Support Center. Previously, all uploaded files were being saved as ‘application/octet-stream’, which forced attachments to download even if they could be displayed in the browser (e.g. images, text files).

Tour

Miscellaneous usability improvements in tour

  • Updated and expanded the tour so it provides tips and callouts about the main functionality within Cerb. This should help onboard new workers faster.
  • When clicking on a new ‘Point of Interest’ callout in tour mode, the previously viewed callout will now be closed automatically.

Platform

Miscellaneous usability improvements in the user interface

  • Popups will now float over the same position in the browser even when the rest of the page scrolls. Previously, popups could be scrolled off the page and become lost.

Plugin development improvements

  • Plugins that use genericAjaxPopup() can now specify the ‘target’ option using a jQuery Position object; e.g. { my: ‘top left’, at: ‘bottom right’, of: ‘selector’ }.

  • When a file is uploaded using the file chooser popup, it now provides the caller with a SHA-1 hash and internal URL, as well as the entire response object (name, size, mime type, etc). This should make the file chooser reusable in more situations; for instance, in providing embedded image functionality.

Updated frameworks and libraries

  • Added the Parsedown library to Devblocks. This is a faster, leaner, and more modern replacement for the existing PHP Markdown Extra library we’ve been using up to this point.

  • Added the CSS to Inline Styles library by Tijs Verkoyen to Devblocks. This provides an easy to way to convert CSS STYLE blocks to inline styles when sending HTML email, as many email readers filter out HEAD, BODY, and STYLE.

  • Updated jQuery library from 1.7.2 to 1.10.2

  • Updated jQuery UI library from 1.9.1 to 1.10.3

  • Added the jQuery Caret plugin for getting and setting the cursor position in textareas.

  • Updated jqPlot library from 1.0.0b2 to 1.0.8

  • Updated qTip library from 1.0.0rc3 to 2.2.0

  • Updated HTMLPurifier library from 4.5 to 4.6.

Maintenance updates

6.6.1

Cerb6 (6.6.1) is a maintenance update released on February 7, 2014; it contains 11 minor fixes and usability enhancements from community feedback covering the recent 6.6 update. You can follow these instructions to upgrade.

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

6.6.2

Cerb6 (6.6.2) is a maintenance update released on February 14, 2014; it contains 23 minor features, fixes, and usability enhancements from community feedback covering the recent 6.6 update. You can follow these instructions to upgrade.

  • [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 “jeff@example.com OR hildy@example.com”.

  • [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 ‘jeff@cerbweb.com’ 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.

6.6.3

Cerb6 (6.6.3) is a maintenance update released on February 21, 2014; it contains 20 minor features, fixes, and usability enhancements from community feedback covering the recent 6.6 update. You can follow these instructions to upgrade.

  • [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” mailbox@example.com). 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.

6.6.4

Cerb6 (6.6.4) is a maintenance update released on March 13, 2014; it contains 10 minor features, fixes, and usability enhancements from community feedback covering the recent 6.6 update. You can follow these instructions to upgrade.

  • [Workspaces/Dashboards] Fixed an issue where the Ajax request could be sent twice when widgets were reordered on a workspace dashboard. This didn’t cause any problems, it was just inefficient.

  • [Worklists/Broadcast] Fixed an issue when previewing a plaintext broadcast on a ticket worklist. Multibyte (UTF-8) characters like umlauts were being corrupted.

  • [CHD-3689] [Virtual Attendants/Placeholders/Mail] Virtual Attendants and snippets can now reference message header values in the ‘message_headers’ placeholder (for instance ‘ticket_initial_message_headers’). The result is an associative array with the header name in lowercase as the key, and the corresponding value.

  • [Virtual Attendants/Snippets] The ‘Insert’ menu for message placeholders now includes ‘message_headers’ as an option.

  • [Virtual Attendants/Mail/Headers] Message and Ticket behaviors can now create conditions based on the headers of any linked message record (initial, initial response, latest, etc). Previously only a few of these were available. The old ‘header’ conditions will be automatically converted to the new ‘headers’ options. Performance has also been improved for multiple header operations, since all the headers are loaded once for the first placeholder, where previously they were loaded every use (even if duplicated).

  • [CHD-3651] [Mail/Parser] Fixed a PHP segfault issue in CentOS that occurred when the parser attempted to converted nested blockquotes in HTML to plaintext. This probably has to do with a bug in a specific version of the PCRE system library.

  • [Mail/Reply] Fixed an “out of memory” issue with the quote formatting when replying to a message with very long quoted blocks. The reported case had quotes that were 25+ levels deep.

  • [Virtual Attendants/Simulator/Comments] When simulating Virtual Attendant behaviors on the ‘New comment on a conversation in group’ event, the sample comments will now always be related to the target ticket. Previously, the random sample comment could come from anywhere.

  • [CHD-3698] [Virtual Attendants/Simulator] Improved the “Invalid placeholders” error message when simulating a ‘New comment on conversation in group’ behavior with the ‘comment_record_watchers_email’ placeholder and the comment’s record has no watchers. The error now reads “No recipients”, which is more explanatory.

  • [CHD-3699] [Search/Performance/Usability] The quick search on fulltext fields (e.g. Message content, Comment content) now defaults to using a single phrase unless quotes are explicitly provided. Previously, a non-quoted sentence would be treated as individual terms using an ‘OR’ search, which was intensive and often returned results with low relevancy. This most often happened when searching for people and organization names. Workers shouldn’t have to remember to add quotes, so the new default behavior should improve performance, usability, and relevance.