Skip to content
MSP

Free MSP Tool: Halo AI Ticket Namer - Setup Guide

Scopable Team3 min read
Free MSP Tool: Halo AI Ticket Namer - Setup Guide

Honestly, We just build stuff for the love of the game.

Just a practical utility that fixes a common annoyance in any PSA: worthless ticket subjects and inconsistent category tagging. It's one small example of how AI is creating real leverage for MSPs — not by replacing people, but by cleaning up the grunt work.

Repository:

https://github.com/megalath/halo-ticket-namer

What this tool does

halo-ticket-namer listens for new Halo tickets by webhook, reads the ticket details, then updates:

  • ticket summary (clean, consistent naming)
  • category_1 (from your allowed category list)

You control behavior with two files:

  • RULES.md for naming and routing logic
  • categories.json for allowed category outputs

That is it.

Example output

Input subject:

hey my outlook isnt working i cant send emails

Output summary:

Outlook - Unable to send emails

Output category:

Email & Collaboration

Requirements

  • Halo PSA tenant with API app access
  • Host for the service (VM, container host, or local tunnel for testing)
  • Node.js 18+ or Docker
  • OpenAI API key

Setup in 15 minutes

1) Clone and install

git clone https://github.com/megalath/halo-ticket-namer.git
cd halo-ticket-namer
npm install

2) Configure environment variables

cp .env.example .env

Set values in .env:

HALO_BASE_URL=https://yourcompany.halopsa.com
HALO_AUTH_URL=https://yourcompany.halopsa.com/auth/token
HALO_CLIENT_ID=your-client-id
HALO_CLIENT_SECRET=your-client-secret
OPENAI_API_KEY=sk-...
WEBHOOK_SECRET=a-random-secret-string
PORT=3000
LOG_LEVEL=info

3) Create Halo API application

In Halo:

  1. Go to Configuration > Integrations > Halo API
  2. Create a new app
  3. Copy client ID and secret
  4. Grant read/update ticket permissions

4) Create Halo webhook

In Halo:

  1. Go to Configuration > Integrations > Webhooks
  2. Create webhook for New Ticket Created
  3. URL: https://your-server:3000/webhook
  4. Auth token: same value as WEBHOOK_SECRET

5) Run it

npm run dev

or

npm run build
npm start

Docker option:

docker compose up -d

6) Verify health

curl http://localhost:3000/health

Expected response:

{"ok": true}

Customize naming and categories

RULES.md

Default style is:

[System/App] - [Brief description]

Add your own examples from real tickets. The model follows examples very closely, so this is where consistency comes from.

categories.json

Only categories listed in this file are valid outputs. Match them exactly to your Halo category_1 values.

Common setup mistakes

  1. Webhook token mismatch with WEBHOOK_SECRET
  2. Wrong Halo auth endpoint
  3. Category names not matching Halo exactly
  4. Webhook URL not reachable from Halo

Security checklist

  • Keep secrets in env vars, not code
  • Rotate webhook secret if exposed
  • Restrict webhook endpoint access where possible
  • Avoid logging full ticket payloads in production

Use it, fork it, adapt it, improve it.

If it helps your team move faster, we would love to hear about it.


If you're running SonicWall firewalls alongside Halo, SonicWall's PSA integration with HaloPSA is worth setting up at the same time — auto-ticketing from your firewalls pairs well with clean ticket naming on the way in.

Messy tickets and inconsistent categories are also one of the less obvious places MSP revenue leaks. Fixing the data at the source — before it hits reporting — matters more than most shops realize.

If you're building out your MSP tech stack and want to see how Scopable ties together service delivery visibility and client reporting, request early access.

Ready to stop guessing?

Scopable automates quoting, roadmaps, and QBRs for MSPs. Join the alpha and help shape the platform you actually want.

Quote Your Next Project In Minutes

Get MSP insights weekly

No spam. Unsubscribe anytime.