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.mdfor naming and routing logiccategories.jsonfor 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:
- Go to
Configuration > Integrations > Halo API - Create a new app
- Copy client ID and secret
- Grant read/update ticket permissions
4) Create Halo webhook
In Halo:
- Go to
Configuration > Integrations > Webhooks - Create webhook for
New Ticket Created - URL:
https://your-server:3000/webhook - 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
- Webhook token mismatch with
WEBHOOK_SECRET - Wrong Halo auth endpoint
- Category names not matching Halo exactly
- 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.


