Auto-triage new ConnectWise PSA tickets and post a Teams digest

By General Input

Every 15 minutes, classify each new ConnectWise PSA ticket, tag urgency, leave an internal note for the technician, and post a digest to Microsoft Teams.

Integrations

  • ConnectWise PSA (Manage)
  • Microsoft Teams

Type

Agentic Task

Categories

  • Customer Support
  • Operations

Build me an agent workflow that auto-triages new ConnectWise PSA service tickets before a human dispatcher touches them, then posts a single rolled-up recap to a Microsoft Teams channel. The goal is to do the classification grunt work, not to replace the dispatcher: never auto-close, never auto-assign an owner, never move boards on its own.

Trigger: cron, every 15 minutes. ConnectWise PSA is not a poll provider, so use a cron schedule plus a filtered list call as the trigger pattern (same approach as our existing ConnectWise + Slack alerts prompt).

On each run, use ConnectWise PSA List Service Tickets with a conditions filter to pull tickets that were created in roughly the last 20 minutes (a little wider than the cron interval so nothing slips between runs) AND are still on the intake board / default queue AND are still in a 'New' style status with no owner. I should be able to set the board name, the new-status names, and the lookback window as workflow inputs. If the board ID is not known up front, fall back to List Service Boards / List Board Statuses to resolve the right IDs.

For every matched ticket the agent should:

1. Read the summary and the initial description (the first ticket note / detail description).

2. Classify urgency as Critical, High, Medium, or Low using concrete language signals. Critical = outage / down / can't access / production / business stopped / VIP company / many users affected. High = single named system unavailable, security-sounding language, named exec. Medium = single user, intermittent, normal service request. Low = how-to, password reset on a non-VIP, cosmetic. Treat VIP company names and a configurable list of critical systems (email, ERP, line-of-business app, etc.) as boosters.

3. Infer ticket type (incident vs request) from the same signals: outage / broken / not working / error = incident; please add / new user / change / how do I = request.

4. Suggest a candidate board / team based on keyword cues (network, email, M365, security, hardware, etc.) but ONLY surface this in the internal note. Do not actually move the ticket.

Write-back to ConnectWise PSA, in this order, per ticket:

a. Update Service Ticket via JSON Patch to set /priority/id to the priority that matches the classified urgency. Resolve priority IDs at the start of the run (the user should be able to map Critical/High/Medium/Low to their own ConnectWise priority records as workflow inputs).

b. Add Note to Service Ticket with internalAnalysisFlag=true (internal only, the customer must never see it). Note body should be short and structured: classified urgency, ticket type guess, suggested board/team, the keyword signals it matched on, and a one-line 'why' summary. Sign the note with a fixed marker like 'Auto-triage by Geni' so we can detect it later.

Idempotency: before doing ANY write on a ticket, fetch its notes and check for an existing internal note that contains the 'Auto-triage by Geni' marker. If one exists, skip the ticket entirely. Never write twice on the same ticket. If a write fails partway (priority succeeds but note fails, or vice versa), log it and move on, do not retry the priority change.

After all tickets in the batch are processed, post ONE rolled-up Microsoft Teams message via Create Channel Message to a configurable team + channel (the dispatch channel). Format:

Header line: 'Triage recap — X tickets classified at <time>'.

Then a Critical section (only if any), then High, then a single combined Medium/Low count. Each line: ticket #, company, one-line summary, classified urgency, and a direct deep link to the ticket in ConnectWise (https://{siteUrl}/v4_6_release/services/system_io/router/openrecord.rails?locale=en_US&recordType=ServiceFV&recid={ticketId}).

If zero new tickets were triaged this run, do NOT post anything to Teams. Silent runs are fine, dispatch does not need a 'nothing happened' ping every 15 minutes.

Workflow inputs I should be able to set when configuring this: ConnectWise intake board name(s), 'new' status names that count as untriaged, priority ID mapping for Critical/High/Medium/Low, VIP company list, critical systems list, Teams team + channel, and cron interval.

Hard constraints, please respect all of them: never call Update Service Ticket for status, owner, or board; only /priority/id. Internal notes must be internalAnalysisFlag=true so customers do not see them. Skip anything older than the lookback window even if it matches the other filters, so a backlog import does not get auto-triaged. Be conservative on classification, default to Medium when the description is ambiguous, and say so in the note.

Related prompts

Explore more prompts
Screen chartered vessels for AIS gaps and sanctions red flagsConnectWise PSA agreement margin board for monthly reviewsQuarterly business review prep desk for ConnectWise PSATimesheet completion board for your ConnectWise PSA techsCatch phishing domains impersonating your brand each morningDaily SonarCloud quality gate status board in TeamsClose won in Dynamics 365 and invoice when a contract is signedWeekday Teams reminders for your Blackboard grading backlogAuto-summarize new pull requests in Microsoft TeamsTurn stalled HubSpot deals into Microsoft Planner tasks