Broadcast is a 5.0 feature that carries over pretty much as is into 5.1. As usual the latest up to date documentation will always be on the wiki should this blog post become stale.
http://wiki.cerb5.com/wiki/Broadcast
When you can reply to multiple tickets with a single response you will want to use Broadcast (reply) — Cerb’s answer to mass mailing. Now don’t confuse this with CC’ing a bunch of recipients on an e-mail, broadcast literally appends a copy of your reply to each ticket you selected using bulk update.

Any ticket-based list is compatible, so you can do a search, use a workspace, or pull directly from Workflow or Search Tickets to get your list of tickets. And because broadcast is a part of ‘bulk update’ you can simultaneously move the tickets to a different bucket, set their status to closed, or assign to a specific worker.
Select your tickets, click ‘bulk update’, and look for the “broadcast reply” option.

Personalized Messages
Broadcast was obviously developed so you could avoid writing a unique response to every ticket; one e-mail that you can blast to as many customers as you want. Unfortunately the pitfall with streamlining your replies in such a manner, is you end up dumbing down your “one size fits all” reply into something generic. To counteract this problem the developers have incorporated several different ideas into broadcast to make automated, yet still personalized, replies feasible. However…
Snippets?
Many of the ideas in broadcast are also used in another 5.0 feature called Snippets, and we’re not talking similar ideas, we’re talking identical features. Almost every thing below the “Broadcast Reply” checkbox is replicated inside of snippets (‘mail’, ‘Snippets’ tab). Let me explain with two comparison screenshots.
Here’s a “New Order” broadcast.

And here’s a “New Order” snippet.

So the question is why do they share so many similarities? To understand you need a little background on snippets first. Snippets replaced the ‘E-mail Templates’ of 4.x, with the fundamental change being snippet templates have a new language syntax. This new language allows you to write much more flexible templates that can be used in a variety of situations, and is composed of two parts: contextual tokens and conditional logic. These two components (along with a Test button) are what have been extracted out and integrated separately into broadcast; the three features have also been built into several other features like signatures and auto-responses. We’ll go over each one shortly.
To state the “crossover” in different terms, you can think of broadcast as the distribution tool to deliver a snippet to multiple tickets (ironically at the moment broadcast does not have access to the snippet templates, see CHD-1985).
Where does that leave us? Well the good news is since they share the same interface and language, if you learn one you kind of learn the other in the process. Unfortunately the bad news is this overlap poses a redundancy problem in regards to documentation like you’re reading now. Because you can think of broadcast and snippets as two-sides of the same coin, a lot of their documentation would be identical no matter which feature you’re reading about. Therefore we made a “flip of the coin” decision to keep THIS guide lean, and explain all those overlapping features entirely as part of snippets. In fact the New Order snippet we showed earlier is the snippets walkthrough example.
In conclusion we’re still going to summarize those features here for better continuity, but it’s probably ideal if you read through the entire snippets guide first and come back. If you decide not to, no biggie, going forward there will be plenty of links sprinkled in that point to individual portions of the snippets walkthrough.
Tokens
See the “insert at cursor” dropdown below the broadcast reply box? These are optional tokens, or placeholders, you can insert into your message that represent the corresponding fields in the Helpdesk.

