Run your workspace
Follow-ups (tickets)
A follow-up (a ticket, in the code and the database) is a durable support record: something a person still has to do after the chat. Conversations can go quiet; follow-ups stay until someone resolves them. Use them for issues that need more than the live chat window — billing disputes, bug reports, account problems, a call back.
They are the Follow-ups tab of
Conversations, next to Needs you,
Live now and All
(/app/conversations/follow-ups). The tab shows how many
are still open. The old address /app/tickets forwards
there, and /app/tickets/{ticket} to the follow-up itself.
How follow-ups get created
There are two ways. A button in the chat cannot open one: no button type creates a follow-up.
-
The AI employee opens one mid-chat via the
open_tickettool. Auto-enabled for AI employees whose type of website ishelp_center(theHelpCenterPresetships theticketingcapability the tool requires). Other types can opt in by addingticketingto the AI employee'svertical_overrides.capabilities. - A team member, from the conversation. The side panel of a conversation lists its follow-ups and has Create a follow-up: a subject, a priority and an optional note. Owners, admins and editors can create one; viewers see the list only.
Status and priority
Status moves through four values backed by constants on
App\Models\Ticket:
| Status | Meaning |
|---|---|
open | Created, not yet picked up. Default on insert. The Follow-ups tab counts these. |
pending | Being worked on. |
resolved | Done. resolved_at is stamped. |
closed | Archived. |
Priority is one of low, normal,
high, urgent. The list shows urgent first. The
AI sets it when it opens a follow-up; your team can change it on the
follow-up's page.
Pages and endpoints
GET /app/conversations/follow-ups— the list, filtered by status (open by default; pending, resolved, closed or all). Workspace-scoped via theBelongsToWorkspacetrait. Every workspace member can read it.GET /app/conversations/follow-ups/{ticket}— one follow-up, with Open conversation when it came from a chat.PATCH /app/tickets/{ticket}— change status, priority or assignee. Owner, admin or editor (TicketPolicy::update).POST /app/conversations/{conversation}/follow-ups— create one from a conversation. Allowed for whoever may take that conversation over (update on its AI employee), so a member of another workspace is refused.
Schema
The tickets table (migration 2026_05_13_092105_create_tickets_table.php) is unchanged by the move to Conversations:
workspace_id,agent_id,conversation_id(nullable).subject(up to 200 characters),body.status(open / pending / resolved / closed),priority(low / normal / high / urgent).assigned_to_user_id— nullable.metadataJSON — where it came from: theopen_tickettool storessource: 'open_ticket_tool'; a team member's follow-up storessource: 'team_member'andcreated_by_user_id.resolved_atstamped when status flips to resolved.- Timestamps.
How the open_ticket tool works
See Tools & rich messages for the registry shape. The tool's input schema:
subject— required, cut at 200 characters.body— required. The AI is prompted to include the visitor's account or order references, what they tried, and what went wrong.priority— optional, defaults tonormal.
On invoke the tool inserts a Ticket row tied to the
current conversation and returns a confirmation the AI weaves into
its reply. No notification is sent: new follow-ups show up in the
Follow-ups tab and its count.