Skip to content
Intura
Products / Models / Chat
EnglishChatClassification

Global Customer Support Ticket Classifier

Route English support tickets from customers anywhere to billing, refunds, orders, account, subscription, technical, privacy or FAQ teams with a small model that runs on a CPU.

An English support ticket classifier that sorts each message into eight categories a global help desk staffs separately, or none, offline on a CPU. It answers yes or no for each category, so a ticket that raises two problems reaches both teams and a greeting, thank-you or spam reaches none. It is built for the English a global desk actually receives: native US, UK and Australian customers, and second-language writers from India, the Philippines, Singapore, Malaysia, Nigeria, Kenya, Europe and Latin America, across email, live chat, in-app chat, social media and app-store reviews. Refunds and chargebacks, subscriptions, and privacy requests (GDPR, CCPA) with fraud have their own categories, because they have their own teams and deadlines. The model is MiniLM (microsoft/MiniLM-L12-H384-uncased) exported as an INT8 ONNX graph. Examples: "charged twice for one order" is billing_payment, "my refund for the return hasn't arrived" is refund_return, "cancel my plan before it renews" is subscription_plan, "delete all my personal data" is privacy_security, and "hi there" is none.

What it answersEvery category whose score clears the threshold, with a score for each of the 8. An empty list means the message makes no request.

Also available inIndonesian

Specs

Under the hood

Under the hood
English
Base modelmicrosoft/MiniLM-L12-H384-uncased
Parameters33.2M
Size34.0 MB
FormatONNX INT8
Max tokens256

Distilled from the base model by keeping fewer layers and trimming the vocabulary to the languages served, then quantised to INT8 so it fits a CPU, an edge device or embedded hardware.

Use cases

What you can do with it

  • Global help-desk triage

    Label every new ticket on arrival and assign it to payments, returns, fulfilment, account, retention, technical support, trust & safety or the FAQ team: both teams when it raises two problems, nobody when it is a greeting or spam.

  • Privacy request deadlines

    Catch `privacy_security` tickets (data access and deletion requests, account takeovers, fraud) the moment they arrive, so the legal clock on a GDPR or CCPA request does not start in a general queue.

  • Retention and deflection

    Send `subscription_plan` cancellations to a retention flow, answer `product_inquiry` from your knowledge base, and keep agents for the categories where something went wrong.

Example results

Example results

Real outputs of this exact build on held-out rows — data it never saw in training. Each shows the input, what the model answered, and the reference label it was checked against. Nothing here is written by hand.

python
  1. >>> classify("You reversed my failed transfer of 80,000 NGN but only 79,500 came back. Where is the 500? That is my transport money.")

    {
      "labels": [
        "refund_return"
      ],
      "scores": {
        "billing_payment": 0.0572,
        "refund_return": 0.8093,
        "order_shipping": 0.0822,
        "account_access": 0.0125,
        "subscription_plan": 0.0202,
        "technical_issue": 0.0234,
        "privacy_security": 0.0225,
        "product_inquiry": 0.0401
      }
    }

    # Reference: refund_return ✗ Differs

  2. >>> classify("hey, sorry, my physical gift card for my sister never arrived and her birthday's on saturday 😭")

    {
      "labels": [
        "order_shipping"
      ],
      "scores": {
        "billing_payment": 0.0079,
        "refund_return": 0.0918,
        "order_shipping": 0.7474,
        "account_access": 0.0255,
        "subscription_plan": 0.0246,
        "technical_issue": 0.0989,
        "privacy_security": 0.0122,
        "product_inquiry": 0.0432
      }
    }

    # Reference: order_shipping ✗ Differs

  3. >>> classify("Good day po, ma'am. I cannot get into my account. 1. On 6 October I clicked 'forgot password'. 2. The email never arrived, sir, I checked spam and promotions for 3 days. 3. My correct email is the one ending 777, I am sure of it. 4. Our payroll sheet is inside and payday is Friday. Please help me reset. One star.")

    {
      "labels": [
        "account_access"
      ],
      "scores": {
        "billing_payment": 0.0171,
        "refund_return": 0.007,
        "order_shipping": 0.0148,
        "account_access": 0.4496,
        "subscription_plan": 0.0175,
        "technical_issue": 0.2008,
        "privacy_security": 0.2968,
        "product_inquiry": 0.0055
      }
    }

    # Reference: account_access ✗ Differs

  4. >>> classify("i was charged for another year but i meant to cancel. can you reverse that renewal?")

    {
      "labels": [
        "subscription_plan"
      ],
      "scores": {
        "billing_payment": 0.2214,
        "refund_return": 0.0291,
        "order_shipping": 0.0446,
        "account_access": 0.0351,
        "subscription_plan": 0.7896,
        "technical_issue": 0.0624,
        "privacy_security": 0.0147,
        "product_inquiry": 0.0211
      }
    }

    # Reference: subscription_plan ✗ Differs

  5. >>> classify("Your balance does not refresh after a transfer. I have to close and reopen app. Sync problem.")

    {
      "labels": [
        "technical_issue"
      ],
      "scores": {
        "billing_payment": 0.0099,
        "refund_return": 0.0232,
        "order_shipping": 0.2005,
        "account_access": 0.2527,
        "subscription_plan": 0.0584,
        "technical_issue": 0.7018,
        "privacy_security": 0.0479,
        "product_inquiry": 0.0113
      }
    }

    # Reference: technical_issue ✗ Differs

