B Blengi docs

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.

  1. The AI employee opens one mid-chat via the open_ticket tool. Auto-enabled for AI employees whose type of website is help_center (the HelpCenterPreset ships the ticketing capability the tool requires). Other types can opt in by adding ticketing to the AI employee's vertical_overrides.capabilities.
  2. 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:

StatusMeaning
openCreated, not yet picked up. Default on insert. The Follow-ups tab counts these.
pendingBeing worked on.
resolvedDone. resolved_at is stamped.
closedArchived.

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 the BelongsToWorkspace trait. 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.
  • metadata JSON — where it came from: the open_ticket tool stores source: 'open_ticket_tool'; a team member's follow-up stores source: 'team_member' and created_by_user_id.
  • resolved_at stamped 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 to normal.

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.