AI classification of support tickets in a mobile app

Support requests in a mobile app get lost in the flow, and the team spends hours on manual triage. We set up turnkey AI ticket classification: the model distributes requests by topic and priority on its own, and support picks up ready-made queues. It reduces initial processing time and eliminates manual sorting.

Development and support of all types of mobile applications:

Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • Development of a mobile application for FEEDME
    Development of a mobile application for FEEDME
    971
  • Development of a mobile application for XOOMER
    Development of a mobile application for XOOMER
    869
  • Development of a mobile application for RHL
    Development of a mobile application for RHL
    1289
  • Development of a mobile application for ZIPPY
    Development of a mobile application for ZIPPY
    1143
  • Development of a mobile application for Affhome
    Development of a mobile application for Affhome
    1076
  • Development of a mobile application for the FLAVORS company
    Development of a mobile application for the FLAVORS company
    677

Why support tickets get lost in a mobile app

A ticket arrives in the app at the moment when the user is already frustrated: the payment failed, the screen froze, the push notification never came. Then the most expensive part begins — the request lands in a common stream, where a first-line operator manually sorts it.

They see the text, the attachment, the build version, and the platform, but they don't see the main thing: whether this is an isolated failure for one user or the start of a mass outage after a release.

While support is being manually triaged, a critical defect sits in the queue next to a question like "how do I change my avatar."

The support bottleneck shows up at volume. As the support load grows, operators switch into conveyor mode: they close simple requests and put complex ones off until later.

That's exactly where the failures that break payments or authentication get lost — they require investigation, and investigation requires time that isn't there.

Handling requests in the app turns into a lottery: response speed depends on whether the ticket landed with an experienced engineer or a newcomer on shift.

The cost of the error is measured not in tickets but in churn. A user whose payment hung and who didn't get a response within a reasonable time doesn't write again — they delete the app and leave a review that the next users read.

Meanwhile, the defect itself doesn't go away: it keeps reproducing for others, it's just that the signal about it is smeared across hundreds of disconnected requests that no one has linked together.

AI ticket classification changes the entry point: a request is tagged by topic, urgency, and signs of mass impact automatically, before a human ever sees it.

Critical failures go into a separate priority stream, typical questions get closed without an operator, and the engineer receives not a single ticket but a group of related ones — with a shared defect signature.

Let's break down how this is handled in practice and what exactly needs to be configured in the app.

AI classification of tickets: what changes in support operations

Automatic ticket labeling is built on a model that assigns a category and priority based on the ticket text, session logs, and device metadata before the ticket reaches an operator.

The classifier is trained on historical tickets with categories already assigned — this provides baseline accuracy, which is then improved by labeling edge cases.

What labeling at intake provides

The category and priority are assigned at the moment the ticket is created, rather than after 20-40 minutes of manual triage. The operator receives the ticket already with context: the type of failure, the client version, whether this is a repeat contact. Time to first response is reduced, and the queue stops getting clogged with similar requests.

Accuracy and its limits

Classification accuracy is measured on a holdout set and separately for each class — an overall figure hides failures on rare categories.

We separately calculate the auto-triage rate (how many tickets are routed without operator correction) and the classes of missed failures: a critical bug mistakenly classified as a "question" costs more than ten inaccurately labeled cosmetic issues.

The confidence threshold is configured so that ambiguous cases go to a human rather than into automatic routing.

Routing and prioritization

Ticket prioritization relies not only on the text but also on signals: the share of affected users, recurrence, payment or authorization context. A ticket with signs of a mass failure is escalated above an isolated complaint regardless of its wording.

Ticket routing distributes the flow across teams — payments, authorization, interface, infrastructure — and removes manual sorting from the first line.

Option When it fits Limitations
Rules and keywords Small volume, stable wording Breaks on rephrasings, requires manual maintenance
Ready-made model without fine-tuning Quick start, general categories Poor product knowledge, low accuracy on rare classes
Fine-tuning on your own tickets There is a history of tickets and labeling Requires labeling quality control and retraining
Hybrid: rules + model Critical classes require hard guarantees Harder to maintain, needs transparent trigger logic

Practice shows: a hybrid approach provides the best balance — rules reliably catch critical failures, while the model handles the rest of the flow.

We rely on scikit-learn for baseline models and fine-tuning on the customer's labeled history when the data volume is sufficient for stable metrics per class.

Stages of implementing AI classification into app support

Implementing AI classification starts not with a model, but with the flow of requests: until you can see how tickets arrive, where they land, and who closes them, any automation is guessing. Therefore, the first step is an engineering review, not tuning algorithms.

  1. Request audit. We export the ticket history for a representative period, examine intake channels, the share of duplicates, time to first response, and time to closure. The output is a map of real categories, not the ones listed in the support policy.
  2. Setting up labeling rules. We form a taxonomy: which topics we distinguish, what we consider a borderline case, how we label payment complaints and login failures. We document the rules in writing — otherwise labelers diverge in interpretation and the model learns from contradictions.
  3. Labeling the training sample. We label the corpus of requests according to the approved scheme, separately marking rare but critical classes. We compensate for category imbalance at the data preparation stage, not after training.
  4. Training and validating model quality. We calculate precision and recall for each class separately, not just the overall metric: an error on a rare class is more costly than on a high-volume one. We examine the confusion matrix — where the model confuses neighboring topics and why.
  5. Pilot on a live stream. The model operates in suggestion mode: it proposes a category, and the operator confirms or corrects it. We collect discrepancies and retrain — this way quality grows on real data, without risk to customers.
  6. Enabling routing. After stable quality, we connect automatic distribution: a ticket goes to the relevant specialist, critical classes go outside the queue. We set the confidence threshold so that ambiguous cases go to a human.
  7. Handing over the support system. We deliver the configured category scheme, labeling rules, retraining policy, and the procedure for rolling back to manual sorting. The client's team runs the system on its own, while we remain available for change support.

