Skip to content
Conversations

Conversations

The Conversations section provides a complete history of all interactions between users and assistants. Every chat session, task execution, and email exchange creates a conversation record.

Browsing Conversations

Navigate to Conversations in the sidebar to see all conversations, ordered by most recently updated. Each entry shows:

  • The subject of the conversation
  • The assistant that participated
  • The user or contact involved
  • The originating channel (if any)
  • The number of messages
  • When the conversation was last updated

Click on a conversation to view its full message thread.

Searching Conversations

Use the search bar at the top of the conversations page to find past conversations by their content. The search looks across both message content and conversation subjects, returning results grouped by conversation with highlighted context snippets showing where matches were found.

Type a search term and click Search (or press Enter). Results display the conversation subject along with up to two matching message excerpts with the search terms highlighted.

Filters

Narrow results using the filter controls alongside the search bar:

FilterDescription
ParticipantSearch by user name, contact name, or contact email
AssistantShow only conversations with a specific assistant
ChannelFilter by originating channel (e.g. Slack, Postmark, Widget)
Date rangeRestrict to conversations created within a from/to date range

Filters work both with and without a search query. When combined with a search term, only conversations matching both the search and the active filters are shown.

Click Clear to reset all filters and return to the full conversation list.

Results are paginated — use the page controls at the bottom to navigate through large result sets. All active filters and search terms are preserved as you navigate between pages.

Conversation Detail

The detail view shows the complete message thread in chronological order. Each message displays:

  • Role — Whether the message is from the user or the assistant
  • Content — The full message text, rendered with markdown formatting
  • Timestamp — When the message was sent
  • Source — Where the message originated (text chat, voice, email, widget)

Conversation Sources

Conversations can originate from several places:

SourceDescription
Text ChatMessages from the authenticated chat interface (admin or staff)
VoiceTranscribed messages from WebRTC voice chat
EmailMessages received via the Postmark email channel
WidgetMessages from visitors using the embeddable chat widget
TelegramMessages from Telegram bot conversations
SlackMessages from Slack direct messages
Task RunAutomated conversations created by scheduled task execution

Associated Content

If an assistant created any deliverables during a conversation, they’re linked to that conversation. You can browse these from the Content section, which groups deliverables by conversation.

Session Lifecycle

Conversations have a defined lifecycle from start to end:

  1. Created — A new conversation starts (chat opened, email received, widget message, or task triggered)
  2. Greeting — If the assistant has a greeting message, it’s added automatically
  3. Messages — User and assistant exchange messages
  4. Processing — While the assistant is generating a response, the conversation is marked as “processing” (shown as a typing indicator in the UI)
  5. Content — The assistant may create deliverables during the conversation
  6. Ended — The conversation is explicitly closed (see below)

Ending a Conversation

A conversation can end in two ways:

TriggerDescription
User-initiatedThe user clicks the “End” button in the chat header (available in both internal chat and the widget)
Guided completionA guided-mode assistant (guided_strict or guided_flexible) automatically ends the conversation when its scripted goal is complete

Once ended:

  • The conversation shows an “Ended” badge
  • The input area is replaced with a message indicating the conversation has ended and a link to start a new chat
  • No new messages can be sent
  • If feedback is configured for the channel, the post-session feedback form is shown
  • New messages from the same user/contact start a fresh conversation

Ended conversations remain visible in the conversation list and can be reviewed at any time.

Loading States

While the assistant is processing a response, the chat UI shows:

  • An animated typing bubble with bouncing dots
  • A “Thinking…” label next to the bubble
  • The send button and input are disabled to prevent duplicate messages
  • If processing takes longer than 60 seconds, a timeout warning appears: “This is taking longer than usual…”

The widget shows similar loading states, plus skeleton placeholders (animated shimmer bars) while conversation history is loading.

Technical Details

Conversation state — Beyond its messages, each conversation carries persistent state that drives system behavior. The processing flag enables real-time UI updates (the thinking indicator). For guided conversations, a guided_progress JSON structure tracks which script questions have been answered, which are still pending, and the overall status — this is injected into the system prompt on each turn. The activated_skill_ids field records which skills the assistant has loaded during this conversation, so they persist across turns without re-activation.

Session lifecycle fields — The ended_at timestamp is NULL for active conversations and set when the session ends. The end_reason field records why the conversation ended: "user_ended" for manual closure or "guided_complete" for automatic completion of guided scripts. These fields determine whether new messages are accepted and whether the feedback form should be shown.

Delegation tracking — When an assistant delegates to another assistant, the delegated work runs in a child conversation linked to the parent via parent_conversation_id. The delegation depth is tracked to enforce a maximum depth of 3, preventing infinite delegation chains.

Message dual storage — Messages store two representations of their content. The content field holds display-friendly plain text for the conversation list and detail view. The content_json field holds the full structured blocks — text, tool call inputs, tool results, and thinking text — preserving the complete agent interaction for the API log viewer.

Conversation indexing — Completed conversations can be indexed into the project’s knowledge base. The system summarizes the conversation, chunks the text, generates vector embeddings, and stores them as searchable knowledge. This means insights from past interactions become available to future conversations through semantic search.