
CRM
One customer history across every channel: context, not a message pile
Turn email, SMS, WhatsApp, social DMs, forms and calls into one reliable customer history while preserving source events, identity, case, restrictions and the next action.
Short answer
A reliable customer history is not created by copying email, WhatsApp, SMS, social DMs, forms and calls into one long list. First preserve every event with its source ID, channel, direction, participants and three distinct times. Then confirm the person and business case independently. Only that normalised record should produce the readable timeline with restrictions, original evidence and exactly one traceable next action. Deduplicate repeated deliveries by source and event ID; do not silently combine similar content, uncertain identities or late events. Summaries can make the record easier to read, but they never replace the original source.
Key takeaways
- Separate source event, normalised interaction and operational projection so a readable timeline never overwrites evidence.
- Treat person, channel identity, conversation, business case and event as distinct objects, then confirm contact and case independently.
- Deduplicate retries with source account, event type and stable source ID; preserve `occurredAt`, `receivedAt` and `recordedAt` for chronology and diagnosis.
- Keep summaries and corrections linked to their sources and turn confirmed commitments into at most one primary next action with owner and due-at.
A timeline is a view, not a data heap
Imagine a fictional installation company. A prospect asks about air conditioning through a web form. Two days later she sends a floor plan by email. Her partner calls from another number to move the site visit. A photo of the fuse box arrives through WhatsApp. The same person already has a maintenance case for another property.
A message list can contain all four contacts and still tell the wrong story. The photo may land on the maintenance case. The call may create a new contact. The email can appear after a late SMS even though it happened first. An automated summary may blend the proposal and service case. A great deal is visible, but little is actionable.
A shared customer history answers five questions for every event: What happened? Through which confirmed identity? For which business case? What may be seen and done? Which obligation follows?
Those questions matter more than the number of integrated channels. More channels initially create more possible inputs. Omnichannel begins only when switching channels does not destroy confirmed context.
Three layers keep evidence and usability apart
A robust architecture separates the original, its translation and the working view. If everything lives in one editable timeline row, it becomes impossible to tell what arrived and what a person or automation later made of it.
Layer | Contains | May it change? | Purpose |
|---|---|---|---|
source event | provider/source ID, raw content or protected pointer, attachments, transport metadata, receipt evidence | never overwrite; add a correction or deletion marker | prove what the source delivered |
normalised interaction | common event type, channel, direction, times, channel identities, contact and case candidates, restrictions | versioned corrections with provenance retained | make unlike channels comparable and testable |
operational projection | readable timeline, case view, exception queue, owner, next action and due time | changes as operational state | decide and continue the work |
An email summary is therefore a derived projection. The original text remains reachable. Correcting a phone number changes the contact identity but does not retroactively change who sent the original call. Completing a task removes it from the open queue while preserving its result in history.
This separation is practical, not academic. It supports corrections without overwriting evidence and a concise working view without exposing the full record to every role.
The interaction envelope makes channels comparable
Every input receives the same business envelope. It is not a mandatory product format; it is a template for integrations, imports and automations.
Field | Question | Example or rule |
|---|---|---|
`eventId` | Which internal event is this? | immutable internal ID |
`source` + `sourceEventId` | Where did it originate, and what is its native ID? | channel, provider account and stable source ID together |
`eventType` | What happened in business terms? | message received, call ended, form submitted, appointment changed |
`channel` + `direction` | Through which path and in which direction? | email, SMS, call; inbound or outbound |
`occurredAt` | When did it happen at the source? | timestamp with timezone |
`receivedAt` | When did our intake accept it? | separate integration time |
`recordedAt` | When was the normalised record stored? | separate system time |
`participants` | Which channel identities took part? | exact email addresses, phone numbers or platform IDs |
`contactMatch` | Which person record is confirmed? | contact ID, state, match reason and reviewer |
`caseLink` | Which business case does it concern? | opportunity, service case, appointment or unresolved |
`contentRef` | Where is the permitted original content? | protected pointer instead of unnecessary full copy |
`derivedFrom` | What produced a summary or classification? | source event, model/rule, version and time |
`restrictions` | What limits visibility or action? | access class, objection, channel or retention rule |
`nextAction` | Which confirmed obligation follows? | outcome, owner, unambiguous due-at and state |
The CloudEvents 1.0.2 specification uses attributes including `id`, `source`, `type` and an optional RFC 3339 timestamp in a transport-neutral event envelope. It does not define a CRM customer history. It does provide a useful engineering boundary: establish an event's identity and origin before adding business fields.
Person, channel identity, conversation and case are four things
The common shortcut is: this message has an email address, so it belongs to that contact. It works until addresses are shared, numbers change or several requests run at once.
Object | Example | Must not automatically mean |
|---|---|---|
person contact | Lea Sommer in the CRM | exactly one channel or one business case |
channel identity | `lea@company.com`, private mobile, social-profile ID | the same person without an approved match reason |
conversation/thread | email thread or WhatsApp conversation | exactly one opportunity or service case |
business case | proposal for site A, maintenance case for site B | the contact's entire history belongs here |
event | one message, call or appointment change | the same as a conversation, person or case |
A contact can have several confirmed email addresses. A family phone can be used by two people. A generic company mailbox can represent several contacts. A conversation can change subject. Contact and case association therefore need independent states.
Identity needs four outcomes, not a blind hit
Matching is not a binary automation. At least four outcomes keep uncertainty visible:
Confirmed: A stable channel value or explicit confirmation unambiguously connects the event to a contact.
Strong candidate, review required: Several signals fit, but a mix-up would matter. Preserve the event and create a short review task.
Unresolved: No contact passes the approved rules. Route the event to a dedicated queue, not the newest contact or someone with the same name.
Rejected: A proposed match was rejected by an accountable reviewer. Preserve the reason so the same bad suggestion does not return on every retry.
Store the match reason with the result: exact confirmed phone, confirmed email, explicit link from an authenticated portal, manual confirmation or merely a candidate inferred from name and context. Names alone are weak. Free text such as “Tom here again” is not a technical key.
The separate guide to CRM duplicate prevention covers irreversible contact merging. This guide operates earlier: associate an event without using that association as an excuse to merge contacts prematurely.