The key effect is not "the model guesses the topic," but predictable routing: the share of tickets that reach the right specialist on the first try grows, and time to first response stops depending on first-line workload. Describe your request flow — we will return with an assessment and a plan based on these stages.

How does rule-based routing differ from a trainable model?

Rule-based routing is a deterministic filter: a set of conditions based on keywords, form fields, and the source of the request. An engineer describes in advance what counts as "payment," "delivery," or "login failure," and a request falls into a category strictly by matching.

It works predictably and explainably: you can see exactly which condition triggered, and behavior does not change with data volume. The weak spot is wording.

A user writes "the code isn't coming through," "it froze on the payment screen," "the money was charged but the order didn't go through" — no single rule covers the full variety of living language, and the share of unclassified requests grows along with the product.

Trainable classification solves this differently: the model looks at the history of already classified requests and derives a category by meaning rather than by string matching.

It is resistant to typos, synonyms, and mixed languages, but it requires data — several thousand correctly labeled tickets at the start.

The key parameter here is the confidence threshold: if the model is confident above the threshold, the ticket goes into the category automatically; if below, it stays with a human.

The threshold directly controls the balance: lower means more automation and a risk of misrouting, higher means more accurate but more manual work.

Choosing an approach is not either-or but a question of the flow's maturity. Hard rules handle stable, rare, and legally sensitive cases well, where a mistake is costly: security complaints, refund requests, requests involving personal data.

A trainable model takes on the high-volume, rapidly changing flow — where rules have to be rewritten every week. In practice, the two are combined: rules filter out critical and unambiguous cases, and the model handles the rest.

Retraining on new requests is what sustains quality over time. New wording appears, the product changes, and a model trained on old data starts to make mistakes.

Regular retraining on fresh labeled tickets restores accuracy; the only important thing is not to "flood" the model with rare classes and to keep a separate validation set so you can see real gains rather than overfitting to the latest batch.

The practical criterion for choosing is simple. If there are few categories, the wording is stable, and the flow is predictable — start with rules; it's faster and more transparent.

If there are many requests, the language is living, and manual sorting eats up the team's time — estimate the volume of labeled data and move to a trainable model with an adjustable confidence threshold.

Case study: how app support switched to automatic ticket labeling

Before implementing automatic labeling, mobile app support operated in manual triage mode: an operator read each ticket in full, manually selected a category, and assigned an assignee.

With a flow of several hundred tickets per day, the queue grew faster than it could be processed, and some messages about crashes and freezes settled into the general pile and reached engineers with a delay.

We connected a classification model at the entry point to the support system: a ticket is automatically labeled by type (failure, payment, authorization, feature question), by platform, and by criticality, after which it goes straight to the right team.

The model is trained on the customer's historical tickets, so the labeling accounts for the product's actual terminology rather than generic categories.

What changed in the metrics

The share of automatically triaged tickets grew from 41% to 87% — operators switched to complex cases that require a human. Time to first response dropped from 6 hours to 40 minutes: typical tickets get a response without waiting in the general queue.

A separate effect is the reduction in missed critical failures. Previously, a message about a crash on a specific version could get lost among "how do I pay" questions. Now such tickets are marked as critical and automatically raised to the top of the queue.

The number of missed failures that reached engineers with a delay of more than a day decreased severalfold.

How it works

The classifier runs as a separate service in front of the support system: a ticket passes through it, receives a label and a route, and the source text and prediction are saved for subsequent retraining.

If the model's confidence is below the threshold, the ticket goes to an operator without a label — this protects against incorrect routing. Every few weeks the model is retrained on new labeled tickets, so accuracy does not drop when the product changes.

FastText

Compatibility, migration, and rollback: what to discuss before the start

Before the start, the client usually asks three questions: will AI classification break the current support, what to do with the accumulated history of requests, and how to roll back if the labeling quality turns out to be lower than expected. We answer each of them.

Compatibility with current support. The classifier is embedded as a separate service in front of the existing queue: a ticket comes from the application, receives a category and priority, then follows the same routing rules as before.

If the service is unavailable, a fallback path kicks in — the request lands in the general queue without a label, and the operator handles it manually. Support does not stop for a minute.

Migration of request history. Past tickets are run through the model in batches, in a separate environment, without writing to the production database. The result is a labeled archive that shows the real distribution of categories and the share of disputable cases. This also serves as material for further training on your terminology.

Rollback plan. The routing configuration is versioned: returning to the previous logic is a matter of switching a profile, not rewriting code. Labels assigned by the model are stored in a separate field and do not overwrite the operator's original data.

What if the labeling quality at the start turns out to be lower than expected?

We launch in shadow mode: the model labels the incoming stream, but the decision is made by the operator. We compare the model's label with the actual category, calculate the share of discrepancies for each category, and further train on these examples.

We move to production only those categories where accuracy is stable; the rest remain on manual labeling.

Access and permissions. The model works with the text of the request and metadata, but not with payment data or personal information — they are masked at the input. Access to the service is granted via a service account with a limited set of permissions, and actions are logged.

The client receives:

  • configuration of the classification service and routing rules by category;
  • integration scheme with the current support system and a description of the fallback path;
  • scripts for batch labeling of the request archive;
  • regulations for further training on new data and the procedure for replenishing the sample;
  • instructions for rollback and switching routing profiles;
  • a report on labeling quality broken down by category and the share of disputable cases;
  • description of access rights and the policy for masking sensitive fields.

Describe your current support and the volume of request history — we will get back to you with an assessment and an implementation plan.