Skill: CRM Service-Ticket Routing & Resolution (task_group_003)
Environment
- Base URL:
http://34.46.77.124:8003 (from environment_access.md).
- Do not start local env containers or read
env/ source.
- If a task prompt mentions a local URL, override it with the remote base URL above.
General Output Convention
- Produce a single JSON file named
answer.json.
- Preserve the exact top-level keys and nested structure shown in the task’s
answer_template.json.
- Preserve the original order of items (e.g., ascending
ticket_id / case_id) unless the prompt explicitly requests a sort.
- Use empty string
"" for absent string fields, 0.0 for absent numeric fields, and false for absent booleans rather than omitting the key.
1. Ticket-Batch Routing (train_001 pattern)
Input
- CSV or JSON list of tickets with fields such as
ticket_id, account_id, reported_service_type, customer_report.
Per-Ticket Decision Schema
{
"ticket_id": "...",
"account_id": "...",
"final_resolution_status": "RESOLVED | PENDING_ACTION | ESCALATED | FAILED",
"diagnostic_needed": true | false,
"latency_issue": true | false,
"stability_issue": true | false,
"bandwidth_issue": true | false,
"outage_id": "OUT-XXXX or empty string",
"escalation_team": "NONE | FIELD_OPS | TIER2_SUPPORT | NETWORK_ENGINEERING | ACCOUNTS_PAYABLE",
"resolution_route": "AUTO_TROUBLESHOOTING | OUTAGE_WAIT | ESCALATION | INELIGIBLE_ACCOUNT"
}
Routing Rules (inferred from gold answer)
- General connectivity / speed complaints (latency, packet loss, intermittent) →
diagnostic_needed: true, all issue flags (latency_issue, stability_issue, bandwidth_issue) set to true, final_resolution_status: RESOLVED, resolution_route: AUTO_TROUBLESHOOTING, escalation_team: NONE.
- Active outage mention →
final_resolution_status: PENDING_ACTION, resolution_route: OUTAGE_WAIT, populate outage_id, no diagnostics, no issue flags.
- Line-work / physical damage / capacity errors →
final_resolution_status: ESCALATED, resolution_route: ESCALATION, set escalation_team (e.g., FIELD_OPS), diagnostic_needed: true, all issue flags true.
- Account hold / bad account / authentication failure →
final_resolution_status: FAILED, resolution_route: INELIGIBLE_ACCOUNT, no diagnostics, no issue flags, no outage.
Batch Summary Schema
{
"RESOLVED": <int>,
"PENDING_ACTION": <int>,
"ESCALATED": <int>,
"FAILED": <int>,
"tickets_requiring_customer_wait": <int>
}
- Count
tickets_requiring_customer_wait as the subset of tickets where the customer must wait (e.g., outage-wait or pending-action tickets).
2. Case-Queue Self-Service vs Billing vs Transfer (train_002 pattern)
Input
- JSON list of cases with
case_id and a short reported_issue description.
Per-Case Decision Schema
{
"case_id": "...",
"customer_id": "CUST-XXXX",
"line_id": "LINE-XXXX",
"primary_action": "RESEAT_SIM | SEND_PAYMENT_REQUEST | TOGGLE_ROAMING | GRANT_MESSAGING_PERMISSION | DISCONNECT_VPN | ...",
"secondary_action": "NO_ACTION | RESUME_LINE_REBOOT | ...",
"permission": "NONE | storage | ...",
"bill_id": "BILL-XXXX or empty string",
"charge_amount_usd": 0.00,
"final_route": "SELF_SERVICE | BILLING_RECOVERY | CARRIER_UPDATE | HUMAN_TRANSFER"
}
Decision Rules (inferred from gold answer)
| Reported Issue |
Primary Action |
Secondary Action |
bill_id |
charge_amount_usd |
final_route |
| No service after commute / physical jostle |
RESEAT_SIM |
NO_ACTION |
"" |
0.0 |
SELF_SERVICE |
| Line suspended, customer ready to pay overdue |
SEND_PAYMENT_REQUEST |
RESUME_LINE_REBOOT |
BILL-XXXX |
amount from account |
BILLING_RECOVERY |
| Traveling abroad, no mobile data |
TOGGLE_ROAMING |
NO_ACTION |
"" |
0.0 |
SELF_SERVICE |
| Messaging app cannot send photos |
GRANT_MESSAGING_PERMISSION |
NO_ACTION |
"" |
0.0 |
SELF_SERVICE |
| Mobile data works but slow |
DISCONNECT_VPN |
NO_ACTION |
"" |
0.0 |
SELF_SERVICE |
- Map
case_id → customer_id and line_id by replacing the prefix (CASE- → CUST- and CASE- → LINE-).
charge_amount_usd uses two decimal places.
permission is "NONE" unless the issue explicitly involves a missing app permission (e.g., messaging storage).
Queue Summary Schema
{
"self_service_fixes": <int>,
"billing_recoveries": <int>,
"carrier_updates": <int>,
"human_transfers": <int>
}
3. Enterprise Complaint Response (train_003 pattern)
Input
- Free-text email (
client_complaint_email.txt) plus a response_requirements.json specifying required fields and naming style.
Output Schema
{
"incident_id": "INC-XXXX",
"enterprise_account_id": "ENT-XXXX",
"root_cause_category": "<free-text description of root cause>",
"contributing_alert_issue": "ARCHIVED_ALERT_ROUTE | ...",
"failure_window": {
"start_date": "YYYY-MM-DD",
"end_date": "YYYY-MM-DD",
"failed_days": <int>
},
"backfill_days": <int>,
"sla_credit_percent": <int>,
"severity": "Critical | High | Medium | Low",
"engineering_owner": "<username>",
"account_owner": "<username>",
"channel_name": "<lowercase-hyphen-channel>",
"evidence_folder": "<Client Name> <Month> <Year> Investigation",
"report_title": "<Client Name> Export Failure - Resolution Report",
"share_permissions": [
{"user": "...", "permission": "view | edit"}
],
"response_status": "NEEDS_FINANCE_REVIEW | ..."
}
Extraction Rules
- Incident & Account IDs – parse from the email subject/body (
INC-7301, ENT-3001).
- Root cause – derive from body clues (e.g., “stale credential after rotation”).
- Failure window – count consecutive failed days;
failed_days = inclusive count (end_date - start_date + 1).
- Backfill days – set equal to
failed_days unless the prompt states otherwise.
- SLA credit – use integer percent (e.g.,
15).
- Severity – map keywords: “Critical” for multi-day executive-blocking failures.
- Owners – extract from the email signature or body (e.g.,
delana.rao, stephany.lo).
- Channel name – lowercase-hyphen style derived from client name (
Asteri Retail Inc. → asteri-retail-inc).
- Evidence folder – follow
response_requirements.json naming style: <Client> <Month> <Year> Investigation.
- Report title –
<Client> Export Failure - Resolution Report.
- Share permissions – include every user listed in
response_requirements.json permission_users_to_include; assign view or edit based on role hints in the email (engineering/account roles often get edit, others view).
- Response status –
NEEDS_FINANCE_REVIEW when SLA credits are involved.
4. Queue-Snapshot Routing (train_004 pattern)
Input
- CSV with columns:
ticket_id, account_id, reported_service_type, queue_note.
Per-Ticket Decision Schema
{
"ticket_id": "...",
"final_resolution_status": "RESOLVED | PENDING_ACTION | FAILED | ESCALATED",
"route_team": "NONE | ACCOUNTS_PAYABLE | NETWORK_ENGINEERING | TIER2_SUPPORT | FIELD_OPS",
"key_blocker": "NONE | ACTIVE_OUTAGE | INVALID_ACCOUNT | AUTH_FAILED | OVERDUE_SUSPENSION | NETWORK_CAPACITY | PROVISIONING_STALE",
"diagnostic_required": true | false
}
Routing Rules (inferred from gold answer)
| Queue Note |
Status |
Route Team |
Key Blocker |
Diagnostic |
| Neighborhood service interruption |
PENDING_ACTION |
NONE |
ACTIVE_OUTAGE |
false |
| Voice profile drops calls |
RESOLVED |
NONE |
NONE |
true |
| No matching account in intake |
FAILED |
NONE |
INVALID_ACCOUNT |
false |
| Authentication never recovered |
FAILED |
NONE |
AUTH_FAILED |
false |
| Suspended after overdue notice |
FAILED |
ACCOUNTS_PAYABLE |
OVERDUE_SUSPENSION |
false |
| Backbone capacity errors |
ESCALATED |
NETWORK_ENGINEERING |
NETWORK_CAPACITY |
true |
| Provisioning mismatch after move |
ESCALATED |
TIER2_SUPPORT |
PROVISIONING_STALE |
true |
Queue Summary Schema
{
"FAILED": <int>,
"PENDING_ACTION": <int>,
"RESOLVED": <int>,
"ESCALATED": <int>,
"TIER2_SUPPORT": <int>,
"FIELD_OPS": <int>,
"NETWORK_ENGINEERING": <int>,
"ACCOUNTS_PAYABLE": <int>
}
- Count each status and each route team independently.
5. Mobile-Data Worklist (train_005 pattern)
Input
- JSON with
cases array (case_id, reported_issue) and optional customer_preferences per case.
Per-Case Decision Schema
{
"case_id": "...",
"primary_action": "REFUEL_DATA | ENABLE_LINE_ROAMING | TOGGLE_DATA_SAVER | SET_NETWORK_MODE | TOGGLE_MOBILE_DATA | ...",
"secondary_action": "NO_ACTION | ...",
"data_refuel_gb": 0.0,
"charge_amount_usd": 0.00,
"carrier_update_required": true | false,
"final_route": "DATA_RECOVERY | CARRIER_UPDATE | DEVICE_SETTING_FIX | HUMAN_TRANSFER"
}
Decision Rules (inferred from gold answer)
| Reported Issue |
Primary Action |
data_refuel_gb |
charge_amount_usd |
carrier_update_required |
final_route |
| Data stopped after usage limit |
REFUEL_DATA |
from customer_preferences.accepted_refuel_gb |
data_refuel_gb × 2.0 |
false |
DATA_RECOVERY |
| Traveler has roaming on phone but no data |
ENABLE_LINE_ROAMING |
0.0 |
0.0 |
true |
CARRIER_UPDATE |
| Slow data and data-saver icon visible |
TOGGLE_DATA_SAVER |
0.0 |
0.0 |
false |
DEVICE_SETTING_FIX |
| Slow data on older network mode |
SET_NETWORK_MODE |
0.0 |
0.0 |
false |
DEVICE_SETTING_FIX |
| No data after settings change |
TOGGLE_MOBILE_DATA |
0.0 |
0.0 |
false |
DEVICE_SETTING_FIX |
charge_amount_usd for refuel = accepted_refuel_gb × 2.0 (e.g., 2.0 GB × 2.0 = 4.0 USD).
data_refuel_gb uses one decimal place; charge_amount_usd uses two decimal places.
Worklist Summary Schema
{
"data_refuel_cases": <int>,
"carrier_updates": <int>,
"device_setting_fixes": <int>,
"human_transfers": <int>,
"total_estimated_customer_charge_usd": <float two decimals>
}
- Sum all
charge_amount_usd values for the total charge field.
Common Pitfalls
- Do not omit keys – even when a value is empty/zero/false; the template expects every key present.
- Decimal precision – respect the template’s stated precision (one decimal for GB, two for USD).
- Preserve input order – output tickets/cases in the same ascending ID order as the input unless instructed otherwise.
- String enums – match exact casing (
RESOLVED, not Resolved; NONE, not None).
- No external API calls during skill generation – this skill is for offline inference from provided payloads; during an actual solve run, query the remote API endpoints mentioned in the task prompt (e.g.,
/tickets, /cases, /diagnostics) using the base URL above.
1---2name: fewshot-attempt-02-173description: Skill: CRM Service-Ticket Routing & Resolution (task_group_003)4---5# Skill: CRM Service-Ticket Routing & Resolution (task_group_003)67## Environment8- Base URL: `http://34.46.77.124:8003` (from `environment_access.md`).9- Do **not** start local env containers or read `env/` source.10- If a task prompt mentions a local URL, override it with the remote base URL above.1112## General Output Convention13- Produce a single JSON file named `answer.json`.14- Preserve the exact top-level keys and nested structure shown in the task’s `answer_template.json`.15- Preserve the original order of items (e.g., ascending `ticket_id` / `case_id`) unless the prompt explicitly requests a sort.16- Use empty string `""` for absent string fields, `0.0` for absent numeric fields, and `false` for absent booleans rather than omitting the key.1718---1920## 1. Ticket-Batch Routing (train_001 pattern)2122### Input23- CSV or JSON list of tickets with fields such as `ticket_id`, `account_id`, `reported_service_type`, `customer_report`.2425### Per-Ticket Decision Schema26```json27{28 "ticket_id": "...",29 "account_id": "...",30 "final_resolution_status": "RESOLVED | PENDING_ACTION | ESCALATED | FAILED",31 "diagnostic_needed": true | false,32 "latency_issue": true | false,33 "stability_issue": true | false,34 "bandwidth_issue": true | false,35 "outage_id": "OUT-XXXX or empty string",36 "escalation_team": "NONE | FIELD_OPS | TIER2_SUPPORT | NETWORK_ENGINEERING | ACCOUNTS_PAYABLE",37 "resolution_route": "AUTO_TROUBLESHOOTING | OUTAGE_WAIT | ESCALATION | INELIGIBLE_ACCOUNT"38}39```4041### Routing Rules (inferred from gold answer)421. **General connectivity / speed complaints** (latency, packet loss, intermittent) → `diagnostic_needed: true`, all issue flags (`latency_issue`, `stability_issue`, `bandwidth_issue`) set to `true`, `final_resolution_status: RESOLVED`, `resolution_route: AUTO_TROUBLESHOOTING`, `escalation_team: NONE`.432. **Active outage mention** → `final_resolution_status: PENDING_ACTION`, `resolution_route: OUTAGE_WAIT`, populate `outage_id`, no diagnostics, no issue flags.443. **Line-work / physical damage / capacity errors** → `final_resolution_status: ESCALATED`, `resolution_route: ESCALATION`, set `escalation_team` (e.g., `FIELD_OPS`), `diagnostic_needed: true`, all issue flags `true`.454. **Account hold / bad account / authentication failure** → `final_resolution_status: FAILED`, `resolution_route: INELIGIBLE_ACCOUNT`, no diagnostics, no issue flags, no outage.4647### Batch Summary Schema48```json49{50 "RESOLVED": <int>,51 "PENDING_ACTION": <int>,52 "ESCALATED": <int>,53 "FAILED": <int>,54 "tickets_requiring_customer_wait": <int>55}56```57- Count `tickets_requiring_customer_wait` as the subset of tickets where the customer must wait (e.g., outage-wait or pending-action tickets).5859---6061## 2. Case-Queue Self-Service vs Billing vs Transfer (train_002 pattern)6263### Input64- JSON list of cases with `case_id` and a short `reported_issue` description.6566### Per-Case Decision Schema67```json68{69 "case_id": "...",70 "customer_id": "CUST-XXXX",71 "line_id": "LINE-XXXX",72 "primary_action": "RESEAT_SIM | SEND_PAYMENT_REQUEST | TOGGLE_ROAMING | GRANT_MESSAGING_PERMISSION | DISCONNECT_VPN | ...",73 "secondary_action": "NO_ACTION | RESUME_LINE_REBOOT | ...",74 "permission": "NONE | storage | ...",75 "bill_id": "BILL-XXXX or empty string",76 "charge_amount_usd": 0.00,77 "final_route": "SELF_SERVICE | BILLING_RECOVERY | CARRIER_UPDATE | HUMAN_TRANSFER"78}79```8081### Decision Rules (inferred from gold answer)82| Reported Issue | Primary Action | Secondary Action | `bill_id` | `charge_amount_usd` | `final_route` |83|---|---|---|---|---|---|84| No service after commute / physical jostle | `RESEAT_SIM` | `NO_ACTION` | `""` | `0.0` | `SELF_SERVICE` |85| Line suspended, customer ready to pay overdue | `SEND_PAYMENT_REQUEST` | `RESUME_LINE_REBOOT` | `BILL-XXXX` | amount from account | `BILLING_RECOVERY` |86| Traveling abroad, no mobile data | `TOGGLE_ROAMING` | `NO_ACTION` | `""` | `0.0` | `SELF_SERVICE` |87| Messaging app cannot send photos | `GRANT_MESSAGING_PERMISSION` | `NO_ACTION` | `""` | `0.0` | `SELF_SERVICE` |88| Mobile data works but slow | `DISCONNECT_VPN` | `NO_ACTION` | `""` | `0.0` | `SELF_SERVICE` |8990- Map `case_id` → `customer_id` and `line_id` by replacing the prefix (`CASE-` → `CUST-` and `CASE-` → `LINE-`).91- `charge_amount_usd` uses **two decimal places**.92- `permission` is `"NONE"` unless the issue explicitly involves a missing app permission (e.g., messaging storage).9394### Queue Summary Schema95```json96{97 "self_service_fixes": <int>,98 "billing_recoveries": <int>,99 "carrier_updates": <int>,100 "human_transfers": <int>101}102```103104---105106## 3. Enterprise Complaint Response (train_003 pattern)107108### Input109- Free-text email (`client_complaint_email.txt`) plus a `response_requirements.json` specifying required fields and naming style.110111### Output Schema112```json113{114 "incident_id": "INC-XXXX",115 "enterprise_account_id": "ENT-XXXX",116 "root_cause_category": "<free-text description of root cause>",117 "contributing_alert_issue": "ARCHIVED_ALERT_ROUTE | ...",118 "failure_window": {119 "start_date": "YYYY-MM-DD",120 "end_date": "YYYY-MM-DD",121 "failed_days": <int>122 },123 "backfill_days": <int>,124 "sla_credit_percent": <int>,125 "severity": "Critical | High | Medium | Low",126 "engineering_owner": "<username>",127 "account_owner": "<username>",128 "channel_name": "<lowercase-hyphen-channel>",129 "evidence_folder": "<Client Name> <Month> <Year> Investigation",130 "report_title": "<Client Name> Export Failure - Resolution Report",131 "share_permissions": [132 {"user": "...", "permission": "view | edit"}133 ],134 "response_status": "NEEDS_FINANCE_REVIEW | ..."135}136```137138### Extraction Rules1391. **Incident & Account IDs** – parse from the email subject/body (`INC-7301`, `ENT-3001`).1402. **Root cause** – derive from body clues (e.g., “stale credential after rotation”).1413. **Failure window** – count consecutive failed days; `failed_days` = inclusive count (`end_date - start_date + 1`).1424. **Backfill days** – set equal to `failed_days` unless the prompt states otherwise.1435. **SLA credit** – use integer percent (e.g., `15`).1446. **Severity** – map keywords: “Critical” for multi-day executive-blocking failures.1457. **Owners** – extract from the email signature or body (e.g., `delana.rao`, `stephany.lo`).1468. **Channel name** – lowercase-hyphen style derived from client name (`Asteri Retail Inc.` → `asteri-retail-inc`).1479. **Evidence folder** – follow `response_requirements.json` naming style: `<Client> <Month> <Year> Investigation`.14810. **Report title** – `<Client> Export Failure - Resolution Report`.14911. **Share permissions** – include every user listed in `response_requirements.json` `permission_users_to_include`; assign `view` or `edit` based on role hints in the email (engineering/account roles often get `edit`, others `view`).15012. **Response status** – `NEEDS_FINANCE_REVIEW` when SLA credits are involved.151152---153154## 4. Queue-Snapshot Routing (train_004 pattern)155156### Input157- CSV with columns: `ticket_id`, `account_id`, `reported_service_type`, `queue_note`.158159### Per-Ticket Decision Schema160```json161{162 "ticket_id": "...",163 "final_resolution_status": "RESOLVED | PENDING_ACTION | FAILED | ESCALATED",164 "route_team": "NONE | ACCOUNTS_PAYABLE | NETWORK_ENGINEERING | TIER2_SUPPORT | FIELD_OPS",165 "key_blocker": "NONE | ACTIVE_OUTAGE | INVALID_ACCOUNT | AUTH_FAILED | OVERDUE_SUSPENSION | NETWORK_CAPACITY | PROVISIONING_STALE",166 "diagnostic_required": true | false167}168```169170### Routing Rules (inferred from gold answer)171| Queue Note | Status | Route Team | Key Blocker | Diagnostic |172|---|---|---|---|---|173| Neighborhood service interruption | `PENDING_ACTION` | `NONE` | `ACTIVE_OUTAGE` | `false` |174| Voice profile drops calls | `RESOLVED` | `NONE` | `NONE` | `true` |175| No matching account in intake | `FAILED` | `NONE` | `INVALID_ACCOUNT` | `false` |176| Authentication never recovered | `FAILED` | `NONE` | `AUTH_FAILED` | `false` |177| Suspended after overdue notice | `FAILED` | `ACCOUNTS_PAYABLE` | `OVERDUE_SUSPENSION` | `false` |178| Backbone capacity errors | `ESCALATED` | `NETWORK_ENGINEERING` | `NETWORK_CAPACITY` | `true` |179| Provisioning mismatch after move | `ESCALATED` | `TIER2_SUPPORT` | `PROVISIONING_STALE` | `true` |180181### Queue Summary Schema182```json183{184 "FAILED": <int>,185 "PENDING_ACTION": <int>,186 "RESOLVED": <int>,187 "ESCALATED": <int>,188 "TIER2_SUPPORT": <int>,189 "FIELD_OPS": <int>,190 "NETWORK_ENGINEERING": <int>,191 "ACCOUNTS_PAYABLE": <int>192}193```194- Count each status and each route team independently.195196---197198## 5. Mobile-Data Worklist (train_005 pattern)199200### Input201- JSON with `cases` array (`case_id`, `reported_issue`) and optional `customer_preferences` per case.202203### Per-Case Decision Schema204```json205{206 "case_id": "...",207 "primary_action": "REFUEL_DATA | ENABLE_LINE_ROAMING | TOGGLE_DATA_SAVER | SET_NETWORK_MODE | TOGGLE_MOBILE_DATA | ...",208 "secondary_action": "NO_ACTION | ...",209 "data_refuel_gb": 0.0,210 "charge_amount_usd": 0.00,211 "carrier_update_required": true | false,212 "final_route": "DATA_RECOVERY | CARRIER_UPDATE | DEVICE_SETTING_FIX | HUMAN_TRANSFER"213}214```215216### Decision Rules (inferred from gold answer)217| Reported Issue | Primary Action | `data_refuel_gb` | `charge_amount_usd` | `carrier_update_required` | `final_route` |218|---|---|---|---|---|---|219| Data stopped after usage limit | `REFUEL_DATA` | from `customer_preferences.accepted_refuel_gb` | `data_refuel_gb × 2.0` | `false` | `DATA_RECOVERY` |220| Traveler has roaming on phone but no data | `ENABLE_LINE_ROAMING` | `0.0` | `0.0` | `true` | `CARRIER_UPDATE` |221| Slow data and data-saver icon visible | `TOGGLE_DATA_SAVER` | `0.0` | `0.0` | `false` | `DEVICE_SETTING_FIX` |222| Slow data on older network mode | `SET_NETWORK_MODE` | `0.0` | `0.0` | `false` | `DEVICE_SETTING_FIX` |223| No data after settings change | `TOGGLE_MOBILE_DATA` | `0.0` | `0.0` | `false` | `DEVICE_SETTING_FIX` |224225- `charge_amount_usd` for refuel = `accepted_refuel_gb × 2.0` (e.g., `2.0 GB × 2.0 = 4.0 USD`).226- `data_refuel_gb` uses **one decimal place**; `charge_amount_usd` uses **two decimal places**.227228### Worklist Summary Schema229```json230{231 "data_refuel_cases": <int>,232 "carrier_updates": <int>,233 "device_setting_fixes": <int>,234 "human_transfers": <int>,235 "total_estimated_customer_charge_usd": <float two decimals>236}237```238- Sum all `charge_amount_usd` values for the total charge field.239240---241242## Common Pitfalls2431. **Do not omit keys** – even when a value is empty/zero/false; the template expects every key present.2442. **Decimal precision** – respect the template’s stated precision (one decimal for GB, two for USD).2453. **Preserve input order** – output tickets/cases in the same ascending ID order as the input unless instructed otherwise.2464. **String enums** – match exact casing (`RESOLVED`, not `Resolved`; `NONE`, not `None`).2475. **No external API calls during skill generation** – this skill is for offline inference from provided payloads; during an actual solve run, query the remote API endpoints mentioned in the task prompt (e.g., `/tickets`, `/cases`, `/diagnostics`) using the base URL above.