Lifecycle
| Status | Trigger | What happens |
|---|---|---|
open | User sends a query | Conversation is active. New messages extend it. |
cold | No activity for cold_timeout_minutes | A check-in message is generated and sent back to the user. |
closed | No activity for close_timeout_minutes after going cold | Conversation stats are generated (sentiment, category, resolution, cost). |
Cold messages
When a conversation goes cold, SupaProxy generates a contextual follow-up message using the last 6 messages of the conversation. This is sent back through the original consumer (e.g. posted in the Slack thread).Manual close
Conversations can also be closed manually from the dashboard. This immediately queues stats generation.Thread mapping
Conversations map to external threads:| Consumer | External ID |
|---|---|
| Slack | Thread timestamp (thread_ts) |
| API | Session ID (session_id) |
| Thread ID |
Stats and analysis
When a conversation closes, stats are generated asynchronously:| Metric | Description |
|---|---|
| Sentiment score | Numerical sentiment analysis |
| Resolution status | resolved, unresolved, escalated, abandoned |
| Category | query, issue, sales, feedback, support, internal, other |
| Summary | AI-generated conversation summary |
| Compliance violations | Any guardrails triggered during the conversation |
| Knowledge gaps | Topics the AI could not answer from available knowledge |
| Fraud indicators | Suspicious patterns with severity (low, medium, high) |
| Tools used | List of tools called during the conversation |
| Total tokens | Input and output token counts |
| Total cost | Aggregated cost in USD |
| Duration | Time from first message to close |
Filtering
Conversations can be filtered by:- Status: open, cold, closed
- Category: query, issue, sales, feedback, support, internal, other
- Resolution: resolved, unresolved, escalated, abandoned
- Consumer: slack, api, whatsapp, claude-code