Most Popular
Recently Added
Recently Updated

Creating an automated dispatcher using Virtual Attendants

Introduction

This article assumes that you have read The Benefits and Drawbacks of Self-Assignment vs. Dispatching, and you've decided that the dispatcher methodology is the best fit for your group.

In this article we will build an automated dispatcher using Virtual Attendants functionality. For this to work you need to be using version 5.7 or later.

Implementation

First, navigate to the appropriate group configuration page.

  1. Click on Groups in the top right.
  2. Click on the name of the group where you want to set up an automated dispatcher.
  3. Select the Virtual Attendant tab.

We want to create a new behavior that will pick an assignee for new conversations in this group.

  1. Click the Create Behavior button.
  2. In the New Behavior popup, set the following:
    • Title: Automated Dispatcher
    • Event: New message on a group conversation
    • Status: Enabled
    • Click the green plus (+) button to add a new behavior variable. It should be private. Call it Assignee and select the type Worker from the dropdown.
    • Click the Save Changes button.

Now that we have a new behavior, we want to extend it to only be concerned with assignable conversations.

  1. Click on the New message on a group conversation bubble under the new Automated Dispatcher behavior and select Add Decision from the menu.
  2. Set the title to Is this conversation assignable?

For the purposes of this example we'll consider a conversation to be assignable if it's new and not from a worker. You could also assign conversations that have new replies -- in such a case you would likely consider a conversation to be assignable if it was currently unassigned.

  1. Click on the new Is this a new conversation decision bubble and select Add Outcome from the menu.
  2. Set the title to Yes.
  3. If you want the dispatcher to only assign new conversations, and not replies, then click on the Add Condition button and select the Message is first in conversation condition from the list. Make sure it is set to true.
  4. If you want the dispatcher to only assign conversations that come from customers instead of workers, click on the Add Condition button again and select the Message sender is a worker condition from the list. Make sure it is set to false.
  5. Click the Save Changes button.

Now we want to decide which shift should be responsible for replying to this conversation based on the day of the week and time of day.

  1. Click on the new Yes outcome bubble and select Add Decision from the menu.
  2. Set the title to What shift is it?
  3. Click the Save Changes button.

How shifts are defined will depend on your particular environment. For this example we'll be creating three shifts: Day, Night, and Weekend. If you're not concerned about shifts then you can simply create a single catch-all outcome here with no conditions (like the Day shift in the following example). You can have more or fewer shifts by emulating the following steps as needed. In practice, your worker schedules may be a lot more complicated than the shifts used in this example. You can modify this Virtual Attendant behavior to model your exact needs.

In the near future we plan to integrate more comprehensive scheduling functionality into Virtual Attendants behavior. This will allow you to react more appropriately to sick days, vacations, holidays, part-time workers, etc.

First, let's add a new outcome for the Weekend shift:

  1. Click on the new What shift is it? decision bubble and select Add Outcome from the menu.
  2. Set the title to Weekend.
  3. Click the Add Condition button and select the Day of week condition from the list. Make sure the selection dropdown is set to is and then check the boxes for the Saturday and Sunday.
  4. Click the Save Changes button.

Similarly, we want to create the Night shift outcome:

  1. Click on the new What shift is it? decision bubble and select Add Outcome from the menu.
  2. Set the title to Night.
  3. Click the Add Condition button and select the Day of week condition from the list. Make sure the selection dropdown is set to is and then check the five boxes for the weekdays Monday through Friday.
  4. Click the Add Condition button and select the Time of day condition from the list. Make sure the selection dropdown is set to is not between and enter the times 8am and 6pm. You can modify these times to match your own daytime shift. Everything outside of this range will be considered part of the night shift. We're using is not between so we can define a single range instead of having to define two ranges for "before daytime" and "after daytime".
  5. Click the Save Changes button.

Finally, we'll create the Day shift outcome as the catchall. In other words, if it's not the Night or Weekend shift then we'll default to the Day shift as the outcome. Using a catchall is a useful pattern in Virtual Attendants because you can guarantee that there will always be an outcome for every decision.

  1. Click on the new What shift is it? decision bubble and select Add Outcome from the menu.
  2. Set the title to Day.
  3. Because this is our default outcome we don't need to specify any conditions. If none of the previous outcomes are selected then we'll always default to this one.
  4. Click the Save Changes button.

