<?xml version="1.0"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
		<channel><title>[Cerberus Helpdesk - Support Center] Most Popular Articles</title><link>http://cerberusweb.com/support/rss/kb/most_popular</link><description></description><item><title>How much does Cerberus Helpdesk cost?</title><description>&lt;p&gt;Cerberus Helpdesk is deployed as either an On-Demand service (hosted by us) or as an On-Site installation (hosted on your hardware).  Functionality remains the same whether On-Demand or On-Site.  &lt;/p&gt;

&lt;h3&gt;On-Site Licenses&lt;/h3&gt;

&lt;p&gt;Cerb5 licenses are based on seats, which is defined as the peak number of workers (e.g. executives, management, staff) capable of signing on at the same time. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ultimately your total On Site license cost will be determined by how many seats your company requires.  Prices range from 1 seat ($150) to 50 seats ($5495) &lt;/li&gt;
&lt;li&gt;Need more than 50 seats?  Have budget concerns or red tape to work around?  Don't let your budget stop you from taking control of your team's inbox. Discounts are available for educational institutions, registered charities, established open source projects, and cash-strapped small companies &lt;a href="http://www.cerberusweb.com/support/contact" title="Contact us"&gt;Contact us!&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;On-Demand&lt;/h3&gt;

&lt;p&gt;On-Demand licenses are also based on seats, however for simplicity's sake, there are 3 tiers available for our On Demand clients.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Trickle&lt;/strong&gt; ($75/mo) - Up to 5 concurrent workers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stream&lt;/strong&gt; ($135/mo) - Up to 10 concurrent workers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flood&lt;/strong&gt; ($295/mo) - Up to 25 concurrent workers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Ready to start with an On-Site license or On-Demand desk?&lt;/h3&gt;

