Template - Support
ScoreTicket urgency
How urgently a support ticket needs a response, on a four-level rubric.
A score decision that places each ticket on an ordered urgency scale, so queues can be sorted by need instead of arrival time.
The decision
How urgent is this support ticket?
Levels, lowest to highest
- 0
Low: No time pressure. A question, feedback, or a minor cosmetic issue. - 1
Normal: A real problem with a workaround, or affecting one person. - 2
High: Blocks an important workflow or has a near deadline. - 3
Critical: Outage, data loss, or revenue impact affecting many users.
Evidence checks (asked in the same request)
- Blocking issue: The customer is blocked from using the product.
- Wide customer impact: Multiple users or production systems are affected.
- Negative sentiment: The customer expresses frustration or dissatisfaction.
Expected output: A score from 0 to 3 (a probability-weighted average that can fall between levels), a probability for each level, and a confidence value, plus one probability per evidence check.
Input
The Decisions API reads one input. Combine these fields into it as labeled text so the model sees the facts the decision depends on.
| Field | Type | Required | Description |
|---|---|---|---|
message | string | Yes | The customer's message, verbatim. Include the subject line if there is one. |
plan | string | No | The customer's plan, if urgency targets differ by tier. |
Worked examples
Checkout outage affecting all customers
Our checkout has been down for 40 minutes. All of our customers get a 502 error and we are losing sales. Need help immediately.
A careful reviewer would say: Critical. An outage with revenue impact across all customers is the top of the rubric.
Run this exampleA how-to question with no deadline
No rush. When you get a chance, could you tell me how to export the monthly report as CSV?
A careful reviewer would say: Low. A usage question, explicitly not time-sensitive.
Run this example
Expected answers are human judgments written for this template, not model output.
How it works
Urgency is ordered, so it is a score rather than a choice. The difference matters: a score tells you a ticket sits between High and Critical, where a choice would treat the four labels as unrelated categories.
The level descriptions are the rubric. Write them in terms of observable facts, such as who is affected and whether there is a workaround, rather than adjectives like "serious".
Because the score is a weighted average, a 1.5 can mean "probably Normal or High" or "split between Low and Critical". The per-level probabilities tell you which. Check them before acting on a mid-range score.
Human review and thresholds
Recommended review policy
Sorting a queue by score is low-risk and can be fully automated. Paging someone is not: require a high probability on the Critical level, or a person's confirmation, before waking an on-call engineer.
Choosing thresholds
Under-rating a critical ticket is far more expensive than over-rating a normal one. If that holds for you, act on the probability of the top level rather than the rounded score, and accept more false alarms in exchange for fewer misses.
- Starting automation threshold
- 80%
- Starting don’t-decide threshold
- 50%
Starting points for the playground, not recommendations. The right values depend on your costs and on how the model’s confidence tracks accuracy on your data. Calibrate them.
Limitations
- Customers who write "URGENT" in every message will score higher than calm customers with worse problems. The evidence checks help, and account data helps more.
- The rubric encodes one company's priorities. A level that means "respond within the hour" for you needs to be written that way.
- Urgency is not importance. Combine it with account tier if high-value customers should be seen first. See the customer priority template.
Use it in your code
The template definition is plain JSON: the question, the evidence checks, the input fields, and the starting policy. The SDK call below sends the same question and checks to the Decisions API from your server.
{
"$format": "thethinkloop.template/v1",
"slug": "ticket-urgency",
"title": "Ticket urgency",
"decides": "How urgently a support ticket needs a response, on a four-level rubric.",
"question": {
"name": "decision",
"type": "score",
"instructions": "How urgent is this support ticket?",
"levels": [
{
"label": "Low",
"description": "No time pressure. A question, feedback, or a minor cosmetic issue."
},
{
"label": "Normal",
"description": "A real problem with a workaround, or affecting one person."
},
{
"label": "High",
"description": "Blocks an important workflow or has a near deadline."
},
{
"label": "Critical",
"description": "Outage, data loss, or revenue impact affecting many users."
}
]
},
"evidenceChecks": [
{
"name": "factor_1",
"label": "Blocking issue",
"type": "predicate",
"instructions": "The customer is blocked from using the product."
},
{
"name": "factor_2",
"label": "Wide customer impact",
"type": "predicate",
"instructions": "Multiple users or production systems are affected."
},
{
"name": "factor_3",
"label": "Negative sentiment",
"type": "predicate",
"instructions": "The customer expresses frustration or dissatisfaction."
}
],
"inputs": [
{
"name": "message",
"type": "string",
"required": true,
"description": "The customer's message, verbatim. Include the subject line if there is one."
},
{
"name": "plan",
"type": "string",
"required": false,
"description": "The customer's plan, if urgency targets differ by tier."
}
],
"expectedOutput": "A score from 0 to 3 (a probability-weighted average that can fall between levels), a probability for each level, and a confidence value, plus one probability per evidence check.",
"examples": [
{
"title": "Checkout outage affecting all customers",
"input": "Our checkout has been down for 40 minutes. All of our customers get a 502 error and we are losing sales. Need help immediately.",
"expected": "Critical"
},
{
"title": "A how-to question with no deadline",
"input": "No rush. When you get a chance, could you tell me how to export the monthly report as CSV?",
"expected": "Low"
}
],
"startingPolicy": {
"automateAt": 0.8,
"abstainBelow": 0.5,
"note": "A starting point for exploration, not a recommendation. Calibrate against your own labeled examples."
}
}import OpenAI from "openai"; // openai >= 7.30.0
const client = new OpenAI(); // reads OPENAI_API_KEY on the server
const decision = await client.decisions.create({
model: "gpt-6-luna",
input: "Our checkout has been down for 40 minutes. All of our customers get a 502 error and we are losing sales. Need help immediately.",
questions: [
{
type: "score",
name: "decision",
instructions: "How urgent is this support ticket?",
levels: [
{
label: "Low",
description: "No time pressure. A question, feedback, or a minor cosmetic issue."
},
{
label: "Normal",
description: "A real problem with a workaround, or affecting one person."
},
{
label: "High",
description: "Blocks an important workflow or has a near deadline."
},
{
label: "Critical",
description: "Outage, data loss, or revenue impact affecting many users."
}
]
},
{
type: "predicate",
name: "factor_1",
instructions: "The customer is blocked from using the product."
},
{
type: "predicate",
name: "factor_2",
instructions: "Multiple users or production systems are affected."
},
{
type: "predicate",
name: "factor_3",
instructions: "The customer expresses frustration or dissatisfaction."
}
],
});
// Answers come back in question order. A question can also be refused.
const [main, ...checks] = decision.answers;
if (main.type === "refusal") throw new Error("The model declined to answer.");
if (main.type === "score") {
console.log(main.score, main.confidence, main.probabilities);
}
Download it as ticket-urgency.json, or browse all developer resources.
Need this decision tuned to your policy?
Related
- Score template
Customer priority
What priority a request should get, combining urgency with account context.
- Score template
SLA breach risk
How likely a ticket is to breach its response-time commitment.
- Predicate template
Engineering escalation
Whether a support issue needs engineering, or can be resolved by support.
- Guide
Predicate vs choice vs score
Most decisions can be phrased three ways, and each returns different information. Which type fits which decision, with worked examples and common mistakes.
- Guide
Confidence thresholds
Probability, confidence, accuracy, calibration, and correctness are different things. How to set a review policy from the cost of each kind of mistake.
- Guide
AI decision routing
A routing decision is several smaller decisions plus a rule that combines them. How to design that rule, where people fit, and what to log.