One person can have several live cases
Even with a confirmed person, a second question remains: does the message concern a proposal, invoice, support case or no existing case?
A case match can rely on:
a stable opportunity, ticket, appointment or order ID in a link or form;
a reply inside an unambiguously associated thread;
a confirmed object such as a site, quote or appointment;
an explicit choice by the customer or operator;
a business rule that produces exactly one open candidate.
“Newest open opportunity” is safe only when the process has approved that rule and exactly one candidate exists. Two parallel proposals must not collapse because one was updated later. When uncertain, show the event on the contact but leave it unresolved in the case-specific view.
The same evidence can therefore produce three different views:
contact view: all permitted interactions for the person;
case view: only events, decisions and work for the specific request;
work queue: only unresolved or open elements with an owner and due time.
Three times prevent a false chronology
A sorted list needs more than `created at`. Integrations deliver late, offline devices synchronise later and a person may enter a field visit after the fact. Keep three times separate:
`occurredAt`: when the event happened at the source;
`receivedAt`: when the integration accepted the input;
`recordedAt`: when the normalised record was stored.
Business chronology usually follows `occurredAt`. Operations and debugging require `receivedAt` and `recordedAt`. A Friday note entered on Monday can appear among Friday events without hiding that it was recorded on Monday.
The RFC 3339 reference supports unambiguous timestamps in transit. Every local time also needs an explicit timezone. `09:00` without a place or offset is not a complete appointment time.
A retry duplicate is not a similar message
Webhooks and event streams can resend after ambiguous delivery. Twilio's event-delivery documentation describes at-least-once delivery, possible duplicates and events arriving out of order. It is one concrete vendor reference, not a guarantee or defect description for every system.
The robust rule is:
`Idempotency key = source account + event type + stable source event ID`
If that key has already completed processing, a retry creates neither a second timeline row nor a second task. The delivery attempt can still be recorded separately.
A content hash is dangerous. Two messages saying “Thanks” can be legitimate events on different days. The same attachment can concern two cases. A provider may report the same message again with a new status. Content can support search and classification; it is not the sole event key.
Corrections are appended, not retroactively invented
Wrong associations happen. The question is whether the correction remains traceable.
The source event keeps its source ID, participants and original times.
Re-association creates a versioned correction with old and new links, reason, time and accountable role.
A deletion or retention decision produces an appropriate tombstone or evidence where permitted, rather than a gap that pretends nothing existed.
A new AI summary replaces the previous projection only in the reading view; its version, time and source events remain traceable.
The W3C Provenance Data Model describes provenance as a record of the entities, activities and responsible agents involved in producing, influencing or delivering data. ONE LOOP need not claim a complete W3C PROV implementation. The useful principle is simpler: every derivation points back to its origin.
From channel event to actionable history
The flow separates technical acceptance, business association, protection and operational presentation.
From channel event to actionable history
Preserve source
Keep source account, source ID, type, direction, participants, occurrence, receipt and recording times unchanged.
Identity + case
Confirm contact and business case independently; route ambiguous candidates to a short review with the match reason.
Normalise + protect
Connect a common event type, content pointer, restrictions and every derived value to the source under a version.
Build projection
Create contact, case and work views; translate a confirmed obligation into at most one primary action with owner and due-at.
Missing source ID, ambiguous identity or case, late event, unclear restriction, correction without provenance or failed task creation?
Preserve the source. Keep candidates, match reason, times, restriction and accountable role in a visible review or error queue.
Recommended flow: preserve the source, resolve person and case independently, normalise the interaction with provenance and restrictions, then build the operational timeline with exactly one next action.
1. Preserve the source
Give the input an internal ID. Preserve source account, source ID, type, direction, participants, occurrence time and receipt time. Intake proves durable acceptance—not the correct person, correct case or a completed downstream action.
2. Resolve identity and case
Resolve contact and business case independently. Approved unambiguous keys may confirm automatically. Ambiguous candidates get a review card linked to the source; never guess by name or by whichever record was opened most recently.
3. Normalise and protect
Translate the channel value into a common event type. Keep the original content or protected pointer, restrictions, provenance and each derived summary connected. Corrections become new versions rather than silent overwrites.
4. Build the operational projection
Only now show the event in the appropriate contact and case views. A confirmed obligation creates at most one primary next action with owner and due-at. Unresolved cases remain in a visible queue.
What the consumer figures show—and what they do not
The Twilio State of Customer Engagement 2025 reports three consumer statements relevant to data control and transparent derivations.
Consumer expectations for data control and transparency
Share of surveyed consumers · Survey 3 January–17 February 2025; published 3 June 2025
- Do not believe brands use data in their best interest61 %
- Want control over personalisation settings84 %
- Want disclosure when speaking to AI54 %
View data table
| Category | Share of surveyed consumers |
|---|---|
| Do not believe brands use data in their best interest | 61 % |
| Want control over personalisation settings | 84 % |
| Want disclosure when speaking to AI | 54 % |
Three independent self-reports; not parts of a 100% whole and not evidence that a shared timeline improves trust, control or transparency.
Source: Twilio · State of Customer Engagement 2025 · Survey 3 January–17 February 2025; published 3 June 2025. 7,640 consumers and 637 business leaders across 18 countries; the chart uses consumer values only.
Global vendor survey. The short methodology spans Gen Z through baby boomers but does not publish complete question wording, response scales, weighting or country sample sizes. Not a dedicated German/SME sample or a measure of customer-history quality, identity resolution, data completeness, post-implementation trust, conversion or ONE LOOP. Read the three values independently on a 0–100% scale; do not add them or invent remainder bars. The 637 business leaders are not the denominator of the bars.
61% of surveyed consumers do not believe brands use their data in their best interest. 84% want control over personalisation settings. 54% want to know when they are talking to AI rather than a person. These are independent statements; they are neither added nor completed with invented remainder bars.
Twilio surveyed 7,640 consumers and 637 business leaders across 18 countries from 3 January to 17 February 2025. Only consumer values appear in the chart. The short methodology spans Gen Z through baby boomers but does not publish complete question wording, response scales, weighting or country sample sizes.
This global vendor survey measures neither customer-history quality nor a ONE LOOP effect. It does not prove that a timeline creates trust or decide which data may be stored. It supports one design question only: a unified view should not hide provenance, control or AI disclosure in the name of convenient personalisation.