&lt;p&gt;Full details and pricing for On-Site licenses can be found here: &lt;a href="http://cerberusweb.com/buy/onsite" title="On site"&gt;On-Site purchase page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Full details and pricing for On-Demand desks can be found here:  &lt;a href="http://cerberusweb.com/buy/ondemand" title="On Demand"&gt;On-Demand desks&lt;/a&gt;&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/2</link><pubDate>Fri, 10 Jun 2011 01:12:42 GMT</pubDate><guid isPermaLink="false">60abd5f957e7d2171c4e61f11c4cc930</guid></item><item><title>Integrating Cerb5 and Gmail/Google Apps</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Cerb5 and Gmail make a great combination:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gmail utilizes industry-leading tools for spam-filtering and virus-scanning.  This filters out a lot of junk before it pollutes your Cerb5 environment.&lt;/li&gt;
&lt;li&gt;Gmail also provides a live backup of your incoming mail.&lt;/li&gt;
&lt;li&gt;Google is all about search, and searching your Gmail for an obscure piece of text may be quicker than searching in Cerb5.  However, Cerb5 provides much more comprehensive search functionality.&lt;/li&gt;
&lt;li&gt;If you have server or network trouble on the machine hosting your Cerb5 instance, you'll still be able to access your incoming mail using Gmail.&lt;/li&gt;
&lt;li&gt;Cerb5 provides enterprise collaboration functionality with powerful tools that don't exist in Gmail. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Setup&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Server:&lt;/strong&gt; pop.gmail.com&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Port:&lt;/strong&gt; 995&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protocol:&lt;/strong&gt; POP3-SSL&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User:&lt;/strong&gt; you@gmail.com&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pass:&lt;/strong&gt; &lt;em&gt;(your gmail password)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Make sure POP3 is enabled for your Gmail account (&lt;em&gt;Settings-&gt;Forwarding &amp;amp; POP3&lt;/em&gt;). If you want to import your entire Gmail history, use the '&lt;em&gt;Enable POP for all mail (even mail that's already been downloaded)&lt;/em&gt;' option. Otherwise to just download new email use the '&lt;em&gt;Enable POP only for mail that arrives from now on&lt;/em&gt;' option.&lt;/p&gt;

&lt;p&gt;You can set up Cerb5 POP3 accounts in &lt;em&gt;Setup-&gt;Mail-&gt;POP3 Accounts&lt;/em&gt;.&lt;/p&gt;

&lt;h1&gt;Frequently Asked Questions&lt;/h1&gt;

&lt;h2&gt;Will Cerb5 delete messages from my Gmail after mail downloads?&lt;/h2&gt;

&lt;p&gt;No.  Gmail's settings override the POP3 &lt;code&gt;DELETE&lt;/code&gt; command.  We recommend that you configure Gmail to automatically archive mail that has been downloaded by Cerb5.&lt;/p&gt;

&lt;h2&gt;Should I use Gmail as my SMTP?&lt;/h2&gt;

&lt;p&gt;If your server has low latency to Gmail, and you don't have a local SMTP server, then there's no reason not to use Gmail for outgoing mail as well.  You may need to authorize your other outgoing addresses through Gmail's settings.&lt;/p&gt;

&lt;h2&gt;Can I write back to mail using Gmail and Cerb5 interchangeably?&lt;/h2&gt;

&lt;p&gt;It's possible, but we recommend only using Cerb5 to respond to mail.  Gmail's POP3 will also download your sent messages, and it requires special configuration for Cerb5 to properly treat these as worker replies.&lt;/p&gt;

&lt;h2&gt;Is there a performance penalty for using Gmail rather than a local POP3 mailbox?&lt;/h2&gt;

&lt;p&gt;The performance penalty of Gmail is very network-dependent.  Undoubtedly there will be more latency than with a local mailbox, but at the same time you're outsourcing cycles that would be otherwise be causing a load on your own mail servers.  We've observed a few Gmail mailboxes on our On-Demand network that have a latency of 500-1000ms per downloaded message.  For a busy environment that can add a significant delay to Cerb5's mail delivery.  &lt;/p&gt;

&lt;p&gt;We have a Gmail account collecting WebGroup Media's official Cerb5 mail, and we haven't found the delay to be prohibitive.&lt;/p&gt;

&lt;h2&gt;Do I need to monitor Gmail's anti-spam decisions?&lt;/h2&gt;

&lt;p&gt;It's a good idea to audit the spam that has been quarantined by Gmail.  It's uncommon, but not impossible, that a &lt;em&gt;false-positive&lt;/em&gt; will quarantine legitimate mail.  Gmail automatically deletes the contents of your spam folder after 30 days.&lt;/p&gt;

&lt;h1&gt;Potential Problems&lt;/h1&gt;

&lt;p&gt;We have noticed a couple issues with Google Apps that aren't bugs, per se, but they'll look like it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gmail won't let you send email through their SMTP server as a From: address that isn't authorized to your account.  To add more addresses, go to your account settings.&lt;/li&gt;
&lt;li&gt;If your POP3 mailbox is delivered to by a Google Apps mailing list, Autoreplies from Cerb5 will not be sent out.  (Per RFC recommendations, we do not sent automated emails in response to things that are labeled as being from a mailing list.)&lt;/li&gt;
&lt;/ul&gt;
</description><link>http://cerberusweb.com/support/kb/article/28</link><pubDate>Tue, 03 May 2011 22:27:53 GMT</pubDate><guid isPermaLink="false">dd17f1a62e09e801a98190992a373642</guid></item><item><title>Automatically refreshing pages using popular browser plugins</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Historically, Cerberus Helpdesk has provided an auto-refresh feature that reloads the current page while displaying a countdown timer.  This is useful in multi-monitor environments, or when displaying helpdesk information on a projector in a network operations center (NOC).&lt;/p&gt;

&lt;p&gt;When we started the project in January 2002, browsers provided fewer services to the sites that displayed inside them, and browser plugins weren't mainstream.  There was a time when we even supplied our own spellchecking feature, despite the fact it makes far more sense for browsers to cooperate with the operating system to support consistent dictionaries (and learn/ignore lists) across all applications with all languages, instead of requiring every application to provide its own isolated dictionary.&lt;/p&gt;

&lt;p&gt;Today, auto-refresh functionality is in a similar position.  All major browsers can support the ability to reload a page at an interval through plugins.  Opera includes the feature by default.&lt;/p&gt;

&lt;p&gt;There are several reasons why the browser is a better place for this functionality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The refresh countdown can be visible at all times without obscuring web pages.&lt;/li&gt;
&lt;li&gt;The browser is capable of determining an idle state across the entire system (for pausing/resuming the timer) in a way that a web page is not.  Ideally, a page would not auto-refresh while you were interacting with it.&lt;/li&gt;
&lt;li&gt;Web-based applications won't have to provide their own inconsistent implementations for automatically refreshing pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We've compiled a list of auto-refresh plugins for all the mainstream browsers.  The Chrome and Firefox solutions work the best.&lt;/p&gt;

&lt;h3&gt;Chrome&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ChromeReload&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://chrome.google.com/webstore/detail/njoipeaphfnaplplihpbgndfojhdhmjo" title=""&gt;https://chrome.google.com/webstore/detail/njoipeaphfnaplplihpbgndfojhdhmjo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/de2154ce-e500-102e-a560-0030487e9650/62-chrome_ext2.png" alt="" title=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/4b1e71a6-e501-102e-a560-0030487e9650/62-chrome-ext1.png" alt="" title=""&gt;&lt;/p&gt;

&lt;h3&gt;Firefox&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ReloadEvery&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/reloadevery/" title=""&gt;https://addons.mozilla.org/en-US/firefox/addon/reloadevery/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Safari&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Auto-Refresh&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://agriffindesign.com/downloads/autorefresh/" title=""&gt;http://agriffindesign.com/downloads/autorefresh/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Opera&lt;/h3&gt;

&lt;p&gt;The functionality is built-in, although it doesn't show a countdown timer like the plugins.  Right-click on the page and choose from the &lt;em&gt;Reload Every...&lt;/em&gt; menu.&lt;/p&gt;

&lt;h3&gt;Internet Explorer&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Yrefresher&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://www.snapfiles.com/get/yrefresher.html" title=""&gt;http://www.snapfiles.com/get/yrefresher.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><link>http://cerberusweb.com/support/kb/article/62</link><pubDate>Fri, 10 Jun 2011 22:30:27 GMT</pubDate><guid isPermaLink="false">c2a97f94b5b6bd8db0cfa1e20a721a49</guid></item><item><title>Sending group auto-replies using Virtual Attendants</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Auto-responders are a useful tool in many situations; for example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Groups can send a confirmation for new tickets, which gives customers a reference number and an ETA.&lt;/li&gt;
&lt;li&gt;Mail sent to a certain address, or with a specific subject like &lt;em&gt;"Tell me more"&lt;/em&gt;, can be sent an automated response with more information.&lt;/li&gt;
&lt;li&gt;When new mail is received outside regular office hours, an automated response could manage the expectations of the sender with a message like &lt;em&gt;"We'll reply to you first thing Monday morning"&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On their own, automated replies are nothing new.  Many email applications provide "Vacation messages" which act on the same principle.  What makes Cerb5's functionality interesting is that Virtual Attendants can use everything you know about the sender to personalize the message you're automatically sending.&lt;/p&gt;

&lt;p&gt;With Virtual Attendants, auto-replies can be based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hours of operation (e.g. time of day, day of week, month of year)&lt;/li&gt;
&lt;li&gt;Any information about the current conversation ticket (e.g. group; bucket; subject; sender; org)&lt;/li&gt;
&lt;li&gt;Any custom fields attached to the sender or their organization (e.g. service level agreement; paid support)&lt;/li&gt;
&lt;li&gt;The sender's native language&lt;/li&gt;
&lt;li&gt;Product lines or brands&lt;/li&gt;
&lt;li&gt;and pretty much anything else you can think of&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this article, we'll cover how to create a new auto-responder using the group Virtual Attendant.  The response will confirm receipt of the message and it will provide a reference ID.&lt;/p&gt;

&lt;h1&gt;Implementation&lt;/h1&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/1036e5d6-ded1-102e-b312-0030487e9650/56-virtual_attendant_auto_responder.png" alt="" title=""&gt;&lt;/p&gt;

&lt;p&gt;You'll need to be a group manager to continue.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;groups&lt;/strong&gt; in the top right, and then choose the group you would like to create an auto-responder for.&lt;/li&gt;
&lt;li&gt;Select the &lt;em&gt;Virtual Attendant&lt;/em&gt; tab.&lt;/li&gt;
&lt;li&gt;Under &lt;em&gt;Create New Behavior&lt;/em&gt;, choose &lt;em&gt;New message on a group conversation&lt;/em&gt;.  Click on the new behavior and select &lt;strong&gt;Edit Behavior&lt;/strong&gt; from the menu.  Give it the title &lt;em&gt;"New ticket auto-reply"&lt;/em&gt;, and click the &lt;strong&gt;Save Changes&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We should restrict this behavior to only new messages and not replies to existing conversations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on the new behavior again and select &lt;strong&gt;Add Decision&lt;/strong&gt; from the menu.  Set the title to &lt;em&gt;"Is it new?"&lt;/em&gt; and click the &lt;strong&gt;Save Changes&lt;/strong&gt; button.&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;"Is it new?"&lt;/strong&gt; and select &lt;strong&gt;Add Outcome&lt;/strong&gt; from the menu.  Set the title to &lt;em&gt;"Yes"&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Add Condition&lt;/em&gt; button and type &lt;em&gt;"message is"&lt;/em&gt; in the text box.  This filters the conditions to only those that match your search string.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;message is first in conversation&lt;/em&gt; condition to add it.  Leave the default at &lt;em&gt;true&lt;/em&gt;.  Now the behavior will only match the first message of a conversation, and you won't end up spamming your customers with the same auto-reply every time they contact you.&lt;/li&gt;
&lt;li&gt;Next, click the &lt;em&gt;message is outgoing&lt;/em&gt; condition to add it too.  Change its value to &lt;em&gt;false&lt;/em&gt;.  This will make sure you're only sending this auto-reply when customers write in to you, instead of when you're composing a new message to them.&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;Save Changes&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now we're ready to set up the auto-reply message:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click the &lt;strong&gt;Yes&lt;/strong&gt; bubble on the &lt;em&gt;New ticket auto-reply&lt;/em&gt; behavior and select &lt;strong&gt;Add Actions&lt;/strong&gt; from the menu.  Set the title to &lt;em&gt;"Send confirmation email"&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Add the action &lt;em&gt;Send email to recipients&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Add the following content:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Thanks for writing to us!

Your reference number for the ticket "{{ticket_subject}}" is #{{ticket_mask}}.

We'll get back to you as soon as possible.

- Example, Inc.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can customize this message to suit your needs.&lt;/p&gt;

&lt;p&gt;When sending an auto-reply, you may not want to include the message in the ticket history.  This will prevent a copy of the automatic response from being included in every conversation or treated as a new message.  This is probably what you want, so check the box next to &lt;em&gt;Don't save a copy of this message in the conversation history&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Click the &lt;strong&gt;Save Changes&lt;/strong&gt; button and your Virtual Attendant will automatically send this message for every new incoming message that arrives for the group.&lt;/p&gt;

&lt;h1&gt;More Things to Try&lt;/h1&gt;

&lt;h2&gt;Sending time-based auto-reply messages&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/0e08c876-ded4-102e-b312-0030487e9650/56-virtual_attendant_auto_reply_timebased.png" alt="" title=""&gt;&lt;/p&gt;

&lt;h2&gt;Sending auto-replies based on Service Level&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/262cde6e-ded5-102e-b312-0030487e9650/56-virtual_attendant_slas.png" alt="" title=""&gt;&lt;/p&gt;

&lt;h2&gt;Responding with language-appropriate greetings&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/2647279c-ded5-102e-b312-0030487e9650/56-virtual_attendant_language.png" alt="" title=""&gt;&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/56</link><pubDate>Thu, 06 Oct 2011 19:01:12 GMT</pubDate><guid isPermaLink="false">0e1fb30ac7ea1e4f9bec9835f3a35985</guid></item><item><title>When entering SMTP details I get the error "Connection timed out"</title><description>&lt;p&gt;&lt;em&gt;"Connection timed out"&lt;/em&gt; could mean a lot of things, but it's often caused by the wrong SMTP port or a firewall on the server (or ISP) blocking access to the port.&lt;/p&gt;

&lt;p&gt;If you have console access on the server, try doing a manual connection to rule things out:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# telnet localhost 25
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
220 test.webgroupmedia.com ESMTP Postfix (Debian/GNU) 
HELO localhost 
250 test.webgroupmedia.com 
QUIT 
221 2.0.0 Bye 
Connection closed by foreign host.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you can't get the connection to open at all, you need to make sure you're trying to connect to the right host and port. If you're certain, there is possibly a firewall blocking incoming or outbound traffic on your SMTP port (usually 25, 465 or 587).&lt;/p&gt;

&lt;p&gt;If your server is on a residential internet account (e.g, DSL), oftentimes outbound connections on port 25 will be blocked unless you use the ISPs SMTP server. In these situations it's fine to use your ISP's SMTP (outgoing) and your own POP3/IMAP (incoming).&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/25</link><pubDate>Tue, 03 May 2011 22:33:42 GMT</pubDate><guid isPermaLink="false">efb272c44bf27f1e17b0ce31111df802</guid></item><item><title>Forcing a full reindex of fulltext searchable content</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Cerb5 provides a fast and flexible fulltext search system that supports most major languages.  The search system is built on top of the fulltext functionality in MySQL 5.x's MyISAM storage engine, but Cerb5 provides an extra layer of functionality: "Romanization", normalization, stop words, an index queue, etc.&lt;/p&gt;

&lt;p&gt;One of the major improvements provided by Cerb5 is the asynchronous search index queue which indexes new content (e.g. messages, articles) in the background.  This improves database performance by reducing table/row locks so that &lt;code&gt;INSERT&lt;/code&gt;/&lt;code&gt;UPDATE&lt;/code&gt; statements aren't blocked by long-running fulltext searches.&lt;/p&gt;

&lt;p&gt;Occasionally, you may find yourself needing to fully reindex Cerb5's search content from the beginning.  This may be due to improvements in the search engine in new versions of the project, or due to configuration changes to make searching broader or more refined.&lt;/p&gt;

&lt;h1&gt;Instructions&lt;/h1&gt;

&lt;p&gt;Depending on the nature of your configuration changes, you may need to reindex from both Cerb5 and MySQL. &lt;/p&gt;

&lt;p&gt;If you're reindexing due to an improvement in Cerb5 -- for example, for the new "Romanization" feature in 5.4 -- you should reindex Cerb5.&lt;/p&gt;

&lt;p&gt;If you change MySQL's configuration -- for example, to lower the minimum indexed word length from 4 to 3 -- you should reindex MySQL.&lt;/p&gt;

&lt;p&gt;There is no harm in reindexing both; it will just have a performance impact for the short-term future until completed.  When reindexing MySQL, the table will be locked by MySQL and reads/writes may be delayed.&lt;/p&gt;

&lt;h2&gt;Cerb5&lt;/h2&gt;

&lt;p&gt;To reindex Cerb5's search indexes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connect to your database using the MySQL console.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Locate the search index pointer:&lt;/p&gt;

&lt;p&gt;mysql&gt; SELECT * FROM cerb&amp;#95;property_store WHERE extension&amp;#95;id \&lt;br&gt;
    LIKE 'cerberusweb.search.schema.%' AND property = 'last&amp;#95;indexed&amp;#95;id';&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reset the index pointer or timestamp to zero:&lt;/p&gt;

&lt;p&gt;mysql&gt; UPDATE cerb&amp;#95;property&amp;#95;store SET value='0' \&lt;br&gt;
    WHERE extension&amp;#95;id='cerberusweb.search.schema.kb_article' \&lt;br&gt;
    AND property IN ('last&amp;#95;indexed&amp;#95;id', 'last&amp;#95;indexed&amp;#95;time');&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run the search index job manually from your browser:&lt;br&gt;
&lt;code&gt;http://yourwebsite.example.com/cerb5/cron/cron.search?loglevel=7&amp;amp;ignore_wait=1&amp;amp;reload=5&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optionally, if you have hundreds of thousands, or millions, of messages to reindex, you can let the &lt;code&gt;/cron&lt;/code&gt; system take care of the reindex for you automatically.  However, it may take quite a while to catch up.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;MySQL&lt;/h2&gt;

&lt;p&gt;To reindex your MySQL fulltext index after making configuration changes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connect to your database using the MySQL console.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Locate the search index tables:&lt;/p&gt;

&lt;p&gt;mysql&gt; show tables like 'fulltext&amp;#95;%';&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rebuild the indexes for each table:&lt;/p&gt;

&lt;p&gt;mysql&gt; REPAIR TABLE fulltext&amp;#95;message&amp;#95;content QUICK;&lt;br&gt;
mysql&gt; REPAIR TABLE fulltext&amp;#95;kb&amp;#95;article QUICK;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Despite the word &lt;code&gt;QUICK&lt;/code&gt;, this process may take considerable time if you have a large amount of content.  It is recommended that you schedule it during an off-peak maintenance period.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;!--# Frequently Asked Questions #--&gt;
</description><link>http://cerberusweb.com/support/kb/article/52</link><pubDate>Thu, 05 May 2011 08:54:42 GMT</pubDate><guid isPermaLink="false">717542d2ac61e6060ca48f5f3e4ecd70</guid></item><item><title>Upgrading to the latest stable version of Cerb5 using Git</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;If you installed Cerb5 or Cerb6 from &lt;a href="https://github.com/wgm/cerb6"&gt;GitHub&lt;/a&gt; using Git then the process of updating to a new version is simple and straightforward.  If you're using Subversion, you can &lt;a href="http://cerberusweb.com/support/kb/article/71-Switching_a_Cerb5_installation_from_Subversion_to_Git"&gt;switch to Git with these instructions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You won't need to copy your &lt;code&gt;framework.config.php&lt;/code&gt; or &lt;code&gt;storage&lt;/code&gt; directories.  Everything will be upgraded in place.&lt;/p&gt;

&lt;h1&gt;Check your license expiration&lt;/h1&gt;

&lt;p&gt;First, verify that your license is valid for the latest version.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/70/license_check.png" alt="" title=""&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;em&gt;Setup-&gt;Settings-&gt;License&lt;/em&gt; in Cerb6.&lt;/li&gt;
&lt;li&gt;Check the date for &lt;strong&gt;Software Updates Expire:&lt;/strong&gt;

&lt;ol&gt;
&lt;li&gt;If it's in the future, you're all set.  Continue to the next section.&lt;/li&gt;
&lt;li&gt;If it's in the past, you either need to &lt;a href="http://cerberusweb.com/buy/onsite"&gt;renew your license&lt;/a&gt; or upgrade to the latest version covered by your license.  You can check approximate release dates from our profile on &lt;a href="http://freshmeat.net/projects/cerberushelpdesk"&gt;Freshmeat&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;Make a backup&lt;/h1&gt;

&lt;p&gt;Refer to the instructions here to make a recent backup:&lt;br&gt;
&lt;a href="http://wiki.cerb5.com/wiki/Backups"&gt;http://wiki.cerb5.com/wiki/Backups&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;Updating the project files&lt;/h1&gt;

&lt;p&gt;We recommend creating a new branch for each version of the project.  With a branch per version you can make an informed decision about which of your modifications and hacks to carry over.  Some of your modifications to the project files may not make sense in the latest version because your feedback was implemented.&lt;/p&gt;

&lt;p&gt;You're perfectly welcome to modify the main project files, but the officially recommended way to extend the software is to take advantage of our comprehensive plugin system.  Using plugins, your changes will be easily portable between versions or environments.&lt;/p&gt;

&lt;p&gt;Let's proceed with the upgrade by creating a new version branch:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open a console on your server and change to the directory of your Cerb6 installation.&lt;/li&gt;
&lt;li&gt;First, you'll want to &lt;em&gt;stash&lt;/em&gt; your local changes to files like &lt;code&gt;framework.config.php&lt;/code&gt;, which will make merging changes easier:&lt;br&gt;
&lt;code&gt;git stash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Find the name of the remote repository.  In most cases this will be &lt;strong&gt;origin&lt;/strong&gt; by default.  You can verify this with:&lt;br&gt;
&lt;code&gt;git remote&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fetch the branches from the remote server:&lt;br&gt;
&lt;code&gt;git fetch origin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;From here you can decide which version to upgrade to:&lt;br&gt;
&lt;code&gt;git branch -r&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add a new local branch for the desired version:&lt;br&gt;
&lt;code&gt;git branch --track 6.1.4 origin/6.1.4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Switch to the new version branch:&lt;br&gt;
&lt;code&gt;git checkout 6.1.4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Re-apply your local stashed changes:&lt;br&gt;
&lt;code&gt;git stash pop&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Note: If you'd prefer to use a single branch instead of one branch per version, you can use the &lt;em&gt;stable&lt;/em&gt; branch instead of a version number.  This branch will always contain the files for the most recent release, but you may have to manually merge conflicts if you've made changes to the code.&lt;/p&gt;

&lt;h1&gt;In the event of conflicts...&lt;/h1&gt;

&lt;p&gt;If your &lt;em&gt;stashed&lt;/em&gt; changes were non-trivial then you may run into a situation where your changes conflict with our changes in the new version.&lt;/p&gt;

&lt;p&gt;In such a situation you can decide to merge the changes by hand, using a command like &lt;code&gt;git mergetool&lt;/code&gt;, or you can simply reset such files to their default state with &lt;code&gt;git checkout -- &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;Permissions&lt;/h1&gt;

&lt;p&gt;It is possible that using version control systems like Git and Subversion will modify your file permissions.  You should verify that all files are owned and readable by your webserver user, and that the &lt;code&gt;/storage&lt;/code&gt; directory and its contents are owned and readable+writeable by your webserver user.&lt;/p&gt;

&lt;h1&gt;Upgrading the database&lt;/h1&gt;

&lt;p&gt;Once your files are updated to a new version, Cerb5 automatically brings your database up to date and migrates any relevant data to new formats.  For a major upgrade there will almost always be changes to the database.  This section may not apply for smaller maintenance updates.&lt;/p&gt;

&lt;p&gt;To start the database upgrade process you simply need to navigate to your helpdesk using a browser.  You can also initiate this process manually by opening the &lt;code&gt;/update&lt;/code&gt; page.  For example, if your helpdesk is located at &lt;code&gt;http://example.com/cerb6/&lt;/code&gt; then you would open &lt;code&gt;http://example.com/cerb6/update&lt;/code&gt; in your browser.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: If you aren't using friendly URLs, then you would navigate to &lt;code&gt;http://example.com/cerb6/index.php/update&lt;/code&gt; instead.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once the database is upgraded then you'll be returned to your login form and you can resume using the helpdesk.&lt;/p&gt;

&lt;h1&gt;Purge the /install directory&lt;/h1&gt;

&lt;p&gt;Make sure the &lt;code&gt;/install&lt;/code&gt; directory is deleted.  It is possible for version control systems like Git to restore this directory during an upgrade.&lt;/p&gt;

&lt;h1&gt;Updating Community Portals&lt;/h1&gt;

&lt;p&gt;If you have Community Portals in use, like the Support Center, then it's a good idea to make sure they're using the latest version of the deployed &lt;code&gt;index.php&lt;/code&gt; file.  This file rarely changes, but you will experience subtle and difficult to diagnose problems if it does change and you don't update your portals.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;em&gt;Setup-&gt;Community Portals-&gt;Configure&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;For each Community Portal, click on it and open the &lt;em&gt;Installation&lt;/em&gt; tab.&lt;/li&gt;
&lt;li&gt;Copy the contents of &lt;code&gt;index.php&lt;/code&gt; to the location where your portal is installed.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/70/portal_install.png" alt="" title=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;All done!&lt;/h1&gt;

&lt;p&gt;You should be all set to take advantage of our latest improvements.  Be sure to &lt;a href="http://wiki.cerb5.com/wiki/Category:Changelog"&gt;review the list of changes for the new version&lt;/a&gt;.&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/70</link><pubDate>Thu, 06 Dec 2012 17:19:46 GMT</pubDate><guid isPermaLink="false">fe319aa98e58a0308008b5f0050ec5a7</guid></item><item><title>Enforcing Service Level Agreements (SLAs) with Virtual Attendants and scheduled behavior</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;A Service Level Agreement (SLA) is a formal contract that defines a server provider's performance obligations to a customer.  For example, customers who pay for priority support through email are generally guaranteed a response within a certain timeframe, such as "within 2 hours" or "before the close of the next business day".&lt;/p&gt;

&lt;p&gt;With Cerb5, you can configure Virtual Attendant behavior to enforce your SLA commitments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE: This functionality requires Cerb5 version 5.5 or later.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;Defining Service Levels on organization records&lt;/h1&gt;

&lt;p&gt;The first step is to grant service levels to the appropriate contacts.  You have plenty of leeway using Cerb5 to model this according to your particular business practices.  &lt;/p&gt;

&lt;p&gt;Our usual recommendation is to create a picklist custom field on organization records called "Service Level".  Even if you only have a single service level like "Priority Support" this will give you room for future expansion compared to using a checkbox.  We recommend that you add this field to organization records so it covers all the contacts that you assign to the organization, which saves you the hassle of assigning service levels to each individual contact.  However, if you limit the number of authorized contacts then everything in this article is still applicable if you put the custom field on individual address records.&lt;/p&gt;

&lt;p&gt;For simplicity our examples will use the organization-based approach.&lt;/p&gt;

&lt;h2&gt;Creating the Service Level custom field&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;em&gt;Setup&lt;/em&gt; in the top right of the navigation menu.&lt;/li&gt;
&lt;li&gt;Select &lt;em&gt;Settings-&gt;Custom Fields&lt;/em&gt; from the Setup menu.&lt;/li&gt;
&lt;li&gt;Select the &lt;em&gt;Organization&lt;/em&gt; record type.&lt;/li&gt;
&lt;li&gt;Create a new &lt;em&gt;picklist&lt;/em&gt; called "Service Level" and add "Priority Support" as a field option.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/63/cfield_org_servicelevel.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;Automating the process with Virtual Attendants&lt;/h1&gt;

&lt;p&gt;Now that we have a custom field for granting priority support to specific organizations, we need to instruct our group Virtual Attendant to give their messages special consideration.&lt;/p&gt;

&lt;h2&gt;Creating the SLA Escalation custom behavior&lt;/h2&gt;

&lt;p&gt;We're going to enforce our SLA by attaching custom behavior to a ticket when one of our priority contacts writes in.  This behavior will make a decision based on whether or not our workers have provided a response within the desired timeframe.  For the purpose of this example we're going to enforce 2 hour response times.&lt;/p&gt;

&lt;p&gt;Let's create the custom behavior.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;em&gt;Groups&lt;/em&gt; in the top right of the navigation menu.&lt;/li&gt;
&lt;li&gt;Choose the group you want to enforce an SLA for.  In this example we'll be using a group called Support.&lt;/li&gt;
&lt;li&gt;Select the &lt;em&gt;Virtual Attendant&lt;/em&gt; tab.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Create Behavior&lt;/em&gt; button and enter the following details:&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/63/groupva_createbehavior.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You should now see a brand new decision tree on the &lt;em&gt;Custom ticket behavior&lt;/em&gt; event.  This is where we define decisions, outcomes, and actions to instruct the Virtual Attendant how to perform our desired behavior.  It's called a &lt;strong&gt;decision tree&lt;/strong&gt; because each decision can have various outcomes, and each of those can have various actions.  An outcome can also have start the whole process over with a new decision that continues branching.  A decision tree is built using simple building blocks, but the behavior you can create can be very complex depending on your needs.  Each of the clickable bubbles in the decision tree is referred to as a &lt;strong&gt;node&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Our objective is to have a place where we can react accordingly if the current ticket has not had a worker reply within the past 2 hours.  We will verify that a message was sent by an SLA-covered organization later.  Let's create the new behavior.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on the event node and select &lt;em&gt;Add Decision&lt;/em&gt; from the menu.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/63/groupva_dectree.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Title the new decision: "Has a worker replied within 2 hours?" and click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Now click on the decision node and select &lt;em&gt;Add Outcome&lt;/em&gt; from the menu.  Enter the following details and click the &lt;em&gt;Save Changes&lt;/em&gt; button.  This will give us an outcome where a ticket is &lt;em&gt;open&lt;/em&gt; and is lacking a worker reply for the past 2 hours.  Note that we're filtering out the &lt;em&gt;waiting for reply&lt;/em&gt; status because if we are waiting on the customer then the clock is not running.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/63/groupva_decision.png" alt=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At this point you could do a number of things on a ticket where a paying customer is anxiously waiting for an answer and a worker has not replied recently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If there are watchers, notify them.&lt;/li&gt;
&lt;li&gt;If there aren't watchers, notify the group manager(s) or a designated dispatcher.&lt;/li&gt;
&lt;li&gt;Force assign the issue to someone.&lt;/li&gt;
&lt;li&gt;Send a series of SMS text messages, email messages, post to a Campfire support team chat room, etc.  With plugins there is really no limit to the kinds of things you can instruct Virtual Attendants to do.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the sake of a simple demonstration, we're going to have our Virtual Attendant check if the ticket has watchers or not and react appropriately in either situation.  If there are watchers we're going to send them a notification.  If there aren't watchers we're going to notify the group managers.&lt;/p&gt;

&lt;p&gt;In our official helpdesk environment at WebGroup Media, our team is always connected to a &lt;a href="http://www.campfirenow.com/"&gt;Campfire&lt;/a&gt; group chat room.  We use the &lt;a href="https://github.com/cerb5-plugins/wgm.campfire"&gt;Cerb5 Campfire Integration&lt;/a&gt; plugin to send automated status updates from our Virtual Attendants to chat where we can quickly decide in real-time who will take care of any issues.  For us, this is the ideal place to send notifications about SLA obligations.  We'll assume that you don't do that (perhaps you should), and instead we'll just send a simple notification to a specific worker that we'll assume is our group's manager or dispatcher.  If your team stays in touch in a different way (e.g. IRC chat, Skype, scrolling LED marquee on the office wall, office loudspeaker with text-to-speech orders droned out 1984-style) then consider hiring us to build a Virtual Attendant plugin for integration with your existing infrastructure.&lt;/p&gt;

&lt;p&gt;Let's continue our decision tree.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on the new outcome node and select &lt;em&gt;Add Decision&lt;/em&gt; from the menu.  Title the decision "Are there watchers?" and click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Click on the new decision node and select &lt;em&gt;Add Outcome&lt;/em&gt; from the menu.  Enter the following details and then click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/63/groupva_are_there_watchers.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Click on the new outcome node and select &lt;em&gt;Add Actions&lt;/em&gt; from the menu.  Enter the following details and then click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/63/groupva_notify_watchers.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Now we also want to react if there aren't watchers.  Click on the "Are there watchers?" decision node and select &lt;em&gt;Add Outcome&lt;/em&gt; from the menu.  Title the outcome "No" and click the &lt;em&gt;Save Changes&lt;/em&gt; button.  We don't need to provide any conditions because if the "Yes" condition doesn't match then we can safely assume "No" is the correct outcome.&lt;/li&gt;
&lt;li&gt;Click on the new "No" outcome node and select &lt;em&gt;Add Actions&lt;/em&gt; from the menu.  Enter the following details and then click the &lt;em&gt;Save Changes&lt;/em&gt; button.  Notice that we are notifying specific workers (our managers or dispatchers) instead of the non-existent watchers.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/63/groupva_notify_managers.png" alt=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Understanding behavior loops&lt;/h2&gt;

&lt;p&gt;At this point, when our new behavior runs it will notify either the watchers or the group managers if an open ticket from a priority customer has not been replied to within the agreed-upon timeframe.  After that, though, it won't provide any subsequent notifications if nobody does anything and the conversation continues to rot.  That's where behavior loops come to the rescue.  Custom behavior is capable of scheduling other behavior, including itself, to run in the future when certain conditions are met.  In our case, we want the SLA Escalation behavior to continue to notify us every hour while a ticket remains overdue -- in other words, we want it to schedule itself to run again.&lt;/p&gt;

&lt;p&gt;The proper place to schedule the behavior loop is after the first decision ("Has a worker replied within 2 hours?") because we want the behavior to loop whether or not there are watchers.  This saves us from having to schedule future behavior individually for each subsequent outcome.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on the first "No" outcome node and select "Add Action" from the menu.  Enter the following details and click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/63/groupva_reschedule_self.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;We want our behavior to be rescheduled as the first thing that happens on the "No" outcome, so click the new "Reschedule SLA Escalation" action node and drag it to the first "No" outcome.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/63/groupva_reschedule_self_drag.png" alt=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This reschedules our behavior to run again in one hour.  The "If duplicate behavior is scheduled:" option instructs the Virtual Attendant on what to do in the event we ever end up with multiple SLA Escalation behaviors on a single ticket conversation.&lt;/p&gt;

&lt;p&gt;We're selecting the "Only schedule earliest occurrence" option because if there is already an SLA reminder scheduled for 5 minutes from now, we want it to run it then instead of resetting it to an hour from now.  For example, if a customer is waiting on our response and an SLA response is due in 10 minutes, a customer may happen to write in with the message "Hello?  Is anybody home?".  If we reset the SLA timer to an hour in the future due to their activity then it would take another hour before our custom behavior attempted to get the attention of the watchers or managers.  When a customer is waiting on us, we always want to respect the SLA timer with the least amount of time left on it.  That means if a customer writes in several times in rapid succession, we are not attaching new SLA behavior to the conversation if it already exists.  Once the original behavior runs, it will reschedule itself for an hour in the future anyway.  We've found this to be a very elegant solution to the potential problem of "stacking" the same behavior on a particular record too many times.&lt;/p&gt;

&lt;h2&gt;Scheduling custom behavior for new messages&lt;/h2&gt;

&lt;p&gt;If you're particularly astute, you may be wondering how our custom behavior is added to conversations in the first place.  &lt;/p&gt;

&lt;p&gt;Now that we have our custom SLA Escalation behavior that tries to get our attention when we're not responding to customers fast enough, and it's capable of rescheduling itself until our SLA commitments are met, we need to schedule it when someone writes in who has an SLA.&lt;/p&gt;

&lt;p&gt;You should still be on the group's Virtual Attendant tab.  If not, navigate back there.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click the &lt;em&gt;Create Behavior&lt;/em&gt; button.  Enter the following details and then click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/63/groupva_schedule_behavior.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Click on the new event node and select &lt;em&gt;Add Decision&lt;/em&gt; from the menu.  Title it "Is it an incoming message with an SLA?" and click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Click on the new decision node and select &lt;em&gt;Add Outcome&lt;/em&gt; from the menu.  Enter the following details and then click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/63/groupva_schedule_outcome.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Click on the new "Yes" outcome node and select &lt;em&gt;Add Actions&lt;/em&gt; from the menu.  Enter the following details and then click &lt;em&gt;Save Changes&lt;/em&gt;.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/63/groupva_schedule_actions.png" alt=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Our custom SLA Escalation behavior will now be scheduled 2 hours in the future on a ticket conversation every time a customer writes in who has a priority SLA.  If the customer writes in multiple times before a worker replies, the SLA Escalation behavior with the shortest timer remaining is used and the others are discarded.  If a worker doesn't reply within 2 hours then our behavior will send out notifications and reschedule itself every hour until the customer receives a response or the ticket is closed.&lt;/p&gt;

&lt;h1&gt;Assign a priority service level to some organizations&lt;/h1&gt;

&lt;p&gt;You probably want to assign a service level to a couple organizations to take advantage of this SLA Escalation behavior.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you have a few V.I.P. customers that you want to pay extremely close attention to, ensuring they have the best customer support experience, then this is a great way to do it.&lt;/li&gt;
&lt;li&gt;If you offer corporate support for a fee in exchange for guaranteed response times, this approach should be flexible enough to accomodate your needs.&lt;/li&gt;
&lt;li&gt;Or perhaps you may want to do this for every customer contact, because that's just the kind of customer-focused company that you are.  Kudos!  We hope it helps you remain accountable to that commitment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;If you need any help, just ask.&lt;/h1&gt;

&lt;p&gt;We recognize how important SLA functionality is, and that's why we didn't want to provide it as an inflexible, presumptive feature that forces you into changing how you do everything.  This may seem a little complicated to you the first few times you set up new Virtual Attendant behavior, but as you become comfortable with it you'll likely realize countless uses for it. These skills are widely reusable for configuring business automation and workflow in Cerb5.&lt;/p&gt;

&lt;p&gt;Feel free to &lt;a href="http://www.cerberusweb.com/support/contact"&gt;contact us&lt;/a&gt; if you need help fine-tuning your Virtual Attendant behavior.  We're available for hire to build custom integration, as well as to provide training or consulting on moving more of your online processes to the Cerb5/Devblocks platform.&lt;/p&gt;

&lt;h1&gt;Where to go from here&lt;/h1&gt;

&lt;h2&gt;Business hours&lt;/h2&gt;

&lt;p&gt;You could modify your Virtual Attendant to schedule behavior based on business hours. For example, if it's currently a weekend then it could be scheduled for "Monday 8am".  If it's currently after-hours on a weekday it could be scheduled for 8am the next day.  It's a safe bet that we'll be adding new conditions to make calendar and work hour based processes even easier.&lt;/p&gt;

&lt;h2&gt;Additional service levels&lt;/h2&gt;

&lt;p&gt;If you have several tiers of service level agreements you could create a behavior for each one "SLA Platinum Escalation", or you could add another decision with a series of outcomes to the decision tree that would set target response times accordingly.&lt;/p&gt;

&lt;h2&gt;True escalation&lt;/h2&gt;

&lt;p&gt;Currently we're checking to see if an open conversation from a priority contact has the last worker contact more than 2 hours ago.  You could gradually escalate to more aggressive forms of attention-grabbing reminders after 2 hours, 4 hours, and 8 hours.  This could be accomplished by scheduling a different custom behavior if the worker reply is extremely late.  An ideal place to do that is at the top of a decision tree by scheduling a new behavior to occur "now" and then abandoning the current behavior.  &lt;/p&gt;

&lt;p&gt;That's easy to do if you nest decisions from the oldest period first.  For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is 8 hours late?

&lt;ul&gt;
&lt;li&gt;Yes&lt;/li&gt;
&lt;li&gt;No

&lt;ul&gt;
&lt;li&gt;Is 4 hours late?

&lt;ul&gt;
&lt;li&gt;Yes&lt;/li&gt;
&lt;li&gt;No

&lt;ul&gt;
&lt;li&gt;Is 2 hours late?

&lt;ul&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><link>http://cerberusweb.com/support/kb/article/63</link><pubDate>Sat, 06 Aug 2011 20:30:18 GMT</pubDate><guid isPermaLink="false">9bd91dce450d03772a14def6fc5cddfd</guid></item><item><title>Switching a Cerb5 installation from Subversion to Git</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Prior to the release of Cerb5, the official recommendation was to use Subversion for installing and upgrading the app.  This made sense years ago when support wasn't prevalent for the next generation of distributed version control tools like &lt;a href="http://git-scm.com"&gt;Git&lt;/a&gt;.  Today, Git is available for all major platforms.  Our official repositories are managed with Git and collaboration is provided through &lt;a href="http://www.github.com/"&gt;GitHub&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;If you're still using Subversion to manage your Cerb5 installation, we highly recommend that you migrate to Git.&lt;/p&gt;

&lt;p&gt;As of January 2012 we have discontinued hosting our own Subversion repositories.  If for some reason you are unable to use Git, you can &lt;a href="http://www.cerberusweb.com/support/kb/article/90-Switching_to_the_new_Subversion_repository_hosted_by_GitHub"&gt;switch to our new Subversion repository at GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;Make the change&lt;/h1&gt;

&lt;p&gt;Move your existing Cerb5 installation to a directory named &lt;code&gt;cerb5-svn&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;Make a backup&lt;/h2&gt;

&lt;p&gt;Make a recent backup using the instructions here:&lt;br&gt;
&lt;a href="http://wiki.cerb5.com/wiki/Backups"&gt;http://wiki.cerb5.com/wiki/Backups&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Keep local modifications&lt;/h2&gt;

&lt;p&gt;Change directory to your existing files:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd cerb5-svn
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Make a patch of your local modifications:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;svn diff &amp;gt; my_changes.patch
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Find your existing version&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;grep "APP_VERSION" -m 1 api/Application.class.php
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Download the same version of Cerb5 with Git&lt;/h2&gt;

&lt;p&gt;Return to the parent directory where &lt;code&gt;cerb5-svn&lt;/code&gt; is located:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd ..
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Perform a fresh checkout of the Cerb5 project files from Git &lt;em&gt;using the same version&lt;/em&gt;.  Replace &lt;code&gt;&amp;lt;version&amp;gt;&lt;/code&gt; in the command below with the version number from the previous section above with the following convention:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;5.5.0&lt;/code&gt; -&gt; &lt;code&gt;5.5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;5.5.2&lt;/code&gt; -&gt; &lt;code&gt;5.5.2&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, if the version ends in &lt;code&gt;.0&lt;/code&gt; then just include the first two numbers.&lt;/p&gt;

&lt;p&gt;Checkout the latest version of Cerb6 from GitHub using Git:  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git clone -b &amp;lt;version&amp;gt; git://github.com/wgm/cerb6.git cerb6-git
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Merge the copies&lt;/h2&gt;

&lt;p&gt;Remove the &lt;code&gt;.svn&lt;/code&gt; subdirectories from &lt;code&gt;storage&lt;/code&gt; and then move it to &lt;code&gt;cerb5-git&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;find cerb5-svn/storage -type d -name '.svn' -exec rm -Rf {} \;

mv -n cerb5-svn/storage/* cerb6-git/storage
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can then apply your patch to the new files:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cp cerb5-svn/my_changes.patch cerb6-git

cd cerb6-git

patch -p0 &amp;lt; my_changes.patch

rm my_changes.patch
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Finish up&lt;/h2&gt;

&lt;p&gt;If you placed any &lt;em&gt;custom&lt;/em&gt; plugins in the &lt;code&gt;/features&lt;/code&gt; directory, move them from &lt;code&gt;cerb5-svn/features&lt;/code&gt; to &lt;code&gt;cerb6-git/storage/plugins&lt;/code&gt;.  This is where all custom plugins should go in the future.  Be careful to &lt;strong&gt;not&lt;/strong&gt; copy any official plugins.&lt;/p&gt;

&lt;p&gt;Move or rename the &lt;code&gt;cerb6-git&lt;/code&gt; directory back to your desired location.&lt;/p&gt;

&lt;p&gt;Make sure all the files are owned and readable by the webserver user, and the &lt;code&gt;/storage&lt;/code&gt; directory and its contents are owned and writeable+readable by the webserver user.&lt;/p&gt;

&lt;p&gt;This might be a good time to &lt;a href="http://cerberusweb.com/support/kb/article/70-Upgrading_to_the_latest_stable_version_of_Cerb5_using_Git"&gt;upgrade to the latest version using Git&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Open Cerb6 in your web browser.&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/71</link><pubDate>Thu, 06 Dec 2012 17:16:36 GMT</pubDate><guid isPermaLink="false">e55aceb088c9c13b485e24008b276ae6</guid></item><item><title>Adding more information to the subject line of watcher relayed mail</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Often, watchers who receive copies of new helpdesk messages want to filter those messages in their email client. In earlier versions of Cerb5, the subject line for these messages was hard-coded to include an "incoming" or "outgoing" tag, and a ticket mask.  As of 5.4.3, the subject line for relayed mail defaults to the ticket subject, but you can also customize it through the interface using snippets.&lt;/p&gt;

&lt;p&gt;In this cookbook recipe, we're going to add back tags and ticket masks to the subject lines of watcher email.  With what you'll learn, you'll also be able to include any other information you want in either the subject line or message content.  For example, you can append the ticket status to the subject, or you can even include a due date or organization name.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/142c1d72-dec3-102e-b312-0030487e9650/55-virtual_attendant_relay_subjects.png" alt="" title=""&gt;&lt;/p&gt;

&lt;h1&gt;Implementation&lt;/h1&gt;

&lt;p&gt;To start, navigate to your Virtual Attendant by clicking on your name in the top right and clicking on the 'virtual attendant' link.&lt;/p&gt;

&lt;p&gt;If you haven't created Attendant behavior for relaying messages on watched tickets, do the following (if you have, skip ahead):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Under 'Create New Behavior', choose 'New Message on a Watched Conversation'.&lt;/li&gt;
&lt;li&gt;Click on the new behavior and select 'Edit Behavior' from the menu.  Enter the title 'Relay messages to my email account'.  Click the 'Save Changes' button.&lt;/li&gt;
&lt;li&gt;Now we want to filter out any messages sent by yourself.  Click on the new behavior again, and select 'Add Decision' from the menu.  Add the title 'Sent by me' and hit the 'Save Changes' button.&lt;/li&gt;
&lt;li&gt;Click on 'Sent by Me' and enter the title 'No'.  Click the 'Add Condition' button and select 'Message sender address'.  Change the dropdown from 'is' to 'is not' and enter your worker email address.  Click the 'Save Changes' button.&lt;/li&gt;
&lt;li&gt;Click on 'No' and select 'Add Actions' from the menu.  Set the title to 'Relay email'.  Under 'Add Action', select 'Relay to external email'.  Select your desired email address from the list.  If you haven't already, you can add additional email addresses to your account from your worker preferences page (click your name in the top right and then 'my settings').&lt;/li&gt;
&lt;li&gt;At this point you should be seeing the same screen whether you already had email relay behavior or you just set it up.  Now we want to customize the message being sent to us.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Set the subject to the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; [{%if is_outgoing %}outgoing{%else%}incoming{%endif%} #{{ticket_mask}}]: {{ticket_subject}}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Click the 'Test' button to make sure you entered it correctly.&lt;/p&gt;

&lt;p&gt;Here's an explanation of exactly what is going on:&lt;/p&gt;

&lt;p&gt;The conditional statement &lt;code&gt;{%if is_outgoing %}&lt;/code&gt; is checking whether or not the current message is outgoing (i.e. being sent by a worker).  If so, the word "outgoing" is added to the subject.  If not, the &lt;code&gt;{%else%}&lt;/code&gt; section is providing "incoming" as the alternate text to display.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;{{ticket_mask}}&lt;/code&gt; placeholder will display the ticket's mask, such as &lt;em&gt;ABC-12345-678&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And, finally, the &lt;code&gt;{{ticket_subject}}&lt;/code&gt; placeholder will display the ticket's subject.&lt;/p&gt;

&lt;p&gt;This should produce a ticket subject for relayed email that looks like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[incoming #ABC-12345-678]: I'd like to discuss pricing information.
&lt;/code&gt;&lt;/pre&gt;

&lt;h1&gt;More Things to Try&lt;/h1&gt;

&lt;p&gt;You could also add the sender's organization to the subject line, if you know it, by appending the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{%if sender_org_name %} ({{sender_org_name}}){%endif%}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Perhaps you'd also like to append the ticket's current status: open, waiting, closed, or deleted.  Append the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;({{ticket_status}})
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In the above examples, the important information is the {{placeholder}}, with double curly braces on either side.  I've also wrapped them in (parenthesis) for clarity, so you can tell them apart from the ticket subject.  You can change this to whatever format you want, just make sure to click the 'Test' button before you save your changes.&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/55</link><pubDate>Thu, 29 Mar 2012 10:40:31 GMT</pubDate><guid isPermaLink="false">3cd597c47db3bbaae77d7b4d8910b4f0</guid></item><item><title>Error 400 (Bad Request) with IIS</title><description>&lt;p&gt;Make sure you set up the ISAPI permissions in IIS.  From the &lt;em&gt;IIS management console&lt;/em&gt;, click into &lt;em&gt;Server-&gt;Web Service Extensions&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Select your PHP ISAPI/CGI extension and click the &lt;em&gt;Allow&lt;/em&gt; button on the left sidebar.&lt;/p&gt;

&lt;h4&gt;Keywords&lt;/h4&gt;

&lt;p&gt;Microsoft Internet Information Server&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/32</link><pubDate>Tue, 03 May 2011 22:30:09 GMT</pubDate><guid isPermaLink="false">3d6600fb5b8a09dc008cac0603cbba77</guid></item><item><title>Relaying notifications to your mobile phone with Twilio</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;This article provides instructions on how to relay all your notifications to your mobile phone using Virtual Attendants and the Twilio plugin.&lt;/p&gt;

&lt;h1&gt;Instructions&lt;/h1&gt;

&lt;h2&gt;Installing the Twilio plugin&lt;/h2&gt;

&lt;p&gt;To install the Twilio plugin, follow &lt;a href="http://www.cerberusweb.com/support/kb/article/89-Using_the_Twilio_plugin"&gt;these instructions&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Configuring your Virtual Attendant to send SMS notifications&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Click on your name in the top right and select &lt;em&gt;Virtual Attendant&lt;/em&gt; from the menu.&lt;/li&gt;
&lt;li&gt;Under &lt;em&gt;Create New Behavior&lt;/em&gt; choose &lt;em&gt;New notification for me&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;New notification for me&lt;/em&gt; bubble and select &lt;em&gt;Add Action&lt;/em&gt; from the menu.&lt;/li&gt;
&lt;li&gt;Set the title to &lt;em&gt;"Send SMS notification"&lt;/em&gt; and under &lt;em&gt;Add Action&lt;/em&gt; select &lt;em&gt;Send SMS via Twilio&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter your mobile phone number and set the content to:  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Helpdesk: {{message|truncate(130)}}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;|truncate(130)&lt;/code&gt; modifier will make sure the notification is never longer than the maximum SMS message size.  Some mobile providers will deliver messages longer than this as multiple messages, and others will reject them. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;br&gt;
&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/3b90a2f2-e201-102e-a560-0030487e9650/58-twilio_va_action.png" alt="" title=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This will automatically relay each new notification to your mobile phone.  If you want to send new notifications through SMS only in certain situations you can add a decision before the action and establish the conditions that must be met.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Keywords: text, sms, short message service&lt;/em&gt;&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/58</link><pubDate>Sun, 15 Jan 2012 23:05:05 GMT</pubDate><guid isPermaLink="false">540564a530543fcc009d989dd69626e9</guid></item><item><title>Scheduling reminders about anything using Virtual Attendants</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;We've had many requests for the ability to leave previously read notifications open as a crude reminder.  Reminders are necessary, but notifications should remain disposable so workers click on them when they pop up, instead of becoming desensitized to their novelty by always leaving a few open.&lt;/p&gt;

&lt;p&gt;Mail conversations have had the ability for quite some time to enter a &lt;em&gt;'waiting for reply'&lt;/em&gt; status until a specific future date (usually with an accompanying comment about what to do when it is revived).  If you mark a conversation as &lt;em&gt;'waiting until Monday'&lt;/em&gt; on a Friday then it serves as a reminder; however, this functionality is limited to mail when it would also be useful for records like tasks, calls, and opportunities.  It also requires conversations to be returned to &lt;em&gt;'open'&lt;/em&gt; status to serve as the reminder, which grabs the attention of all the watchers or group members instead of reminding a specific worker to do something.&lt;/p&gt;

&lt;p&gt;Tasks have also filled in for reminders in earlier versions; but without reminders about those tasks themselves you have to remember to look at your tasks all the time, and they have no way of getting your attention if you aren't logged in.  On some tasks you may want multiple reminders before the due date, and on others you may not want any.  Some tasks may be important enough you want an SMS reminder to your mobile phone -- but not about everything.&lt;/p&gt;

&lt;p&gt;Scheduled behavior in Virtual Attendants provides an elegant solution to these requirements.  You can instruct your Virtual Attendant how and when you want to be reminded about anything, and you can make these decisions for each individual record.&lt;/p&gt;

&lt;p&gt;In this example we're going to create a reusable behavior that sends a notification reminder about tasks at a future date.  The knowledge you gain from this tutorial can be applied to countless situations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE: This functionality requires Cerb5 version 5.5 or later.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;Building reminder behavior using Virtual Attendants&lt;/h1&gt;

&lt;h2&gt;Creating custom behavior&lt;/h2&gt;

&lt;p&gt;The first thing we want to do is to create a custom task behavior that generates a notification as the only action.  At this point we're not concerned about a specific task or particular time to be notified.  Once we're done we'll be able to use this custom behavior for any task and schedule it to take place at any time.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open your personal Virtual Attendant by clicking on your name in the top right of the page and selecting &lt;em&gt;Virtual Attendant&lt;/em&gt; from the menu.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/64/topmenu_va.png" alt=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on the &lt;em&gt;Create Behavior&lt;/em&gt; button.  Enter the following details and click the &lt;em&gt;Save Changes&lt;/em&gt; button.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/64/selfva_create_behavior.png" alt=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on the new event node and select &lt;em&gt;Add Actions&lt;/em&gt; from the menu.  Enter the following details and click the &lt;em&gt;Save Changes&lt;/em&gt; button.  Be sure to choose yourself in the "Notify:" section.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/64/selfva_reminder_action.png" alt=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;Scheduling a reminder&lt;/h1&gt;

&lt;p&gt;Now that you have a custom behavior that creates a task notification, let's take a look at the two most common places where you'll want to use it.&lt;/p&gt;

&lt;h2&gt;When viewing a task&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Click the &lt;em&gt;Virtual Attendant&lt;/em&gt; button when viewing a task page and select the new &lt;em&gt;Task reminder&lt;/em&gt; behavior.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/64/task_display_va.png" alt=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Specify when you want to schedule your reminder and then click the &lt;em&gt;OK&lt;/em&gt; button.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/64/task_display_va_sched.png" alt=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you schedule a reminder for &lt;em&gt;"now"&lt;/em&gt; then it will run immediately.  Otherwise you will see a new entry in the &lt;em&gt;Scheduled behavior&lt;/em&gt; section, like so:  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/64/task_display_schedule.png" alt=""&gt;&lt;/p&gt;

&lt;h2&gt;From bulk update on a task worklist&lt;/h2&gt;

&lt;p&gt;You can also schedule behavior from bulk update.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select your desired tasks in a worklist, or leave nothing selected to select all the tasks.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;bulk update&lt;/em&gt; button at the bottom of the worklist.&lt;/li&gt;
&lt;li&gt;Choose your reminder custom behavior in &lt;em&gt;Behavior&lt;/em&gt;, and schedule the behavior in &lt;em&gt;When&lt;/em&gt;.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/64/task_bulk_va.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Scheduled behavior that is initiated from bulk update will run in a background queue to reduce the impact on performance.  For this reason, it may take a few minutes for your changes to take effect if they are applied to a long worklist.&lt;/p&gt;

&lt;h1&gt;Where to go from here&lt;/h1&gt;

&lt;h2&gt;SMS notifications&lt;/h2&gt;

&lt;p&gt;You can use our &lt;a href="https://github.com/cerb5-plugins/wgm.twilio"&gt;Twilio&lt;/a&gt; or &lt;a href="https://github.com/cerb5-plugins/wgm.clickatell"&gt;Clickatell&lt;/a&gt; plugins to send reminders directly to your mobile devices through SMS.  This is useful for high priority reminders -- like important phone calls that must take place at a specific time.  You can create multiple custom behaviors with different methods of getting your attention and then schedule the most appropriate one.&lt;/p&gt;

&lt;p&gt;See: &lt;a href="http://www.cerberusweb.com/support/kb/article/88-Sending_scheduled_reminders_to_your_mobile_phone_using_Virtual_Attendants_and_Twilio"&gt;Sending scheduled reminders to your mobile phone using Virtual Attendants and Twilio&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Task due date escalation&lt;/h2&gt;

&lt;p&gt;You can create custom behavior to notify you once per day leading up to a task's due date -- perhaps with notifications only starting three days prior to the final due date.  If the due date is reached without the task being marked as completed then you can escalated to a higher priority reminder like an SMS message.  This is easy to do if you have custom behavior reschedule itself with a time like &lt;em&gt;"tomorrow 8am"&lt;/em&gt;.  You can add conditions to the custom behavior to check if the task is completed already, and if the due date has elapsed.&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/64</link><pubDate>Sun, 15 Jan 2012 22:46:21 GMT</pubDate><guid isPermaLink="false">8fd465ed4140b0e2738e20d1fecbaf0d</guid></item><item><title>Automatically closing conversations that wait too long for a contact reply</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;The &lt;em&gt;'waiting for reply'&lt;/em&gt; status on conversations provides a simple way to de-clutter by temporarily hiding conversations that need a response from one of your contacts before continuing.  Generally, things that are &lt;em&gt;waiting for reply&lt;/em&gt; either are awaiting additional information, or they require a confirmation from the contact that their issue has been adequately resolved.  In the latter case, some contacts will never write back to let you know that their issue is fixed.  It's not preferable to keep conversations in &lt;em&gt;waiting for reply&lt;/em&gt; status forever, and it's tedious to constantly follow-up with each one before closing it.&lt;/p&gt;

&lt;p&gt;With Virtual Attendants and scheduled behavior you can automate the lifecycle of conversations that are waiting for reply.  In this article we'll build a custom behavior to close an idle conversation after 3 days if a worker never hears back from a contact.  For simplicity of demonstration, we'll also automatically schedule this behavior every time a worker replies to a conversation.  In practice, your team may want to confine the use of auto-close behavior to only situations where you feel you have satisfactorily addressed the issue but want to give contacts a couple days to let you know if they need additional help.  This is especially useful in an environment that charges contacts &lt;em&gt;per incident&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The following examples may seem overly complex for the objective of closing tickets that are left waiting too long; and it's true that you could simply run a bulk update from search results, or create a plugin that runs a simple SQL query in the database.  The important thing to realize with this approach is the level of customizability you have in configuring Virtual Attendant behavior.  This is often called "emergent behavior" because you are creatively using a set of existing tools to solve new problems.  If we provided a rigid feature to automatically close waiting tickets, you may want two warnings before closing tickets and we may have only provided the option for one; or you may want to notify customers through a method other than email, and you'd have to modify the source code yourself (causing problems during future updates).&lt;/p&gt;

&lt;p&gt;Virtual Attendants allow you to build complex business automation behavior without touching a single line of code.  The experience you gain by learning to take advantage of them will free you from "one size fits all" solutions that force you to adapt to the narrow confines of features.  Instead you will mold Cerb5 to work in the way most convenient for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE: This functionality requires Cerb5 version 5.5 or later.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;Configuring the group Virtual Attendant&lt;/h1&gt;

&lt;p&gt;We'll need to define two custom behaviors.  One will send our contact a notification about the impending closure of their ticket.  The second one will actually close it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on &lt;em&gt;groups&lt;/em&gt; from the top right of the navigation menu.&lt;/li&gt;
&lt;li&gt;Select the group where you want to automatically close tickets that wait too long.&lt;/li&gt;
&lt;li&gt;Click on the &lt;em&gt;Virtual Attendants&lt;/em&gt; tab.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Creating the auto-close behavior&lt;/h2&gt;

&lt;p&gt;We'll create the auto-close behavior first.  It's common to build a series of dependent behaviors in reverse order because each behavior needs to schedule the one that follows it.  If that concept doesn't make sense it should by the end of the example.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click the &lt;em&gt;Create Behavior&lt;/em&gt; button.  Enter the following details before clicking &lt;em&gt;Save Changes&lt;/em&gt;.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/65/new_behavior_close.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Click the new event node and select &lt;em&gt;Add Decision&lt;/em&gt; from the menu.  Title the new decision "Is it waiting for reply?" and &lt;em&gt;Save Changes&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the new decision node and select &lt;em&gt;Add Outcome&lt;/em&gt; from the menu.  Enter the following details before clicking &lt;em&gt;Save Changes&lt;/em&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/65/new_close_outcome.png" alt=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on the new &lt;em&gt;'Yes'&lt;/em&gt; outcome node and select &lt;em&gt;Add Actions&lt;/em&gt; from the menu.  Enter the following actions before clicking &lt;em&gt;Save Changes&lt;/em&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/65/new_close_actions.png" alt=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Creating the idleness warning behavior&lt;/h2&gt;

&lt;p&gt;We could use the existing behavior as-is, but it's probably preferable to give our contacts a warning before we automatically close the conversation.  Now we'll create a new behavior that sends an idleness warning and then schedules the auto-close behavior that we created above.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Click the &lt;em&gt;Create Behavior&lt;/em&gt; button.  Enter the following details before clicking the &lt;em&gt;Save Changes&lt;/em&gt; button.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/65/new_behavior_idle.png" alt=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;Click on the new event node and select &lt;em&gt;Add Decision&lt;/em&gt; from the menu.  Title it &lt;em&gt;"Is it waiting for reply?"&lt;/em&gt; and click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the new decision node and select &lt;em&gt;Add Outcome&lt;/em&gt; from the menu.  Enter the following details and then &lt;em&gt;Save Changes&lt;/em&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/65/new_idle_outcome.png" alt=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the new outcome node and select &lt;em&gt;Add Actions&lt;/em&gt; from the menu.  Enter the following details before clicking &lt;em&gt;Save Changes&lt;/em&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/65/new_idle_actions.png" alt=""&gt;&lt;br&gt;
Notice in the &lt;em&gt;"If duplicate behavior is scheduled"&lt;/em&gt; section we've selected &lt;em&gt;"Only schedule latest occurrence"&lt;/em&gt;.  In the event that multiple auto-close behaviors are scheduled we only want to use the one with the latest date to give our contact the most time to reply.  This may happen if the contact only replies when they receive the idleness warning, and this goes on through several exchanges.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;Scheduling the idleness warning behavior after worker replies&lt;/h1&gt;

&lt;p&gt;At this point you could manually schedule the idleness warning behavior from each record or by using bulk update on a worklist.  To simplify things, let's automatically schedule the behavior every time a worker replies to a group conversation and marks it as &lt;em&gt;waiting for reply&lt;/em&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Click the &lt;em&gt;Create Behavior&lt;/em&gt; button and enter the following details before clicking &lt;em&gt;Save Changes&lt;/em&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/65/new_behavior_schedule.png" alt=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;Click the event node and select &lt;em&gt;Add Decision&lt;/em&gt; from the menu.  Title it "Is it waiting for reply?" and click &lt;em&gt;Save Changes&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the new decision node and select &lt;em&gt;Add Outcome&lt;/em&gt; from the menu.  Enter the following details before clicking &lt;em&gt;Save Changes&lt;/em&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/65/new_schedule_outcome.png" alt=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on the new &lt;em&gt;'Yes'&lt;/em&gt; outcome node and select &lt;em&gt;Add Actions&lt;/em&gt; from the menu.  Enter the following actions before clicking &lt;em&gt;Save Changes&lt;/em&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/65/new_schedule_actions.png" alt=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now when your workers reply to a conversation and mark it as &lt;em&gt;waiting for reply&lt;/em&gt;, an idleness warning will be scheduled for 3 days in the future.  If the contact doesn't reply within 3 days the idleness warning will be sent and an auto-close behavior will be scheduled for 2 days in the future.  If the contact still doesn't reply within 2 additional days the conversation will be closed and the contact will be notified.  If the contact replies at any point the scheduled behavior will be ignored.&lt;/p&gt;

&lt;h1&gt;Unscheduling behavior to restart the chain of events&lt;/h1&gt;

&lt;p&gt;You can explicitly unschedule behavior when a contact responds to a conversation. This isn't strictly necessary in this example for a few reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Our behavior ensures the status is &lt;em&gt;waiting for reply&lt;/em&gt; before doing anything.  If the ticket is reopened, or prematurely closed, our behavior will simply be ignored.&lt;/li&gt;
&lt;li&gt;If the worker and contact exchange replies several times in a row, our custom behavior will always be scheduled for 3 days in the future from the latest contact.  This replaces any earlier scheduled behavior of the same type.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, it's still possible in rare situations for something like the following chain of events to occur:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A worker replies to a contact's new conversation.&lt;/li&gt;
&lt;li&gt;After 3 days of idleness the contact hasn't replied and the idleness warning behavior runs, scheduling the auto-close behavior in 2 days.&lt;/li&gt;
&lt;li&gt;After a few hours the contact replies and the ticket is reopened.&lt;/li&gt;
&lt;li&gt;If the workers do nothing for nearly 2 days then the auto-close behavior will be ignored because the conversation is &lt;em&gt;open&lt;/em&gt;.  However, it's much more likely that the workers will reply almost immediately and a new idle warning will be scheduled when the conversation returns to &lt;em&gt;waiting&lt;/em&gt; status.&lt;/li&gt;
&lt;li&gt;The auto-close behavior is still scheduled.  If the ticket remains waiting for another day then the auto-close behavior would run &lt;em&gt;before&lt;/em&gt; the second idleness warning.  This is undesirable because a reply from the customer should start the whole sequence of events over again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To correct this, you can add an &lt;em&gt;Unschedule behavior&lt;/em&gt; action in one of two places:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When a contact replies to a conversation, clear any idleness or auto-close behavior.&lt;/li&gt;
&lt;li&gt;When a worker replies, clear any auto-close behavior since it will be added automatically by the idleness behavior.  The idleness behavior is already replacing any other instances of itself.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;Where to go from here&lt;/h1&gt;

&lt;h2&gt;Combining the idleness warning and auto-close behavior&lt;/h2&gt;

&lt;p&gt;For simplicity this article creates several behaviors.  You could combine the idleness warning and auto-closure into a single behavior.  After determining that the conversation is &lt;em&gt;waiting for reply&lt;/em&gt; as an outcome of the first decision, a second decision could be made to determine if the message has been idle for more than 5 days, and if not, check if it has been idle for more than 3 days.  At 5 days without a contact response we'd do the auto-close actions, and at 3 days we'd do the idleness warning.  Instead of scheduling the auto-close behavior from the idleness warning we'd just reschedule the same behavior for a duration long enough to trigger the auto-close but not short enough to send the idleness warning again.  This would remove the need to unschedule the alternate behavior, but it's more complicated to understand for someone just becoming familiar with scheduled behavior loops.&lt;/p&gt;

&lt;p&gt;The combined behavior would look something like this:  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/65/new_combined_behavior.png" alt=""&gt;&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/65</link><pubDate>Mon, 08 Aug 2011 12:40:29 GMT</pubDate><guid isPermaLink="false">f39a292af3440efffead7eed2d3aff40</guid></item><item><title>Setting up a Cerb5 local development environment</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;We recommend that each developer maintains a local web environment on their development machine with a self-contained webserver, database, and dummy mail server.  This article will explain how to accomplish this using the same toolset as the official developers.&lt;/p&gt;

&lt;h1&gt;Installing Eclipse as your Integrated Development Environment (IDE)&lt;/h1&gt;

&lt;p&gt;We recommend using Eclipse as your IDE, along with the PHP Development Tools (PDT) plugin.&lt;/p&gt;

&lt;p&gt;There was no PDT package for the latest Eclipse 3.7 (Indigo) release, so you'll need to download Eclipse Classic and then install the PDT plugin manually.&lt;/p&gt;

&lt;h2&gt;Installing Eclipse&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.eclipse.org/downloads/"&gt;Download Eclipse Classic&lt;/a&gt; for your platform.&lt;/li&gt;
&lt;li&gt;Extract it.&lt;/li&gt;
&lt;li&gt;Run it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You'll be prompted to create a new workspace directory (e.g. "php5-workspaces").  Choose a location that is convenient for you; it does not need to be in the same place where your web-accessible files are located.&lt;/p&gt;

&lt;h2&gt;Installing PDT&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;em&gt;Help&lt;/em&gt; menu and select &lt;em&gt;Install New Software&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;In the &lt;em&gt;Work With:&lt;/em&gt; dropdown, select "Indigo - http://download.eclipse.org/releases/indigo"&lt;/li&gt;
&lt;li&gt;In the &lt;em&gt;filter&lt;/em&gt; box, type "pdt" and hit ENTER.&lt;/li&gt;
&lt;li&gt;Check "PHP Development Tools" under &lt;em&gt;Programming Languages&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Next&lt;/em&gt; button twice.&lt;/li&gt;
&lt;li&gt;Accept the software terms and click the &lt;em&gt;Finish&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;When prompted to restart Eclipse, select &lt;em&gt;Restart Now&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/66/eclipse_install_pdt.png" alt="" title=""&gt;&lt;/p&gt;

&lt;h1&gt;Installing a web environment with Apache, MySQL, and PHP&lt;/h1&gt;

&lt;p&gt;Your local development machine should have the following services available:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Webserver (e.g. Apache, Nginx, lighttpd, IIS)&lt;/li&gt;
&lt;li&gt;MySQL Server 5.x+&lt;/li&gt;
&lt;li&gt;PHP 5.2+

&lt;ul&gt;
&lt;li&gt;Extensions: curl, imap, mailparse, mbstring&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are countless ways to install and maintain a local server:&lt;/p&gt;

&lt;h2&gt;XAMPP&lt;/h2&gt;

&lt;p&gt;One of the easiest ways to install a local webserver for PHP development is to use &lt;a href="http://www.apachefriends.org/en/xampp.html"&gt;XAMPP&lt;/a&gt;.  This will provide Apache, MySQL, and PHP.  Installers are available for Linux, Mac OS X, Solaris, and Windows.&lt;/p&gt;

&lt;h2&gt;MacPorts&lt;/h2&gt;

&lt;p&gt;If you're using a Mac, you can use &lt;a href="http://www.macports.org/"&gt;MacPorts&lt;/a&gt; to install these applications in &lt;code&gt;/opt&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo port install apache2 php5 mysql5-server
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Unix&lt;/h2&gt;

&lt;p&gt;If you're using a Unix-based operating system, use your distribution's package manager (e.g. apt-get, yum) to install these applications.&lt;/p&gt;

&lt;p&gt;In Debian/Ubuntu:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apt-get install apache2 mysql-server php5
&lt;/code&gt;&lt;/pre&gt;

&lt;h1&gt;Installing a dummy mail server&lt;/h1&gt;

&lt;p&gt;Your development machine can use an existing mailserver, although you often want to remove the possibility of accidentally sending test messages to real recipients; especially if you're developing using a copy of your live data.  This is best accomplished with a dummy SMTP server on a non-standard port (e.g. &lt;code&gt;2525&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;There are a couple different options for a fake mail server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install &lt;a href="http://www.postfix.org/"&gt;Postfix&lt;/a&gt; using your package manager and set up a null transport.&lt;/li&gt;
&lt;li&gt;If you're using a Mac, install our &lt;a href="https://github.com/jstanden/fakesmtp-app"&gt;FakeSMTP&lt;/a&gt; project.  This will listen for SMTP connections on an arbitrary port (&lt;code&gt;2525&lt;/code&gt; by default) and provide an easy way to inspect outgoing mail without actually delivering anything.&lt;/li&gt;
&lt;li&gt;Python provides a dummy SMTP server by default:&lt;br&gt;
&lt;code&gt;sudo python -m smtpd -n -c DebuggingServer localhost:2525&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;Installing Git&lt;/h1&gt;

&lt;p&gt;We use &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; for distributed source control and versioning.  You can test if Git is currently installed by running the command:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git --version
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If Git is not installed, you can download the latest version for your platform from:  &lt;a href="http://git-scm.com/download"&gt;http://git-scm.com/download&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;Pulling the project files from GitHub&lt;/h1&gt;

&lt;p&gt;Our &lt;a href="https://github.com/wgm/cerb5"&gt;project&lt;/a&gt; and &lt;a href="https://github.com/cerb5-plugins/repositories"&gt;plugins repositories&lt;/a&gt; are hosted on &lt;a href="http://www.github.com"&gt;GitHub&lt;/a&gt;.  You don't need a GitHub account to simply download our project files, but we recommend creating one so you can take advantage of the collaborative tools.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the web-accessible directory for the appropriate virtual host (or default) of your local webserver.  For example, if you're using Apache this path is usually something like &lt;code&gt;/var/www/&lt;/code&gt;.  In Windows Server with IIS it may be &lt;code&gt;C:\Inetpub\&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Selecting a repository&lt;/h2&gt;

&lt;p&gt;We have two main repositories for the project.  The &lt;strong&gt;wgm/cerb5.git&lt;/strong&gt; repository is a &lt;em&gt;fork&lt;/em&gt; of &lt;strong&gt;jstanden/cerb5.git&lt;/strong&gt;.  The &lt;strong&gt;jstanden&lt;/strong&gt; repository is where development and integration actually take place.  During a stable release, the progress from &lt;strong&gt;jstanden&lt;/strong&gt; is &lt;em&gt;pushed&lt;/em&gt; to the &lt;strong&gt;wgm&lt;/strong&gt; repository for public consumption.  Most people will only need to use the latter.&lt;/p&gt;

&lt;h3&gt;If you're only developing third-party plugins...&lt;/h3&gt;

&lt;p&gt;If you only intend to work on your own custom plugins then you can anonymously use our repositories.&lt;/p&gt;

&lt;p&gt;For access to stable releases, issue the following command at the console:&lt;br&gt;
  &lt;code&gt;git clone https://github.com/wgm/cerb5.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Otherwise, for access to development builds, issue the following command instead:&lt;br&gt;
  &lt;code&gt;git clone https://github.com/jstanden/cerb5.git&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;If you plan to contribute to Cerb5, and work on plugins...&lt;/h3&gt;

&lt;p&gt;If you plan to contribute patches (e.g. bug fixes) to the Cerb5 project, in addition to working on custom plugins, we recommend that you &lt;em&gt;fork&lt;/em&gt; the project on GitHub.  This will create your own copy of our official repository that you can &lt;em&gt;commit&lt;/em&gt; (save) your changes to.  It also makes it easier for us to view and integrate those changes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/signup/free"&gt;Create a free account at GitHub&lt;/a&gt; if you don't already have one.&lt;/li&gt;
&lt;li&gt;Once logged in, browse to &lt;a href="https://github.com/jstanden/cerb5"&gt;https://github.com/jstanden/cerb5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Fork&lt;/em&gt; button in the top right.  This will create your own personal repository for making modifications to Cerb5.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/66/github_fork_button.png" alt="" title=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When your repository is created, use the credentials from the SSH section on your page at GitHub to download your files.&lt;/p&gt;

&lt;p&gt;For example (replace &lt;code&gt;&amp;lt;you&amp;gt;&lt;/code&gt; with your account at GitHub):  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git clone git@github.com:&amp;lt;you&amp;gt;/cerb5.git
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Git graphical user interfaces&lt;/h2&gt;

&lt;p&gt;You can also use a graphical Git client like &lt;a href="http://code.google.com/p/tortoisegit/"&gt;TortoiseGit&lt;/a&gt; for Windows or &lt;a href="http://www.git-tower.com/"&gt;Tower.app&lt;/a&gt; for Mac; however, it is worth becoming proficient with the command line interface to Git since it will always provide you with full functionality.  Git also comes with a simple GUI for managing your repository which can be accessed with the &lt;code&gt;git gui&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;At WebGroup Media (WGM), we develop on Macs and use GitX to make it easy to visually audit changes before staging and committing them.  Everything else is accomplished from the command line.&lt;/p&gt;

&lt;h1&gt;Importing the Cerb5 project in Eclipse&lt;/h1&gt;

&lt;p&gt;At this point, you will have a copy of the project in a web-accessible path.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Eclipse.&lt;/li&gt;
&lt;li&gt;Open the &lt;em&gt;File&lt;/em&gt; menu and select &lt;em&gt;Import&lt;/em&gt;.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/66/eclipse_pkg_explorer_import.png" alt="" title=""&gt;&lt;/li&gt;
&lt;li&gt;Expand &lt;em&gt;General&lt;/em&gt; and select &lt;em&gt;Existing Projects into Workspace&lt;/em&gt;.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/66/eclipse_import_existing.png" alt="" title=""&gt;&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Next&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Browse&lt;/em&gt; button next to &lt;em&gt;Select root directory:&lt;/em&gt; and select the &lt;code&gt;cerb5&lt;/code&gt; directory from your webserver's web-accessible path.  Click the &lt;em&gt;Open&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;The Cerb5 project should automatically be detected by Eclipse.  Click the &lt;em&gt;Finish&lt;/em&gt; button at the bottom of the popup window.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It may take a few minutes to index the project the first time you open it.  This process will enable many useful features like API autocompletion.&lt;/p&gt;

&lt;h1&gt;Configuring Eclipse for PHP development&lt;/h1&gt;

&lt;h2&gt;Perspective&lt;/h2&gt;

&lt;p&gt;If you see something other than &lt;em&gt;PHP&lt;/em&gt; for the perspective in the top right, open the &lt;em&gt;Window&lt;/em&gt; menu, select &lt;em&gt;Open Perspective-&gt;Other...&lt;/em&gt; and double-click &lt;em&gt;PHP&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;*.tpl files&lt;/h2&gt;

&lt;p&gt;Our Smarty-based template files use the *.tpl file extension, which is not associated with the HTML editor in Eclipse by default.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Eclipse's preferences.&lt;/li&gt;
&lt;li&gt;Expand &lt;em&gt;General&lt;/em&gt; from the tree on the left and select &lt;em&gt;Content Types&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Expand &lt;em&gt;Text&lt;/em&gt; on the right and select &lt;em&gt;HTML&lt;/em&gt;.  Click the &lt;em&gt;Add&lt;/em&gt; button below, enter &lt;code&gt;*.tpl&lt;/code&gt; and click the &lt;em&gt;OK&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;OK&lt;/em&gt; button at the bottom of the popup window.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Validation&lt;/h2&gt;

&lt;h3&gt;HTML&lt;/h3&gt;

&lt;p&gt;By default, Eclipse PDT will output several HTML validation warnings.  To suppress these:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open up Eclipse's &lt;em&gt;Properties&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;em&gt;Validation&lt;/em&gt; from the tree on the left of the popup.&lt;/li&gt;
&lt;li&gt;Click the "&lt;strong&gt;...&lt;/strong&gt;" button to the right of _HTML Syntax Validator`.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/66/eclipse_prefs_validation_html.png" alt="" title=""&gt;

&lt;ol&gt;
&lt;li&gt;Click the &lt;em&gt;Add Exclude Group&lt;/em&gt; button to the right of the popup.&lt;/li&gt;
&lt;li&gt;Highlight &lt;em&gt;Exclude Group&lt;/em&gt; on the left and click the &lt;em&gt;Add Rule...&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Select &lt;em&gt;File Extension&lt;/em&gt; and click the &lt;em&gt;Next&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Enter the extension &lt;code&gt;tpl&lt;/code&gt; and click the &lt;em&gt;Finish&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;OK&lt;/em&gt; button.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Click the "&lt;strong&gt;...&lt;/strong&gt;" button to the right of _HTML Syntax Validator (for PHP Files)`.

&lt;ol&gt;
&lt;li&gt;Click the &lt;em&gt;Add Exclude Group&lt;/em&gt; button to the right of the popup.&lt;/li&gt;
&lt;li&gt;Highlight &lt;em&gt;Exclude Group&lt;/em&gt; on the left and click the &lt;em&gt;Add Rule...&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Select &lt;em&gt;Folder or File Name&lt;/em&gt; and click the &lt;em&gt;Next&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Enter the filename &lt;code&gt;devblocks-dao.php&lt;/code&gt; and click the &lt;em&gt;Finish&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;OK&lt;/em&gt; button.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;OK&lt;/em&gt; button at the bottom of the popup and let Eclipse refresh validation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;XML&lt;/h3&gt;

&lt;p&gt;There will also be a few XML validation errors from &lt;code&gt;cerb5_lang_*.xml&lt;/code&gt; translation files due to missing schemas.  To suppress these:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Eclipse's preferences.&lt;/li&gt;
&lt;li&gt;Expand &lt;em&gt;XML-&gt;XML Files&lt;/em&gt; in the tree on the left and select &lt;em&gt;Validation&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;On the &lt;em&gt;No grammar specified&lt;/em&gt; option change &lt;em&gt;Warning&lt;/em&gt; to &lt;em&gt;Ignore&lt;/em&gt;.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/66/eclipse_prefs_xml_grammar.png" alt="" title=""&gt;&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;OK&lt;/em&gt; button and let Eclipse refresh validation.&lt;/li&gt;
&lt;/ol&gt;
</description><link>http://cerberusweb.com/support/kb/article/66</link><pubDate>Tue, 11 Oct 2011 18:35:39 GMT</pubDate><guid isPermaLink="false">c6a1a5f8562c203e83e370ecd4aa37fe</guid></item><item><title>What is the privacy policy for Cerb5 and On-Demand services?</title><description>&lt;h1&gt;Privacy Statement and Disclosure&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;WebGroup Media LLC&lt;/strong&gt; (&#x201C;WGM&#x201D;) is a commercial open source company that
has been leading and supporting the community development of Cerb6
(formerly Cerberus Helpdesk) since January 2002. In connection with this
business, we operate the &lt;a href="http://cerberusweb.com"&gt;cerberusweb.com&lt;/a&gt;
project website, as well as an On-Demand (&#x201C;software as a service&#x201D;)
network of applications hosted by subscription as subdomains of
cerb4.com, cerb5.com, and cerb6.com.&lt;/p&gt;

&lt;p&gt;It is WGM&#x2019;s policy to respect your privacy regarding any information we
may collect while operating our websites and services. We do not sell
any personally identifiable information or data stored by On-Demand
services to third-parties. We do not directly share your information
with third-parties without explicit permission except to comply with the
law or to provide necessary infrastructure in connection with the
services you request; however, there is some passive risk of exposure to
third-party access inherent in web-based services that is outlined in
detail below. We do our best to mitigate and minimize these risks on
your behalf.&lt;/p&gt;

&lt;h2&gt;Website Visitors&lt;/h2&gt;

&lt;p&gt;Like most website operators, WGM collects non-personally identifying
information of the sort that web browsers and servers typically make
available, such as the browser type, language preference, referring
site, and the date and time of each visitor request. WGM&#x2019;s purpose in
collecting non-personally identifying information is to better
understand how WGM&#x2019;s visitors use its website. From time to time, WGM
may release non-personally identifying information in the aggregate;
e.g., by publishing a report on trends in the usage of its website.&lt;/p&gt;

&lt;p&gt;WGM also collects potentially personally identifying information like
Internet Protocol (IP) addresses for website visitors and workers. WGM
only discloses IP addresses under the same circumstances that it uses
and discloses personally identifying information as described below.&lt;/p&gt;

&lt;h2&gt;Gathering of Personally Identifying Information&lt;/h2&gt;

&lt;p&gt;Certain visitors to WGM&#x2019;s websites choose to interact in ways that
require us to gather personally identifying information. The amount and
type of information that WGM gathers depends on the nature of the
interaction. For example, we ask workers who sign up for On-Demand
services to provide an email address. Those who engage in financial
transactions with WGM (e.g. by purchasing products and services) are
asked to provide additional information, including as necessary the
personal and financial information required to process those
transactions. In each case, WGM collects such information only insofar
as is necessary or appropriate to fulfill the purpose of the visitor&#x2019;s
interaction with WGM. WGM does not disclose personally identifying
information other than as described below. Visitors can always refuse to
supply personally identifying information, with the caveat that it may
prevent them from purchasing or engaging in certain services.&lt;/p&gt;

&lt;h2&gt;Aggregated Statistics&lt;/h2&gt;

&lt;p&gt;WGM may collect statistics about the behavior of visitors to its
websites or workers of its On-Demand software. For instance, WGM may
gather metrics about individual Cerb instances like the number of
workers, addresses, conversations, messages, and attachments; the
composition of file attachments such as distributions of sizes or file
types; or the amount of activity over a given time period. This
information is used to improve the usability and performance of products
and services provided by WGM.&lt;/p&gt;

&lt;p&gt;WGM may display this aggregate, anonymous information publicly or
provide it to others. However, WGM does not disclose personally
identifying information other than as described below.&lt;/p&gt;

&lt;h2&gt;Protection of Certain Personally Identifying Information&lt;/h2&gt;

&lt;p&gt;WGM discloses personally identifying information only to those of its
employees, contractors and affiliated organizations that (i) need to
know that information in order to process it on WGM&#x2019;s behalf or to
provide products and services available at WGM&#x2019;s websites, and (ii) that
have agreed not to disclose it to others. Some of those employees,
contractors, and affiliated organizations may be located outside of your
home country; and by using WGM&#x2019;s websites, you consent to the transfer
of such information to them. WGM will not rent or sell potentially
personally identifying and personally identifying information to anyone.
Other than to its employees, contractors and affiliated organizations,
as described above, WGM discloses personally identifying information
only in response to a subpoena, court order, or other governmental
request, or when WGM believes in good faith that disclosure is
reasonably necessary to protect the property or rights of WGM, third
parties, or the public at large.&lt;/p&gt;

&lt;p&gt;If you are a registered user of a WGM product or service like Cerb and
have supplied your email address, WGM may occasionally send you an email
to tell you about new features or to solicit your feedback. We primarily
use our social network profiles to communicate this type of information,
and we expect to keep email broadcasts to a minimum. If you send us a
request (e.g. via a support email or one of our feedback mechanisms), we
reserve the right to anonymously republish it in order to help us
clarify or respond to your request, or to help us support other users.
WGM takes all measures reasonably necessary to protect against the
unauthorized access, use, alteration or destruction of potentially
personally identifying information.&lt;/p&gt;

&lt;h2&gt;Security and Safeguards&lt;/h2&gt;

&lt;p&gt;WGM takes reasonable precautions to protect your data and personally
identifying information.&lt;/p&gt;

&lt;p&gt;We do not have physical access to any of our servers or online storage
mediums. See the section about &#x201C;Third-Party Data Centers&#x201D; for the
upstream security policies of SoftLayer, Amazon Web Services, and
Linode. These servers are protected within state-of-the-art data
centers.&lt;/p&gt;

&lt;p&gt;WGM performs 24/7/365 monitoring of our network and service
infrastructure. This includes metrics like server load, process
information, account access, service utilization, and network activity.&lt;/p&gt;

&lt;p&gt;Web-based communication with our servers is protected through 256-bit
encryption via Secure Socket Layer (SSL) technology. This feature is
included with all On-Demand applications when URLs are prefixed with
&#x201C;&lt;a href="https://"&gt;https://&lt;/a&gt;&#x201D;. It is the responsibility of clients and their
representatives to ensure the use of SSL; and upon request we can
configure your application to require the use of SSL.&lt;/p&gt;

&lt;p&gt;We do not store credit card information on our servers. For one-time
transactions we do not save credit card or bank account numbers
anywhere, although we do store email-based receipts that include contact
information, payment type, transaction IDs, and authorization codes. For
recurring transactions, payment information is stored with vendors who
adhere to the Payment Card Industry Data Security Standards (PCI DSS).
We use &lt;a href="http://www.freshbooks.com"&gt;FreshBooks&lt;/a&gt; for sending invoices and
collecting payments, and they protect financial information with AES
encryption. We process credit card transactions through our merchant
account at Authorize.net. Depending on a client&#x2019;s preferred payment
method, these transactions may alternatively take place through other
vendors like PayPal, or through wire transfers to Wells Fargo Bank. We
do not have access to client credit card numbers or bank account
information through any of these vendors.&lt;/p&gt;

&lt;p&gt;WGM technicians securely access our servers using Secure Shell (SSH)
encryption. Logins are authenticated with &lt;a href="http://en.wikipedia.org/wiki/RSA_(algorithm)"&gt;RSA
keys&lt;/a&gt; rather than simple
passwords. We do not provide general purpose client access (e.g. SSH,
Telnet, FTP) to machines housing multi-tenant On-Demand data.&lt;/p&gt;

&lt;p&gt;We have disabled insecure features in our PHP environment (e.g. process
control, shell command execution, remote file includes) to protect
against arbitrary code execution. To protect against cross-site
scripting (XSS), we
&#x201C;&lt;a href="http://en.wikipedia.org/wiki/HTML#Character_and_entity_references"&gt;escape&lt;/a&gt;&#x201D;
all user-provided data that is displayed in a web browser.&lt;/p&gt;

&lt;h2&gt;Disclosure of Security Breaches&lt;/h2&gt;

&lt;p&gt;WGM will notify you as soon as possible if a security breach results in
the potential disclosure of any personally identifiable information or
data related to your account. At the conclusion of a security
investigation, WGM will provide you with a report about the nature of
any compromised data (e.g. email addresses, worker account passwords)
and the actions taken to prevent future intrusions.&lt;/p&gt;

&lt;h2&gt;Third-Party Data Centers, Cloud Computing, and Virtualization&lt;/h2&gt;

&lt;p&gt;WGM remotely provisions, administers, and maintains servers in various
data centers throughout the world and WGM does not maintain a physical
presence in any of them. Most On-Demand services are currently provided
from machines exclusively leased and operated by WGM from SoftLayer in
their Seattle and Dallas facilities. However, other services, like our
project portal, are provided from virtual servers in cloud computing and
storage environments at Amazon Web Services, Linode, and Slicehost
(Rackspace Cloud). In virtual environments, many users from various
organizations share a pool of resources like computational power and
storage capacity, although provisioned resources are isolated from one
another to a similar degree as leased machines in a datacenter.&lt;/p&gt;

&lt;p&gt;Due to the remote nature of leased servers, colocation, cloud computing,
and virtualization, authorized technicians from our vendors and service
providers may have temporary access to our servers in order to perform
physical maintenance and upgrades, or to provide hands-on assistance
with troubleshooting issues like RAID degradation and hardware failures.&lt;/p&gt;

&lt;p&gt;In such events we defer to upstream privacy policies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.softlayer.com/legal/privacy"&gt;http://www.softlayer.com/legal/privacy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aws.amazon.com/privacy/"&gt;http://aws.amazon.com/privacy/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.slicehost.com/privacy"&gt;http://www.slicehost.com/privacy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linode.com/privacy.cfm"&gt;http://www.linode.com/privacy.cfm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.rackspace.com/information/legal/privacystatement.php"&gt;http://www.rackspace.com/information/legal/privacystatement.php&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Backups&lt;/h2&gt;

&lt;p&gt;Cerb has two main components for storing customer data: (1) the
database, and (2) the /storage/ filesystem which contains large,
immutable content like email attachments. Data may be stored on a single
machine, or distributed among several machines, on our On-Demand
network. Generally, that data will be housed on WGM&#x2019;s dedicated servers
in SoftLayer&#x2019;s datacenters.&lt;/p&gt;

&lt;p&gt;If you communicate with WGM, or use On-Demand services provided by WGM,
your information will be regularly copied for the express purpose of
maintaining backups for continuity and disaster recovery. Nightly
backups and redundant storage are kept on machines controlled remotely
by WGM. Backups may be transferred to Amazon&#x2019;s Simple Storage Service
(S3) for long-term, off-site archival.&lt;/p&gt;

&lt;p&gt;When WGM runs nightly backups, we make full backups of the database, and
incremental backups of the /storage/ filesystem. These are stored in the
same datacenter, and are often attached to the same server, but on an
alternate, redundant storage medium.&lt;/p&gt;

&lt;p&gt;Twice per week (usually Wednesday and Sunday) we off-site the latest
backups to our private buckets on Amazon&#x2019;s S3 service. We also rotate
these to keep a weekly backup for a few months of history, and at least
the most recent three backups.&lt;/p&gt;

&lt;h2&gt;Disposal of Data and Backups&lt;/h2&gt;

&lt;p&gt;Upon cancellation, we remove all client data from the On-Demand network
and send a final backup to Amazon S3. We will attempt to make
arrangements for this backup to be transferred to the client before
permanently destroying our copies of the data. Without an explicit
request for their immediate removal, backups may be persisted for
several months.&lt;/p&gt;

&lt;p&gt;We will comply with any written, and duly authenticated, client requests
for the immediate destruction of all account data and backups.&lt;/p&gt;

&lt;h2&gt;Testimonials&lt;/h2&gt;

&lt;p&gt;WGM displays a list of clients and testimonials on our websites. We do
not disclose the names of licensed organizations, or their
representatives, without explicit permission, except in the event that a
client freely discloses their identity through postings on public forums
or social networks.&lt;/p&gt;

&lt;h2&gt;Cookies&lt;/h2&gt;

&lt;p&gt;A cookie is a string of information that a website stores on a visitor&#x2019;s
computer, and that the visitor&#x2019;s browser provides to the website each
time the visitor returns. WGM uses cookies to help WGM identify and
track visitors, their usage of WGM website, and their website access
preferences. Visitors who do not wish to have cookies placed on their
computers should set their browsers to refuse cookies before using WGM&#x2019;s
websites, with the drawback that certain features of WGM&#x2019;s websites may
not function properly without the aid of cookies. Web-based products
like Cerb require cookies to be enabled, although their use is limited
to maintaining a logged-in session within the software.&lt;/p&gt;

&lt;h2&gt;Business Transfers&lt;/h2&gt;

&lt;p&gt;If WGM, or substantially all of its assets were acquired, or in the
unlikely event that WGM goes out of business or enters bankruptcy, user
information would be one of the assets that is transferred or acquired
by a third party. You acknowledge that such transfers may occur, and
that any acquirer of WGM may continue to use your personal information
as set forth in this policy.&lt;/p&gt;

&lt;h2&gt;Ads&lt;/h2&gt;

&lt;p&gt;In the rare event that ads appear in any of our applications or on any
of our websites, they may be delivered to users by advertising partners,
who may set cookies. These cookies allow the ad server to recognize your
computer each time they send you an online advertisement to compile
information about you or others who use your computer. This information
allows ad networks to, among other things, deliver targeted
advertisements that they believe will be of most interest to you. This
Privacy Policy covers the use of cookies by WGM and does not cover the
use of cookies by any advertisers.&lt;/p&gt;

&lt;h2&gt;Privacy Policy Changes&lt;/h2&gt;

&lt;p&gt;Although most changes are likely to be minor, WGM may change its Privacy
Policy from time to time, and in WGM&#x2019;s sole discretion. WGM encourages
visitors to frequently check this page for any changes to its Privacy
Policy. Your continued use of this site after any change in this Privacy
Policy will constitute your acceptance of such change.&lt;/p&gt;

&lt;h2&gt;License&lt;/h2&gt;

&lt;p&gt;This privacy policy is available under a &lt;a href="http://creativecommons.org/licenses/by-sa/2.5/"&gt;Creative Commons
Sharealike&lt;/a&gt; license
derived from original groundwork by
&lt;a href="http://automattic.com/privacy/"&gt;Automattic&lt;/a&gt;. WGM has no professional
affiliation with Automattic.&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/72</link><pubDate>Mon, 21 May 2012 20:11:20 GMT</pubDate><guid isPermaLink="false">2f4381bbcd403ab6bfcc0c720913d48b</guid></item><item><title>Useful custom field ideas for workflow, marketing, and segmentation</title><description>&lt;p&gt;The design philosophy of Cerb5 is to make as few assumptions about your business as possible.  Custom fields transform the software from a great starting point into a solution that works like it was crafted with your specific needs in mind.&lt;/p&gt;

&lt;p&gt;We've designed custom fields to be available everywhere that native fields are: peeks, Virtual Attendants, subtotals, filters, worklist columns, etc.&lt;/p&gt;

&lt;p&gt;The purpose of this list is to provide a collection of custom field ideas that solve common business requirements.&lt;/p&gt;

&lt;h3&gt;Addresses&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Defunct&lt;/strong&gt; (checkbox)&lt;br&gt;
Tracks if an email address is undeliverable or no longer in service.  This makes it easier to filter broadcasts and exported mailing lists.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Do Not Contact&lt;/strong&gt; (checkbox)&lt;br&gt;
Keeps track of opt-out requests.  This makes it easier to filter broadcasts and exported mailing lists to comply with user preferences and the CAN-SPAM Act.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mailing Lists&lt;/strong&gt; (multi-checkbox)&lt;br&gt;
Associates an email address with topical mailing lists. For example:

&lt;ul&gt;
&lt;li&gt;Beta Testers&lt;/li&gt;
&lt;li&gt;Sponsors&lt;/li&gt;
&lt;li&gt;Translators&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Feedback&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;List&lt;/strong&gt; (picklist)&lt;br&gt;
Categorizes feedback with various lists.  This makes it easy to find appropriate customer quotes for marketing, team boosting, improving the customer experience:

&lt;ul&gt;
&lt;li&gt;Competition - &lt;em&gt;"I switched from Competitor Inc. and now I can't live without Feature X!"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Testimonials - &lt;em&gt;"Since using your service we've improved our average response time from 3 hours to 12 minutes"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Cancels/Debrief - &lt;em&gt;"The product was too expensive to maintain"&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project&lt;/strong&gt; (picklist)&lt;br&gt;
Associates feedback with a specific project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Product&lt;/strong&gt; (picklist)&lt;br&gt;
Associates feedback with a specific product.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Opportunities&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Broadcasts&lt;/strong&gt; (multi-checkbox)&lt;br&gt;
Tracks which announcements or offers have already been sent to this opportunity.  This allows you to search for opportunities that have or haven't been contacted and stagger (or A/B test) your announcements.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Campaign&lt;/strong&gt; (picklist)&lt;br&gt;
Groups opportunities into marketing campaigns -- a particular offer, promotion, or sales objective.  You can filter by campaign to broadcast a similar message to the entire list.  For example:

&lt;ul&gt;
&lt;li&gt;2.0 release announcement&lt;/li&gt;
&lt;li&gt;Seattle grand opening&lt;/li&gt;
&lt;li&gt;Summer sale&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Last Contacted&lt;/strong&gt; (date)&lt;br&gt;
Records the timestamp of the last marketing communication.  This helps control the frequency of your sales efforts directed at individual opportunities.  For example, you could filter lists to people you haven't contacted within 30 days.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Primary Objection&lt;/strong&gt; (picklist)&lt;br&gt;
Categorizes the current primary objection of an opportunity.  For example:

&lt;ul&gt;
&lt;li&gt;Complexity&lt;/li&gt;
&lt;li&gt;Price&lt;/li&gt;
&lt;li&gt;Using a competitor&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Owner/Associate&lt;/strong&gt; (picklist/worker)&lt;br&gt;
The person responsible for converting this opportunity into a sale.  If only a small subset of your workers are part of your sales force, you can use a picklist custom field with only their names.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Qualified&lt;/strong&gt; (checkbox)&lt;br&gt;
Tracks if an opportunity has been qualified as a prospect as opposed to a lead.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sales Manager&lt;/strong&gt; (picklist/worker)&lt;br&gt;
The sales manager can be assigned accounts that they distribute among team members.  This custom field allows monitoring and statistics (won/lost) to be tracked over an entire sales team.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Organizations&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Account Manager&lt;/strong&gt; (worker)&lt;br&gt;
The worker responsible for maintaining a mutually beneficial relationship with this account.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Employees&lt;/strong&gt; (number/picklist)
The size of this organization.  For precision this can be a number custom field, otherwise you can use ranges with a picklist field:

&lt;ul&gt;
&lt;li&gt;0-50&lt;/li&gt;
&lt;li&gt;51-100&lt;/li&gt;
&lt;li&gt;101-500&lt;/li&gt;
&lt;li&gt;501-1000&lt;/li&gt;
&lt;li&gt;1000+&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Industry&lt;/strong&gt; (picklist/multi-checkbox)&lt;br&gt;
This can be used to filter marketing offers to specific industries in conjunction with other criteria (e.g. country, size):

&lt;ul&gt;
&lt;li&gt;Education&lt;/li&gt;
&lt;li&gt;Entertainment&lt;/li&gt;
&lt;li&gt;Government&lt;/li&gt;
&lt;li&gt;Health&lt;/li&gt;
&lt;li&gt;Technology&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Noteworthy&lt;/strong&gt; (checkbox)&lt;br&gt;
Distinguishes this organization as noteworthy for marketing purposes: testimonials, portfolios, and building client lists.  This makes it easier to flag recognizable brands at the point of contact instead of filtering through tens or hundreds of thousands of organizations in the address book.  You could also filter open tickets by noteworthy status to make sure your top customers are receiving exceptional service.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Products&lt;/strong&gt; (multi-checkbox)&lt;br&gt;
Assuming you have a small set of products, product lines, or membership options, this custom field associates these segments to particular customers.  This makes it easy to combine existing customers with additional criteria; for example, purchasers of Product X in Germany, or subscribers of Service Y in the Health industry.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service Level&lt;/strong&gt; (picklist)&lt;br&gt;
If you provide tiered service levels, setting this at the organization level will automatically apply it to all associated contacts in ticket conversations, opportunities, and the address book.  Virtual Attendants can check this field when dispatching, assigning, or making notifications.  As a result, the Attendant can move these tickets to special groups or buckets, send a notification to the organization's account manager, set a due date custom field on the ticket, or set the ticket's priority custom field.  For example:

&lt;ul&gt;
&lt;li&gt;VIPs&lt;/li&gt;
&lt;li&gt;Priority Support&lt;/li&gt;
&lt;li&gt;Gold members&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Servers&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Datacenter&lt;/strong&gt; (picklist)&lt;br&gt;
Tracks servers by their physical location:

&lt;ul&gt;
&lt;li&gt;Amazon EC2 (US/East)&lt;/li&gt;
&lt;li&gt;Slicehost (Chicago, USA)&lt;/li&gt;
&lt;li&gt;SoftLayer (Seattle, USA)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OS&lt;/strong&gt; (picklist)&lt;br&gt;
Tracks the operating system for each server.  This assists with server maintenance and provisioning:

&lt;ul&gt;
&lt;li&gt;Debian Squeeze&lt;/li&gt;
&lt;li&gt;FreeBSD 8.2&lt;/li&gt;
&lt;li&gt;Ubuntu Lucid 10.04&lt;/li&gt;
&lt;li&gt;Windows Server 2008&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Snippets&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Category&lt;/strong&gt; (picklist)&lt;br&gt;
This field groups snippets by topic.  This can be combined with search filter presets to organize a large body of canned responses.  For example:

&lt;ul&gt;
&lt;li&gt;FAQ&lt;/li&gt;
&lt;li&gt;Sales Followup&lt;/li&gt;
&lt;li&gt;Welcome Letter&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Tasks&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Priority&lt;/strong&gt; (picklist)&lt;br&gt;
The priority of the task for workflow planning purposes:

&lt;ul&gt;
&lt;li&gt;High&lt;/li&gt;
&lt;li&gt;Normal&lt;/li&gt;
&lt;li&gt;Low&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project&lt;/strong&gt; (picklist)&lt;br&gt;
The project the task belongs to.  This can be combined with subtotals to display tasks similar to how mail is displayed by group and bucket.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Tickets&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Due Date&lt;/strong&gt; (date)&lt;br&gt;
This field can be set by Virtual Attendants depending on a Service Level custom field on the sender's organization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Priority&lt;/strong&gt; (picklist)&lt;br&gt;
The priority of the ticket.  This can also be set by a Virtual Attendant depending on the sender's organization Service Level, or it can be set manually for specific types of issues (e.g. downtime).  For example:

&lt;ul&gt;
&lt;li&gt;Emergency&lt;/li&gt;
&lt;li&gt;Low&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type&lt;/strong&gt; (picklist)&lt;br&gt;
Categorizes ticket by the primary activity for reporting metrics:

&lt;ul&gt;
&lt;li&gt;Feedback&lt;/li&gt;
&lt;li&gt;Sales Inquiry&lt;/li&gt;
&lt;li&gt;Technical Support&lt;/li&gt;
&lt;li&gt;Troubleshooting&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><link>http://cerberusweb.com/support/kb/article/61</link><pubDate>Thu, 09 Jun 2011 19:08:27 GMT</pubDate><guid isPermaLink="false">48b62e7435008b89604385789907bcba</guid></item><item><title>Integrating Facebook comments with knowledgebase articles in the Support Center</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Facebook provides a &lt;a href="http://developers.facebook.com/docs/reference/plugins/comments/"&gt;Comments Box plugin&lt;/a&gt; that allows visitors to leave comments on your site using their Facebook account.  A commenter has the option of sharing the comment on their wall, which links to your content so that other people in their network can discover you.&lt;/p&gt;

&lt;h1&gt;Instructions&lt;/h1&gt;

&lt;h2&gt;Create a Facebook app for your Support Center&lt;/h2&gt;

&lt;p&gt;While creating a Facebook App for your Support Center is not strictly required, doing so gives you an easier way to designate moderators and manage comments.  If you already have a Facebook App that you'd like to use you can skip ahead.&lt;/p&gt;

&lt;p&gt;If you need to create a new Facebook App:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://developers.facebook.com/apps"&gt;https://developers.facebook.com/apps&lt;/a&gt; and log in if necessary.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Create New App&lt;/em&gt; button.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/68/fb_create_app_button.png" alt="" title=""&gt;&lt;/li&gt;
&lt;li&gt;Enter the requested information.  The majority of the settings won't matter for the purpose of enabling comments in your Support Center's knowledgebase.&lt;/li&gt;
&lt;li&gt;Once complete, you'll be given an &lt;em&gt;Application ID&lt;/em&gt;.  Make a note of this number since you will need it below.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/68/fb_create_app_page.png" alt="" title=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Modifying your Support Center with custom templates&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;em&gt;Setup&lt;/em&gt; on the right of the global navigation menu.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Community Portals&lt;/em&gt; menu and select &lt;em&gt;Configure&lt;/em&gt;.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/68/sc_community_portals_menu.png" alt="" title=""&gt;&lt;/li&gt;
&lt;li&gt;Click on the Support Center where you want to enable comments using Facebook.&lt;/li&gt;
&lt;li&gt;Select the &lt;em&gt;Custom Templates&lt;/em&gt; tab.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/68/sc_custom_templates_tab.png" alt="" title=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;First we need to add your Facebook App ID to the META headers of your Support Center.  This instructs Facebook that you are the administrator of the site for moderation and configuration purposes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click the &lt;em&gt;Add Custom Template&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Select the template &lt;strong&gt;[cerberusweb.support&amp;#95;center] support&amp;#95;center/index.tpl&lt;/strong&gt; and click &lt;em&gt;Save Changes&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Below the line &lt;code&gt;&amp;lt;HEAD&amp;gt;&lt;/code&gt;, insert:  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;meta property="fb:app_id" content="{YOUR_APPLICATION_ID}"/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Replace &lt;code&gt;{YOUR_APPLICATION_ID}&lt;/code&gt; with your Facebook App's ID.  This information is available from &lt;a href="https://developers.facebook.com/apps"&gt;https://developers.facebook.com/apps&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/p&gt;

&lt;p&gt;Now we need to add the comment box below the content of each knowledgebase article:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;em&gt;Add Custom Template&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Select template: &lt;strong&gt;[cerberusweb.kb] support&amp;#95;center/kb/article.tpl&lt;/strong&gt; and click &lt;em&gt;Save Changes&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At the very bottom of the template, right above the last line of &lt;code&gt;&amp;lt;/div&amp;gt;&lt;/code&gt;, insert:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;div id="fb-root"&amp;gt;&amp;lt;/div&amp;gt;  
&amp;lt;script src="http://connect.facebook.net/en_US/all.js#xfbml=1"&amp;gt;&amp;lt;/script&amp;gt;  
&amp;lt;fb:comments  
    href="{devblocks_url}c=kb&amp;amp;p=article&amp;amp;id={$article-&amp;gt;id}{/devblocks_url}"   
    num_posts="2"  
    width="500"&amp;gt;
&amp;lt;/fb:comments&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/p&gt;

&lt;h2&gt;Test it!&lt;/h2&gt;

&lt;p&gt;Browse to an article in your Support Center's knowledgebase.  You should now see a Facebook comment box; just like the one at the bottom of this article.&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/68</link><pubDate>Tue, 30 Aug 2011 11:02:31 GMT</pubDate><guid isPermaLink="false">2da4da49999bae381b06279d7c073ab0</guid></item><item><title>Customizing the Support Center logo and color scheme</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;The default Support Center uses the Cerberus Helpdesk logo and a fairly plain color scheme.  Most administrators will want to change the logo used, and many will also want to change the color scheme to match the corporate / institutional colors.  This article will show you how to do both of those.&lt;/p&gt;

&lt;h2&gt;Modifying your Support Center with custom templates&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;em&gt;Setup&lt;/em&gt; on the right of the global navigation menu.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Community Portals&lt;/em&gt; menu and select &lt;em&gt;Configure&lt;/em&gt;.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/73/sc_community_portals_menu.png" alt="" title=""&gt;&lt;/li&gt;
&lt;li&gt;Click on the Support Center that you would like to edit.&lt;/li&gt;
&lt;li&gt;Select the &lt;em&gt;Custom Templates&lt;/em&gt; tab.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/73/sc_custom_templates_tab.png" alt="" title=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Changing the default logo&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Click the &lt;em&gt;Add Custom Template&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Select the template &lt;strong&gt;[cerberusweb.support&amp;#95;center] support&amp;#95;center/header.tpl&lt;/strong&gt; and click &lt;em&gt;Save Changes&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The second line reads, in part:  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;src="{devblocks_url}c=resource&amp;amp;p=cerberusweb.support_center&amp;amp;f=images/_wgm/logo.gif{/devblocks_url}"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Replace the contents of the image src property with a link to your corporate / institutional logo, like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;src="http://example.com/images/logo.png"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/p&gt;

&lt;h2&gt;Changing the color scheme&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;em&gt;Add Custom Template&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Select template: &lt;strong&gt;[cerberusweb.support&amp;#95;center] support&amp;#95;center/style.css.tpl&lt;/strong&gt; and click &lt;em&gt;Save Changes&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can edit any of the CSS styles of the support center here, but as an example, we'll change the H1 tag from blue to green.&lt;/p&gt;

&lt;p&gt;First, find the section that says:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;H1 {
    font-size:20px;
    font-weight:bold;
    color: rgb(8,90,173);
    margin-top:0px;
    margin-bottom:3px;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and then edit the color to:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    color: rgb(0,120,0);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/p&gt;

&lt;h2&gt;Test it!&lt;/h2&gt;

&lt;p&gt;Browse to your Support Center.  You should now see your new logo and color scheme.  &lt;/p&gt;

&lt;p&gt;&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/73/sc_example.png" alt="" title=""&gt;&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/73</link><pubDate>Fri, 02 Sep 2011 21:53:04 GMT</pubDate><guid isPermaLink="false">1fbe202737f271db2db0d9c24298bf18</guid></item><item><title>Viewing sent messages like a traditional email client</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Traditional email applications provide a &lt;em&gt;Sent&lt;/em&gt; folder for reviewing mail that was sent by you to someone else.  You can easily reproduce this functionality in Cerb5, and then enhance it with powerful functionality like subtotals, presets, and workspaces.&lt;/p&gt;

&lt;h1&gt;Instructions&lt;/h1&gt;

&lt;h2&gt;Building the worklist&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Click &lt;em&gt;mail&lt;/em&gt; in the top navigation menu.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the &lt;em&gt;Search Messages&lt;/em&gt; tab.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/74/mail_search_msgs_tab.png" alt="" title=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on the &lt;em&gt;Filters:&lt;/em&gt; bubble above the worklist and select &lt;em&gt;Toggle Advanced&lt;/em&gt; from the menu.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/74/view_filters_advanced.png" alt="" title=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;em&gt;Add Filter&lt;/em&gt; section on the right, add a filter for &lt;em&gt;Is Outgoing = yes&lt;/em&gt; and click the &lt;em&gt;Add Filter&lt;/em&gt; button.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/74/view_add_filter_outgoing.png" alt="" title=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You now have a worklist of recently sent messages.&lt;/p&gt;

&lt;h2&gt;Filtering by worker&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In the &lt;em&gt;Add Filter&lt;/em&gt; section on the right, add a filter for &lt;em&gt;Worker&lt;/em&gt;, select your desired worker(s), and click the &lt;em&gt;Add Filter&lt;/em&gt; button.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/74/view_add_filter_worker.png" alt="" title=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Filtering by date range&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In the &lt;em&gt;Add Filter&lt;/em&gt; section on the right, add a filter for &lt;em&gt;Created&lt;/em&gt;, select your desired date range, and click the &lt;em&gt;Add Filter&lt;/em&gt; button.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/74/view_add_filter_created.png" alt="" title=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Creating a preset&lt;/h2&gt;

&lt;p&gt;You can save your desired filters as a preset so you can quickly display a list of sent messages in the future without having to add each search filter again.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the &lt;em&gt;Filters&lt;/em&gt; section on the left above the worklist, choose &lt;em&gt;Save filters as preset&lt;/em&gt; from the &lt;em&gt;-action&lt;/em&gt; dropdown.&lt;/li&gt;
&lt;li&gt;Name your preset and click &lt;em&gt;Save Changes&lt;/em&gt;.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/74/preset_create.png" alt="" title=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the future when you want to use this preset:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click the &lt;em&gt;Filters:&lt;/em&gt; bubble above the worklist.&lt;/li&gt;
&lt;li&gt;Select your preset from the menu.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/74/preset_load.png" alt="" title=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Using subtotals&lt;/h2&gt;

&lt;p&gt;You can also use subtotals to categorize the worklist of sent messages.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click the &lt;em&gt;subtotals&lt;/em&gt; link in the top right of the worklist if subtotals aren't currently displayed to the left of the list.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/74/view_subtotals.png" alt="" title=""&gt;&lt;/li&gt;
&lt;li&gt;Subtotals will be displayed for your desired category:&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/74/subtotals_groups.png" alt="" title=""&gt;&lt;/li&gt;
&lt;li&gt;You can change the category by clicking on the green title above the subtotals:&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/74/subtotals_worker.png" alt="" title=""&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Copy to a workspace&lt;/h2&gt;

&lt;p&gt;If you access the worklist of sent messages frequently then you can add it to a workspace.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click the &lt;em&gt;copy&lt;/em&gt; link in the top right of the worklist.&lt;br&gt;
&lt;img src="https://s3.amazonaws.com/cerb5-public/support/kb/74/view_copy.png" alt="" title=""&gt;&lt;/li&gt;
&lt;li&gt;Name the worklist.&lt;/li&gt;
&lt;li&gt;Choose an existing workspace or create a new one.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can now add this worklist to any page from the tab with a &lt;em&gt;+&lt;/em&gt; on it.  Try it on the &lt;em&gt;mail&lt;/em&gt; page.&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/74</link><pubDate>Thu, 01 Sep 2011 20:01:26 GMT</pubDate><guid isPermaLink="false">e7363c78f048da806e15b87c05568500</guid></item><item><title>Upgrading from Cerb4 to Cerb5</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;You can directly upgrade from Cerb4 to any version of Cerb5 without exporting your data or losing any of your settings.  Cerb5 is smart enough to run all the intermediate migration scripts to bring your database up to date.&lt;/p&gt;

&lt;h1&gt;Instructions&lt;/h1&gt;

&lt;h2&gt;Fresh install (simple)&lt;/h2&gt;

&lt;p&gt;In this guide, we'll assume your Cerb4 installation is at &lt;code&gt;/cerb4&lt;/code&gt; and your Cerb5 installation is at &lt;code&gt;/cerb5&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the &lt;strong&gt;Cerb5&lt;/strong&gt; files to a new location.  You can follow the instructions in the book:
&lt;a href="http://cerberusweb.com/book/#installation"&gt;http://cerberusweb.com/book/#installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Stop when you get to the section about using the guided installer since you're going to use an existing database.&lt;/li&gt;
&lt;li&gt;Make a backup of your Cerb4 database.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy the following settings (&lt;em&gt;&lt;strong&gt;by hand&lt;/strong&gt;&lt;/em&gt;) from &lt;code&gt;/cerb4/framework.config.php&lt;/code&gt; to &lt;code&gt;/cerb5/framework.config.php&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;APP_DB_DRIVER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;APP_DB_HOST&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;APP_DB_DATABASE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;APP_DB_USER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;APP_DB_PASS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LANG_CHARSET_CODE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DB_CHARSET_CODE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AUTHORIZED_IPS_DEFAULTS&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy your &lt;code&gt;attachments&lt;/code&gt; directory &lt;code&gt;/cerb4/storage/&lt;/code&gt; to &lt;code&gt;/cerb5/storage/&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;Make sure your &lt;code&gt;/cerb5/storage/&lt;/code&gt; directory is writeable by the webserver.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;/cerb5/update&lt;/code&gt; in your web browser.&lt;/li&gt;
&lt;/ol&gt;
</description><link>http://cerberusweb.com/support/kb/article/54</link><pubDate>Wed, 18 May 2011 04:37:10 GMT</pubDate><guid isPermaLink="false">fe68c23607ddbc4dd00a6b780ab218f9</guid></item><item><title>Maintaining a "Do not contact" mailing list for CAN-SPAM compliance</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Compliance with the United States &lt;a href="http://en.wikipedia.org/wiki/CAN-SPAM_Act_of_2003" title=""&gt;CAN-SPAM Act of 2003&lt;/a&gt; requires businesses to maintain a suppression list for recipients who have opted-out of further communications. &lt;/p&gt;

&lt;p&gt;Even without government regulation, it's still a good idea to clear your mailing lists of contacts who aren't interested in hearing from you.  It's not just ethical behavior, it's also more efficient; you can focus all your energy on the people who &lt;em&gt;do&lt;/em&gt; want to hear from you.&lt;/p&gt;

&lt;p&gt;You should consult your "do not contact" list prior to activities like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sending broadcasts&lt;/strong&gt; - You can broadcast to a mailing list from several locations in Cerb5: the address book, ticket worklists, and opportunities.  It's okay to bulk reply to ticket recipients about an issue or something they asked you (i.e. transactional messages), but it is not okay to send marketing messages to people after they've asked you to stop.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Working on opportunities&lt;/strong&gt; - If you collect opportunities by importing mailing lists from multiple sources -- e.g. forums, blogs, bug tracking, betas, evaluations -- then you should use your "do not contact" list to remove opportunities linked to email addresses that have already opted-out.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;Adding the custom field&lt;/h1&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/16f8d87c-e2d5-102e-a560-0030487e9650/59-address_cfield_dnc.png" alt="" title=""&gt;&lt;/p&gt;

&lt;p&gt;First, we want to create a custom field on email address records to track whether an address is on the "do not contact" list.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If you're a helpdesk administrator, click &lt;em&gt;Setup&lt;/em&gt; in the top right.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Settings&lt;/em&gt; menu and select &lt;em&gt;Custom Fields&lt;/em&gt; from the list.&lt;/li&gt;
&lt;li&gt;Click &lt;em&gt;Address&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Under &lt;em&gt;Add new custom field&lt;/em&gt; choose &lt;em&gt;Checkbox&lt;/em&gt; from the dropdown list, and give it the name "Do Not Contact".&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You could also call this custom field something like "Opt-out" or "Unsubscribe".&lt;/p&gt;

&lt;h1&gt;Using the custom field&lt;/h1&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/16fd0910-e2d5-102e-a560-0030487e9650/59-address_peek_dnc.png" alt="" title=""&gt;&lt;/p&gt;

&lt;p&gt;Now you can add someone to your "do not contact" list by viewing their address record and checking the &lt;em&gt;"Do Not Contact"&lt;/em&gt; box.&lt;/p&gt;

&lt;p&gt;For example, let's assume you sent out a broadcast to 1,000 email addresses about your latest press release.  At the bottom of the message you should have provided a way for people to remove themselves from your list, either by clicking a link or replying with a phrase like "remove me".  Let's also assume you set up your group's Virtual Attendant to filter messages with "remove me" into an "Unsubscribe" bucket.&lt;/p&gt;

&lt;p&gt;You can instruct your Attendant to set the custom field on these senders automatically, but you may also want to review them by hand if your mailing list isn't too long.  It's not uncommon for people to reply from a different email address than the one you used to contact them, and a purely automated solution might not notice.&lt;/p&gt;

&lt;h1&gt;Filtering out "do not contact" addresses from a broadcast mailing list&lt;/h1&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/29eb1f9a-e2d9-102e-a560-0030487e9650/59-filters_dnc.png" alt="" title=""&gt;&lt;/p&gt;

&lt;p&gt;If you're preparing to send a broadcast to a worklist containing email addresses, one of your filters should be removing contacts that have opted out.&lt;/p&gt;

&lt;p&gt;Let's assume you want to send a marketing broadcast to everyone in your address book.  You also want to filter out any email addresses from your suppression list.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;em&gt;address book&lt;/em&gt; from the top navigation menu and click the &lt;em&gt;Addresses&lt;/em&gt; tab.&lt;/li&gt;
&lt;li&gt;Reset any filters you may be using.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Filters&lt;/em&gt; button above the worklist.&lt;/li&gt;
&lt;li&gt;Select &lt;em&gt;Toggle Advanced&lt;/em&gt; if the advanced filters aren't already expanded.&lt;/li&gt;
&lt;li&gt;Under &lt;em&gt;Add Filter&lt;/em&gt; on the right, set &lt;em&gt;Field:&lt;/em&gt; to &lt;em&gt;Do Not Contact&lt;/em&gt;.  Set &lt;em&gt;Operator:&lt;/em&gt; to &lt;em&gt;equals or null&lt;/em&gt;, and &lt;em&gt;Value&lt;/em&gt; to &lt;em&gt;No&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Add Filter&lt;/em&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All opt-out addresses have been removed from your worklist.  You could now export this list for use in another email marketing program.&lt;/p&gt;

&lt;h1&gt;Removing "do not contact" opportunities&lt;/h1&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/16fe0590-e2d5-102e-a560-0030487e9650/59-subtotals_dnc.png" alt="" title=""&gt;&lt;/p&gt;

&lt;p&gt;You can use your new suppression list to remove leads from people who have unsubscribed.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;em&gt;Activity&lt;/em&gt; from the top navigation bar.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Opportunities&lt;/em&gt; tab.&lt;/li&gt;
&lt;li&gt;If you have any filters active, reset them.&lt;/li&gt;
&lt;li&gt;If you aren't displaying subtotals, click the &lt;em&gt;subtotals&lt;/em&gt; link on the right side of the blue worklist header bar.&lt;/li&gt;
&lt;li&gt;Change the subtotals to &lt;em&gt;Do Not Contact&lt;/em&gt; by clicking on the green text with the down arrow to the left of the list of opportunities.&lt;/li&gt;
&lt;li&gt;If there are any opportunities from people who have opted-out you will see a number next to &lt;em&gt;yes&lt;/em&gt; in the subtotals.  Click the word &lt;em&gt;yes&lt;/em&gt; to display these opportunities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ONLY&lt;/strong&gt; if you are restricting your list of opportunities to those from opt-out addresses, click the &lt;em&gt;Bulk Update&lt;/em&gt; button below the list.  Set &lt;em&gt;Status:&lt;/em&gt; to &lt;em&gt;deleted&lt;/em&gt; and click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now you can work on your opportunities without worrying about contacting people who have opted out.  You should repeat this process before any broadcasts to make sure your mailing list is clean.&lt;/p&gt;

&lt;h1&gt;Importing a suppression list&lt;/h1&gt;

&lt;p&gt;If you already have a suppression list from another email program you can import it.&lt;/p&gt;

&lt;p&gt;The easiest file format to use is a comma-separated value (CSV) list.  This can be exported from many applications, and it can be manipulated in a simple text editor, Excel, or OpenOffice Calc.  One of your columns should contain an email address.  You need to add a new column to your text file with the value &lt;strong&gt;"1"&lt;/strong&gt;.  This will be used to set the value of your custom field to &lt;em&gt;yes&lt;/em&gt;.  If you have field names as the first row in your file, you should use the name of your custom field as this new column.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;em&gt;address book&lt;/em&gt; from the top navigation menu and click the &lt;em&gt;Import&lt;/em&gt; tab&lt;/li&gt;
&lt;li&gt;Change &lt;em&gt;Record Type&lt;/em&gt; to _Addresses.&lt;/li&gt;
&lt;li&gt;Select the appropriate file to import and click the &lt;em&gt;Upload&lt;/em&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now you'll be presented with a screen that maps columns from your file to fields in Cerb5.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Link your email address field on the left to &lt;em&gt;Email&lt;/em&gt; on the right.&lt;/li&gt;
&lt;li&gt;Link your opt-out field on the left to your &lt;em&gt;Do Not Contact&lt;/em&gt; custom field on the right.&lt;/li&gt;
&lt;li&gt;If your first row doesn't contain field names, check the &lt;em&gt;Import the first row&lt;/em&gt; option.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Upload&lt;/em&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your opt-out custom field should now be set for every email address in the list.&lt;/p&gt;

&lt;h1&gt;Exporting your "do not contact" list&lt;/h1&gt;

&lt;p&gt;If you use another application or service to send email marketing campaigns, you can export your opt-out list from Cerb5 to import elsewhere.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;em&gt;address book&lt;/em&gt; from the top navigation bar and click the &lt;em&gt;Addresses&lt;/em&gt; tab.&lt;/li&gt;
&lt;li&gt;Reset any filters you may be using.&lt;/li&gt;
&lt;li&gt;Expand subtotals if you haven't already.&lt;/li&gt;
&lt;li&gt;Set the activate subtotal to "Do Not Contact" and select the "yes" list if there are any.  If there aren't, there's no reason to continue.&lt;/li&gt;
&lt;li&gt;Click &lt;em&gt;export&lt;/em&gt; from the right side of the worklist's blue header bar.&lt;/li&gt;
&lt;li&gt;Next to &lt;em&gt;Columns&lt;/em&gt; click the &lt;em&gt;Clear&lt;/em&gt; link.  Set the first column to &lt;em&gt;Email&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Export&lt;/em&gt; button at the bottom of the list.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can now use this list anywhere to filter using your suppression list.&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/59</link><pubDate>Wed, 08 Jun 2011 04:39:29 GMT</pubDate><guid isPermaLink="false">02f294f9044fe67decc36edabd05702e</guid></item><item><title>Filtering out assigned tickets in mail Workflow</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;Prior to Cerb 5.4, tickets with owners were automatically hidden from the mail Workflow list.  While this made it easy to find new work, the default behavior also encouraged legitimate tickets to rot if their owner was sick, on vacation, busy fighting other fires, etc.  This required teams to develop a plan for proactively monitoring all tickets using the default search functionality, which included reproducing the unique contraints of the Workflow area (open status, assignable buckets).&lt;/p&gt;

&lt;p&gt;When tickets are not hidden by default, it is much easier for teams to spot work that is stagnant and reassign it if necessary -- or at the very least, offer customers a status update to manage their expectations.&lt;/p&gt;

&lt;p&gt;Is it easy to reproduce the earlier Workflow behavior with a mail filter and a preset.&lt;/p&gt;

&lt;h1&gt;Instructions&lt;/h1&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/749819ba-e1f5-102e-a560-0030487e9650/57-workflow_filters_add.png" alt="" title=""&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on the &lt;em&gt;Mail&lt;/em&gt; section in the top left and select the &lt;em&gt;Workflow&lt;/em&gt; tab.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Filters&lt;/em&gt; button and select &lt;em&gt;Reset&lt;/em&gt; from the menu.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Filters&lt;/em&gt; button again and select &lt;em&gt;Toggle Advanced&lt;/em&gt; if the filters are currently condensed.&lt;/li&gt;
&lt;li&gt;Under &lt;em&gt;Add Filter&lt;/em&gt; on the right, set &lt;em&gt;Field:&lt;/em&gt; to &lt;em&gt;"Owner"&lt;/em&gt;  and set &lt;em&gt;Operator:&lt;/em&gt; to &lt;em&gt;"is blank or"&lt;/em&gt;.   In the text box under &lt;em&gt;Workers:&lt;/em&gt;, type the first few letters of your name and select yourself from the autocomplete choices.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Add Filter&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Under &lt;em&gt;Filters&lt;/em&gt; on the left, click the &lt;em&gt;--action--&lt;/em&gt; drop-down and select &lt;em&gt;Save filters as preset&lt;/em&gt;.  Type the name "Me or nobody" and click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Filters&lt;/em&gt; button and select &lt;em&gt;Toggle Advanced&lt;/em&gt; again to condense the filters.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/749cbeca-e1f5-102e-a560-0030487e9650/57-workflow_filters_preset.png" alt="" title=""&gt;&lt;/p&gt;

&lt;p&gt;Now, you can click the &lt;em&gt;Filters&lt;/em&gt; button and select your "Me or nobody" preset any time you want to restrict the list to conversations that are either assigned to you or not assigned to anyone.&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/57</link><pubDate>Tue, 07 Jun 2011 01:28:39 GMT</pubDate><guid isPermaLink="false">bd319c4682a672ff26e20a1e689c4ab2</guid></item><item><title>Normalizing countries in your address book using subtotals and bulk update</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;The information in your address book has probably been entered by multiple people in the normal course of talking to your customers.  When a name is available in the email headers or signature, it can easily be captured for later reuse.  In the same manner, you're probably also collecting information about the organizations your contacts belong to.&lt;/p&gt;

&lt;p&gt;After collecting contact information for a while you may notice that different people fill in the country field as "United States", "USA", "U.S.A.", "United States of America", or "US". &lt;/p&gt;

&lt;p&gt;"Normalization" is the process of making this data consistent by removing redundancy.&lt;/p&gt;

&lt;h1&gt;Consolidating different variations of a country name&lt;/h1&gt;

&lt;p&gt;First, you need to decide on a convention for country names.  For example, you can use 2-letter country codes (&lt;a href="http://en.wikipedia.org/wiki/ISO_3166" title=""&gt;ISO-3166&lt;/a&gt;), English names, native names, or whatever makes your life easier.  This decision usually depends on how you intend to use the information -- printing mailing labels, interfacing with external systems, rendering maps, etc.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;em&gt;address book&lt;/em&gt; from the top navigation menu and click the &lt;em&gt;Organizations&lt;/em&gt; tab.&lt;/li&gt;
&lt;li&gt;Expand the subtotals if you haven't already.&lt;/li&gt;
&lt;li&gt;Set the active subtotal to &lt;em&gt;Country&lt;/em&gt; by clicking on the green text with the down-arrow to the left of the worklist.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You should now see a list of the most frequently used country names.  You may already notice a few variations.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://cerberusweb.com/support/ajax/downloadFile/c063dcd6-e2df-102e-a560-0030487e9650/60-subtotals_countries.png" alt="" title=""&gt;&lt;/p&gt;

&lt;p&gt;Let's assume you see "United States" and "USA".  You'd prefer that all these records use the name "USA".&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click "United States" from the subtotals.  This will show only those results.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Bulk Update&lt;/em&gt; button at the bottom of the list.&lt;/li&gt;
&lt;li&gt;Set the &lt;em&gt;Country&lt;/em&gt; field to &lt;em&gt;"USA"&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;Save Changes&lt;/em&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can repeat this process until the most popular country variations have been standardized.  After this, you can start to branch out.  For example, by searching for countries that begin with the letter "U" you can find more obscure variations for the United States; such as "U.S.A." or "US of A".  You can either search for these variations one at a time, or you can select rows individually and use Bulk Update with the &lt;em&gt;Only checked&lt;/em&gt; option instead of &lt;em&gt;Whole list&lt;/em&gt;.&lt;/p&gt;

&lt;h1&gt;Taking advantage of the data&lt;/h1&gt;

&lt;p&gt;Now that you have normalized data you can use it for many different things.  For example, you can send announcements to customers located in specific countries.  If you add additional custom fields to organizations, like industry, your campaigns could target technology companies in India with more than 25 employees, or breweries in Belgium who have registered one of your products.&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/60</link><pubDate>Wed, 08 Jun 2011 05:27:46 GMT</pubDate><guid isPermaLink="false">88b0eece351875b5c261963fab5abf63</guid></item><item><title>Archiving content in Amazon S3 with the Storage service</title><description>&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;When new content arrives, we first store it locally and add a reference in the &lt;code&gt;storage_*&lt;/code&gt; database tables.  If the content is searchable we also index an optimized copy in the &lt;code&gt;fulltext_*&lt;/code&gt; database tables, which are the only part of Cerb5's schema that need to use MySQL's MyISAM storage engine; the rest of your database can benefit from the InnoDB storage engine, which doesn't support full text indexes, but provides other benefits like transactions, point-in-time binary logs, row-level locking, etc.&lt;/p&gt;

&lt;p&gt;This approach means that the database doesn't need to be polluted with large, immutable content.  We've created a storage system that can archive and retrieve content from external repositories, such as Amazon S3, remote databases, and distributed filesystems.&lt;/p&gt;

&lt;h1&gt;Frequently Asked Questions&lt;/h1&gt;

&lt;h2&gt;What is the consequence of archiving content to Amazon S3?&lt;/h2&gt;

&lt;p&gt;When large, immutable content becomes idle the Storage service will archive it for you in long-term storage.  This behavior is configured in Setup-&gt;Storage-&gt;Content.&lt;/p&gt;

&lt;p&gt;If archived content is requested from Amazon S3 then we retrieve it and cache it locally until it becomes idle again.&lt;/p&gt;

&lt;h2&gt;What is the performance penalty of retrieving content from Amazon S3?&lt;/h2&gt;

&lt;p&gt;The major performance consideration is the latency between your server and Amazon S3.  If you are hosting Cerb5 in an EC2 instance then the latency should be negligible.  Conversely, if you're hosting Cerb5 on a residential DSL line then the latency may be more pronounced.  Most commercial datacenters should provide adequate bandwidth.  For example, from our SoftLayer servers (in both Seattle and Dallas) we routinely push over 20MB/sec to S3, and we pull content even faster.&lt;/p&gt;

&lt;p&gt;The other consideration is the size of the content you're retrieving.  Obviously, a 50KB PNG image will download faster than a 30MB ZIP file; however, you may also notice that a 1MB ZIP file downloads at the same speed as a 100KB PNG, because they both transfer in a fraction of a second, and the only latency comes from the HTTP connection.&lt;/p&gt;

&lt;p&gt;It's possible in some environments that the HTTP connection may take around a second from Amazon S3 depending on your connection, or behind-the-scenes issues at Amazon.  That's independent from the time it takes to download content.  A second may not seem like a long time to wait, but if you're pulling 10 archived messages out of storage to review an old ticket it will be a noticeable delay.  However, it will only be a delay on the first viewing.  If you send someone else a link to the ticket the content will be served locally.&lt;/p&gt;

&lt;p&gt;You should run benchmarks from your server (using something like &lt;code&gt;jets3t&lt;/code&gt;) to make sure you're satisfied with the performance.&lt;/p&gt;
</description><link>http://cerberusweb.com/support/kb/article/51</link><pubDate>Tue, 03 May 2011 22:28:13 GMT</pubDate><guid isPermaLink="false">455058582484521b35538c25b0d2a8f1</guid></item></channel></rss>
