conversation_started | mode, resumed (true when the visitor picked the conversation back up; the new leg gets its own conversation_ended) |
message_sent, message_received | channel (text, voice, human_relay), has_attachments. Message text is never included. |
first_agent_response | latency_ms from the visitor’s first message to the agent’s first reply. Once per conversation. |
form_shown, form_submitted, form_abandoned | form_kind (pre_conversation, form, collect_otp, collect_phone_number, collect_image, handoff_identity); the pre-conversation form also carries form_id and, on submit, field_count. Resending a code or changing method is neither a submit nor an abandonment. |
file_uploaded | mime_type, size_bytes |
voice_call_started, voice_call_ended | duration_ms, end_reason (mode_switched, handoff, disconnected) on end |
handoff_requested, handoff_completed, handoff_unavailable, handoff_ended | provider; agent_display_name and wait_ms on completed; duration_ms on ended |
feedback_submitted | form_id, field_count. The answers themselves are not included. |
link_clicked | url. A link the agent sent, clicked inside the transcript. Fires on the click, before the widget’s open-link confirmation. |
conversation_ended | end_reason (user_ended, agent_ended, inactivity, widget_closed, new_conversation, switched_conversation, disconnected), message_count, messages_sent, messages_received, duration_ms, last_message_from |
conversation_abandoned | reason, last_message_from. Fired alongside conversation_ended when the visitor closes the widget mid-conversation. |