The node contracts
Each node carries a contract — what comes in, what happens, what goes out. This is the text your AI receives, node for node, when you hand the graph over.
Ticket arrives Input
Entry point. A ticket comes in — email, in-app form or chat. Capture the raw message, the account, its plan, and any error identifiers the customer included. The original wording stays untouched; triage works on a copy.
- → leads to Classify the request
Classify the request
Read the ticket and produce three fields: category (billing, bug, how-to, or unclear), severity (blocking, degraded, question), and a one-sentence summary in neutral words. Base the category only on what the customer describes, not on which team is currently least busy. If two categories genuinely apply, pick the one blocking the customer and note the second.
- → leads to Route to queue
- ← comes from Ticket arrives
Route to queue Router
Distribute by category — the connection labels are the routing rules. Billing questions go to the billing queue, verified-or-suspected defects to bug verification, usage questions to the knowledge-base answer step. Tickets classified unclear go to a human dispatcher with the classification attempt attached; they never sit in a default queue unread.
- → leads to Billing queue — billing
- → leads to Reproduce the bug — bug
- → leads to Answer from knowledge base — how-to
- ← comes from Classify the request
- ← comes from Resolved? — not resolved → re-queue (max 1)
Billing queue
Handled by the team with access to invoices and payment data. Standard cases (receipt copy, VAT id change, seat count) follow the playbook; anything touching refunds above the self-serve limit is answered only after the account owner approves. Response commitment: same business day.
- → leads to Resolved?
- ← comes from Route to queue — billing
Reproduce the bug
Try to reproduce the reported behaviour on the customer's plan and, if named, their browser or device. Reproduced → write the steps, environment, and expected vs. actual result. Not reproduced → go back to the customer with one specific question (exact steps, screenshot, or error id) — not with "could you give us more details". Only reproduced-and-documented reports move on to engineering.
- → leads to Engineering escalation — reproduced + documented
- ← comes from Route to queue — bug
Answer from knowledge base
Answer how-to questions from the documented material: link the exact section, and summarise the answer in two sentences in the reply itself — the link supports the answer, it does not replace it. If the knowledge base has no answer, write one from product knowledge, flag the gap, and file a stub article so the next person finds it.
- → leads to Resolved?
- ← comes from Route to queue — how-to
Engineering escalation
A reproduced defect with documentation becomes an engineering ticket: severity, reproduction steps, environment, affected accounts. Blocking issues page the on-call engineer; everything else lands in the triage column of the current sprint board. The support ticket stays open and linked — the customer hears about the fix from support, not from a release note.
- → leads to Resolved? — fix shipped or workaround
- ← comes from Reproduce the bug — reproduced + documented
Resolved? Evaluator
Before any ticket closes, check: the customer's actual question is answered (not a neighbouring one), the reply names concrete steps or a concrete fix, and the customer has confirmed — or 72 hours have passed since the answer with no reply. Fails → back to the owning queue with the failing criterion named, at most one round. A second failure goes to the support lead, never silently back into the loop.
- → leads to Closed with record — criteria met
- → leads to Route to queue — not resolved → re-queue (max 1)
- ← comes from Billing queue
- ← comes from Engineering escalation — fix shipped or workaround
- ← comes from Answer from knowledge base
Closed with record Output
The result: a closed ticket with category, resolution, and time-to-resolution on record, feeding the weekly support report. How-to closures increment the counter on their knowledge-base article — the articles causing the most tickets are the ones to rewrite first.
- ← comes from Resolved? — criteria met