> ## Documentation Index
> Fetch the complete documentation index at: https://docs.neoagent.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Ticket Dispatch (Suggest Technician)

> Intelligently recommend which technician should handle a ticket

The Ticket Dispatch (Suggest Technician) action intelligently recommends which technician should handle a ticket. It considers factors like availability, skills, current workloads, and customer relationships to make the best suggestion.

<Tip>
  Stop playing ticket assignment roulette! This action takes the guesswork out of dispatching by automatically finding the best technician for each ticket. It saves managers time, balances workloads fairly, and ensures tickets go to people who actually know how to solve them.
</Tip>

<Info>
  This action can **suggest** a technician, but you'll need to add the **Assign Ticket to Technician** action afterward to actually make the assignment in your PSA.
</Info>

## Quick start

<Steps>
  <Step title="Choose your trigger">
    Add to workflows triggered by "Ticket Created" or when tickets move between boards/statuses.
  </Step>

  <Step title="Select your technician pool">
    Choose how Neo gets the pool of technicians: manually select them (Dashboard Pool), pull from the ticket's company team, or use the ticket's board team (ConnectWise only).
  </Step>

  <Step title="Enable smart features">
    Turn on calendar checking and workload balancing (both are on by default).
  </Step>

  <Step title="Add assignment action">
    Follow this action with "Assign Ticket to Technician" to actually make the assignment.
  </Step>
</Steps>

## How it works

This action uses intelligent analysis to recommend the best technician:

1. **Analyzes ticket requirements** - Reviews ticket content, priority, and complexity
2. **Checks technician availability** - Considers calendars, working hours, and current status
3. **Evaluates expertise** - Matches technicians to similar past tickets and skill areas
4. **Balances workload** - Considers current ticket assignments and capacity
5. **Maintains relationships** - Prefers technicians who have worked with the customer before

## Setup

### Technician pool

The first thing to configure is where Neo should get the pool of technicians to consider for dispatch. You can choose from three sources using the **Technician Pool Source** dropdown:

<Frame caption="Select where Neo should get the pool of technicians from">
  <img src="https://mintcdn.com/neoagent/jTs_xMm5MMFpQnEK/images/actions/dispatch-pool-selection-1.png?fit=max&auto=format&n=jTs_xMm5MMFpQnEK&q=85&s=6e2dee05ac53e654449a2f1d639f024a" alt="Technician Pool Settings showing the pool source dropdown" width="947" height="301" data-path="images/actions/dispatch-pool-selection-1.png" />
</Frame>

<Frame caption="The three available pool source options">
  <img src="https://mintcdn.com/neoagent/jTs_xMm5MMFpQnEK/images/actions/dispatch-pool-selection-2.png?fit=max&auto=format&n=jTs_xMm5MMFpQnEK&q=85&s=351d8591b60db23be56345340c3c63ec" alt="Technician Pool Source dropdown expanded showing Dashboard Pool, Company Team, and Board Team options" width="955" height="309" data-path="images/actions/dispatch-pool-selection-2.png" />
</Frame>

