CDP Association Completeness: Call Logs
HEADER BLOCK
| Field | Value |
|---|---|
| PM | Zhelia Alifa |
| PRD Version | 2.3 |
| Status | DRAFT |
| PRD Type | NEW |
| Squad | CDP Squad |
| Epic | TBD |
| RFC Link | TBD |
| Figma Master | Pending — direct-call flow to be designed; existing frames referenced inline |
| Labels | epic:qontak-cdp | module:customers | feature:association-completeness-call-logs |
| Last Updated | 2026-07-27 |
Initiative renamed to CDP Association Completeness: Call Logs (2026-07-25) — framing the work as completing CDP's cross-module association coverage with WhatsApp call logs (plus in-context calling). Reformatted to the write-prd template. Scope: call-log history + Voice activity logs + direct outbound call from the Customer Detail page (web) via the WA Call widget; mobile is logs-only. Removed from prior scope: Stored Outbound Call Permission per phone and Outbound Call Permission activity logs.
Table of Contents
- 1. One-liner + Problem
- 2. What Happens If We Don't Build This
- 3. Strategic Context
- 4. Target Users + Persona Context
- 5. Non-Goals
- 6. Constraints
- 7. New Features
- 8. API & Behavior
- 9. System Flow + User Stories + ACs
- 10. Rollout
- 11. Observability
- 12. Success Metrics
- 13. Launch Plan & Stage Gates
- 14. Dependencies
- 15. Key Decisions + Alternatives Rejected
- 16. Open Questions
- PRD CHANGELOG
1. One-liner + Problem
One-liner: Show WhatsApp-Call history & activity on the CDP Customer Detail page and let agents place an outbound WA call to a customer directly from there via the WA Call widget.
Problem: WhatsApp Call is live for Qontak One clients (~8K inbound calls/month; 218 CIDs have made calls as of Feb 2026), but call activity lives only in the WA Call service — it is not reflected in CDP, so an agent on a customer's profile has no view of past call attempts or outcomes. Worse, to place a call the agent must leave the Customer Detail page and switch to the WA Call service/inbox to dial — breaking the "one customer, one screen" workflow and slowing sales reactivation and support resolution. Customer history in CDP is therefore incomplete, and outbound calling is disconnected from the profile where the agent is already working.
2. What Happens If We Don't Build This
Theme: unified customer view + in-context action.
- Fragmented history — ongoing. CDP never reflects WA call attempts/outcomes, so Customer 360 stays incomplete and the Qontak One migration lacks communication completeness.
- Context-switching on every call. Agents leave the profile to dial in the WA Call service — slower reactivation/support, more tab-switching per interaction.
- No call context before contact. Agents can't see whether a customer previously answered/missed calls, so they call blind.
- WA-Call adoption isn't leveraged. The service is used at scale but its value isn't surfaced in the CDP profile where sales/support actually work.
3. Strategic Context (Optional — not scored)
Module Positioning
Strengthens CDP as the central customer-activity brain and complements the Voice/WA Call service — CDP becomes the single place to see call history and act (place a call) without leaving the profile.
Pricing & Package Implications
Available to Qontak One clients with the WA Call service provisioned. Package/tier gating to be confirmed with Billing (Open Question).
4. Target Users + Persona Context
| Persona | Role | Goal | Pain | Workaround |
|---|---|---|---|---|
| Primary — Sales Rep | Outbound sales (reactivation, promo) | See a customer's call history and call them without leaving the profile | No call history in CDP; must switch to WA Call service to dial | Opens the WA Call service/inbox separately, finds the number, dials manually |
| Secondary — Support Agent | Handles inbound issues | Know past call attempts/outcomes before responding; call back in-context | Call context invisible on the profile | Asks the customer or checks the WA Call service separately |
5. Non-Goals
- Stored Outbound Call Permission per customer phone is out of scope this revision — CDP does not store the WA-Call outbound permission/consent flag (removed from prior scope; may be a future slice).
- Outbound Call Permission activity logs are out of scope — no consent-change activity-log entries this revision.
- Direct outbound calling on the CRM mobile app is out of scope — the mobile app shows call logs + activity logs only; the direct-call button is not shown on mobile this phase.
- No changes to the WA Call service itself — the dialer/telephony and the call widget/SDK are owned by the WA Call (Voice) squad; CDP embeds/launches them.
- No in-CDP call recording player — recordings are opened via a redirect URL only (answered calls).
- No email or non-WA voice channel — WhatsApp Call only.
6. Constraints
| Constraint | Value |
|---|---|
| Platform | Website (CDP Customer Detail): call history + activity logs + direct outbound call. CRM Mobile app: call history + activity logs only (no direct call). |
| Feature flag | cdp_wa_call_direct_call — default OFF; flipped per rollout stage (§10). Call-history/activity display gated by cdp_wa_call_history (default OFF). |
| Plan / tier | Qontak One clients with the WA Call service provisioned; final tier gating TBD with Billing (§16). |
| Performance | Call-history load p95 ≤ 2s; direct-call widget launch ≤ 2s after click. |
| Read/write | Display gated by existing customer-view permission (customers_customers_view ≥ OWNED ONLY). Placing a call requires the WA-Call agent capability (§9 WAC-S05). |
| Dependency gate | Direct call only available when the WA Call widget/SDK is embeddable on web and the CID has WA Call enabled (§14). |
7. New Features
Customer Detail page gains WA-Call visibility and (web-only) an in-context call action.
Route: existing Customer Detail (/customers/{customer_id}) — no new page. Adds a call-history/association view + activity-log entries + a Call action (web).
| Element | Website | CRM Mobile |
|---|---|---|
| Call history / association (direction, status, agent, recording URL, duration, dial time) | ✓ | ✓ |
| Call activity logs (Voice category in the activity timeline) | ✓ | ✓ |
| Direct Call action → launches WA Call widget for the customer's number | ✓ (new — primary scope) | ✗ (Non-Goal #3) |
Component tree (new/changed in bold):
CustomerDetailPage (existing)
├── CallHistoryPanel (new) — list of WA call logs per customer
│ └── CallLogRow (new) — direction · status · agent · duration · dial time · recording link
├── DirectCallButton (new, web only) — visible when WA Call enabled + user permitted
│ └── WaCallWidget (embedded from WA Call service) — placed-call UI
└── ActivityLog (existing)
└── VoiceActivityEntry (new) — incoming/outgoing × answered/unanswered
UI states — Call history: Loading / Empty (no calls) / Error (load fails, retry) / Success. Direct call: Idle → Launching widget → Widget active → Error (widget/SDK fails or WA Call unavailable).
📊 UI State Diagram — Direct Call
stateDiagram-v2
[*] --> Idle
Idle --> Launching: click Call
Launching --> WidgetActive: WA Call widget ready
Launching --> Error: widget/SDK fails or WA Call unavailable
Error --> Idle: dismiss / retry
WidgetActive --> Idle: call ended / widget closed
Figma: Pending — the direct-call button + widget-embed frames need design; call-history/activity frames referenced from the existing WA-Call design.
8. API & Behavior
Behavioral contract in plain language; method/path/schema resolved during RFC.
| # | Behavior | Triggered by | Expected behavior | Failure behavior |
|---|---|---|---|---|
| 1 | Get call history for a customer | Customer Detail loads (web + mobile) | Returns WA call logs by qontak_customer_id / phone: direction, status, assigned agent (if any), recording URL (answered only), duration (answered only), dial time. Source: WA Call service. | Empty state if none; error state + retry on non-2xx / timeout. |
| 2 | Initiate outbound call (web only) | User clicks Call on the Customer Detail page | Launches the WA Call widget for the selected customer number; the WA Call service places the call and drives call UI. | If WA Call unavailable / widget fails to load / number invalid → inline error, no call placed; call_widget_error fires. |
| 3 | Ingest WA call events → activity logs | WA Call service emits a call event | CDP writes a Voice activity-log entry (direction incoming/outgoing × status answered/unanswered, type "WhatsApp Call") to the customer timeline. | Malformed/unmatched event → logged + skipped; no partial entry. |
RFC to resolve: call-history endpoint owner + contract (extend
contact-servicevs. proxy WA Call service); the widget embed mechanism (SDK vs iframe vs deep-link) + auth handoff; recording-URL access control.
⚠️ Code grounding (contact-service @
master, 2026-07-25): The Voice activity-log write (#3 / WAC-S02) is net-new — there is no call/voice code incontact-servicetoday, and the activity-log title generatorgenerateTitle(activity_log_serializer.go:291-318) has novoice:*mapping (it returns an empty string for any unknowncategory:action). Without a BE change, call activity entries would render with blank titles. BE must (a) add aVoicecategory + the 4 call-action title strings (mirroring the existingcampaign:*entries), and (b) add a call-event ingestion path (a consumer analogous to the shippedsend_marketing_opt_inpipeline — which does not exist for calls). The call-history read (#1) is likewise net-new.
8.1 WA Call activity logs — the 4 captured events
CDP captures 4 activity-log entries for WhatsApp Call (per WAC-S02). Each is a Voice activity with Type: WhatsApp Call, keyed by Direction (Incoming / Outgoing) × Call status (Answered / Unanswered):
| Action | Event Details | Trigger |
|---|---|---|
| Incoming Call – Answered | Incoming WhatsApp call from Customer was answered. | Direction: Incoming · Call status: Answered · Type: WhatsApp Call |
| Incoming Call – Unanswered | Incoming WhatsApp call from Customer was not answered. | Direction: Incoming · Call status: Unanswered · Type: WhatsApp Call |
| Outgoing Call – Answered | Outgoing WhatsApp call to Customer was answered. | Direction: Outgoing · Call status: Answered · Type: WhatsApp Call |
| Outgoing Call – Unanswered | Outgoing WhatsApp call to Customer was unanswered. | Direction: Outgoing · Call status: Unanswered · Type: WhatsApp Call |
9. System Flow + User Stories + ACs
9.1 System Flow — Agent views call history and places a call (web)
Flow type: User Journey.
- Agent opens Customer Detail (web).
- FE loads Call history (§8 #1) + Voice activity logs.
- Agent reviews past calls (direction/status/outcome).
- Agent clicks Call on a customer number.
- FE launches the WA Call widget (§8 #2); the WA Call service places the call.
- Call proceeds in the widget; on end, the widget closes.
- WA Call service emits the call event → CDP writes a Voice activity log (§8 #3) → appears in the timeline.
Failure / edge branches:
- 2a. Call-history load fails → error state + retry (WAC-S06).
- 4a. User lacks call permission or CID has no WA Call → Call button hidden/disabled (WAC-S05).
- 5a. Widget/SDK fails or WA Call unavailable → inline error, no call placed;
call_widget_errorfires. - Mobile. Steps 1–3 + 7 apply; step 4–6 (Call button) not shown (Non-Goal #3).
📊 System Flow — Direct Call from Customer Detail
sequenceDiagram
actor Agent
participant CDP as CDP (Customer Detail)
participant WA as WA Call Service
Agent->>CDP: Open Customer Detail
CDP->>WA: Get call history (by qontak_customer_id/phone)
WA-->>CDP: Call logs (direction/status/agent/recording/duration)
Note over CDP: If read fails → error + retry (WAC-S06)
Agent->>CDP: Click Call (web, if permitted + WA Call enabled)
CDP->>WA: Launch WA Call widget for number
alt Widget ready
WA-->>Agent: Widget active; call placed
WA->>CDP: Call event (on end)
CDP->>CDP: Write Voice activity log + history row
else Widget/SDK fails or WA Call unavailable
WA-->>CDP: Error → inline message, no call (call_widget_error)
end
9.2 User Stories
All ACs in strict Given/When/Then. Priority uses MoSCoW.
| User Story | Priority | Mockup / Technical Notes | Acceptance Criteria |
|---|---|---|---|
| [WAC-S01] — View WA call history on Customer Detail As a Sales/Support agent, I want to see a customer's WhatsApp call history on their profile, so that I have call context before acting. | Must Have | Prototype: Pending. Source: WA Call service (§8 #1). Fields: direction, status, agent, recording_url (answered), duration (answered), dial_time. | AC-1 (List renders): Given a customer with ≥1 WA call, When I open Customer Detail, Then I see a Call history list, each row showing direction (Incoming/Outgoing), status (Answered/Unanswered), assigned agent (if any), duration & recording link (answered only), and dial time. AC-2 (Empty): Given a customer with no WA calls, When I open Customer Detail, Then an empty state ("No WhatsApp calls yet") is shown, not an error. AC-3 (Recording): Given an answered call with a recording, When I click the recording link, Then the recording URL opens (redirect); And Given an unanswered call, Then no recording link is shown. AC-4 (Error): Given the call-history read returns non-2xx, When the panel loads, Then an error state with retry is shown and call_history_error fires. |
| [WAC-S02] — WA call activities in the activity timeline As a CDP user, I want each WA call to appear as an activity-log entry, so that I see complete interaction history. | Must Have | Event-driven (§8 #3). ⚠️ Grounding: the Voice category does not exist yet — generateTitle (activity_log_serializer.go:291-318) has no voice:* title and returns "" for unknown keys; no call-event consumer exists in contact-service. BE net-new: add Voice titles + a call-event consumer. Ref: call activity table. | AC-1 (Incoming answered): Given an incoming WA call is answered, When WA Call sends the event, Then CDP creates a Voice activity log (direction Incoming, status Answered, type "WhatsApp Call") on the timeline. AC-2 (Incoming unanswered): Given an incoming WA call is not answered, When the event is sent, Then a Voice log (Incoming, Unanswered) is created. AC-3 (Outgoing answered/unanswered): Given an outgoing WA call, When the event is sent, Then a Voice log is created with direction Outgoing and status Answered or Unanswered accordingly. AC-4 (No duplicate): Given the same call event is received twice, When processed, Then only one activity-log entry exists for that call. AC-5 (Title present): Given a Voice activity entry is created, When it renders, Then it shows a non-empty, human-readable title per direction+status (e.g. "received a WhatsApp call" / "called this customer — unanswered") — i.e. the BE generateTitle map includes the voice:* keys (grounded gap). |
| [WAC-S03] — Place an outbound WA call from Customer Detail (web) As a Sales/Support agent, I want to call a customer directly from their profile, so that I don't switch tools to dial. | Must Have | Web only (Non-Goal #3). Launches WA Call widget (§8 #2). Flag cdp_wa_call_direct_call. | AC-1 (Call button): Given I am on Customer Detail (web) with WA Call enabled and call permission, When the page renders, Then a Call action is shown on the customer's WA-capable number. AC-2 (Launch widget): Given I click Call, When the action fires, Then the WA Call widget launches for that number within ≤ 2s and the WA Call service places the call. AC-3 (Widget failure): Given the WA Call widget/SDK fails to load or WA Call is unavailable, When I click Call, Then an inline error is shown, no call is placed, and call_widget_error fires.AC-4 (Call logged): Given a call is placed via the widget, When it ends, Then the resulting event produces a Voice activity log (WAC-S02) and a call-history row (WAC-S01). |
| [WAC-S04] — Mobile: logs + activity only (no direct call) As a mobile CRM user, I want to see call history and activity, so that I have context on the go — direct calling comes later. | Must Have | CRM mobile app. Non-Goal #3. | AC-1 (History + activity): Given I open a customer in the CRM mobile app, When the profile loads, Then I see WA call history and Voice activity-log entries (read-only). AC-2 (No Call button): Given I am on the customer profile in the mobile app, When it renders, Then the direct Call action is not shown. AC-3 (Parity of data): Given the same customer viewed on web and mobile, When both load, Then the call history and activity entries shown are the same data set. |
| [WAC-S05] — Permission & availability gating As an admin, I want call viewing and calling gated by permission and WA-Call availability. | Must Have | Reuse customers_customers_view + WA-Call agent capability. | AC-1 (View gate): Given a user without customers_customers_view, When they open the profile, Then call history/activity is not shown.AC-2 (Call gate — capability): Given a user without the WA-Call agent capability, When Customer Detail renders (web), Then the Call action is hidden/disabled. AC-3 (Call gate — availability): Given the CID has no WA Call provisioned or the flag is OFF, When the profile renders, Then the Call action is not shown (history/activity may still show if available). AC-4 (Owned-only): Given a user with customers_customers_view = OWNED ONLY, When they open a non-owned customer, Then no call data is shown. |
| [WAC-S06] — Loading / empty / error states As a user, I want clear states for the call panel and widget. | Should Have | State machine per §7. | AC-1 (Loading): Given the call-history read is in flight, When the panel opens, Then a loading state is shown until it resolves. AC-2 (Empty): Given no calls exist, When the panel loads, Then an empty state is shown (not an error). AC-3 (Error + retry): Given the read returns non-2xx, When the panel loads, Then an error state with a retry action is shown and call_history_error fires.AC-4 (Widget error): Given the direct-call widget fails, When launched, Then an inline error with dismiss/retry is shown and call_widget_error fires. |
10. Rollout
| Item | Detail |
|---|---|
| Feature flags | cdp_wa_call_history (display) + cdp_wa_call_direct_call (web direct call) — both default OFF; flipped per stage. |
| Rollout sequence | Stage 1 — Internal: CDP squad org (history + activity + direct call on web). → Stage 2 — Beta: 2–3 pilot CIDs already using WA Call. → Stage 3 — GA: all Qontak One clients with WA Call. Mobile ships history+activity only. |
| Backward compatibility | Additive — Customer Detail behavior unchanged when flags are OFF; no change to the WA Call service. |
| Migration | None — call history is read from the WA Call service; activity logs are event-driven. |
| Rollback | Flip cdp_wa_call_direct_call → OFF to remove the Call action instantly (no in-flight call impact beyond the current widget session); cdp_wa_call_history → OFF hides the panel. |
11. Observability
| Event | Trigger | Properties |
|---|---|---|
call_history_viewed | Call-history panel rendered on Customer Detail | company_id, user_id, customer_id, platform (web/mobile), call_count |
direct_call_initiated | User clicks Call (web) | company_id, user_id, customer_id, phone |
call_widget_launched | WA Call widget becomes active | company_id, user_id, customer_id |
call_widget_error | Widget/SDK fails or WA Call unavailable | company_id, user_id, customer_id, reason |
call_history_error | Call-history read returns non-2xx | company_id, customer_id, status_code |
Dashboard owner: CDP Squad. Alerts: call_widget_error rate > 5% of direct_call_initiated over 15 min → page CDP + Voice on-call; call_history_error > 2% over 5 min → CDP Slack. Cadence: review weekly for the first month post-GA; investigate if direct-call success < 90% or history error > 2% for 2 consecutive days.
12. Success Metrics
| Metric | Definition | Baseline | Target |
|---|---|---|---|
| ⭐ Call activity coverage in CDP | % of WA call events written to CDP activity logs | 0% (not captured) | 100% of events within 30 days of GA |
| Direct-call adoption | # / % of eligible web users who place ≥1 call from Customer Detail | 0 (feature new) | Growing WoW post-GA |
| Direct-call success rate | % of direct_call_initiated that reach call_widget_launched without call_widget_error | N/A | ≥ 95% |
13. Launch Plan & Stage Gates
| Stage | Audience | Duration | Success gate |
|---|---|---|---|
| Internal | CDP squad org (~10 users) | 3–5 days | Call history + activity render correctly; a test call launches the widget and produces a Voice log; no console/API errors |
| Beta | 2–3 pilot CIDs already on WA Call | 2 weeks | ⭐ 100% of pilot call events logged; direct-call success ≥ 95%; no P1 bugs; pilot feedback positive |
| GA | All Qontak One clients with WA Call (web); mobile = history+activity only | Rolling ~1 week | Metrics sustained at scale; alerts green |
14. Dependencies
| Dependency | Owner | Needed | Blocking? |
|---|---|---|---|
Call-history endpoint (logs by qontak_customer_id/phone) | WA Call / Voice squad (+ contact-service) | Contract to read call logs with direction/status/agent/recording/duration/dial-time | YES |
| Embeddable WA Call widget / SDK on web | WA Call / Voice squad | A widget CDP can launch to place a call, with auth handoff | YES (for WAC-S03) |
| WA call events → CDP activity-log ingestion | WA Call + contact-service | Event stream + Voice activity-log write | YES (for WAC-S02) |
| contact-service Voice activity support (net-new) | CDP (contact-service) | New Voice category + generateTitle voice:* titles + a call-event consumer — none exist today (activity_log_serializer.go:291-318) | YES (for WAC-S02) |
| Permission / capability model (view + WA-Call agent capability) | CDP + Platform | Gating for view and call | YES |
| WA Call provisioning per CID | WA Call / Billing | Feature available only where WA Call is enabled | YES |
15. Key Decisions + Alternatives Rejected
15a — Decisions Made
| Date | Decision | Rationale |
|---|---|---|
| 2026-07-25 | Remove outbound-call permission storage + its activity logs from this scope | Refocus on call visibility + in-context calling; permission storage can be a future slice |
| 2026-07-25 | Add direct outbound calling from Customer Detail (web) via the WA Call widget | Removes tool-switching; agents act where they already work |
| 2026-07-25 | Web-only direct call; mobile = history + activity only | WA Call widget embed not ready on mobile; ship web value first |
| 2026-07-25 | Reuse the WA Call widget/SDK — do not build a dialer in CDP | Telephony is owned by the Voice/WA Call squad; avoid duplication |
| 2026-07-25 | Read call history from the WA Call service; only activity logs are written into CDP | WA Call is the system of record for calls; CDP surfaces + logs |
| 2026-07-25 | Voice activity logging is net-new BE — add a Voice category, generateTitle voice:* titles, and a call-event consumer | Grounded: none exist in contact-service today (activity_log_serializer.go:291-318); mirrors the shipped send_marketing_opt_in pipeline |
15b — Alternatives Rejected
| Alternative | Why Rejected | Date |
|---|---|---|
| Build a native dialer/telephony in CDP | Duplicates WA Call service; high cost, owned elsewhere | 2026-07-25 |
| Store outbound-call permission in CDP now | Deferred — not needed for the visibility + calling value this revision targets | 2026-07-25 |
| Ship direct call on mobile in this phase | Widget/SDK embed not ready on mobile; would delay web value | 2026-07-25 |
| Persist full call logs inside CDP | WA Call remains system of record; avoids data duplication/sync risk | 2026-07-25 |
16. Open Questions
| # | Type | Question | Owner | Deadline |
|---|---|---|---|---|
| 1 | Open | Widget embed mechanism — SDK vs iframe vs deep-link — and the auth handoff from CDP to the WA Call widget? | Eng (CDP) + Voice | RFC |
| 2 | Open | Call-history endpoint — extend contact-service or proxy the WA Call service? Contract + pagination? | Eng (CDP) + Voice | RFC |
| 3 | Open | Recording-URL access control — who can open recordings, and does the link expire? | Eng + Legal | RFC |
| 4 | Assumption | The WA Call service can emit outbound-call events for calls initiated via the CDP widget (so WAC-S02/S03 AC-4 hold). | Voice squad | Pre-build |
| 5 | Risk | Removing permission storage may raise a compliance question for outbound calling. Mitigation: confirm with Legal that WA-Call's own consent flow (in the WA Call service) satisfies policy; if not, re-scope permission storage as a fast-follow. | PM + Legal | Pre-build |
| 6 | Open | Final plan/tier gating for direct call (all Qontak One vs specific tiers). | PM + Billing | Pre-GA |
| 7 | Risk | Grounded gap: contact-service has no Voice activity category/titles and no call-event consumer (activity_log_serializer.go:291-318) — WAC-S02 is fully net-new BE, so call activity logs would have blank titles / not be written without it. Mitigation: add the voice:* title map + a call-event consumer (mirror the shipped send_marketing_opt_in pipeline) as part of the RFC; treat as blocking for WAC-S02. | Eng (CDP) | RFC |
PRD CHANGELOG
| Version | Date | By | Section | Type | Summary |
|---|---|---|---|---|---|
| 2.3 | 2026-07-27 | Zhelia Alifa | §8.1 (new) | ADDED | Documented the 4 WA Call activity logs as a breakdown table (Action | Event Details | Trigger) in new §8.1 — Incoming/Outgoing × Answered/Unanswered, all Type: WhatsApp Call — matching the activity-log spec screenshot. These are the same 4 events specified by WAC-S02 ACs 1–3; §8.1 makes the captured set explicit. Confluence + repo MD synced. |
| 2.2 | 2026-07-25 | Claude | Header | MODIFIED | Renamed the initiative to CDP Association Completeness: Call Logs (was CDP x WA Call Integration); updated page title + feature label. No scope change — call-log history + Voice activity logs + web direct-call retained. |
| 2.1 | 2026-07-25 | Claude | S8, S9 (WAC-S02), S14, S15, S16 | MODIFIED | Grounded gap added: contact-service has no Voice activity category/titles (activity_log_serializer.go:291-318) and no call-event consumer → WAC-S02 is net-new BE and would render blank titles without it. Added §8 grounding note, WAC-S02 AC-5 (title present) + grounding note, a Dependencies row, a Key Decision, and Risk OQ-7. |
| 2.0 | 2026-07-25 | Claude | All | MODIFIED | Reformatted to the write-prd template (numbered sections, ToC, strict-Gherkin 4-column stories, MoSCoW, diagrams). Scope change: removed Stored Outbound Call Permission per Customer Phone and Outbound Call Permission Activity Logs; added direct outbound calling from the Customer Detail page (web) via the WA Call widget. Implementation web-first; CRM mobile app = call logs + activity logs only (no direct call). Kept call-association history + Voice activity logs. |
| 1.x | 2026-02-16 | Zhelia Alifa | — | LEGACY | Original "CDP x WA Call Integration" PRD (call association, stored outbound-call permission, call + permission activity logs) — pre-reformat. |