Now that our shifts are defined as outcomes, we want to instruct the automated dispatcher about the available workers for each shift. In each outcome we'll be setting the value of the Assignee behavior variable that we defined earlier. Each shift will have a pre-defined list of available workers.

There are several strategies available for selecting one of your available workers to be the assignee:

  • Random distribution: A worker is selected at random. Over a long period of time, random distributions should be roughly uniform and each worker will have been selected approximately the same number of times. This is a good choice when you want to simulate "casting lots" or "drawing straws" -- for example, if you have to nominate one unlucky worker from the group to work on a critical issue at 4am.
  • Round robin sequence: Each worker will be selected in order and the sequence will repeat itself infinitely. This simulates "taking turns". This will guarantee that each worker receives the same number of assignments, but it will not automatically take into account the fact that some assignments take longer to complete than others. If the effort required for most of your tasks is equivalent then this is often a good choice.
  • Load balancing: The worker with the fewest open assignments will be selected every time. This strategy attempts to compensate for the fact that the issues being assigned may require widely varied amounts of time to complete them, and its goal is to ensure that all the available workers have the same number of open assignments. If one worker receives a simple issue that they can finish in 5 minutes, then they are more likely to receive their next assignment right away, especially if the other workers are working on issues that will take them 15-20 minutes. One caveat is if you add a new worker to a load balanced dispatcher then they will receive several assignments in a row until they've caught up to the group's average. A major benefit of load balancing is that it will automatically compensate for a worker who has assignments from their other groups.

These strategies can be further filtered with the option to only select available workers who are also currently logged in. This is useful if you have many workers who have inconsistent schedules. When you use this option, the workers who are logged in will be considered as candidates for assignments. It is important to keep in mind that if you have a small number of workers logged in at any given time then you will likely be better off by not using this option; it has the potential to make too many assignments in a row to a single worker.

With those choices in mind, let's set up the roster for the Weekend shift:

  1. Click on the new Weekend_ outcome bubble and select __Add Actions from the menu.
  2. Set the title to Set Weekend Assignee.
  3. In the Add Action section, select Set (variable) Assignee from the list.
  4. In the From these workers: field you should select all the workers who can be assigned work during the Weekend shift.
  5. In the Pick: field, specify a dispatching strategy (as explained above). For the purposes of this example we'll be using load balanced dispatching because we want idle workers to quickly receive more work.
  6. Click the Save Changes button.

Repeat the previous steps so each shift has an appropriate assignee.

Now that our Assignee variable has a shift-dependent worker, we can use it to the set the owner of the new conversation.

  1. Click on the Yes outcome bubble near the top of the behavior and select Add Actions from the menu.
  2. Set the title to Set Owner.
  3. From the Add Action list, select Set Owner. Set the value from the dropdown list to (variable) Assignee. This will set the owner to the worker we selected earlier according to the What shift is it? outcome.
  4. Click the Save Changes button.

Your automated dispatcher should now be complete.

Next Steps

Once you have a basic automated dispatcher in place then you can start making improvements to make it even more useful.

Skills

Prior to choosing an assignee you could scan the content of a message for particular keywords in order to classify it. With this classification you could then choose from a list of workers who have the necessary skills required to resolve it.

Schedules

Rather than assuming workers are always available in particular shifts, you could implement a custom plugin that would set the assignee variable based on an external calendar or schedule that's already maintained by your company. In the future we'll provide advanced worker scheduling functionality in Cerb5, but plugins give you the ability to do this right now.

Content-specific Exclusions

There may be certain kinds of messages that you want to exclude from dispatching. You can do this through buckets, or any other classification. In the example above you could prepend additional No outcomes to the Is this conversation assignable? decision. These would instruct the dispatcher to abort and do nothing.


Properties ID: 000086   Views: 5901   Updated: 2 years ago
Filed under:
knowledgebase comments powered by Disqus