Context
The consultancy provides outsourced IT support to several companies. Its service assistant ran on a third-party low-code platform that had already forced two migrations in under a year. All the work in this case runs in the consultancy’s lab, as proofs of concept.
Problem
- Keyword categorization covered a fraction of the category catalog and sent the rest to manual triage.
- In natural language, a ticket number is easy to confuse with other numbers in the conversation.
- Business logic inside the vendor’s tool is lost at every migration.
- The messaging channel does not keep conversation state between turns.
What I did
- Moved all logic into our own TypeScript SDKs, one per client, each with its own database and credentials at the connection level.
- LLM category classification over the full catalog with a deterministic fallback, and ticket number recognition by format, tested against a battery of trap cases.
- Conversation continuity inside the SDK, on a group of workers behind a single router, with each bot’s credential selected by the message’s destination.
- On the same base: an HR automation portal integrated with the HR ERP, an L3 agent that queries Zabbix, and RPA integration.
- Tests through the real channel (Teams) before every delivery, and a suite that runs without real credentials.
Result
The logic no longer depends on the low-code vendor: the transport changed and the logic stayed intact. The agents handle L1 to L3 in the lab, with one isolated SDK per client.