Find a conversation across channels with Interaction Search
A customer says “I already told you this last week” and you don’t know whether they texted, emailed, or called. The Interactions page is where you answer that: one recency-ordered list over every messaging conversation and every voice call in the workspace, searchable by the contact’s name, phone, or email, filterable by channel, and exportable to CSV when the answer has to travel. Open it from the dashboard sidebar under Interactions. This guide walks one full pass end to end — from a half-remembered customer detail to a thread you can act on — and hands off to the reference guide where the details get deeper. If you want the full filter matrix and cursor semantics instead, read Search every conversation and call in one list alongside this page.1. What the unified search returns
The workspace searches a derived projection, not a separate data store. Two existing record families are unioned into one list:- Conversation rows — inbox threads on the connected channels (SMS, WhatsApp, email, RCS, and the other messaging channels you have wired). Each row carries the thread’s lifecycle status and the delivery state of its latest message.
- Call rows — entries from the voice and fax call log. Each row carries the call disposition and the direction, and opens into the call-detail page where the recording lives.
2. Build the query
Filters combine with AND semantics across axes and OR within one chip row. Start wide and narrow — the list re-queries on every change.- Free-text the contact. Type a name, phone number, or email into the search box. The match is prefix-anchored against the linked contact’s identifiers, so a partial phone number finds the thread before you remember the full one.
- Chip the interaction type. Toggle Conversation or Call. Type chips are single-select — picking a second type replaces the first, picking the active one clears to All.
- Chip the channel. Toggle any combination of SMS, WhatsApp, email, RCS, voice, and the other connected channels. Note that
voiceis the gate on call rows: a messaging-only chip set strips calls from the list. - Pick a time window. Use the preset strip — Last 24h, Last 7 days (the default), Last 30 days, or All time — when one of those matches the memory; set explicit ISO bounds on the API when it doesn’t.
Worked example — scope to one contact
Find everything one customer touched across every channel this month:- Type the customer’s name in the search box.
- Chip the channel set you actually need, or leave it open; every channel the contact has used shows up.
- Pick Last 30 days.
- Click the contact name in the Contact column once — that deep-link lands on the contact record, and from there the unified contact timeline gives the per-person feed when one contact is the whole question.
Worked example — failed sends in the last 24 hours
Find every conversation whose newest message did not land:- Chip Conversation as the type.
- Leave the channel chips open (or chip the channels you suspect).
- Pick Last 24h.
- In the results, scan the Channel / Status column: a conversation row with a terminal failure shows a second pill under the lifecycle status reading Failed or Undelivered. Click through to the thread to resend or diagnose — the list’s job is to point, not to replay.
Worked example — QA a long-enough call recording
Find recorded calls worth sampling:- Chip Call as the type and voice as the channel.
- Pick the date preset that brackets the calls you want.
- Conversation-only statuses match zero call rows, so clear any status chip that leaked over from a messaging search. Sort is recency-only; use the CSV export below when you need duration-ranked sampling rather than hand-picking.
3. Read the facet chips and the result rows
The chip strips above the list are the facets — the page has no separate counts sidebar, so the state of each strip (which chips are lit) is your current scope. Reset is one click on All per row. Each result row reads left to right:
Two rows at the same second always page through in a stable order, so a Load more pass never skips or repeats a row.
4. Deep-link into the thread or the call
A result row is a pointer — opening the full record happens on the surface that owns it:- Conversation rows open into the inbox thread, where you can reply, tag, or close it.
- Call rows open into the call-detail page, where the per-leg log and the recording sit (the recording follows your role’s permissions).
- The Contact column opens the contact record instead — the right jump when the next step is the customer’s full profile rather than the single touchpoint.
5. Hand the finding to a ticket or export it
Once the search has identified the thread or call that matters, there are two ways to carry it forward, both tenant-owned and audit-logged on your workspace:- Link it to a ticket. Create a ticket from the Tickets queue and pass the source linkage — a conversation or call id — so the ticket renders the open-thread / open-call shortcut instead of a floating row. That is the durable hand-off from “we found it” to “someone owns it”; the Tickets workflow guide covers the queue mechanics.
- Export the slice to CSV. Select Export CSV in the page header; the export applies the filters on screen, so narrow first. Exports cap at 20,000 rows, throttle to 5 per minute, and are gated to owner, admin, and developer roles holding the
contacts:readscope — a viewer gets a friendly 403 toast, not a broken page. If your workspace has opted into PII redaction under Settings → Privacy, masked contact fields are masked identically in the CSV and on screen.
Troubleshooting
- The list is empty. Loosen one axis at a time — status chips leak across row types (a conversation status matches zero calls and vice versa) and a 24h preset on a quiet workspace returns nothing. All on each chip row and All time on the preset strip is the reset state.
- Calls are missing.
voicehas to be in the channel chip set, or no channel filter at all; the type filter also has to include Call. A messaging-only view never shows call rows. - Export fails with a 403. Search is viewer-readable, but bulk export is not — ask an owner, admin, or developer to either run it or add the
contacts:readscope to your role.
See also
- Search every conversation and call in one list — the reference manual for the same page: the full filter matrix, cursor semantics, and the export contract.
- Read and export the unified contact timeline — the per-contact feed when one customer’s full history is the target.
- Inbox tickets workflow — the queue the conversation and call hand-off links into.
- Unified interaction model concept — the projection the unified search reads.