What ONE LOOP can show—and what must be connected first
In a properly configured account, ONE LOOP can present conversations from email, SMS, WhatsApp and connected social channels together with internal comments. The working view can also expose contact context and linked activities such as appointments or opportunities. Teams can filter long histories by message and activity type and switch reply channels from the same conversation.
That does not automatically mean:
private devices or unconnected phone numbers are captured completely;
two channel identities safely refer to the same person;
every event is attached to the correct proposal or service case;
recording or copying content is legally permitted;
an automated text is a human answer or an actual resolution;
a visible message already has an owned next action.
The interface can only display what connected channels, integrations and association rules provide. That is why implementation begins with contracts and tests—not with a visually attractive timeline.
Four contracts make implementation testable
Contract | It must define | Example stop condition |
|---|---|---|
channel contract | event types, source IDs, status changes, attachments, times, retries and known gaps | source ID missing or one status update creates new business cases |
identity contract | normalised keys, approved match reasons, conflicts, review and rejection | only the name matches, address is shared or several contacts rank equally |
case contract | allowed objects, selection rules, parallel cases, reopen and closure | two open opportunities fit or a closed case is silently reopened |
projection contract | roles, visibility, summaries, next action, SLA and archiving | protected content appears for the wrong role or automation counts as human resolution |
A contract is a short versioned operations table, not a large legal project. Every row names the owner, expected state and evidence. A channel or workflow change increments the relevant contract version and triggers defined regression tests.
Privacy starts with the content copy
A central history encourages teams to copy every piece of content onto every object. That expands visibility, retention and the error surface.
GDPR Article 5 includes purpose limitation, data minimisation, accuracy, storage limitation, integrity and confidentiality. Article 25 addresses data protection by design and by default. Neither creates a universal legal basis or retention period for this guide. They lead to a concrete architecture question: does the operational projection need full content, a protected pointer, selected metadata or no persistent record?
One possible class matrix:
Content | Operational projection | Original store | Access and retention |
|---|---|---|---|
call metadata | time, direction, outcome, next action | technical call ID | limit by purpose and role |
recording/transcript | only when necessary and approved; otherwise no full copy | protected media store | separate legal and regional review |
email/chat | relevant message or pointer on the case | channel-bound original history | protect attachments and sensitive content separately |
AI summary | clearly marked as derived | model/rule version plus source references | never the sole evidence for a commitment or objection |
Legal basis, notices, recording, data-subject rights and retention must be assessed for the actual operation. This guide is not individual legal advice.
AI may condense, but it must not rewrite the story
A summary is useful when it leads back to concrete evidence. It should record at least:
which event IDs were included;
which case and time range it describes;
when and under which model or rule version it was created;
which statements are uncertain or conflicting;
which obligations are proposed and which are confirmed;
how a person can open the original location.
“Customer wants a callback next Tuesday” must not be created from a vague question such as “Can we speak next week?” AI can create a task candidate. The date, owner and obligation become operational only under an approved rule or human confirmation.
When a later message changes the state, create a new summary for that new point in time. Preserve the previous version as a time-bound derivation instead of turning it into an allegedly permanent customer fact.
A fictional edge case shows the order
Friday, 16:40: a WhatsApp message from a known number asks to move a site visit. The contact is confirmed, but two site proposals are open. The case therefore remains unresolved. Preserve the message and assign a review task to the accountable role.
Friday, 16:44: an identical delivery arrives with the same source ID. It creates neither a second timeline row nor a second task.
Monday, 08:12: a phone call that occurred Friday at 16:35 synchronises late. `occurredAt` places it before the WhatsApp message in business chronology; `receivedAt` exposes the delay. The call explicitly mentioned site A. That can strengthen the case candidate, but it must not silently remove the existing review.
Monday, 08:20: an operator confirms site A and the proposed new time. The system links both events to that proposal, creates exactly one appointment task and closes the earlier review card with the result. The maintenance case for site B remains unchanged.
This example is constructed. It is neither a customer story nor measured ONE LOOP performance. Its purpose is to test retry, late ordering, contact and case association, and one downstream action together.
Twelve tests before go-live
Test | Expected state | Forbidden false success |
|---|---|---|
new unambiguous email | one source event, confirmed contact, correct case | visible message without source ID |
retry of same message | one event, one processing result | second timeline row or task |
two legitimate messages with identical text | two events with two source IDs | content hash deletes one message |
late call | ordered by occurrence with delivery delay visible | recording time presented as occurrence time |
unknown phone number | preserved and unresolved | attached to a similar name |
new email for an existing contact | candidate or confirmation under the rule | silently overwrite the old contact value |
two open cases | visible on contact, case review open | guess the newest opportunity |
internal comment | internal only, marked as internal activity | summarised as a customer statement |
association correction | old and new links traceable | retroactively rewrite original history |
AI summary | version and source events linked | summary used as source evidence |
protected content | content visible only to permitted role | copy full text into every contact view |
task creation fails | event accepted, owned exception queue | mark intake as fully processed |
Use fictional contacts, isolated test channels and blocked external actions. A green intake test is insufficient; read the contact, case, timeline, restriction and task back from the target.
Metrics need an external denominator
A timeline cannot prove its own completeness. If private phone calls are absent, the internal percentage can still look perfect. At least one channel or provider reference must supply the expected population.
Metric | Definition |
|---|---|
technical capture coverage | unique source events in CRM / unique expected source events in the closed window |
unique processing | IDs processed exactly once in business terms / all accepted unique IDs |
association precision | confirmed correct contact matches / all human-reviewed matches under the same rule version |
unresolved-event rate | open unresolved events / all accepted unique events |
late-event rate | events above the defined receipt delay / all events with both times |
case-context completeness | events with required confirmed case link / all events that require a case |
commitment-to-task coverage | confirmed commitments with exactly one executable task / all confirmed commitments |
restriction preservation | restriction states read correctly / all restriction states expected by the test |
correction traceability | corrections with old/new links, reason and role / all corrections |
next-action completion | evidenced outcomes in the defined window / all due primary actions in the closed cohort |
There is no defensible universal target. Close an observation window first, then expose error classes and the baseline. Read timing as a distribution—such as median and P95—rather than only an average.
A small implementation can use four weeks—the contract decides
Four weeks is not a performance promise; it is one possible plan for a tightly bounded pilot:
Week 1: inventory one channel, one case type and the four contracts; define the external reference and test contacts.
Week 2: test source acceptance, idempotency, times and identity outcomes with fictional events.
Week 3: add case association, protection, projection and exactly one next action; execute the twelve edge cases.
Week 4: observe a small lawful real cohort; read the exception queue daily; only then add another channel.
Do not add the next channel because the calendar says so. Add it when the current path reproducibly accounts for expected events, matches, restrictions and tasks. If no external reference exists, leave the coverage claim open.
The acceptance question is deliberately simple
Open one live case and ask someone who did not build the setup to answer five questions:
What happened last in business terms, regardless of delivery time?
Which original source proves it?
Why does the event belong to this person and this case?
Which restrictions apply?
Who does what next, and by when?
If any answer requires changing channels, guessing or asking the original operator, the history is not yet actionable. More content will not fix it; the association or projection needs to become more precise.
For the tool decision, Shared inbox or CRM separates conversation handling from the continuing process. The CRM next-action principle deepens the operational obligation. A later CRM migration must preserve the source events, relationships and open work in this model.
Conclusion
A shared customer history succeeds when many channels produce less guessing. That requires three distinct layers, unambiguous event provenance, independent contact and case association, three times, controlled idempotency, visible corrections and an operational projection with exactly one next action. The interface is the result of those rules—not their replacement.
FAQ