<Tabs>
  <Tab title="Dashboard Pool">
    **Dashboard Pool** lets you manually select a fixed set of technicians directly in the workflow configuration. This is the default option.

    Use this when you have a specific team or group of technicians you always want Neo to choose from, regardless of the ticket's company or board.

    After selecting this option, use the **Technician Pool** dropdown below it to pick which technicians should be included.
  </Tab>

  <Tab title="Company Team">
    **Company Team** dynamically fetches technicians from the team assigned to the ticket's company in your PSA.

    Neo automatically looks up which technicians are assigned to that company's account team and considers only those technicians for dispatch. This is useful when different companies are managed by different teams, and you want dispatch to respect those assignments.

    <Info>
      Make sure your companies have a team assigned in your PSA. If a company has no team configured, Neo won't have any technicians to choose from.
    </Info>
  </Tab>

  <Tab title="Board Team (ConnectWise only)">
    **Board Team** builds the technician pool from the team that is already assigned to the ticket in ConnectWise.

    Here's how it works:

    1. In ConnectWise, a board can have **many teams** (e.g., "1st Line Support", "Networking", "Server Team")
    2. Each ticket on that board can only have **one team** assigned to it
    3. When dispatch runs, Neo reads which team the ticket belongs to, then pulls all technicians from that team into the pool

    **How does the ticket get a team?** You have two options:

    * **Manually** -- a dispatcher or technician sets the team on the ticket in ConnectWise before the workflow runs
    * **Automatically with Triage** -- use the **Ticket Triage** action before dispatch. Triage analyzes the ticket content and assigns the correct team based on your instructions (e.g., "if the ticket is about server issues, assign to the Server Team"). Then when dispatch runs next, it automatically picks up the technicians from that team.

    <Tip>
      **Triage + Board Team Dispatch is a powerful combo.** Triage decides *which team* should handle the ticket, and Dispatch decides *which technician* on that team is the best fit. This gives you intelligent two-step routing without maintaining a static technician list.
    </Tip>
  </Tab>
</Tabs>

### Other settings

**Smart features**: Enable calendar checking, workload balancing, and expertise matching.

**Custom instructions**: Provide specific guidance for your team's needs and preferences.

**Scheduling options**: Enable automatic calendar booking to reserve time for assigned work.

**Round Robin mode (optional)**: Use fair rotation instead of AI optimization for equal distribution.

### Teams availability (presence & shifts)

