Walk the Interactions console
The Interactions console is the unified cross-channel list — every messaging conversation and every voice call merged into one recency-ordered, cursor-paginated view. This page walks the console itself: what each control in the filter strip does, who can read versus export, and how the columns read. For the full API filter matrix and cursor semantics, read the Interaction Search reference; to tour the workspace end to end from query to ticket hand-off, read Find a conversation across channels.1. One row model over two record families
The console lists a derived projection, not a separate store. It unions two existing record families and returns one row each:- Conversations — messaging threads on the connected channels (SMS, WhatsApp, email, RCS, and the other channels wired to the inbox). A row carries the thread’s lifecycle status and the delivery state of its latest message.
- Calls — voice call-log entries. A row carries the call disposition and direction.
(last_activity_at, id) keyset cursor: ties break by id, so two rows at the same second page through in a stable order without skipping or repeating. The full projection definition lives on the unified interaction model concept page.
2. The filter strip
The filter strip combines a free-text box, two chip rows, and a recency preset. All axes combine with AND; within a chip row the selections combine with OR.
Rows arrive from the API already recency-ordered; the console accumulates pages as you click Load more rather than re-sorting on the client. Each row exposes the row keys documented on the search reference: the
type badge (Conversation/Call) with a direction arrow on calls, the channel tag under Channel / Status, and the lifecycle pill plus — on conversation rows with a delivery signal — a second delivery pill (Delivered, Failed, Undelivered) so thread state and message health stay separate. The Contact column deep-links to the contact record when one is linked, and falls back to a read-only raw identifier when it isn’t. The Preview shows a plain-text snippet of the latest message (markup stripped) or the Voice call placeholder for call rows. Last activity renders in your own timezone.
3. Read vs export — the asymmetric permission split
The console deliberately splits read and bulk-export gates:- Read (search + list): the
owner,admin,developer, andviewerroles can all open the page and query. The unified view reads the same rows the conversations list and call log expose per role, so it inherits the same posture as global search. - Export (CSV): gated to owner, admin, and developer roles holding the
contacts:readscope. The export is a bulk, org-wide pull of contact-linked interaction history — a higher blast radius than a single-page view — so the gate is deliberately narrower than the search gate.
The 403 toast edge case
Aviewer opening Export CSV gets a friendly toast naming the missing permission, not a raw error page. The search itself succeeds — only the export is rejected. Ask an owner or admin to run the export on your behalf, or to widen your role to include contacts:read.
4. CSV export — what “exportable list” means
The list is exportable end to end: the CSV applies the same filters you have on screen and walks the full cursor chain up to the export ceiling. Operationally that means:- The export respects the console state. Narrow first (chips, text, preset), then export — the click carries the current filter set, not an “everything” dump.
- Row ceiling. 20,000 rows per export; a truncated result returns with an
X-Export-Truncated: trueheader. Narrow the window or channel set and re-export. - Rate limit. 5 exports per minute, matching the ad-hoc audience export ceiling.
- Audit. Every export writes an audit entry naming the row count, truncation flag, and applied cap — a tenant-owned control on your workspace audit log, not a platform compliance gate.
- PII redaction. If the workspace has opted into transcript PII redaction under Settings → Privacy, masked contact fields (
contact_name,contact_phone,contact_email,preview) are masked the same way in the CSV and on screen — one redaction gate covers both surfaces.
5. Worked scenarios
Find everything a contact touched in the last 24 hours
Scope to one contact’s recent activity across every channel:- Free-text the contact’s name, phone, or email in the search box.
- Leave the type chips at All types — the answer spans conversations and calls at once.
- Leave the channel chips at All channels unless the channel set really narrows the question.
- Pick Last 24h on the preset strip.
- Read the list for the recency-ordered slice. Open the Contact deep link for the per-contact profile; open a conversation or call row for the thread or call detail behind the touch.
Export tickets by channel for a compliance review
Split one review period into a channel-delimited export that a reviewer can sort:- Chip the type you want — usually Conversation (messaging) or Call (voice) — to keep the export one-arm.
- Chip one channel in the channel chip row (the review breaks the CSV by channel, one export per channel).
- Pick the preset that brackets the review window (or set explicit ISO bounds on the API).
- Export. The CSV carries
channelas a column, so when you export more than one channel the reviewer can still sort per channel inside the sheet. - If the review needs per-conversation evidence rather than a bulk CSV, use the vCon export — the per-thread, tamper-evident alternative.
Troubleshooting
- Empty list. Clear one axis at a time — a status chip leaked from a sibling surface matches zero rows on the other arm (conversation statuses never match calls), and a short preset on a quiet workspace returns nothing. All on each chip row plus All time resets.
- Calls missing.
voicemust be in the channel chip set (or no channel filter set); Call must be in the type selection. A messaging-only chip set strips calls. - Export 403. Held role is
viewer, or the role lackscontacts:read. The search path stays available — ask an owner or admin to widen the role or run the export. - CSV truncated. 20,000-row ceiling. Narrow the filters; the
X-Export-Truncatedheader confirms truncation rather than a partial scope.
See also
- Interaction Search reference — the full filter matrix, composite keyset cursor semantics, and export contract.
- Find a conversation across channels — the end-to-end walkthrough from a half-remembered contact detail to a thread or a ticket.
- Unified interaction model concept — the projection the console reads.
- Conversation archive — natural-language search for messaging history.
- vCon export — the per-thread, tamper-evident export alternative to bulk CSV.