Custom fields like *Phone (Worker) are represented by their ID {{worker_custom_18}} inside the reply. The star * was added to the custom field name just to make it stick out in screenshots, it is not necessary.
The token system is something you may have seen in previous versions, but in 5.0 all tokens throughout the Helpdesk are produced through the Snippets system instead. As part of this upgrade the number of token choices have been greatly increased from those found in the worker signatures, auto-responses, and e-mail templates of 4.x. Most, if not all, the fields and custom fields of any mail-related sources (tickets, addresses, organizations, workers) are available to use in broadcast. This gives you a lot of personalized information to insert into your messages with a simple “swap”.
For those who’ve read about snippets already, “broadcast reply” is a ticket context and uses Ticket tokens, “broadcast compose” (more on that later) is a worker context and uses Worker tokens.
Conditional Logic
Ok you’ve got your broadcast “template” written up with a couple of tokens integrated. But what if you have fields without actual values inside of them? What if we never filled in a valid phone number for one of our new employees? What if *Phone (Worker) {{worker_custom_18}} is empty? If it is, you’ll get a blank in every outgoing reply.
As a general rule whenever the corresponding ticket or worker fields do not have data pre-filled, they will translate to a blank phrase. This poses a risk with broadcast because you are potentially e-mail blasting without spot checking each message.
- If you have any questions, please call John Smith at _______ [phone #] or e-mail john@example.com .
To help counter this we’ve implemented some basic conditional logic inside of broadcast (and snippets). This language gives you the option of adding things like if/else statements, which you can use to catch blanks and fix them automatically. If we wanted to foolproof our example we could do something like:

Parts have been simplified or removed for clarity.
Notice how we’ve substituted a “standard” office phone number to safeguard us against a missing phone number. We use an if/else block to check if John’s phone number exists in Cerb, {{worker_custom_18}} = 555-1212, (IF) it does then we print his contact information, (ELSE) if he does not have a phone number in the Helpdesk, we print the main office line.
As far as the “formatting” goes, notice I squeezed all the logic in one continuous line without breaking it up. We could have went with the nicer:
If you have any questions, please call
{% if worker_custom_18 %}
John Smith at {{worker_custom_18}}
{% else %}
sales at 555-4646
{% endif %}
Either way will work, but your final output may have double spacing if you choose to go with line breaks in your “template”. Sometimes it’s better to sacrifice readability in the template so the end result is more professional looking (see “Product Announcements” example at the end).
- Learn more about the conditional logic syntax and other cool things you can modify using “defaults” and “date modifiers”.
Test Button (Preview)
Once you’ve finished constructing your response the Test button will check for any blatant syntax errors first, and then show you a preview of what your message will look like by sampling a Helpdesk ticket at random. All your tokens will be replaced with the ticket’s corresponding field values and any if/else logic will be calculated so the relevant text can be substituted in. Test should give you one last opportunity to eyeball your “template” for any semantics problems; each click samples a new ticket so be sure to do it a few times to test against a variety of scenarios.
Here’s a failed test due to syntax error.

The closing curly brace } is missing at the end of the IF statement: {% if worker_custom_18 % .
Now here’s a successful test and a preview of what a response will look like.

Our example was so simple that it only pulled from a worker object (name, phone number) and not any specific ticket or customer (sender address) fields, therefore it won’t change from ticket to ticket. One click of the ‘Test’ button is enough for us.
- The Test button, similar to a lot of the broadcast options, is also used in snippets, signatures, and auto-responses.
Save as drafts

This is the only option that’s not part of snippets. Select ‘send now’ to queue up your broadcasts for delivery. Broadcast works in conjunction with the Mail Queue service to prioritize your workers’ real-time replies ahead of any queued e-mails. This ensures your Helpdesk does not get bogged down waiting for the last broadcasted message to go out. You can check their progress in the ‘Mail Queue’ tab of ‘helpdesk setup’.
Instead of actually sending your replies immediately with send now you can also save your broadcast-generated messages as individual drafts. This way a manager can review each message, make a couple small changes where necessary, then send them out one by one like normal. Because of how this works, do not use broadcast drafts with the expectation you can stop and pick up your progress later.
Broadcast Compose
Broadcast isn’t just limited to replies, it also works when you need to create multiple tickets from scratch. You can compose a single message and push it out to a list of contacts — each will generate a separate ticket. The “broadcast compose” procedure is generally the same but you start from an address-based list (address book, recipient history) and not a ticket-based list. Inside bulk update this time around, you will have a (from) group, subject, and ticket status to fill in.

You can also use the tokens and conditional logic inside the subject field, of course all the logic would have to be squished on one line. Because there’s no token dropdown for the subject, just copy and paste the {{token}} after you’ve inserted a temporary copy in the body.
Use Cases
Broadcast is a great feature but sometimes it’s not obvious how to take advantage of it. To wrap this article up, here’s a couple of simple examples that may give you some ideas (often when you see the “template” in its entirety it’s more helpful).
New Orders
This is the one we showed off at the very beginning, and like we mentioned it’s the sample template we created from the ground up as part of the Snippets tutorial. Every syntax detail from the {% if/elseif %} to the {{initial_message_created|date(“m/d/Y”)}} is explained over there should you want to learn more. The “support package” (platinum, gold, silver, and copper) is determined by looking at the subject line of each ticket – New Order: domain (type of package).

Issues Resolved
Businesses in the software field may have users submit bug reports via e-mail. When a new release goes out you can use “broadcast reply” to inform different people about the issues they personally had a vested interest in. Here we assume the bug number and description are in the original ticket’s subject line and that each recipient (initial sender) has a first name registered in the address book.

The three toggles at the bottom are for setting the corresponding “address” custom fields (*Hosted On, *Support Package, *Purchased On). Technically they are a part of bulk update and not broadcast.
Product Announcements
A natural fit for “broadcast compose”, since you’d be the conversation starter sending new messages to each of your contacts (i.e. creating new tickets). Here we’re using some conditional logic to distribute specific upgrade prices to our customers based on date of purchase. We’ve preconfigured a date (address) custom field called *Purchased On {{custom_27}}. To make this easy we’re assuming September 1st is the cutoff date and the discount tiers are structured like this:
- < 3 months -> free upgrade
- < 1 year -> 50% discount
- over a year -> full price upgrade
Unfortunately you have to use epoch time (1275350400) in your conditional logic instead of “english” dates (Jun 1, 2010); I used a Unix time converter to do the number crunching for me.

The “triple spacing” in the preview is a result of the extra spacing we put in the template so it’s more readable for our example. In practice, you may want to squish the template down even if it’s less readable so the final result is more concise. We could have easily removed the line breaks and rolled the if/else statements into the message itself for one giant block of text. As long as you knew what you were doing you could also drop the {# comments #}, which we’ve used here to explain the date math.
Maintenance Updates
Again a perfect opportunity to use “broadcast compose”. To determine which hosted installs are on which hardware we compare a preconfigured picklist custom field (address): *Hosted On {{custom_26}}, where possible values include black, white, red, or yellow. A very simple if/else block automatically sends the correct maintenance window to the right contacts.

-joegeck@wgm