With the [Teams Technician Mapping & Availability](/integrations/teams/workforce-availability) integration connected **and technicians mapped to their Microsoft accounts** (the integration's auto-map does this — see the [setup guide](/integrations/teams/workforce-availability#set-it-up)), the **Teams availability** toggle makes dispatch aware of each technician's live Microsoft Teams presence and, optionally, their Teams Shifts rota:

* **Skip technicians who are on a break** (on by default) — technicians who are Away, Offline, or out of office in Teams are not assigned work starting now. Busy, In a call, Presenting, Do not disturb, and Be right back still count as working. The check is time-scoped: a schedule entry booked further in the future is not blocked by someone being on a break right now.
* **Teams holding the shift rota** — if your service desk runs its schedule in the Teams **Shifts** app, list the team(s) here. Neo prefers technicians whose shift covers the proposed assignment time and deprioritizes mapped technicians with no shift in the planning window.

Both checks degrade gracefully: if Teams can't be reached or technicians aren't mapped, dispatch falls back to its normal PSA-based logic and the run output says why. Round Robin honors the on-break skip too (shifts apply to AI dispatch only). Custom instructions override the defaults — e.g. *"Treat Do not disturb as unavailable"* or *"Ignore Teams presence for P1 tickets"*. If presence isn't being picked up the way you expect, see the integration page's [troubleshooting section](/integrations/teams/workforce-availability#troubleshooting).

### Writing effective custom instructions

Custom instructions help Neo make better dispatch decisions, but they need to be clear and specific. Here's how to write instructions that work:

<Tip>
  **Key principles for good custom instructions:**

  * Always use full names (first and last) for technicians
  * Write dates in full format (e.g., "2nd October 2025" instead of "02/10/25")
  * Be specific about clients, ticket types, or conditions that trigger the rule
  * Identify exact technicians, skill tags, or team names for routing
</Tip>

#### Examples: Good vs. Bad

| ❌ Bad                             | 🤔 Why It's Problematic                                                                                   | ✅ Better Approach                                                                                                                  |
| --------------------------------- | --------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| "Jordan is off 02/10/25-11/10/25" | Ambiguous date format (US vs. UK) and missing last name make it hard for Neo to identify the right person | "Jordan Kim is on PTO from 2nd October 2025 to 11th October 2025 — exclude from assignment suggestions during that period"         |
| "Send security issues to Priya"   | Too vague—which clients? What severity level? No context for when this applies                            | "Critical network outages for Apex Fabrication must go to Priya Shah or Mateo Alvarez"                                             |
| "Don't assign waiting tickets"    | Unclear what "waiting" means—could be a status, board, or custom field                                    | "When calculating workload, ignore tickets in the 'Waiting on Customer' status so team members are not penalized for stalled work" |

## What you get

After running, you'll have technician recommendations with detailed reasoning, availability analysis, and workload considerations ready to apply with assignment actions.

<Tip>
  **Running this action on high-volume workflows?** See [Parallel Dispatch](/building-automations/managing-workflows/parallel-dispatch) — Neo Agent automatically prevents double-bookings when multiple dispatches run at the same time, so you can drop the **Process Entities Sequentially** safety knob and recover full burst throughput.
</Tip>

## Common use cases

<AccordionGroup>
  <Accordion title="Intelligent ticket routing">
    Automatically route new tickets to the best available technician based on skills, availability, and workload balance.
  </Accordion>

  <Accordion title="Customer relationship continuity">
    Maintain customer relationships by preferring technicians who have previously worked with specific clients.
  </Accordion>

  <Accordion title="Workload balancing">
    Distribute tickets fairly across your team while still considering expertise and availability.
  </Accordion>

  <Accordion title="Round Robin dispatch">
    Use simple, fairness-first rotation to spread work evenly across your team, regardless of workload optimization.
  </Accordion>
</AccordionGroup>

## Best practices

<AccordionGroup>
  <Accordion title="Start simple">
    Begin with basic availability and workload checking enabled. Add more sophisticated rules later once you see how it works.
  </Accordion>

  <Accordion title="Keep calendar checking enabled">
    Calendar integration ensures Neo considers technician availability and working hours when making suggestions.
  </Accordion>

  <Accordion title="Use custom instructions">
    Add specific guidance like "Prefer Sarah for network issues" or "Critical tickets go to senior technicians first."
  </Accordion>

  <Accordion title="Enable smart scheduling">
    Turn on automatic calendar booking to not only assign technicians but also reserve time in their calendars.

    You can also control the name of the booked entry through your custom instructions — for example, *"Name every schedule entry 'NEO - \[client] - \[short summary]'"*. If you don't specify a naming convention, the entry is named after the ticket title (the default).

    **HaloPSA appointment types:** Neo can set the appointment *type* on the entries it books (e.g. Firm vs Tentative, Remote vs Onsite) from your own Halo appointment types. Two ways to control it, and they work together:

    * **Default appointment type** — a dropdown in the calendar settings, populated from your Halo appointment types. Neo puts this type on every entry it books unless a per-ticket rule overrides it.
    * **Per-ticket, from custom instructions** — tell Neo which type to use per situation, for example *"Use 'Firm - Remote' for strictly scheduled remote tickets and 'Tentative - Remote' for work that just needs to happen sometime today; use the Onsite equivalents for on-site visits."*

    Neo matches the name to your tenant's appointment types. If a ticket matches no rule and no default is set, the entry keeps Halo's own default type.
  </Accordion>

  <Accordion title="Balance expertise and fairness">
    Use AI optimization for skill matching or Round Robin mode for equal distribution, depending on your priorities.
  </Accordion>

  <Accordion title="Monitor and adjust">
    Check Event History to see dispatch reasoning and adjust settings based on actual assignment effectiveness.
  </Accordion>

  <Accordion title="Prevent re-processing assigned tickets">
    To prevent Neo from re-processing tickets that already have an owner, add a Filter Ticket condition to your Dispatch workflow:

    <Tabs>
      <Tab title="ConnectWise Manage">
        Add a filter condition: **`owner.id` is null**
      </Tab>

      <Tab title="Autotask">
        Add a filter condition: **`assignedResourceID` is null**
      </Tab>
    </Tabs>

    This ensures Neo will never re-process tickets that already have an assigned technician, even if the workflow triggers late.
  </Accordion>
</AccordionGroup>

## Example workflows

<AccordionGroup>
  <Accordion title="Smart New Ticket Dispatch">
    1. **Trigger:** New ticket created
    2. **Ticket Dispatch** - Suggest best technician based on skills and availability
    3. **Assign Ticket to Technician** - Apply suggestion and update ticket status
    4. **Result:** Every new ticket gets optimal technician assignment automatically
  </Accordion>

  <Accordion title="Priority-Based Assignment">
    1. **Trigger:** Ticket priority changed to "High" or "Critical"
    2. **Ticket Dispatch** - Find senior technician with availability
    3. **Assign Ticket to Technician** - Assign immediately with calendar booking
    4. **Notify Ticket's Owner** - Alert technician about urgent assignment
    5. **Result:** High-priority tickets get immediate attention from qualified staff
  </Accordion>

  <Accordion title="Round Robin Fair Distribution">
    1. **Trigger:** New ticket created in specific queue
    2. **Ticket Dispatch** - Round Robin mode for fair rotation
    3. **Assign Ticket to Technician** - Apply rotation assignment
    4. **Result:** Work distributed equally across team members
  </Accordion>

  <Accordion title="Triage + Board Team Dispatch (ConnectWise)">
    1. **Trigger:** New ticket created
    2. **Ticket Triage** - Analyze the ticket and assign the correct team (e.g., "Server issues go to the Server Team")
    3. **Ticket Dispatch** (Board Team pool) - Neo reads the team from the ticket, pulls its technicians, and suggests the best one
    4. **Assign Ticket to Technician** - Apply the assignment
    5. **Result:** Triage picks the right team, Dispatch picks the right technician on that team -- fully automated two-step routing
  </Accordion>
</AccordionGroup>

## Frequently asked questions

<AccordionGroup>
  <Accordion title="How does Neo calculate technician workload?">
    Neo calculates workload based on settings you configure under "Consider technician Workload" in dispatch settings:

    * **Time period**: Choose how many days back Neo should look (e.g., last 7 days)
    * **Activity criteria**: Select what counts as activity:
      * Ticket last update (any change to the ticket)
      * Last ticket time entry (logged work time)
      * Last ticket note (comments or updates)

    Neo counts all open tickets (regardless of status, board, etc.) that had the selected activity within your chosen time period. If you want to filter by specific status, board, or any other field, you can customize this in custom instructions. For example, "When calculating workload, exclude tickets on the 'Waiting for Customer' board/status."

    <Tip>
      Start with a 7-day lookback period using "Ticket last update" for a balanced view of recent activity.
    </Tip>
  </Accordion>

  <Accordion title="How do I set up technician work schedules for dispatch?">
    Neo automatically reads technician working hours from your PSA system. The setup process depends on which PSA you're using:

    <Tabs>
      <Tab title="ConnectWise Manage">
        **Setup in ConnectWise Manage:**

        1. Create different calendar templates for each work schedule (e.g., "7AM-4PM Schedule", "8:30AM-5PM Schedule", "9AM-6PM Schedule")
        2. Assign the appropriate calendar to each technician in their member profile
        3. Neo will automatically use these calendars when checking availability

        **For your example schedules:**

        * Create a "7AM-4PM" calendar and assign it to your 2 help desk technicians
        * Create an "8:30AM-5PM" calendar for your 2 technicians with that schedule
        * Create a "9AM-6PM" calendar for your 1 technician with that schedule

        <Tip>
          Make sure your technician calendars in ConnectWise are kept up to date. Neo checks these calendars in real-time when making dispatch suggestions.
        </Tip>
      </Tab>

      <Tab title="Autotask">
        **Setup in Autotask:**
        Neo reads working hours from your Autotask calendar. **Important:** Neo cannot see Outlook events—it only sees the Autotask calendar. Working hours are defined under Internal Locations in Autotask.

        1. In Autotask, go to **Admin** > **Organization Settings and Users** > **Your Organization** > **Internal Locations** > **Select your Organization** > **Hours**
        2. Configure your organization's standard working hours
        3. Neo will use these business hours when checking technician availability

        **For technicians with different working hours:**
        If you have technicians with different schedules from your standard internal location hours, you have two options:

        **Option 1: Create separate internal locations (most robust)**

        1. Create another internal location in Autotask with different working hours
        2. Assign that internal location to the technician
        3. Neo will automatically detect and respect each technician's assigned location hours

        <Info>
          This is the most robust way to handle different working hours. If you need help setting this up, reach out to support.
        </Info>

        **Option 2: Use custom instructions (most simple)**
        Add specific instructions to your Neo workflow's custom instructions. For example:

        "Henry's working hours are from 8:30 AM to 5:30 PM — do not assign any tickets to him outside these hours."

        "When dispatching tickets before 8:30 AM, prefer technicians on the 7AM-4PM schedule. For tickets after 5 PM, prefer technicians on the 9AM-6PM schedule."
      </Tab>

      <Tab title="Halo PSA">
        **Setup in Halo PSA:**
        Neo reads working hours directly from each agent's profile in Halo. Each agent can have their own timezone and work schedule configured individually.

        1. In Halo, go to **Configuration** > **Teams & Agents** > **Agents**
        2. Select the agent you want to configure
        3. In the **Details** tab, configure the following fields:
           * **Time Zone**: Set the agent's timezone (e.g., "(UTC-05:00) Eastern Time (US & Canada)")
           * **Work Hours**: Select the appropriate working hours template (e.g., "Default Working Hours" or a custom schedule)

        <Frame caption="Configure each agent's timezone and working hours in their Halo profile">
          <img src="https://mintcdn.com/neoagent/sf_KPg6VsD9669Rc/images/halo/halo-agent-working-hours-timezone.png?fit=max&auto=format&n=sf_KPg6VsD9669Rc&q=85&s=2ac374753310683d0b5953eaf76bf3be" alt="Halo agent profile showing Time Zone and Work Hours configuration" width="2836" height="1374" data-path="images/halo/halo-agent-working-hours-timezone.png" />
        </Frame>

        **For technicians with different schedules:**
        Since Halo allows per-agent configuration, simply edit each agent's profile to set their specific timezone and work hours. Neo will automatically respect each agent's individual schedule when making dispatch suggestions.

        <Tip>
          Make sure all your technicians have their **Time Zone** and **Work Hours** fields properly configured in Halo. Neo uses these settings in real-time when checking availability for dispatch.
        </Tip>
      </Tab>
    </Tabs>
  </Accordion>

  <Accordion title="How do I assign multiple technicians?">
    You can configure Neo to suggest multiple technicians for a single ticket using the "Number of technicians to suggest" setting.

    **To set up multiple technician suggestions:**

    1. Open the **Configure Message Settings** section in your Ticket Dispatch action
    2. Find the **Number of technicians to suggest** field
    3. Increase this number to however many technicians you want suggested (e.g., 10)

    <Frame caption="Configure how many technicians Neo should suggest for each ticket">
      <img src="https://mintcdn.com/neoagent/giEXd1gVpVq-91FJ/images/actions/dispatch-message-settings.png?fit=max&auto=format&n=giEXd1gVpVq-91FJ&q=85&s=2dcd801ee3680d04b325d4b0e58347bf" alt="Number of technicians to suggest setting" width="1154" height="482" data-path="images/actions/dispatch-message-settings.png" />
    </Frame>

    **How multiple technicians are assigned:**

    When you use the "Assign Ticket to Technician" action after getting multiple suggestions, the PSA will assign them differently based on your system:

    <Tabs>
      <Tab title="ConnectWise Manage">
        * **First technician**: Assigned as the ticket Owner (primary resource)
        * **Additional technicians**: Added as Resources (secondary resources)
      </Tab>

      <Tab title="Autotask">
        * **First technician**: Assigned as the Primary Resource
        * **Additional technicians**: Added as Secondary Resources
      </Tab>
    </Tabs>

    <Tip>
      This is useful for complex tickets that require multiple skill sets or when you want to ensure coverage across shifts.
    </Tip>
  </Accordion>
</AccordionGroup>
