Call Logs & Timeline

Last updated 26 May 2026

A Flexie customer timeline interleaving phone calls, emails, SMS, WhatsApp, and notes, with a recording playback control on each call event

Every completed call leaves a record behind: who spoke, for how long, the recording if there is one, and a link to the customer it belongs to. The same record powers both the call-history list and the per-customer timeline.

On a customer's timeline, every call linked to that customer appears interleaved with email, SMS, WhatsApp, notes, and other events.

What's in a call record

Each completed call leaves behind a record that holds:

Field What it holds
Direction Incoming or outgoing.
From / To The two phone numbers in international format.
Started at When the call began.
Duration Talk time after answer.
Outcome Answered, Busy, No answer, Cancelled by caller, Declined, Failed. See the outcomes list below.
Recording A link to the recording (if recording is on for the channel).
Agent The user who handled the call.
Linked customers The records this call has been attached to.

Call outcomes

The same outcome labels apply to both channels:

Outcome Meaning
Answered The other side picked up; talk time was recorded.
Ringing The call is still ringing (only visible on live calls).
Busy The other side was on another call.
No answer Rang through without being picked up.
Cancelled by caller The caller hung up before the callee picked up.
Declined The callee actively rejected the call.
Failed Network or routing failure, couldn't complete.

Both channels run the same matching rule at the moment a call ends:

  1. Normalise the other side's number to international format.
  2. Search every phone field across leads, contacts, accounts, deals, cases, and users.
  3. For every match, link the call to that record.

Concretely:

  • Outbound to +14155551212 matches a Contact's Mobile field, so the call is linked to the contact (and to its account or open deals, if those records reference the same person).
  • Incoming from +14155551212 matches a Lead's Phone field, so the call is linked to that lead.
  • If +14155551212 matches both a contact and a separate lead, both get linked. The call appears on both timelines.
  • If nothing matches, the call is logged but not linked. It still shows in Call logs; it just doesn't have a customer.

Adding a phone field to every record type that might own the number (Contact, Lead, Account) is what makes the cross-record linking work. See Custom records & fields for the field types.

Recordings

Recording is opt-in. On Twilio, the Record calls flag on the account turns it on for every call placed through that account. On a self-hosted PBX, recording is configured on the PBX itself, Flexie just stores the link the PBX hands back.

Where the file lives:

  • Twilio: on Twilio's servers. The link in Flexie streams the recording directly from there.
  • Self-hosted PBX: wherever your PBX puts recordings. Often a local network share, an object store, or a per-tenant subdomain.

Playback: on the call-log list, each row has a play button that opens an inline audio player. The same player appears on the customer's timeline when you expand the call event.

Compliance:

  • Recording typically requires the caller's consent. Set up your greeting or IVR to announce recording, or your jurisdiction's equivalent.
  • A user with view-only access can listen to recordings but not download them. A user with full access can download (the link to the audio file is exposed).

On the customer's timeline

Every call that's linked to a record shows up on that record's timeline, interleaved with the other channels:

TIMELINE · JOHN DOE Outgoing call · 2m 14s to +1 415 555 1212 · answered ▶ Play "Discussed Q3 renewal terms" by John D. 26 May · 14:02 Incoming email "Re: Quote for Q3" from john@example.com 26 May · 13:30 Incoming call · 3m 41s from +1 415 555 1212 · answered ▶ Play "Asked about timeline" by Jane D. 23 May · 09:14

Each call event expands to show: direction and duration, the other party's number, the agent who handled it, the outcome, the recording (if any), and any notes added via the post-call modal.

The same timeline view interleaves email, SMS, WhatsApp, tasks, cases, and field changes, so the call sits in the right moment of context.

Filtering and search in the call-log list

The call-log list supports the usual controls:

  • Search by number, agent, or matched customer.
  • Filter by direction (incoming or outgoing), date range, outcome, recorded vs. not recorded, has-note vs. no-note.
  • Sort by date (default desc), duration, direction, or agent.
  • Export to CSV uses the same export pipeline as everywhere else in Flexie (filtered and sorted view exported).

A user's access role determines what's visible. See-own vs. see-everyone is the typical split, configured under the standard Roles model.

Manually mapping a past call to a customer

If you spot a call in the log that didn't auto-link to anyone (e.g. because the number wasn't on file at the time), open the call, click Link to record, search for the customer, save. The link appears on the customer's timeline retroactively.

A bulk version of this for backfilling history is the Match past calls to this record action, see Workflows.

Gotchas

  • Incoming and no-answer. A ringing-but-unanswered call still creates a call record, with the outcome set accordingly. Use this for "called but didn't reach them" workflows.
  • Outgoing and no-answer. Same, a row is written. The duration reflects what actually happened (zero, in this case).
  • Recording stops at hangup. Whichever side hangs up first ends the recording, including if the customer hangs up after you've already said "this call is being recorded".
  • Linked-record performance. A call against a phone that appears on many records (e.g. an account whose main number is also 200 contacts' work number) writes a lot of links. It works, but the timeline rendering is per-record, so each contact sees just the one event.

Next

  • Live monitor: supervising the calls that are happening right now.
  • Workflows: using a completed call as a workflow trigger.