At a glance
| Tickets | Conversations | |
|---|---|---|
| What | Async work items with status and assignee | Real-time AI sessions in the widget |
| Lifecycle | Long-lived, statuses change over time | Short-lived, end when the user closes the widget |
| Owners | Your team (assigned to a teammate or inbox) | The AI agent (until a human takes over) |
| Threads | Email threads, chat replies, internal notes | One stream of user/AI/teammate messages |
| Created by | Email arrival, AI escalation, takeover, API, integrations | The widget opening on your site |
| Ends when | A teammate marks it resolved | The user closes the widget |
Conversations
A conversation is a live AI session. As soon as a user opens the chat widget on your site (or starts a voice or Live Help session), a conversation row is created and appears in Inbox > Conversations > Live Feed. While the conversation is active you can:- Watch the messages flow in real time
- See the user’s mood (Happy / Neutral / Confused / Frustrated / Angry, derived from the AI’s sentiment scoring)
- Send the AI an inbox training whisper that nudges its next response and can persist for that customer
- Add corrections that improve future training
- Take Over Chat — pause the AI and respond as a human (this creates a ticket)
- The full transcript
- AI confidence scoring
- The outcome (Resolved / Escalated / Abandoned)
- A computed AI score (heuristic from sentiment, outcome, and feedback)
- Per-message ratings and trainer feedback
Tickets
A ticket is a work item your team owns. Tickets have:- A status (Open, Priority, In Progress, Snoozed, Resolved, Spam)
- An assignee (a teammate, or unassigned)
- A subject
- A thread of messages (email + chat + internal notes)
- Metadata (channel, source, custom fields, AI confidence, escalation reason)
| Source | Status assigned | Notes |
|---|---|---|
| Customer email arrives | Open (or Spam if detected) | Mailgun webhook → ticket. Re-arriving emails on closed tickets reopen them. |
| AI escalates | Priority if user matches priority filters, else Open | Full conversation transcript is attached as context. |
| Teammate takes over a live conversation | In Progress | ”Jump in” creates a ticket and assigns it to the teammate. |
API call to /api/sdk/tickets/create | Whatever you specify | Used by form builders, CRMs, bug tools. |
| Integration webhook | Varies | E.g. Linear-related events can spawn tickets via the API. |
Ticket statuses
| Status | Meaning |
|---|---|
| Open | Active, awaiting work or reply. Default for new tickets. |
| Priority | High urgency. Triggered by AI escalation matching priority filters or set manually. |
| In Progress | A teammate is actively handling it. Set automatically when you take over a live conversation. |
| Snoozed | Hidden from default lists until a future time. Auto-unsnoozes via background job. New activity also unsnoozes immediately. |
| Resolved | Closed. Manually set or automatically by AI email auto-reply. |
| Spam | Detected as junk. Skipped from default lists. Trusted senders bypass spam detection. |
How they connect to contacts
Both tickets and conversations link back to the end user (your customer’s record in Halo) and, when known, the company they belong to:- Open a contact at Contacts > [User] to see all their tickets and conversations.
- Open a company at Companies > [Company] to see every interaction across all their users.
Picking the right one for your workflow
You generally don’t need to think about this — Halo creates the right type for each entry point. But if you’re building integrations:| Use case | Use |
|---|---|
| Form submission, CRM event, bug report, programmatic ticket | POST /tickets/create |
| Synthetic chat message you want the AI to respond to | POST /chat |
| Watching AI activity for QA / QC | Conversations > Live Feed |
| Following up on a customer issue async | Tickets |
Where to go next
Working Tickets
Replies, internal notes, AI assistance, statuses.
Live Conversations
Watching, coaching, and taking over live AI sessions.