Support Tickets
How AI-managed support tickets and human handoffs work when agents escalate conversations to your team.
When an AI agent receives a customer support request, Zeiko creates or links a durable support ticket. The ticket tracks the customer, source channel, priority, SLA state, email thread, internal notes, Shopify context, and any human handoff activity.
Human handoff events still exist, but the ticket is now the primary support record. Humans use the inbox as an exception and audit console while support agents continue managing most replies and closures automatically.
What Creates a Ticket
- A customer starts a support conversation in the website widget
- An agent requests human handoff from a live conversation
- A customer emails a tenant support alias
- A customer replies to an existing ticket email alias
- A Shopify support scenario needs durable follow-up, such as an order issue or policy exception
Viewing Tickets
- Go to Agents → Handoff Inbox in your workspace.
- You'll see a tickets-first split pane:
- left queue with ticket number, customer, status, priority, SLA state, source, assigned agent, and last activity
- center thread with customer messages, agent replies, human replies, internal notes, email events, handoff events, and Shopify context
- right facts rail with compact ticket metadata, SLA dates, Shopify order context, and a link to the original handoff thread when one exists
Ticket statuses are:
openwaiting_on_customerwaiting_on_teamresolvedclosed
Ticket priorities are:
lownormalhighurgent
Responding to Tickets
- Click on a ticket to view the full conversation history.
- Review what the customer asked and what the agent attempted.
- Reply to the customer by email, add a private internal note, take over, reopen, close, or force close.
- Open the linked handoff context if the case originated from a live widget handoff.
The ticket thread supports:
- customer-visible email replies
- internal notes that stay private to operators
- agent-authored replies and audit events
- human takeover and closure controls
- Shopify order context when available
The legacy live handoff conversation page is preserved for linked handoff context during migration. It still refreshes from both realtime events and a fallback live refresh path, so it stays current even if a realtime insert is delayed or missed.
Email Aliases
Zeiko uses Resend inbound email aliases for support automation:
support+{accountSlug}@{RESEND_INBOUND_DOMAIN}creates a new support ticket for the tenantticket+{ticketKey}@{RESEND_INBOUND_DOMAIN}appends a reply to an existing ticket
Ticket emails include reply-to aliases, ticket headers, Resend tags, and idempotency keys so customer replies stay threaded to the right case.
Outbound ticket email uses RESEND_SUPPORT_FROM_EMAIL when it is configured, then falls back to RESEND_FROM_EMAIL and the shared EMAIL_SENDER value. React Email ticket templates send both HTML and a plain-text alternative when both are available.
Configuring Handoff Settings
When creating an agent (via the Support Wizard), you can configure:
- Strategy — How handoffs are assigned:
- Round Robin — Distribute evenly across team members
- First Available — Assign to whoever picks it up first
- Assignee Emails — Team members who receive handoff notifications
- Max Open Assignments — Limit how many active handoffs each person handles
- Skill Keywords — Route handoffs based on topic (e.g., billing, shopify, integrations)
At the moment, the Support Wizard's handoff routing config applies to Website Widget conversations. Treat the widget as the canonical live-chat handoff surface, and treat support tickets as the canonical cross-channel case surface.
Customer Experience During a Live Handoff
When a human teammate has joined a Website Widget conversation:
- the customer stays on the same chat thread
- follow-up customer messages continue to persist into that thread
- the system does not add fake bot queue/offline replies on top of a live human-owned thread
- CSAT is shown only after the handoff is resolved
- the handoff is linked to a support ticket for SLA tracking, email follow-up, and audit history
The public widget and the internal support bubble now use the same underlying conversation client, so refreshes and human replies stay in sync more reliably.
That shared client also handles:
- stable request IDs and canonical snapshot refreshes so fast multi-turn chats stay in order
- a labeled internal support launcher that does not claim the whole app document theme or lock page scrolling
- local offline queueing and automatic replay for customer messages when connectivity drops
- delayed assistant typing indicators so the interface feels responsive instead of blocked
- the same markdown/rich-text rendering path used by the public widget, including guardrails for very large streamed replies
- a shared history model between the widget and bubble, which keeps operator and visitor views aligned across refreshes
Best Practices
- Check the ticket queue during your team's normal response windows
- Configure Resend inbound and support-team notification emails so ticket replies and handoffs do not go unnoticed
- Use internal notes for audit context instead of sending operational details to customers
- Review recurring tickets to improve your agent's SOUL.md and knowledge sources - if the same questions cause handoffs repeatedly, add answers to the agent's knowledge