> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloudhumans.com/llms.txt
> Use this file to discover all available pages before exploring further.

# claudia_conversation

> The conversation-level fact table, and only for conversations the ClaudIA agent took part in. Start here to count conversations, split N1 from N2, and read why a conversation was escalated. For everything in the helpdesk, whether or not an agent was involved, use [`cloud_chat_conversations`](/data-export/catalog/cloud-chat/cloud_chat_conversations).

The conversation-level fact table, and only for conversations the ClaudIA agent took part in. Start here to count conversations, split N1 from N2, and read why a conversation was escalated. For everything in the helpdesk, whether or not an agent was involved, use [`cloud_chat_conversations`](/data-export/catalog/cloud-chat/cloud_chat_conversations).

<Columns cols={3}>
  <Card title="One row is">
    one ClaudIA conversation
  </Card>

  <Card title="Delivery">
    Rewritten daily
  </Card>

  <Card title="Columns">
    56
  </Card>
</Columns>

## Where it lands

```text theme={null}
s3://<YOUR_BUCKET>/v1/datamart_claudia/claudia_conversation/snapshot_date=<DATE>/
```

The partition delivered today holds the whole table. Read the latest
`snapshot_date=` partition only, and check for `_SUCCESS` before you do, as
described in [bucket layout](/data-export/bucket-layout#how-to-tell-if-a-partition-is-ready).

## Columns

<ResponseField name="conversation_sk" type="bigint">
  Internal warehouse key. Not stable between deliveries — join on `conversation_id` instead.
</ResponseField>

<ResponseField name="claudia_project_sk" type="bigint">
  Internal warehouse key for the project. Not stable between deliveries — use `project_id` or `project_name`.
</ResponseField>

<ResponseField name="csat_sk" type="bigint">
  Internal warehouse key for the satisfaction answer. Not stable between deliveries — the score itself is on this row in `csat_value`.
</ResponseField>

<ResponseField name="cloudchat_id" type="varchar(256)">
  Identifier of the Cloud Chat conversation this one ran in. Joins to `conversation_uuid` on [`cloud_chat_conversations`](/data-export/catalog/cloud-chat/cloud_chat_conversations). Conversations served by another helpdesk have no counterpart there, so this join does not cover every row — identify those through `helpdesk_id`.
</ResponseField>

<ResponseField name="helpdesk_id" type="varchar(256)">
  Identifier of the conversation in whichever helpdesk served it. When that helpdesk is Cloud Chat, it is the same number as `conversation_display_id` on [`cloud_chat_conversations`](/data-export/catalog/cloud-chat/cloud_chat_conversations), kept as text here. When the conversation ran in an external helpdesk, it is that system's own identifier.
</ResponseField>

<ResponseField name="creation_date" type="timestamp">
  Conversation start, in UTC.
</ResponseField>

<ResponseField name="creation_date_local" type="timestamp">
  Conversation start, in the project's local timezone. Use this one when your report has to line up with the operation's working day.
</ResponseField>

<ResponseField name="status_class" type="varchar(322)">
  Ticket status as emitted by the platform. The value is a fully-qualified internal class name whose exact string is not part of the delivery contract: read the trailing segment (`Open`, `Resolved`, `Closed`) and prefer `is_conversation_open_flag` for filtering.
</ResponseField>

<ResponseField name="is_n2_flag" type="boolean">
  Whether the conversation reached N2 at any point. Equivalent to `resolution_level_class = 'N2'`.
</ResponseField>

<ResponseField name="status_conversation" type="varchar(510)">
  Status of the conversation on the agent's side.
</ResponseField>

<ResponseField name="status_ticket_connector" type="varchar(322)">
  Ticket status as reported by the channel connector, in the same fully-qualified form as `status_class`. The two disagree while a status change is still propagating.
</ResponseField>

<ResponseField name="is_conversation_open_flag" type="boolean">
  Whether the conversation was still open at the time of the delivery.
</ResponseField>

<ResponseField name="is_n2_conversation_flag" type="boolean">
  Whether the conversation was handled by N2. Set independently of `is_n2_flag`, which only records that N2 was reached.
</ResponseField>

<ResponseField name="is_forced_n2_handover_flag" type="boolean">
  Whether the escalation to N2 was forced rather than decided by the agent.
</ResponseField>

<ResponseField name="resolution_level_class" type="varchar(2)">
  Resolution level: `N1` when the agent closed the conversation on its own, `N2` when it was escalated to a person. This is the column to group by for a retention rate.
</ResponseField>

<ResponseField name="close_date" type="timestamp">
  When the conversation was closed. `NULL` while it is still open.
</ResponseField>

<ResponseField name="status_resolve_date" type="timestamp">
  When the conversation was marked resolved. Can precede `close_date`, since a resolved conversation stays open until it is closed.
</ResponseField>

<ResponseField name="conversation_id" type="varchar(255)">
  **Join key.** Unique id of the conversation. Joins to [`claudia_prompt_revision`](/data-export/catalog/claudia/claudia_prompt_revision) and, through `cloudchat_id`, to the Cloud Chat tables.
</ResponseField>

<ResponseField name="project_name" type="varchar(510)">
  Project the conversation belongs to.
</ResponseField>

<ResponseField name="application_identifier_class" type="varchar(255)">
  Environment the conversation ran in. Only `PRODUCTION` rows are delivered.
</ResponseField>

<ResponseField name="low_confidence_count_value" type="integer">
  How many times the agent produced an answer it judged low confidence. A high count on N2 conversations usually points at missing content.
</ResponseField>

<ResponseField name="enlightenment_question_count_value" type="integer">
  How many clarifying questions the agent asked before answering.
</ResponseField>

<ResponseField name="resolution_retries_count_value" type="integer">
  How many times the agent retried before resolving. Ranges from 0 to 3.
</ResponseField>

<ResponseField name="problem_resolved_question_sent_count_value" type="integer">
  How many times the agent asked the customer whether their problem was solved.
</ResponseField>

<ResponseField name="unanswered_ticket_escalator_count_value" type="integer">
  How many times the conversation was escalated for going unanswered.
</ResponseField>

<ResponseField name="activeintent_class" type="varchar(510)">
  Intent the agent considered active when the conversation ended.
</ResponseField>

<ResponseField name="active_flow_id" type="varchar(510)">
  Controlled flow active when the conversation ended. Joins to `typebot_id` on [`eddie_result_outcomes`](/data-export/catalog/claudia/eddie_result_outcomes). `NULL` when no flow was running.
</ResponseField>

<ResponseField name="active_flow_session_id" type="varchar(510)">
  Run of the active flow. Use it with `active_flow_id` to identify a single pass through the flow.
</ResponseField>

<ResponseField name="problem_solved_flag" type="boolean">
  Whether the customer confirmed their problem was solved. `NULL` when they were never asked or never answered — this is not the same as `false`.
</ResponseField>

<ResponseField name="resolution_reason" type="varchar(510)">
  Raw resolution reason as emitted by the platform. Wording changes without notice; use `resolution_reason_refined` for anything you report on.
</ResponseField>

<ResponseField name="tag_name" type="varchar(510)">
  Subject tag assigned to the conversation.
</ResponseField>

<ResponseField name="update_date" type="timestamp">
  When the conversation was last modified.
</ResponseField>

<ResponseField name="ab_key_name" type="varchar(510)">
  Name of the A/B configuration the conversation ran under. `NULL` when the project had no test running.
</ResponseField>

<ResponseField name="gencx_value" type="smallint">
  Automated quality rating of the conversation, from 1 to 5. Independent of CSAT: it is produced by evaluating the transcript, not by asking the customer.
</ResponseField>

<ResponseField name="gencx_reasoning_text" type="varchar(20000)">
  Written justification for the `gencx_value` rating.
</ResponseField>

<ResponseField name="frustration_score_value" type="smallint">
  Estimated customer frustration on a 0 to 100 scale, from the wording of the customer's messages.
</ResponseField>

<ResponseField name="frustration_score_update_date" type="timestamp">
  When the frustration score was last recalculated.
</ResponseField>

<ResponseField name="frustration_class" type="varchar(50)">
  `frustration_score_value` bucketed into a label: `CALM`, `IRRITATED`, `FRUSTRATED` or `HIGHLY_FRUSTRATED`.
</ResponseField>

<ResponseField name="frustration_reasoning_text" type="varchar(510)">
  Written justification for the frustration classification.
</ResponseField>

<ResponseField name="has_rate_limit_error_flag" type="boolean">
  Whether the agent hit a rate limit while handling the conversation. Useful when explaining an unexpected escalation.
</ResponseField>

<ResponseField name="messages_total_value" type="bigint">
  Messages exchanged in the conversation, both sides included.
</ResponseField>

<ResponseField name="messages_agent_total_value" type="bigint">
  Messages sent by the agent. Subtract from `messages_total_value` for the customer's share.
</ResponseField>

<ResponseField name="is_gencx_bad_flag" type="boolean">
  Whether `gencx_value` fell in the range treated as a bad experience.
</ResponseField>

<ResponseField name="project_id" type="varchar(255)">
  Id of the project. Prefer it over `project_name`, which can be renamed.
</ResponseField>

<ResponseField name="tenant_id" type="varchar(256)">
  Id of the tenant. `NULL` for rows with no tenant mapping.
</ResponseField>

<ResponseField name="tenant_name" type="varchar(256)">
  Name of the tenant. `NULL` for rows with no tenant mapping.
</ResponseField>

<ResponseField name="csat_value" type="smallint">
  Satisfaction score for the conversation, from 1 to 5. `NULL` when no survey was answered.
</ResponseField>

<ResponseField name="is_csat_positive_flag" type="boolean">
  Whether the score counts as positive.
</ResponseField>

<ResponseField name="is_csat_neutral_flag" type="boolean">
  Whether the score counts as neutral.
</ResponseField>

<ResponseField name="is_csat_negative_flag" type="boolean">
  Whether the score counts as negative.
</ResponseField>

<ResponseField name="is_csat_valid_flag" type="boolean">
  Whether the answer is usable. Filter on this before averaging `csat_value`.
</ResponseField>

<ResponseField name="account_id" type="bigint">
  Cloud Chat account the conversation belongs to.
</ResponseField>

<ResponseField name="instance_id" type="varchar(11)">
  Cloud Chat instance the conversation was served from.
</ResponseField>

<ResponseField name="conversation_display_id" type="bigint">
  Number shown to agents in Cloud Chat. Convenient when someone reports a conversation by the number they saw on screen; join on `conversation_id`.
</ResponseField>

<ResponseField name="resolution_reason_refined" type="varchar(510)">
  Resolution reason grouped into a readable label prefixed with `N1 - ` or `N2 - `. Prefer this column over `resolution_reason`. Older rows predate the refinement and still carry a raw English string, so filter on the prefix or fall back to `resolution_level_class`.
</ResponseField>

<ResponseField name="snapshot_date" type="date">
  Partition column. Date of the delivery that wrote this file, in `YYYY-MM-DD`.
</ResponseField>
