A customer portal done right collapses into three things: a conversation, the files attached to it, and an AI that has read both. Every support tool is a variation on that theme. The difference between good ones and bad ones is how honestly the three pieces live together.
What a ticket actually is
A ticket is a thread. Sometimes it has screenshots. Sometimes it has a CSV the customer exported. Sometimes it has a voice note. The triage person reads the whole thing, decides whether it's a bug or a how-to question, and routes it. Most of that work is pattern-matching against the last thousand tickets.
The pattern-matching is what an LLM is actually good at. The thread and the files are what your support team needs to see. Put them in the same route, let the AI read the same context, and you've built triage.
Chat + Copilot in the same view
Drop Chat for the customer conversation. Drop a Copilot next to it — same ticket uid, different agent. The support rep sees the thread; the Copilot reads the same ticket context and proposes a first response.
<wy-chat uid="ticket-<%= ticket.id %>"></wy-chat>
<wy-copilot
agent="triage-bot"
instructions="You are a support triage assistant. Classify the current ticket as bug, how-to, or account issue. Suggest a first response."
></wy-copilot>
The Chat component is anchored to the ticket via uid. The Copilot is its own agent — point its contextualData at the ticket record on the server side and it reads what it needs without leaking into the thread itself.
Attachments without a detour
Customers paste logs, drag PDFs, drop screenshots. Chat's attachment layer handles drag-drop-paste with inline previews for images and PDFs, backed by the Files component. No detour to a separate upload service, no "please share via this link" instructions.
Thread summaries for the next shift
Support is shift work. The person at 9am didn't read what the person at 2am wrote. Chat ships thread summarization as a pluggable model — one click, summary, context restored. Unread badges handle the rest.
What you don't have to build
- Real-time updates with reconnect handling, delivery receipts, and typing indicators.
- File upload plumbing and preview rendering.
- A separate AI layer that has to be re-fed the context every time the thread grows.
The support portal is a route. The triage is a second component on that route. The AI is bringing-your-own. Everything else is done.