Training data

Training data

Synthetic English customer-support messages generated across fourteen industries, nine channels, seven customer roles, nine writing styles and eight varieties of English at four fluency levels, labelled with one rubric; a quarter of every batch sits on the boundary between two categories, and the rest includes tickets with two problems and messages with none.

The classes this model learned to recognise:

The classes this model learned to recognise:
LabelMeaning
billing_paymentWrong, double or unrecognised charges, failed or pending payments, invoices, tax, payment method.
refund_returnRefunds not received, returns, exchanges, return labels, chargebacks and bank disputes.
order_shippingAn order or booking already made: tracking, late, lost, customs, damaged or wrong item, cancel before shipping.
account_accessLogin, password reset, 2FA codes, locked accounts, verification, changing account details.
subscription_planCancel, renew, upgrade or downgrade a plan, seats, trials turning paid.
technical_issueThe app, site, API, device or connection is not working: errors, crashes, outages.
privacy_securityGDPR/CCPA data requests, unsubscribe, account takeover, fraud, phishing, abuse.
product_inquiryA question with nothing gone wrong: prices, shipping countries, availability, how-to, policies.

The first five example rows, with the label each one carries:

The first five example rows, with the label each one carries:
#TextLabel
0You reversed my failed transfer of 80,000 NGN but only 79,500 came back. Where is the 500? That is my transport money.refund_return
1hey, sorry, my physical gift card for my sister never arrived and her birthday's on saturday 😭order_shipping
2Good day po, ma'am. I cannot get into my account. 1. On 6 October I clicked 'forgot password'. 2. The email never arrived, sir, I checked spam and promotions for 3 days. 3. My correct email is the one ending 777, I am sure of it. 4. Our payroll sheet is inside and payday is Friday. Please help me reset. One star.account_access
3i was charged for another year but i meant to cancel. can you reverse that renewal?subscription_plan
4Your balance does not refresh after a transfer. I have to close and reopen app. Sync problem.technical_issue

intura-ai script

Run it with the intura-ai SDK

  1. 1

    Get it

    Sign in on this site and press Get it. The model goes to your library with every version.

  2. 2

    Create a download key

    On your account page, create a download key and set it as INTURA_API_KEY. It only downloads what you own.

  3. 3

    Install

    pip install "intura-ai[local]" — the SDK plus the CPU runtime it uses to run a model on your machine.

  4. 4

    Run it

    Run the script. It downloads the build once and checks each file's SHA-256, then runs on your CPU, edge box or embedded Linux — no network call after the download.

run.py
# pip install "intura-ai>=3.0.0"
# export INTURA_API_KEY=...  # a download key from your account
from intura_ai import Intura, LocalModel

client = Intura()
# Downloads once into ./chat-customer-support-ticket-en/v1.0; later runs reuse the files on disk.
model_dir = client.models.download("chat-customer-support-ticket-en", version="v1.0")
model = LocalModel.load(model_dir)  # CPU, no network from here on

print(model.predict('You reversed my failed transfer of 80,000 NGN but only 79,500 came back. Where is the 500? That is my transport money.'))
# {"labels": [...], "scores": {...}}

Pass the customer's first message as plain text. Order numbers, amounts and dates help: they are in the training data.

Want to see what it answers before you get it? Read the Example results

Versions

Versions

Every version stays downloadable once you own the model. A version id names exactly the bytes you download.

  1. v1.0RecommendedONNX INT834.0 MBReleased Oct 16, 2026

Feedback

Need something changed in this model?

Ask for a new label or language, tell us where it misses on your data, get help running it, or report a bug. A person reads every message and replies by email.

Start with

Find the model for your task.

Search by what it has to do, read real example results, and download it to run on your own CPU — from $9 during early bird.