SPH Media WhatsApp Customer Engagement Platform
Technical Proposal
| Prepared by | QUICKSALES.AI |
| Prepared for | SPH Media Limited |
| Document version | 1.0 |
| Date | 8 July 2026 |
| Classification | Private & Confidential |
| Validity | 90 days from submission date |
1. Executive Summary
SPH Media is establishing WhatsApp as a formal, AI-assisted customer communication channel across its portfolio of titles — including The Straits Times, Lianhe Zaobao, The Business Times, magazines, and student publications. Phase 1 targets AI-assisted inbound support and outbound transactional notifications. Phase 2 extends into marketing, lifecycle, and retention campaigns via MoEngage.
QUICKSALES.AI presents a purpose-built WhatsApp Orchestration Platform that sits between Meta's WhatsApp Cloud API and SPH Media's existing enterprise systems. ServiceNow CSM remains the agent workspace. The Commerce backend executes transactions. OneTrust governs consent. MoEngage orchestrates Phase 2 marketing.
QUICKSALES.AI proposes two commercial options tailored to SPH Media's pilot ambitions and budget positioning against the Singapore market:
| Option | Scope | Timeline | Mandays (est.) |
|---|---|---|---|
| Option A — Essential | Phase 1 core capabilities, 8 priority journeys, pilot-ready | ~5 months | ~128 |
| Option B — Professional | Full Phase 1 + Phase 2 foundation, all RFP requirements | ~7 months | ~304 |
Both options target measurable pilot outcomes: 50%+ AI resolution, 80%+ CSAT, and 30%+ chat channel share within three months of go-live.
Commercial pricing: Full quotation with implementation fees, milestones, add-ons, and ongoing costs is available in the Pricing section. Scope and delivery options are defined in Section 19.
Next step for SPH: Complete Technical Discovery to unlock real Commerce, ServiceNow, OneTrust, SMS, and MoEngage endpoints. See Section 16.1.1 and Appendix F.
Meta WABA assurance: Phase 1 is user-initiated customer support — the lowest-risk WhatsApp use case. See Section 14 for how we prevent number blocking, policy violations, and quality-rating drops.
What SPH Actually Gets (Plain English)
| Question | Answer |
|---|---|
| Does SPH buy servers or hardware? | No. There is no rack, no data centre visit, and no IT team needed to install physical machines. |
| Does SPH install software? | No. Your team uses a web browser — the same way you use ServiceNow, MoEngage, or Google Workspace today. |
| Where does the platform run? | On cloud infrastructure in Singapore (AWS or Azure), fully managed by QUICKSALES.AI. |
| What do customer service agents use? | ServiceNow — unchanged. WhatsApp appears as another channel inside the workspace they already know. |
| What do supervisors and marketing use? | A new QUICKSALES.AI Admin Portal — a modern web dashboard to manage journeys, templates, analytics, and consent. |
| What do subscribers use? | WhatsApp on their phone — no app download required. |
| Will Meta block our WhatsApp number? | Phase 1 support is designed to stay within Meta policy. Customers message SPH first (user-initiated). We track the 24-hour window, use approved templates for outbound notifications only, and monitor quality rating daily. See Section 14. |
Simple analogy: QUICKSALES.AI delivers a managed cloud service (like Shopify, HubSpot, or MoEngage) — you subscribe, log in, and operate. The technical infrastructure behind the scenes is our responsibility, not SPH's.
QUICKSALES.AI leadership: Pei Han (CEO), Dave (CSO), Eddy (CPO), Andy (CAITO), and Zen (BD Manager) will oversee delivery alongside a dedicated project and engineering team.
What We Will Build (Summary)
Cloud API"] subgraph PLATFORM["QUICKSALES.AI Platform"] direction TB P1["WhatsApp Orchestration
Platform"] subgraph ENGINES["Core Engines"] direction LR P2["AI Virtual Agent
Engine"] P3["PCI Redaction
Layer"] P4["Authentication
Orchestrator"] end subgraph OPS["Operations & Compliance"] direction LR P5["Template Lifecycle
Manager"] P6["Notification Event
Processor"] P7["Consent Bridge"] end subgraph INSIGHT["Insights & Administration"] direction LR P8["Analytics &
WABA Health"] P9["Admin Portal"] end end subgraph SPH["SPH Systems We Integrate"] direction LR SN["ServiceNow
CSM"] COMM["Commerce
Backend"] OT["OneTrust"] ME["MoEngage"] GKB["Google Workspace
Knowledge"] end META <--> P1 P1 --> ENGINES P1 --> OPS P1 --> INSIGHT ENGINES --> SPH OPS --> SPH P2 --> SN P2 --> COMM P2 --> GKB P3 --> SN P6 --> COMM P6 --> ME P7 --> OT classDef meta fill:#D1FAE5,stroke:#128C7E,stroke-width:2px,color:#071525 classDef qs fill:#C5DFF5,stroke:#004A8F,stroke-width:2px,color:#071525 classDef sph fill:#003D73,stroke:#071525,stroke-width:2px,color:#ffffff class META meta class P1,P2,P3,P4,P5,P6,P7,P8,P9 qs class SN,COMM,OT,ME,GKB sph
This is a component summary only. For the single master diagram showing all actors, systems, flows, and where data lives, see Section 6.0 — Master Solution Diagram.
2. Understanding of SPH Media Requirements
2.1 Strategic Context
SPH Media's initiative is not a simple "add WhatsApp to ServiceNow" project. It is a lifecycle channel strategy spanning support, transactions, consent capture, and (in Phase 2) marketing retention.
Three Non-Negotiable Principles
| # | Principle | Our Interpretation |
|---|---|---|
| 1 | ServiceNow CSM remains system of engagement | Live agents work exclusively in ServiceNow Agent Workspace. Our platform hands off; it does not replace SN. |
| 2 | Customer data resides exclusively in SPH Media systems | Subscriber data and conversation records persist only in SPH systems (ServiceNow, Commerce, OneTrust). Our platform processes messages transiently and does not retain WhatsApp content or subscriber PII in vendor databases. See Section 6.5. |
| 3 | WhatsApp coexists with ServiceNow web chat | Web chat channel unchanged. WhatsApp is additive. Unified case history in ServiceNow. |
What the Requirements Say About Data Storage
SPH does not say "store no WhatsApp data anywhere." The requirements are precise about where data lives:
| Source | Requirement |
|---|---|
| Principle 2 | Customer data resides exclusively in SPH Media systems |
| A1 | All conversations (including offline) captured to ServiceNow |
| A3 | Sensitive data redacted before syncing with ServiceNow |
| B3 | AI conversations filed into ServiceNow |
| D2 | All inbound/outbound messages in ServiceNow CSM |
| E1 | Consent information kept within OneTrust |
| RFP (PCI) | No raw card number, expiry, or CVV in transcript, agent console, or ServiceNow case |
| Data | System of record | Vendor platform |
|---|---|---|
| Conversation transcripts | ServiceNow | Process → redact → forward → do not archive |
| Subscriber profile / billing | Commerce | API lookup during session — not stored |
| Consent | OneTrust | Write via API — not master copy |
| Session routing state | Ephemeral cache (TTL) | Auto-deletes when session ends |
| Platform settings | Vendor config DB | Journeys, templates, admin users — no customer content |
2.2 Phase Overview
Platform foundation,
WABA setup, SN integration"] M2["Month 2–4
AI journeys, Commerce
integration, notifications"] M3["Month 4–5
OneTrust consent,
analytics, UAT"] M4["Month 5–6
Pilot go-live, hypercare,
KPI measurement"] M1 --> M2 --> M3 --> M4 end subgraph P2["Phase 2 — Scale (Months 7–12)"] direction TB M5["Month 7–8
MoEngage integration,
DNC scrubbing"] M6["Month 8–10
Marketing templates,
campaign flows"] M7["Month 10–12
Lifecycle campaigns,
winback, retention"] M5 --> M6 --> M7 end M4 --> M5 classDef qs fill:#C5DFF5,stroke:#004A8F,stroke-width:2px,color:#071525 classDef p2 fill:#E8F2FA,stroke:#0057A8,stroke-width:2px,color:#003D73 class M1,M2,M3,M4 qs class M5,M6,M7 p2 linkStyle 0,1,2,3,4,5 stroke:#0057A8,stroke-width:2px
2.3 Complete Requirement Inventory
Phase 1 — Platform (Section A)
| ID | Requirement | Business Driver |
|---|---|---|
| A1 | 24/7 self-service + live agent escalation + offline message capture | Reduce call centre load; never lose a customer message |
| A2 | EN, ZH-CN, MS, TA localization for bots and agents | Singapore's multilingual subscriber base |
| A3 | Sensitive data redaction before ServiceNow | PCI/compliance; protect agents from raw card data |
| A4 | Template lifecycle management | Meta approval workflow; quality score monitoring |
| A5 | Analytics & ROI dashboards | Prove channel value to leadership |
| A6 | WABA health & warm-up management | Prevent number blocking; scale safely |
Phase 1 — AI (Section B)
| ID | Requirement | Business Driver |
|---|---|---|
| B1 | AI resolves common requests end-to-end | 50%+ resolution target without agent |
| B2 | Tiered auth: WA possession + OTP | Security proportional to action sensitivity |
| B3 | AI conversations filed in ServiceNow | Continuity on live agent handoff |
| B4 | Knowledge from SN KB + Google Workspace | Answer beyond static FAQ |
| B5 | Understand EN, ZH-CN/ZH-TW, Malay, Tamil inbound; reply EN or ZH-CN | Inclusive access, controlled response language |
Phase 1 — Notifications (Section C)
| ID | Requirement | Business Driver |
|---|---|---|
| C1 | Commerce-triggered transactional WA (payment failed, renewal, pending payment, expiry, payment confirmed) + SMS fallback | Revenue protection; payment recovery |
| C2 | Contextual reply to notifications | No "please repeat your issue" friction |
Phase 1 — ServiceNow (Section D)
| ID | Requirement | Business Driver |
|---|---|---|
| D1 | SN CSM as agent workspace | Preserve existing ops workflows |
| D2 | All messages in SN for traceability | Single audit trail |
Phase 1 — Consent (Section E)
| ID | Requirement | Business Driver |
|---|---|---|
| E1 | OneTrust integration, PDPA + WA policy | Legal compliance for marketing |
| E2 | Opt-in capture at conversation close | Build Phase 2 audience |
| E3 | Platform toggles for opt-in/opt-out | Operational consent control |
Phase 2 — Marketing (Section F)
| ID | Requirement | Business Driver |
|---|---|---|
| F1 | MoEngage-orchestrated WA marketing | Lifecycle campaigns at scale |
| F2 | Campaigns to consented base only | Compliant marketing |
| F3 | DNC list scrubbing before send | Singapore regulatory compliance |
2.4 SPH Vendor Ecosystem — What We Know vs What Discovery Must Confirm
The RFP names six integration domains. Below is our current understanding of SPH's vendor landscape, what each system does in this architecture, and what we must validate in the discovery workshop before build starts.
Honest positioning: SPH's Commerce/subscription backend is not named in the RFP — it is treated as an internal system with REST APIs. Public sources confirm ServiceNow (implemented with SGITAL) and AWS cloud usage at SPH Media; OneTrust, MoEngage, and Google Workspace are named in the RFP but instance details are unknown until SPH responds to Business Discovery.
| # | Vendor / System | Role in this programme | Public / RFP evidence | Integration pattern | Must confirm in discovery |
|---|---|---|---|---|---|
| 1 | Meta WhatsApp Cloud API | Customer messaging channel; WABA owned by SPH | RFP journeys; Requirements A1–A6 | Graph API webhooks + REST; SPH WABA in Business Manager | WABA ID, phone numbers, verification status, existing templates |
| 2 | ServiceNow CSM | Agent workspace, case management, conversation system of record | Principle 1; D1, D2, B3; A1 offline capture | VA Bot-to-Bot API (primary bot) + Table API (cases/interactions/KB) | Instance URL, release (Zurich+), CSM + AWA licensed, existing WA adapter? |
| 3 | SPH Commerce Backend | Subscriber, billing, delivery, payment links, vacation suspend | RFP journeys (postal verify, CS-123456, sph.sg links) | Commerce → platform webhooks; platform → Commerce REST | OpenAPI spec, auth method, sandbox, subscriber ID scheme |
| 4 | OneTrust | Consent system of record (E1: "kept within OneTrust") | Requirements E1–E3 | Consent Receipt API + preference lookup API | Tenant URL, collection point JWT, purpose GUIDs |
| 5 | Google Workspace | Knowledge source (B4): Sites, Docs, Sheets, Slides | Requirements B4 | Drive API + Sites crawl → vector index | Site URLs, service account, restricted docs list |
| 6 | MoEngage | Phase 2 marketing orchestration (F1–F2) | Requirements F1–F2 | Connected Channel webhook → our platform (we own WABA send) | MoEngage tenant, campaign webhook capability |
| 7 | SMS Gateway | C1 SMS fallback for non-WA subscribers | Requirements C1 | REST outbound SMS API (provider TBD) | Current telco/BSP (Twilio, Vonage, Singtel, etc.) |
| 8 | PDPC DNC Registry | F3 marketing scrub | Requirements F3 | Batch/API scrub before MoEngage campaigns | SPH's existing DNC integration method |
| 9 | AWS Singapore | Hosting region alignment | SPH public cloud on AWS (iTnews 2024) | Platform hosted ap-southeast-1; VPN/private link to SPH | Approved sub-processors, network path to Commerce/SN |
Why QUICKSALES.AI Sits in the Middle (Not ServiceNow Native WhatsApp)
ServiceNow offers Conversational Integration with WhatsApp (Twilio) and Cloud API store apps that pipe WhatsApp into Virtual Agent directly. SPH's RFP explicitly requires Commerce event notifications, OneTrust consent, MoEngage Phase 2, PCI redaction before SN sync, and Google KB — capabilities that require a primary orchestration layer:
PRIMARY BOT"] R3["ServiceNow CSM
SECONDARY — agents + records"] R4["Commerce — webhooks + REST lookups"] R5["OneTrust — Consent Receipt API"] R6["MoEngage — Phase 2 trigger"] R7["Google KB — RAG connector"] end W1 --> R1 W2 --> R2 W3 --> R3 W4 --> R4 W5 --> R5 W6 --> R6 W7 --> R7 classDef gap fill:#FEF2F2,stroke:#DC2626,stroke-width:2px,color:#7F1D1D classDef sol fill:#E8F2FA,stroke:#0057A8,stroke-width:2px,color:#071525 class W1,W2,W3,W4,W5,W6,W7 gap class R1,R2,R3,R4,R5,R6,R7 sol linkStyle 0,1,2,3,4,5,6 stroke:#0057A8,stroke-width:2px
Technical role: QUICKSALES.AI is the primary bot (isBotMessage: true on outbound). ServiceNow is the secondary system for live agent handoff (action: AGENT) and persistent records (Table API). This matches ServiceNow's documented bot-to-bot pattern (Yokohama VA API).
3. Why a Dedicated WhatsApp Platform (Not ServiceNow Alone)
ServiceNow offers a WhatsApp adapter (Twilio-based and Cloud API native) that pipes messages into Virtual Agent and Agent Workspace. This does not satisfy SPH's RFP for the following evidenced reasons:
before PCI redaction"] G2["C1 · SN is not the
billing notification hub"] G3["B1 · VA cannot execute
Commerce transactions"] G4["B4 · No Google KB connector"] G5["F1 · No shared WABA
for MoEngage"] G6["E1 · No OneTrust connector"] end subgraph SOLS["QUICKSALES.AI Platform — Solutions"] direction TB S1["Redact at orchestration
layer before SN sync"] S2["Commerce webhooks →
notification processor"] S3["Commerce API
write operations"] S4["RAG over Google &
SN knowledge"] S5["MoEngage → central
send API"] S6["Consent bridge +
DNC scrub service"] end G1 --> S1 G2 --> S2 G3 --> S3 G4 --> S4 G5 --> S5 G6 --> S6 classDef gap fill:#FEF2F2,stroke:#DC2626,stroke-width:2px,color:#7F1D1D classDef sol fill:#E8F2FA,stroke:#0057A8,stroke-width:2px,color:#071525 class G1,G2,G3,G4,G5,G6 gap class S1,S2,S3,S4,S5,S6 sol linkStyle 0,1,2,3,4,5 stroke:#0057A8,stroke-width:2px
| Concern | Native ServiceNow | Our Proposed Platform |
|---|---|---|
| A3 Redaction before SN | ❌ Message enters SN first | ✅ Redacted at orchestration layer |
| C1 Commerce-triggered sends | ❌ SN is not billing system | ✅ Commerce webhooks → our platform |
| B4 Google knowledge | ❌ Not supported | ✅ RAG connector built |
| B1 Transaction execution | ❌ SN VA is FAQ/case focused | ✅ Commerce API write operations |
| F1 MoEngage campaigns | ❌ No shared WABA ownership | ✅ MoEngage → our send API |
| E1 OneTrust | ❌ No native connector | ✅ Consent bridge module |
ServiceNow's role in our architecture: agent workspace, case management, interaction records, knowledge source (one of two), and live agent handoff via Virtual Agent Bot-to-Bot API.
4. Proposed Solution Overview — What We Will Build
4.1 Platform Name & Positioning
QUICKSALES.AI WhatsApp Orchestration Platform — purpose-built for SPH Media
A fully managed cloud service (hosted in Singapore) comprising 9 platform components, a web-based Admin Portal for SPH operations teams, and 6 integration connectors to SPH's existing systems. SPH does not purchase or host any hardware.
See Section 4.4–4.7 for plain-English explanation of hosting, the three user interfaces, and screen-by-screen Admin Portal design.
4.2 Components We Will Build
Component 1: WhatsApp Gateway & Session Manager
Purpose: Single owner of the SPH Media WABA. Receives all Meta webhooks. Manages ephemeral conversation sessions (routing state only), message queuing, delivery receipts, and read receipts. All message content is written to ServiceNow and not archived in the vendor platform.
Capabilities:
- Meta Cloud API webhook receiver (messages, statuses, template updates)
- Session state machine (NEW → AUTHENTICATED → IN_FLOW → ESCALATED → CLOSED)
- Real-time ServiceNow sync for every inbound/outbound message (A1, D2)
- Escalation routing to ServiceNow AWA queue (agent queue lives in ServiceNow, not vendor)
- If ServiceNow is temporarily unreachable: in-memory retry only (max 15 minutes) — not written to vendor database; message is never considered "stored" until SN confirms receipt
- Multi-title routing (ST, ZB, BT, magazines) based on subscriber profile
- Rate limiting aligned to Meta tier limits
Component 2: AI Virtual Agent Engine
Purpose: Resolve subscriber requests end-to-end without agent involvement.
Capabilities:
- LLM-powered intent classification and entity extraction
- Journey orchestration for 15+ subscriber flows (see Section 9)
- RAG retrieval from ServiceNow KB + Google Sites/Docs/Sheets/Slides
- Multilingual understanding (EN, ZH-CN, ZH-TW, MS, TA)
- Controlled response language (EN or ZH-CN per B5)
- Proactive follow-up scheduling (e.g., 7:30 AM delivery check)
- Confidence scoring with auto-escalation below threshold
Component 3: PCI Redaction & Security Layer
Purpose: Detect, warn, redact sensitive payment data before any downstream system receives it.
Capabilities:
- Real-time PAN/CVV/expiry pattern detection (Luhn validation for cards)
- Customer warning message with secure redirect
- Redacted transcript generation for ServiceNow
- AI handling notes for agent context
- Audit log of redaction events (metadata only, no raw PAN)
Component 4: Authentication Orchestrator
Purpose: Tiered customer verification proportional to action sensitivity.
Authentication tiers:
| Tier | Method | Use Cases |
|---|---|---|
| T0 | WhatsApp number possession (implicit) | General enquiries, FAQ |
| T1 | Postal code verification | Delivery status, address confirmation |
| T2 | Email + 6-digit OTP | Payment status, account changes |
| T3 | SMS OTP (alternative second factor) | High-sensitivity account modifications |
Component 5: Template Lifecycle Manager
Purpose: End-to-end WhatsApp template governance.
Capabilities:
- Template creation wizard (utility, authentication, marketing categories)
- Submission queue to Meta Business Manager
- Approval status tracking with webhook callbacks
- Version management (draft → submitted → approved → active → deprecated)
- Quality score monitoring dashboard
- A/B variant support for approved templates
Component 6: Notification Event Processor
Purpose: Receive Commerce backend events and dispatch transactional WhatsApp messages.
Event types supported:
| Event | Template Category | SMS Fallback |
|---|---|---|
payment_failed |
Utility | ✅ |
renewal_reminder |
Utility | ✅ |
pending_payment |
Utility | ✅ |
subscription_expiry |
Utility | ✅ |
payment_confirmed |
Utility | ✅ |
welcome_message |
Utility | ✅ |
Capabilities:
- Event webhook receiver from Commerce
- Subscriber WhatsApp capability check
- Template variable population from Commerce payload
- SMS fallback via configured SMS gateway
- Reply context token embedded in outbound message metadata
- Delivery/read/failure status as aggregated metrics only (counts) — no message content stored
Component 7: Consent Bridge (OneTrust)
Purpose: PDPA-compliant consent governance.
Capabilities:
- Opt-in prompt at conversation close (authenticated subscribers only)
- Opt-out keyword handling (STOP, UNSUBSCRIBE)
- Real-time sync to OneTrust Consent Receipt API
- Marketing frequency cap enforcement
- Admin toggles for consent capture on/off per journey
- Consent status lookup via OneTrust API; optional short-TTL cache (≤ 15 min) for pre-send validation — not a consent master record
Component 8: Analytics & WABA Health Dashboard
Purpose: Operational visibility and ROI reporting.
Dashboard modules:
- Conversation volume (inbound/outbound, by title, by language)
- AI resolution rate vs escalation rate
- CSAT scores and trend
- Notification delivery/read/click-through/conversion
- WABA quality rating, messaging tier, limit utilization
- Number warm-up progress tracker
- Agent handoff volume and first response time
- Consent opt-in rate
Component 9: Admin & Operations Portal (Web Application)
Purpose: The primary interface SPH supervisors, marketing, and IT use to manage the WhatsApp channel — accessed via web browser, no software installation.
Full screen-by-screen specification: See Section 4.6 for wireframes and descriptions of all 8 portal screens.
Capabilities:
- Home dashboard — KPIs, alerts, conversation volume at a glance
- Live conversation monitor — real-time read-only view of active chats (PCI-safe)
- Journey flow editor — drag-and-drop, no-code journey configuration
- Template management — create, preview, submit to Meta, track approval
- Analytics & ROI reports — exportable PDF/Excel for leadership
- WABA health centre — quality rating, warm-up playbook, tier monitoring
- Consent controls — OneTrust sync, opt-in/opt-out management
- Settings — user/role management, business hours, integration health panel
4.3 Integration Connectors (Not Built — Configured)
| Connector | Direction | Protocol |
|---|---|---|
| Meta WhatsApp Cloud API | Bidirectional | HTTPS webhooks + REST |
| ServiceNow CSM | Bidirectional | VA Bot-to-Bot API + Table API |
| Commerce Backend | Inbound events + API calls | REST webhooks + REST |
| OneTrust | Outbound consent writes | REST API |
| Google Workspace | Inbound knowledge sync | Drive API + scheduled crawl |
| MoEngage (Phase 2) | Inbound campaign triggers | REST webhook |
| SMS Gateway | Outbound fallback | REST API |
4.4 Cloud Hosting — No Special Hardware Required
Some architecture diagrams in this proposal show technical components (load balancers, databases, etc.). These are standard cloud services — not hardware SPH purchases or maintains.
What "Hosting" Means for SPH
ServiceNow] SUP[Supervisor
Admin Portal] MKT[Marketing
Admin Portal] end subgraph CLOUD["Singapore Cloud — Managed by QUICKSALES.AI"] PORTAL[Admin Portal
Web Application] ENGINE[Platform Services
AI, Messaging, Analytics] end subgraph EXTERNAL["External Services"] WA[WhatsApp / Meta] SN[ServiceNow] COMM[Commerce] end AGENT <-->|HTTPS| SN SUP & MKT <-->|HTTPS login| PORTAL PORTAL --> ENGINE ENGINE <--> WA ENGINE <--> SN ENGINE <--> COMM classDef people fill:#E8F2FA,stroke:#0057A8,stroke-width:2px,color:#071525 classDef qs fill:#C5DFF5,stroke:#004A8F,stroke-width:2px,color:#071525 classDef meta fill:#D1FAE5,stroke:#128C7E,stroke-width:2px,color:#071525 classDef sph fill:#003D73,stroke:#071525,stroke-width:2px,color:#ffffff class AGENT,SUP,MKT people class PORTAL,ENGINE qs class WA meta class SN,COMM sph
| Misconception | Reality |
|---|---|
| "We need to buy servers" | No. QUICKSALES.AI provisions virtual cloud resources (AWS/Azure Singapore). SPH pays a monthly hosting fee — same model as any SaaS product. |
| "We need a DMZ and load balancers" | Those are cloud-managed services (e.g. AWS ALB, Azure Front Door). SPH IT only needs to allow secure API connections (VPN or private link) to ServiceNow and Commerce — not host the platform. |
| "Option B means SPH runs its own data centre" | No. Option B means a dedicated cloud tenant with stronger isolation and SLA — still fully hosted in Singapore cloud, still browser access only. |
| "Redis / PostgreSQL means we store customer data" | No. Redis holds ephemeral session tokens (auto-expire). PostgreSQL holds platform configuration (journeys, templates, admin settings) — not WhatsApp message content or subscriber records. |
Hosting Options (Both Are Cloud — No Hardware)
| Option A — Essential | Option B — Professional | |
|---|---|---|
| Hosting model | Shared secure cloud tenant | Dedicated cloud tenant |
| Region | Singapore (ap-southeast-1) | Singapore (ap-southeast-1) |
| SPH IT effort | API credentials + VPN to SN/Commerce | Same + optional private link |
| SPH buys hardware? | ❌ Never | ❌ Never |
| SPH accesses via | Web browser (Admin Portal + ServiceNow) | Web browser (Admin Portal + ServiceNow) |
4.5 Three Interfaces — What Each Person Sees
Every stakeholder interacts through a familiar screen. There is no new desktop software to install.
Chat with SPH like messaging a friend"] end subgraph AGENT["Customer Service Agent"] SNUI["🖥️ ServiceNow Agent Workspace
WhatsApp chats appear alongside email & phone
Same case management, same tools"] end subgraph OPS["Supervisor / Marketing / IT"] ADMIN["🖥️ QUICKSALES.AI Admin Portal
Web dashboard at admin.sph.quicksales.ai
Manage journeys, templates, reports, consent"] end PHONE <-->|Messages| ADMIN ADMIN <-->|Handoff & transcripts| SNUI classDef people fill:#E8F2FA,stroke:#0057A8,stroke-width:2px,color:#071525 classDef qs fill:#C5DFF5,stroke:#004A8F,stroke-width:2px,color:#071525 classDef sph fill:#003D73,stroke:#071525,stroke-width:2px,color:#ffffff class PHONE people class ADMIN qs class SNUI sph
Interface 1 — Subscriber: WhatsApp (Mobile)
Who: Newspaper subscribers, digital readers, parents (student publications)
Experience: Opens WhatsApp → messages SPH's verified business number → receives instant AI replies or speaks to a live agent → gets payment reminders and delivery updates as normal WhatsApp messages.
Example conversation flow:
| Step | What subscriber sees on phone |
|---|---|
| 1 | Opens WhatsApp, taps SPH verified business chat |
| 2 | Types: "My newspaper wasn't delivered today" |
| 3 | AI replies within seconds: "I'm sorry to hear that. To check your delivery, please confirm your postal code." |
| 4 | Subscriber enters postal code → AI verifies → offers redelivery or credit |
| 5 | If unresolved: "Connecting you to an agent. Expected wait: 3 minutes." |
| 6 | Live agent continues in WhatsApp — subscriber never leaves the app |
No app download. No login portal for subscribers. WhatsApp is the customer interface.
Interface 2 — Agent: ServiceNow (Existing Workspace)
Who: SPH customer service agents (same team as today)
Experience: No new system to learn for core agent work. WhatsApp conversations appear in ServiceNow Agent Workspace as a channel — identical to how email or chat cases appear today.
What agents see in ServiceNow:
| Screen element | Description |
|---|---|
| Case queue | WhatsApp cases listed with channel icon, priority, and wait time |
| Conversation panel | Full chat transcript (card numbers already redacted) |
| Customer 360 | Linked subscriber profile from Commerce |
| AI handoff summary | "Customer reported missed delivery. Postal code verified. AI offered redelivery — customer declined, wants agent." |
| Reply box | Agent types reply → automatically sent to customer's WhatsApp |
Key message for SPH leadership: Agent training focus is "WhatsApp is a new channel in ServiceNow" — not a new platform.
Interface 3 — Operations: QUICKSALES.AI Admin Portal (New — We Build This)
Who: CS supervisors, marketing managers, platform administrators
Experience: Log in via web browser (Chrome/Edge/Safari) → modern dashboard with sidebar navigation → manage everything WhatsApp-related without touching code or servers.
Access URL (example): https://admin.sph-media.quicksales.ai
Roles:
| Role | What they can do |
|---|---|
| Viewer | Read dashboards and reports only |
| Supervisor | Monitor live chats, adjust business hours, review escalations |
| Marketing | Manage templates, consent campaigns, MoEngage triggers (Option B) |
| Administrator | Full access — user management, journey editor, integration settings |
4.6 Admin Portal — Screen-by-Screen Guide
This section describes the concrete screens we will design and build. These are the deliverables SPH supervisors and marketing can demo to leadership — not abstract architecture diagrams.
👉 Open the interactive Admin Portal prototype — click each sidebar item to explore all 8 screens below with live UI.
Screen 1: Home Dashboard (Operations Command Centre)
Purpose: One-page morning briefing for CS leadership.
Layout:
Home Dashboard
Today at a glance
Conversation volume — last 7 days
AI vs agent resolution split
32% escalated to ServiceNow agents
System status
Key widgets:
| Widget | What it shows | Why it matters |
|---|---|---|
| Conversations today | Inbound + outbound count | Channel adoption |
| AI resolution rate | % resolved without agent | ROI proof for leadership |
| CSAT score | Post-chat satisfaction | Service quality |
| Escalation queue | Active agent handoffs | Staffing decisions |
| WABA health alert | Meta quality rating | Prevents number suspension |
| Integration status | ServiceNow, Commerce, OneTrust connectivity | IT confidence |
Screen 2: Live Conversation Monitor
Purpose: Supervisor watches active WhatsApp sessions in real time (read-only, PCI-safe). This is a live stream — not a stored message archive. Closed conversations and full history are viewed in ServiceNow.
Layout:
Live Conversation Monitor
Live stream only — PCI-safe, masked numbers. Closed conversations and full history in ServiceNow.
| Subscriber | Title | Status | Journey | Duration | Lang |
|---|---|---|---|---|---|
| +65 **** 7890 | The Straits Times | Escalated | Delivery complaint | 2m 34s | EN |
| +65 **** 4521 | Lianhe Zaobao | AI handling | Renewal query | 1m 12s | ZH |
| +65 **** 3308 | The Business Times | Awaiting agent | Payment failed | 4m 05s | EN |
Customer: My paper didn't arrive today
AI: Please confirm your postal code.
Customer: 238801
AI: Would you like a redelivery tomorrow or a credit?
Customer: I want to speak to someone
Escalated to ServiceNow — Agent: Sarah Tan
What supervisor sees:
| Column | Example |
|---|---|
| Subscriber | +65 **** 7890 (masked) |
| Title | The Straits Times |
| Status | 🟢 AI handling / 🟡 Awaiting agent / 🔴 Escalated |
| Journey | Delivery complaint |
| Duration | 2m 34s |
| Language | English |
| Action | [View transcript] [Force escalate] |
Transcript view (redacted):
Customer: My paper didn't arrive today
AI: I'm sorry to hear that. Please confirm your postal code.
Customer: 238801
AI: Thank you. I can see your subscription for The Straits Times. Would you like a redelivery tomorrow or a credit?
Customer: I want to speak to someone
AI: Connecting you to an agent. Expected wait: 3 minutes.
System: Escalated to ServiceNow — Agent: Sarah Tan
Privacy: Supervisors see masked phone numbers. Card details never appear — shown as [REDACTED_CARD_NUMBER].
Screen 3: Journey Builder (No-Code Flow Editor)
Purpose: Business users configure what the AI says and does — without developers.
Layout:
Journey Builder
Delivery Complaint · v3.2 · Last edit: Zen · 6 Jul 2026
Node properties
Example: "Delivery Complaint" journey
| Step | Type | Configuration |
|---|---|---|
| 1 | Trigger | Intent = "missed delivery" OR "late delivery" |
| 2 | Auth | Require T1 — postal code verification |
| 3 | Action | Call Commerce API → get delivery status |
| 4 | Branch | If delivery confirmed → offer redelivery |
| 5 | Branch | If delivery failed → offer credit |
| 6 | Fallback | If confidence < 80% → escalate to agent |
| 7 | Close | Send CSAT survey + consent prompt |
Visual editor: Drag-and-drop flowchart (similar to MoEngage journey builder or ServiceNow Flow Designer). Supervisors can adjust wording, add holiday messages, and enable/disable journeys per title (ST, ZB, BT).
Screen 4: Template Manager
Purpose: Create, submit, and track WhatsApp message templates for Meta approval.
Layout:
Template Manager
| Template | Category | Status | Languages | Last used |
|---|---|---|---|---|
payment_failed_v2 | Utility | Approved | EN, ZH-CN | 2 hours ago |
renewal_reminder | Utility | Approved | EN | Today |
welcome_new_sub | Utility | Pending Meta | EN | — |
cny_promo_2026 | Marketing | Draft | ZH-CN | — |
Create template wizard
Utility
Account updates, delivery, payment
Authentication
OTP, verification codes
Marketing
Promotions (requires consent)
Template list view:
| Template name | Category | Status | Language | Last used |
|---|---|---|---|---|
payment_failed_v2 |
Utility | ✅ Approved | EN, ZH-CN | 2 hours ago |
renewal_reminder |
Utility | ✅ Approved | EN | Today |
welcome_new_sub |
Utility | ⏳ Pending Meta review | EN | — |
cny_promo_2026 |
Marketing | 📝 Draft | ZH-CN | — |
Create template wizard (4 steps):
- Choose category — Utility / Authentication / Marketing
- Write message — with variable placeholders:
{{subscriber_name}},{{amount_due}},{{due_date}} - Preview — see exactly how it renders on WhatsApp (EN and ZH-CN side by side)
- Submit to Meta — track approval status with email notification when approved/rejected
Screen 5: Analytics & ROI Reports
Purpose: Prove channel value to SPH leadership with exportable reports.
Layout:
Analytics & ROI Reports
Channel performance
Volume, resolution rate, CSAT trend
Journey breakdown
Top intents, completion rate per journey
Notification performance
Sent, delivered, read, replied, converted
Cost analysis
WA fees vs call centre savings
Report modules:
| Report | Metrics | Export |
|---|---|---|
| Channel performance | Volume, resolution rate, CSAT trend | PDF, Excel |
| Journey breakdown | Top 10 intents, completion rate per journey | PDF, Excel |
| Notification performance | Sent, delivered, read, replied, converted | PDF, Excel |
| Agent impact | Handoff volume, avg handle time, agent CSAT | PDF, Excel |
| Cost analysis | WhatsApp conversation fees vs call centre savings | PDF, Excel |
| Consent growth | Opt-in rate, audience size for Phase 2 marketing | PDF, Excel |
Date filters: Today / 7 days / 30 days / custom range. Title filters: All / ST / ZB / BT / Magazines.
Screen 6: WABA Health Centre
Purpose: Prevent WhatsApp number suspension by monitoring Meta quality metrics.
Layout:
WABA Health Centre
Must stay GREEN
100,000 messages/day
4.2% of capacity
Threshold: < 2%
Threshold: < 10%
Complete before marketing
3-week warm-up playbook
Key metrics:
| Metric | Current | Threshold | Status |
|---|---|---|---|
| Quality rating | GREEN | Must stay GREEN | ✅ |
| Messaging tier | Tier 2 (100K/day) | — | ✅ |
| Daily volume | 4,200 / 100,000 | < 80% capacity | ✅ |
| Block rate | 0.3% | < 2% | ✅ |
| Template rejection rate | 5% | < 10% | ✅ |
| Warm-up progress | Day 14 of 21 | Complete warm-up before marketing | ⏳ |
Warm-up playbook (built in): Guided 3-week ramp schedule with daily send limits — supervisor sees checklist and progress bar.
Screen 7: Consent & Marketing Controls
Purpose: PDPA-compliant opt-in/opt-out management synced with OneTrust.
Layout:
Consent & Marketing Controls
Controls:
| Control | Description |
|---|---|
| Consent capture toggle | Enable/disable opt-in prompt at end of each journey |
| Consent prompt text | Editable message: "Would you like to receive offers from SPH Media on WhatsApp?" |
| Opt-out keywords | STOP, UNSUBSCRIBE — auto-processed |
| Consent dashboard | Total opted-in: 12,450 | Opted-out today: 23 | Synced to OneTrust: ✅ |
| Pre-send validation | Marketing messages blocked if subscriber has not consented |
Screen 8: Settings & Integration Health
Purpose: IT administrator monitors connections — no server access needed.
Layout:
Settings & Integration Health
Integrations:
| Integration | Status | Last sync | Action |
|---|---|---|---|
| Meta WhatsApp API | 🟢 Connected | 2 sec ago | [Test webhook] |
| ServiceNow CSM | 🟢 Connected | 5 sec ago | [Test handoff] |
| Commerce Backend | 🟢 Connected | 1 min ago | [Test order lookup] |
| OneTrust | 🟢 Connected | 3 min ago | [Test consent write] |
| Google KB | 🟢 Connected | 15 min ago | [Force re-index] |
| MoEngage (Option B) | 🟢 Connected | 10 min ago | [Test campaign trigger] |
| SMS Gateway | 🟢 Connected | — | [Send test SMS] |
Also on this screen: User management (invite/remove users, assign roles), business hours calendar, holiday schedule, audit log.
4.7 Day-in-the-Life — How Teams Use the Platform
CS Supervisor — Morning Routine (8:30 AM)
- Opens Admin Portal → Home Dashboard → checks overnight conversation volume and AI resolution rate
- Reviews WABA Health → confirms quality rating is GREEN
- Opens Live Monitor → sees 3 escalated chats → assigns priority in ServiceNow
- Checks Analytics → exports weekly PDF for leadership meeting
Marketing Manager — Campaign Setup (Option B)
- Opens Template Manager → creates Chinese New Year promo template → submits to Meta
- Waits for Meta approval (tracked in portal) → status changes to ✅ Approved
- Opens Consent dashboard → confirms 12,450 opted-in subscribers
- Triggers campaign via MoEngage → portal shows real-time delivery/read metrics
CS Agent — Handling a WhatsApp Case
- Works in ServiceNow (not Admin Portal) → new WhatsApp case appears in queue
- Reads AI handoff summary → continues conversation in reply box
- Reply automatically delivered to customer's WhatsApp
- Closes case in ServiceNow → transcript already filed
IT Administrator — Monthly Check
- Opens Settings → all integrations show 🟢 Connected
- Reviews audit log for access and configuration changes
- No server maintenance, patching, or backup tasks — all managed by QUICKSALES.AI
5. User Personas & Stakeholder Model
5.1 External Users (Customers)
Persona 1: Ah Beng — Print Subscriber (Lianhe Zaobao)
| Attribute | Detail |
|---|---|
| Age | 58 |
| Language | Simplified Chinese (types), understands basic English |
| Channel preference | WhatsApp (daily user) |
| Tech comfort | Low-medium; prefers conversational over web forms |
| Typical needs | Delivery complaints, vacation suspension, payment issues |
| Auth level | Postal code (T1) for delivery; OTP (T2) for payment |
Persona 2: Priya — Digital Subscriber (The Straits Times)
| Attribute | Detail |
|---|---|
| Age | 34 |
| Language | English |
| Channel preference | WhatsApp for quick queries; email for formal matters |
| Tech comfort | High |
| Typical needs | Payment update, subscription renewal, digital access issues |
| Auth level | Email OTP (T2) for account/payment actions |
Persona 3: Ahmad — Multi-Title Subscriber
| Attribute | Detail |
|---|---|
| Age | 45 |
| Language | Malay (types), English (reads) |
| Channel preference | |
| Typical needs | Cross-title billing, address change, student publication queries |
| Auth level | Varies by action; system detects multi-subscription context |
Persona 4: Wei Ming — Payment-At-Risk Subscriber
| Attribute | Detail |
|---|---|
| Trigger | Receives outbound payment failure notification |
| Behaviour | Replies to WhatsApp message rather than clicking link |
| Risk | May paste card details in chat (redaction required) |
| Journey | Contextual reply → auth → secure payment link → confirmation |
5.2 Internal Users (SPH Staff)
Persona 5: Customer Service Agent (ServiceNow)
| Attribute | Detail |
|---|---|
| Workspace | ServiceNow Agent Workspace (unchanged) |
| Interaction | Receives escalated WhatsApp conversations |
| Sees | Redacted transcript, AI handling notes, case context, customer intent |
| Does NOT see | Raw payment card data, full pre-redaction message |
| Actions | Reply via SN interface; messages routed back through our platform to WhatsApp |
Persona 6: CS Supervisor
| Attribute | Detail |
|---|---|
| Workspace | Admin Portal + ServiceNow reports |
| Needs | Live queue monitoring, escalation alerts, CSAT trends, agent workload |
| Actions | Adjust business hours, review AI confidence failures, approve template submissions |
Persona 7: Marketing Operations (Phase 2)
| Attribute | Detail |
|---|---|
| Workspace | MoEngage + Admin Portal consent reports |
| Needs | Consented subscriber segments, DNC-scrubbed send lists, campaign performance |
| Actions | Launch campaigns via MoEngage; our platform executes WA delivery |
Persona 8: Platform Administrator (IT)
| Attribute | Detail |
|---|---|
| Workspace | Admin Portal |
| Needs | Integration health, WABA status, API logs, user management |
| Actions | Configure connectors, manage templates, monitor system health |
ZH-CN / EN] P2[Digital Subscriber
EN] P3[Multi-Title Subscriber
MS / EN] P4[Payment-At-Risk
Reply to notification] end subgraph PLATFORM["QUICKSALES.AI Platform"] WA[WhatsApp Channel] end subgraph INTERNAL["Internal Users"] I1[CS Agent — ServiceNow] I2[CS Supervisor — Admin Portal] I3[Marketing Ops — MoEngage] I4[IT Admin — Admin Portal] end P1 & P2 & P3 --> WA P4 --> WA WA <-->|escalation| I1 WA --> I2 WA --> I3 WA --> I4 classDef people fill:#E8F2FA,stroke:#0057A8,stroke-width:2px,color:#071525 classDef meta fill:#D1FAE5,stroke:#128C7E,stroke-width:2px,color:#071525 classDef qs fill:#C5DFF5,stroke:#004A8F,stroke-width:2px,color:#071525 classDef sph fill:#003D73,stroke:#071525,stroke-width:2px,color:#ffffff class P1,P2,P3,P4 people class WA meta class I1 sph class I2,I4 qs class I3 people
6. Solution Architecture
6.0 Master Solution Diagram (One View)
This is the single reference diagram for the entire solution. It shows every actor, every system, the five main flows, and where data lives. All other diagrams in this proposal zoom into a part of this picture.
WhatsApp app"] AGENT["🎧 CS Agent
ServiceNow"] OPS["📊 Ops / Marketing
Admin Portal"] end WABA["Meta WhatsApp Cloud API
SPH-owned WABA"] subgraph QS["QUICKSALES.AI PLATFORM — transient processing only, no customer data stored"] direction LR GW["Gateway &
Session Mgr"] RED["PCI
Redaction"] AI["AI Virtual
Agent"] NP["Notification
Processor"] CB["Consent
Bridge"] PORTAL["Admin
Portal"] GW --> RED --> AI end subgraph SPHSYS["SPH SYSTEMS — all customer data lives here 📁"] direction LR SN["ServiceNow CSM
📁 conversations + cases"] COMM["Commerce Backend
📁 subscriber + billing"] OT["OneTrust
📁 consent"] KB["Knowledge
SN KB + Google"] SMS["SMS Gateway"] end subgraph P2["PHASE 2"] direction LR MOE["MoEngage"] DNC["DNC Registry"] end PEOPLE ~~~ WABA SUB <-- "A inbound support" --> WABA WABA <--> GW GW <-. "B outbound send" .- NP GW <-- "C agent handoff" --> SN AI -- "A transcript" --> SN AI <-- "A lookup only" --> COMM AI <--> KB NP <-. "B billing event" .- COMM NP -. "B fallback" .-> SMS AI -- "D opt-in" --> CB CB <--> OT NP <-. "E campaign" .- MOE NP -. "E scrub" .-> DNC AGENT --- SN OPS --- PORTAL classDef people fill:#E8F2FA,stroke:#0057A8,stroke-width:2px,color:#071525 classDef meta fill:#D1FAE5,stroke:#128C7E,stroke-width:2px,color:#071525 classDef qs fill:#C5DFF5,stroke:#004A8F,stroke-width:2px,color:#071525 classDef sph fill:#003D73,stroke:#071525,stroke-width:2px,color:#ffffff classDef p2 fill:#E8F2FA,stroke:#0057A8,stroke-width:2px,stroke-dasharray:4 3,color:#003D73 class SUB,AGENT,OPS people class WABA meta class GW,RED,AI,NP,CB,PORTAL qs class SN,COMM,OT,KB,SMS sph class MOE,DNC p2
Legend: light blue = people · green = Meta/WhatsApp · Harmony blue = our platform (build) · navy = SPH systems where data persists · dashed blue = Phase 2. Letters A–E on the arrows are the five flows explained below.
How to Read the Master Diagram
| Flow | What happens | RFP mapping | Detail diagram |
|---|---|---|---|
| A — Inbound support | Subscriber messages SPH → redaction → AI resolves via Commerce/KB → transcript to ServiceNow | Journeys 1, 2, 4 · A1, A3, B1–B4 | Section 6.2, Section 10.1 |
| B — Outbound notification | Commerce event → approved Utility template → WhatsApp (or SMS fallback) | Journey 3 · C1, C2 | Section 8.4, Section 10.2 |
| C — Agent handoff | AI escalates → ServiceNow agent chats through platform → subscriber's WhatsApp | A1, D1, D2 | Section 10.3, Section 11.2 |
| D — Consent | Opt-in captured at conversation close → written to OneTrust (master record) | E1–E3 | Section 10.4, Section 11.4 |
| E — Phase 2 marketing | MoEngage triggers campaign → consent check + DNC scrub → send | F1–F3 | Section 10.6, Section 11.6 |
Data residency at a glance: the QUICKSALES.AI box processes and routes — it stores no conversations, no subscriber records, no consent. Every 📁 icon marks where customer data actually persists: ServiceNow, Commerce, OneTrust — all SPH systems (Principle 2).
Diagram Index (All 31 Diagrams)
| # | Diagram | Section | Zooms into |
|---|---|---|---|
| ★ | Master Solution Diagram | Section 6.0 | Everything — start here |
| 1 | What We Will Build (summary) | Section 1 | Platform components |
| 2 | Phase roadmap timeline | Section 2.2 | Phase 1 vs 2 schedule |
| 3–4 | Why not ServiceNow-native WhatsApp | Section 2.4, Section 3 | Architecture decision |
| 5 | What hosting means for SPH | Section 4.4 | Browser-only access |
| 6–7 | Three interfaces / personas | Section 4.5, Section 5 | Who sees what |
| 8 | High-level architecture | Section 6.1 | Full component wiring |
| 9 | Data flow (inbound/outbound) | Section 6.2 | Flow A + B detail |
| 10 | Cloud infrastructure reference | Section 6.3.3 | Hosting stack (IT only) |
| 11 | Security layers | Section 6.4 | Perimeter → compliance |
| 12–13 | Data architecture + message lifecycle | Section 6.5 | What we store vs don't |
| 14–17 | Module logic (routing, redaction, auth, notify) | Section 8 | Flows A, B internals |
| 18–23 | Sequence + state flows | Section 10 | Flows A–E step-by-step |
| 24 | Integration topology (endpoints/auth) | Section 11.0 | Engineering view of all legs |
| 25 | Consent model | Section 13 | Flow D policy detail |
| 26 | Gantt timeline | Section 16.2 | Delivery plan |
| 27–28 | Team structures | Section 17 | Governance |
| 29 | Vendor landscape | Section 18.3 | Competitive context |
| 30 | Dependency chain | Section 22.2 | What blocks what |
6.1 High-Level Architecture
Agent Workspace] COMM[Commerce Backend] OT[OneTrust] GWS[Google Workspace
Sites/Docs/Sheets] SNKB[ServiceNow Knowledge Base] MOE[MoEngage — Phase 2] SMS[SMS Gateway] DNC[DNC Registry] end CUST <--> WABA WABA <--> CLOUD CLOUD <--> GW GW --> RED --> AI GW --> NOTIF AI --> AUTH AI --> SN AI --> COMM AI --> SNKB AI --> GWS RED --> SN NOTIF --> TMPL NOTIF --> COMM NOTIF --> SMS CONSENT --> OT NOTIF --> CONSENT AI --> CONSENT MOE --> NOTIF NOTIF --> DNC ANALYTICS --> ADMIN GW & AI & NOTIF --> ANALYTICS
6.2 Data Flow Architecture
6.3 Hosting & Deployment (How the Platform Runs)
For SPH leadership and business stakeholders: You do not buy servers, install software, or manage infrastructure. QUICKSALES.AI hosts the entire platform in Singapore cloud (AWS or Azure). Your team accesses it through a web browser — the Admin Portal for operations, and ServiceNow for agents. The diagram below is included for SPH IT review only.
6.3.1 What SPH Needs to Provide
| SPH responsibility | Effort | Notes |
|---|---|---|
| API access to ServiceNow, Commerce, OneTrust | One-time setup | SPH IT provides credentials and sandbox |
| Secure network connection (VPN or private link) | One-time setup | So cloud platform can reach SPH internal APIs |
| User accounts for Admin Portal | Ongoing | Invite supervisors, marketing, IT via email |
| WABA ownership in Meta Business Manager | One-time | SPH retains ownership of WhatsApp number |
| Buy or host servers? | None | Fully managed by QUICKSALES.AI |
6.3.2 Hosting Options (Cloud Only)
| Option A — Essential | Option B — Professional | |
|---|---|---|
| Model | Secure shared cloud tenant | Dedicated cloud tenant |
| Region | Singapore | Singapore |
| Uptime SLA | 99.5% business hours | 99.9% 24/7 |
| SPH hardware required | None | None |
| Admin Portal access | Web browser | Web browser |
6.3.3 Technical Reference (For SPH IT — Optional Reading)
The platform runs on standard cloud infrastructure. SPH does not procure or manage any of these components — they are provisioned and operated by QUICKSALES.AI as part of the hosting fee.
Gateway, AI, Notifications] DATA[(Ephemeral session cache
+ Platform config only
No customer transcripts)] end subgraph SPH_NET["SPH Internal Network"] SN[ServiceNow] COMM[Commerce] OT[OneTrust] end BROWSER --> PORTAL META <--> LB PORTAL --> APP LB --> APP APP --> DATA APP <-->|VPN / Private Link| SPH_NET
Deployment options:
- Option A (Essential): QUICKSALES.AI-managed cloud (Singapore region), VPN to SPH systems
- Option B (Professional): Dedicated cloud tenant with enhanced isolation and SLA — still fully hosted, still browser access only
Optional add-on: "Dedicated Singapore private cloud hosting" (Section 19.6) means an isolated cloud environment for enhanced data residency — not on-premise hardware.
6.4 Security Architecture
6.5 Data Architecture — What We Store vs What We Don't
This section answers: "If customer data must live in SPH systems, why do you have databases?"
Conversations & cases)] COMM[(Commerce
Subscriber records)] OT[(OneTrust
Consent records)] end WA[WhatsApp / Meta] --> GW GW --> RED --> AI AI -->|Redacted transcript| SN AI -->|Lookup only| COMM AI -->|Consent write| OT GW -.->|Session token, TTL| CACHE CFG -.->|Journey rules, templates| AI VEC -.->|KB article search| AI
Requirement-to-Architecture Mapping
| RFP / Req ID | SPH requirement | Our compliance |
|---|---|---|
| Principle 2 | Customer data in SPH systems only | Transcripts → ServiceNow; profiles → Commerce API; consent → OneTrust |
| A1 | All conversations captured to ServiceNow | Every message (incl. offline) written to SN in real time; not kept in vendor DB |
| A3 | Redact sensitive data before ServiceNow sync | Redaction at gateway before any downstream write |
| B3 | AI conversations filed in ServiceNow | Full redacted AI transcript synced to SN case |
| D2 | All messages in ServiceNow for traceability | Bidirectional SN sync; vendor holds no message archive |
| E1 | Consent kept in OneTrust | Platform writes to OneTrust API; does not store consent as master record |
| RFP PCI slide | No raw card in transcript, agent console, or SN payload | [REDACTED_*] tokens only; raw PAN never written anywhere |
What Each Database Is For (Not Customer Data)
| Component | Stores | Does NOT store | Max retention |
|---|---|---|---|
| Redis (session cache) | Hashed session ID, current journey step, context token for routing | Message text, subscriber profile, billing data | TTL ≤ 72 hours, then auto-delete |
| PostgreSQL (config DB) | Journey definitions, template metadata, admin users, integration settings, aggregated metrics (counts) | Conversation transcripts, subscriber PII, payment data | Config: duration of contract; metrics: rolling aggregates only |
| Vector DB (knowledge) | Embeddings of SPH knowledge articles (SN KB, Google Sites/Docs) | Customer WhatsApp messages, subscriber data | Refreshed from SPH sources on schedule |
| ServiceNow | All conversation transcripts, cases, agent history | — | Per SPH retention policy |
| Commerce | Subscriber accounts, billing, delivery | — | Per SPH retention policy |
| OneTrust | Consent records | — | Per SPH legal policy |
Message Lifecycle (End to End)
from vendor after SN sync Note over SN: System of record —
A1, B3, D2 compliant
Live Monitor & Analytics — No Message Archive
The Admin Portal Live Conversation Monitor shows active chats via real-time stream (not a stored archive). Historical transcripts are viewed in ServiceNow — where SPH already manages retention and access control.
| Admin Portal view | Data source |
|---|---|
| Live active chats | Real-time event stream (ephemeral) |
| Historical transcripts | ServiceNow API (SPH system of record) |
| Dashboard KPIs | Aggregated counters only (no message text) |
7. Detailed Requirement Compliance Matrix
| ID | Requirement | Option A Essential | Option B Professional | How We Comply |
|---|---|---|---|---|
| A1 | 24/7 self-service + escalation + offline capture | ✅ | ✅ | AI + SN handoff; all messages (incl. offline) synced to ServiceNow in real time — vendor does not retain |
| A2 | EN, ZH-CN, MS, TA localization | ⚠️ EN + ZH-CN | ✅ All 4 | Multilingual NLU for bots; agent UI rendering via ServiceNow (RFP: bots and live agent chats) |
| A3 | Redaction before ServiceNow | ✅ | ✅ | Redaction layer at gateway edge |
| A4 | Template lifecycle management | ⚠️ Basic | ✅ Full | Template manager with Meta sync |
| A5 | Analytics & ROI dashboards | ⚠️ Core KPIs | ✅ Full | Analytics engine + dashboards |
| A6 | WABA health & warm-up | ⚠️ Monitoring | ✅ Full | Health dashboard + warm-up playbook |
| B1 | AI end-to-end resolution | ⚠️ 8 journeys | ✅ 15+ journeys | Journey orchestration engine |
| B2 | Tiered authentication | ✅ | ✅ | Auth orchestrator (T0–T3) |
| B3 | AI conversations in ServiceNow | ✅ | ✅ | Redacted transcript sync via Table API |
| B4 | SN KB + Google knowledge | ⚠️ SN KB only | ✅ Both | RAG connectors |
| B5 | Understand 4 langs inbound; reply EN/ZH-CN | ⚠️ EN + ZH-CN reply only | ✅ All 4 inbound | Multilingual NLU pipeline |
| C1 | Transactional notifications + SMS fallback | ✅ | ✅ | Notification processor |
| C2 | Contextual reply handling | ⚠️ UC-03 only | ✅ | Payment-failure contextual reply (UC-03) in Option A; full notification reply (UC-05) in Option B |
| D1 | ServiceNow CSM agent workspace | ✅ | ✅ | VA Bot-to-Bot API integration |
| D2 | All messages in ServiceNow | ✅ | ✅ | All messages synced to SN; vendor does not retain message archive |
| E1 | OneTrust + PDPA + WA policy | ⚠️ Basic | ✅ Full | Consent bridge module |
| E2 | Opt-in at conversation close | ✅ | ✅ | Close-flow consent prompt |
| E3 | Platform consent toggles | ✅ | ✅ | Admin portal toggles |
| F1 | MoEngage WA marketing | ❌ Add-on | ✅ | MoEngage webhook connector |
| F2 | Campaigns to consented base | ❌ Add-on | ✅ | Consent validation pre-send |
| F3 | DNC scrubbing | ❌ Add-on | ✅ | DNC check service |
Legend: ✅ Included | ⚠️ Partial/Basic | ❌ Not included (available as add-on)
8. Functional Design by Module
8.1 Module A1 — Self-Service & Intelligent Routing
Routing Decision Logic
Offline Message Handling
| Scenario | Behaviour |
|---|---|
| Message outside business hours | AI continues self-service (24/7) |
| Escalation outside business hours | Acknowledgment sent; case and transcript in ServiceNow; agent queue in SN AWA |
| Agent unavailable during hours | Overflow queue in ServiceNow with estimated wait |
| All messages | Redacted transcript written to ServiceNow immediately (SPH system of record). Vendor processes in memory only — not archived in vendor database |
| ServiceNow temporarily unavailable | In-memory retry (≤ 15 min); alert ops; no persistent vendor storage |
8.2 Module A3 — PCI Redaction Pipeline
NOT raw PAN
Redaction rules:
| Pattern | Detection | Replacement Token |
|---|---|---|
| Credit card PAN (13–19 digits) | Luhn algorithm + BIN range | [REDACTED_CARD_NUMBER] |
| CVV (3–4 digits near card context) | Positional heuristic | [REDACTED_CVV] |
| Expiry (MM/YY, MM/YYYY) | Date pattern near card context | [REDACTED_EXPIRY] |
| NRIC/FIN | Singapore ID pattern | [REDACTED_NRIC] |
8.3 Module B2 — Tiered Authentication
8.4 Module C1/C2 — Notification & Contextual Reply
9. Use Cases & Customer Journeys
This section is cross-checked against Requirements - WhatsApp.pdf (22 requirement IDs A1–F3) and SPH Media WhatsApp Customer Engagement Platform - RFP.pdf (4 reference journeys + PCI control). See Appendix B for full traceability.
9.0 RFP Audit Summary
| RFP source | What SPH specified | Proposal coverage | Option A | Option B |
|---|---|---|---|---|
| RFP Journey 1 | Newspaper delivery complaint (proactive 7:30 AM follow-up, doorstep fee quote) | UC-01 | ✅ | ✅ |
| RFP Journey 2 | Vacation suspension create + extend (reference CS-123456) | UC-02 | ✅ | ✅ |
| RFP Journey 3 | Payment failure outbound → contextual reply → T2 OTP → secure link | UC-03 | ✅ | ✅ |
| RFP Journey 4 | PCI redaction — no raw PAN/expiry/CVV in SN or agent console | UC-04 + Section 8.2 | ✅ | ✅ |
| Close pattern | CSAT 1–5 → resolution check → marketing opt-in (all 3 conversational journeys) | Section 9.1.0 + UC-09 | ✅ | ✅ |
| C1 notifications | 5 transactional types + SMS fallback | Section 9.1.1 + UC-03, UC-11 | ✅ all 5 sends | ✅ |
| C2 contextual reply | Reply to notification routed with context (no repeat issue) | UC-03 (payment); UC-05 (renewal/expiry) | ⚠️ payment only | ✅ all types |
| A1 escalation | Live agent handoff + offline capture | UC-07, UC-08 | ✅ | ✅ |
| A2 / B5 languages | EN, ZH-CN, Malay, Tamil (bots + agents); AI replies EN or ZH-CN | UC-06 | ⚠️ EN + ZH-CN | ✅ All 4 |
| B4 knowledge | ServiceNow KB + Google Sites/Docs/Sheets/Slides | UC-14 | ⚠️ SN KB only | ✅ Both |
| Phase 2 F1–F3 | MoEngage marketing, consented base, DNC scrub | UC-12 | ❌ Add-on | ✅ |
Audit note: UC-05 through UC-14 are derived from requirement IDs (C1, A1, B4, F1, etc.) — they are not separate RFP journey documents but are required for full compliance. All 4 RFP reference journeys are fully covered in both options.
9.1 RFP Reference Journeys (Mandatory)
9.1.0 Mandatory Conversation Close Pattern (All RFP Journeys)
Per RFP, every resolved conversational journey (Journeys 1–3) must end with this sequence before the session closes:
| Step | Prompt (RFP verbatim intent) | System action | Req |
|---|---|---|---|
| 1 | CSAT: rate experience 1–5 (1 = very dissatisfied, 5 = very satisfied) | Score stored in analytics; linked to ServiceNow case | A5 |
| 2 | Resolution check: "Did our team manage to resolve your issue or query today?" (Yes/No) | Feeds pilot KPI measurement (50%+ AI resolution) | A5, B1 |
| 3 | Marketing opt-in: "Would you like to receive updates, offers, and subscription-related messages from SPH Media via WhatsApp?" (Yes/No; opt out anytime) | Yes → OneTrust consent receipt (E2). No → session closes, no marketing. | E1, E2, E3 |
9.1.1 C1 Transactional Notification Catalogue
Requirements PDF Section C1 mandates these Commerce-triggered outbound types. Each uses an approved Utility WhatsApp template; SMS fallback when subscriber has no valid WhatsApp number (UC-11).
| C1 notification type | Commerce event (illustrative) | Use case | Option A — send | Option A — contextual reply | Option B |
|---|---|---|---|---|---|
| Payment failure alert | payment_failed |
UC-03 (RFP Journey 3) | ✅ | ✅ | ✅ |
| Renewal reminder | renewal_reminder |
UC-05 | ✅ | ⚠️ generic intake | ✅ full flow |
| Pending payment reminder | payment_pending |
UC-05 variant | ✅ | ⚠️ generic intake | ✅ full flow |
| Expiry notice | subscription_expiring |
UC-05 variant | ✅ | ⚠️ generic intake | ✅ full flow |
| Payment confirmation | payment_confirmed |
Post-update confirmation | ✅ | — | ✅ |
| SMS fallback | Any above when WA unavailable | UC-11 | ✅ | — | ✅ |
UC-01: Newspaper Delivery Complaint (RFP Journey 1)
| Step | Actor | Action | System |
|---|---|---|---|
| 1 | Customer | "I have not received my newspaper today" | AI detects delivery complaint intent |
| 2 | AI | Request postal code (T1 auth) | Auth orchestrator |
| 3 | Customer | Provides postal code | Commerce API: verify + fetch subscription |
| 4 | AI | Confirm subscription title (e.g. Lianhe Zaobao) and delivery address on record | Display for customer confirmation (RFP Journey 1) |
| 5 | Customer | Confirms address | Commerce API: check delivery status |
| 6 | AI | "Delivery expected by 7:30 AM" | Schedule proactive follow-up |
| 7 | AI | 7:30 AM: "Have you received it?" | Scheduled worker |
| 8 | Customer | "No!" | AI escalates to delivery partner API |
| 9 | AI | 7:42 AM: "Delivered to letterbox, please check" | Commerce/delivery partner update |
| 10 | Customer | Requests doorstep delivery | AI quotes $10/month fee |
| 11 | Customer | Declines | AI acknowledges |
| 12 | AI | CSAT + resolution check + opt-in | Section 9.1.0 — mandatory close pattern |
| Auth tier | T1 (postal code) | Resolution | AI-only, no agent |
| Requirements | A1, A2, B1, B2, B3, D1, D2, E2 |
UC-02: Vacation Suspension (RFP Journey 2)
| Step | Actor | Action | System |
|---|---|---|---|
| 1 | Customer | "Pause my newspaper delivery while away" | AI detects suspension intent |
| 2 | AI | T1 auth (postal code) | Auth orchestrator |
| 3 | AI | Request suspension dates | — |
| 4 | Customer | "12 to 18 July" | AI parses date range |
| 5 | AI | Confirm: suspend 12–18 Jul, resume 19 Jul | Commerce API: validate dates |
| 6 | Customer | "Yes, proceed" | Commerce API: create suspension |
| 7 | AI | "Done. Reference CS-123456" | Log to ServiceNow |
| 7a | AI | CSAT + resolution check + opt-in | Section 9.1.0 — create sub-journey close |
| Sub-journey: Extension | |||
| 8 | Customer | "Extend suspension to 20 July" | AI retrieves CS-123456 context |
| 9 | AI | T1 re-auth + show current suspension | Commerce API: get existing request |
| 10 | AI | Confirm extension to 20 Jul, resume 21 Jul | Commerce API: update suspension |
| 11 | AI | "Reference CS-123456 remains" | Update ServiceNow case |
| 12 | AI | CSAT + resolution check + opt-in | Section 9.1.0 — extension sub-journey close |
| Auth tier | T1 | Resolution | AI-only |
| Requirements | B1, B2, B3, D1, D2, E2 |
UC-03: Payment Update Support (RFP Journey 3)
| Step | Actor | Action | System |
|---|---|---|---|
| 0 | System | Outbound Utility template (9:00 AM): payment failed — update at https://sph.sg/updatecc (official SPH domain) |
C1: Commerce payment_failed event → WA template + SMS fallback |
| 1 | Customer | Replies: "not sure how to update my card" | C2: contextual reply routing |
| 2 | AI | T2 auth: request email | Auth orchestrator |
| 3 | Customer | Provides email | OTP sent to registered email |
| 4 | Customer | Enters 6-digit OTP | OTP validated |
| 5 | AI | Shows payment failure status + secure link | Commerce API: payment status |
| 6 | Customer | "Forgot my password" | AI offers Option A or B |
| 7 | Customer | Selects B (secure payment link) | Commerce API: generate unique link |
| 8 | AI | Sends https://sph.sg/xRfU (time-limited) | — |
| 9 | Customer | "Is this link safe?" | AI cites official domains page; offers live agent escalation (RFP Journey 3) |
| 10 | Customer | Updates card, replies "I have updated my card" | Commerce API: verify payment update |
| 11 | AI | Confirms success; never asked for card details in chat (RFP security rule) | Close flow + CSAT + resolution + opt-in (Section 9.1.0) |
| Auth tier | T2 (email OTP) | Resolution | AI-only (agent optional if customer accepts escalation) |
| Requirements | A1, B1, B2, B3, C1, C2, D1, D2, E2 |
UC-04: Sensitive Data Redaction (RFP Journey 4)
| Step | Actor | Action | System |
|---|---|---|---|
| 1 | Customer | Pastes card number + expiry + CVV in chat | Gateway receives raw message |
| 2 | Redaction | Detect PAN + expiry + CVV | Luhn validation + pattern match |
| 3 | AI | Warn: "Do not share card details in WhatsApp" | Customer-facing warning |
| 4 | Redaction | Strip raw values from all downstream payloads | — |
| 5 | AI | Provide secure payment link | Commerce API |
| 6 | Platform | Sync redacted transcript to ServiceNow | SN case: [REDACTED_CARD_NUMBER], [REDACTED_EXPIRY], [REDACTED_CVV] — intent retained |
| 7 | Agent (if escalated) | Sees intent + redacted message + AI notes + controls applied | No raw PAN, expiry, or CVV in agent console (RFP mandatory) |
| Requirements | A3, B3, D2 |
9.2 Extended Use Cases (Derived from Requirements)
These use cases are not illustrated as separate journeys in the RFP PDF but are required by requirement IDs A1, C1, B4, E1, F1–F3, etc. They complete full compliance beyond the 4 RFP reference flows.
UC-05: Subscription Renewal Reminder Reply
| Trigger | Commerce event: renewal_reminder |
|---|---|
| Outbound | WA template: "Your ST subscription renews on 15 Aug" |
| Customer reply | "Can I change to digital only?" |
| AI action | Context-aware: knows renewal + current plan → offers digital plan options |
| Commerce action | Quote digital plan pricing |
| Option A | Outbound send ✅; reply routes to generic support intake (not full contextual plan-change flow) |
| Option B | Full contextual reply with Commerce plan lookup (as described above) |
| Requirements | C1, C2, B1, B4 |
UC-06: Multi-Language Enquiry (Tamil)
| Trigger | Customer sends message in Tamil: "என் சந்தா விவரங்களைப் பார்க்க வேண்டும்" |
|---|---|
| AI action | Understand Tamil intent → "view subscription details" |
| AI reply | English or ZH-CN (per B5): "I can help you view your subscription. Please confirm your postal code." |
| Requirements | B5, A2, B2 |
UC-07: Live Agent Escalation (Complex Dispute)
| Trigger | Customer disputes billing after 3 AI attempts |
|---|---|
| AI action | Confidence below threshold OR customer requests agent |
| Platform | Create SN interaction via VA API → route to AWA queue |
| Agent | Sees full redacted transcript + AI summary in ServiceNow |
| Agent reply | Typed in SN → routed through platform → delivered on WhatsApp |
| Requirements | A1, D1, D2, B3 |
UC-08: Offline Message Capture
| Trigger | Customer messages at 11 PM: "I need to cancel my subscription" |
|---|---|
| AI action | Attempts self-service cancellation flow |
| If policy requires agent | Acknowledgment sent; case queued in ServiceNow AWA for next business day |
| ServiceNow | Full conversation transcript stored in ServiceNow overnight (SPH system of record) |
| Vendor platform | Message processed transiently; transcript synced to SN — not retained on vendor |
| Next morning | Agent picks up case from ServiceNow with full context |
| Requirements | A1, D2 |
UC-09: Marketing Opt-In at Close
| Trigger | Any resolved conversation with authenticated subscriber |
|---|---|
| AI action | CSAT → resolution check → "Receive updates via WhatsApp?" |
| Customer | Replies "Yes" |
| Platform | Write consent receipt to OneTrust |
| Phase 2 | Subscriber available for MoEngage campaigns |
| Requirements | E1, E2, E3 |
UC-10: Opt-Out Handling
| Trigger | Customer sends "STOP" or "unsubscribe" |
|---|---|
| Platform | Process opt-out immediately |
| OneTrust | Update consent record |
| Effect | No marketing messages; transactional/utility still allowed per WA policy |
| Requirements | E1, E3 |
UC-11: SMS Fallback for Non-WhatsApp Subscriber
| Trigger | Commerce event: payment_failed for subscriber without WA |
|---|---|
| Platform | WA capability check fails |
| Fallback | Send SMS with payment update link |
| Analytics | Log channel used (WA vs SMS) |
| Requirements | C1, A5 |
UC-12: Phase 2 — Winback Campaign (Professional Only)
| Trigger | MoEngage: subscriber lapsed 30 days |
|---|---|
| Pre-send | Check OneTrust consent ✅ → DNC scrub ✅ |
| Send | WA marketing template with renewal offer |
| Reply | Customer replies → contextual AI support flow |
| Requirements | F1, F2, F3 |
UC-13: Address Change Request
| Trigger | "I moved to a new address" |
|---|---|
| Auth | T2 (email OTP) — address is sensitive |
| AI | Collect new address → confirm → Commerce API update |
| ServiceNow | Case logged with change details |
| Requirements | B1, B2, B3 |
UC-14: Digital Access Issue
| Trigger | "I can't access my digital subscription" |
|---|---|
| Auth | T1 (postal code) or T2 depending on action |
| AI | Check subscription status → KB article for troubleshooting |
| Knowledge | SN KB (Option A); SN KB + Google Workspace (Option B) |
| Requirements | B1, B4 |
UC-15: Student Publication Parent Query
| Trigger | "When does my child's Young Generation magazine arrive?" |
|---|---|
| AI | Identify student publication context → delivery schedule from KB |
| Multi-title | Route to correct publication metadata |
| Requirements | B1, B4, A2 |
9.3 Option A vs Option B — Journey Coverage
| # | Journey / use case | RFP source | Option A (8 core) | Option B (15+) |
|---|---|---|---|---|
| 1 | Delivery complaint | RFP Journey 1 | ✅ UC-01 | ✅ |
| 2 | Vacation suspend + extend | RFP Journey 2 | ✅ UC-02 | ✅ |
| 3 | Payment failure reply + secure link | RFP Journey 3 | ✅ UC-03 | ✅ |
| 4 | PCI redaction (all journeys) | RFP Journey 4 | ✅ UC-04 | ✅ |
| 5 | Live agent escalation | A1, D1 | ✅ UC-07 | ✅ |
| 6 | Offline message capture | A1 | ✅ UC-08 | ✅ |
| 7 | Subscription status / general FAQ | B1, B4 | ✅ | ✅ |
| 8 | Opt-in / opt-out at close | E1–E3 | ✅ UC-09/10 | ✅ |
| 9 | Renewal / expiry notification reply | C1, C2 | ⚠️ send + generic intake | ✅ UC-05 |
| 10 | Multi-language (Malay, Tamil) | A2, B5 | — | ✅ UC-06 |
| 11 | Address change | B1, B2 | — | ✅ UC-13 |
| 12 | Digital access / KB lookup | B4 | ⚠️ SN KB only | ✅ UC-14 |
| 13 | SMS fallback | C1 | ✅ UC-11 | ✅ |
| 14 | Student publication query | SPH portfolio | — | ✅ UC-15 |
| 15 | Phase 2 winback campaign | F1–F3 | ❌ | ✅ UC-12 |
Option A delivers all 4 RFP reference journeys + A1 escalation/offline + E consent + C1 sends. Option B adds full C2 contextual flows, Malay/Tamil, Google KB, extended journeys, and Phase 2 marketing.
9.4 Requirement Compliance Scorecard (22 IDs)
| Phase | IDs | Option A | Option B |
|---|---|---|---|
| Phase 1 Platform | A1–A6 | ✅✅⚠️⚠️⚠️⚠️ (4 partial) | ✅ all full |
| Phase 1 AI | B1–B5 | ⚠️✅✅⚠️⚠️ | ✅ all full |
| Phase 1 Notifications | C1–C2 | ✅ ⚠️ | ✅ ✅ |
| Phase 1 ServiceNow | D1–D2 | ✅ ✅ | ✅ ✅ |
| Phase 1 Consent | E1–E3 | ⚠️✅✅ | ✅✅✅ |
| Phase 2 Marketing | F1–F3 | ❌❌❌ | ✅✅✅ |
RFP journeys: 4/4 covered in both options. Full 22/22 compliance: Option B only. Option A: 16 full + 6 partial = pilot-ready per SPH scope.
10. Process Flows & Sequence Diagrams
10.1 End-to-End Inbound Support Flow
10.2 Outbound Notification Flow
10.3 Live Agent Handoff Flow
intent, AI summary,
subscriber context AI->>SN: POST /api/sn_va_as_service/bot/integration Note over SN: action: START_CONVERSATION
+ handoff context SN->>AGENT: New conversation in AWA inbox AGENT->>SN: Agent accepts + replies SN->>GW: Outbound webhook (agent message) GW->>C: Deliver on WhatsApp C->>GW: Customer reply GW->>SN: Forward to agent AGENT->>SN: Resolve + close SN->>GW: END_CONVERSATION GW->>AI: Trigger close flow (CSAT + consent)
10.4 Consent Lifecycle Flow
10.5 Template Lifecycle Flow
10.6 Phase 2 Marketing Campaign Flow
11. Integration Design — Technical Specification
This section is the integration engineering specification — protocols, endpoints, payloads, ServiceNow table mappings, and discovery dependencies. Generic descriptions are replaced with implementable detail.
11.0 End-to-End Integration Topology
Business Manager owned] CLOUD[Cloud API Webhooks] end subgraph QS["QUICKSALES.AI — Singapore AWS ap-southeast-1"] GW[Gateway
HMAC verify] RED[PCI Redaction] AI[AI Agent + RAG] NP[Notification Processor] TMPL[Template Manager] CONSENT[Consent Bridge] end subgraph SPH["SPH Internal Systems — VPN / Private Link"] SN["ServiceNow CSM
sn_customerservice_case
interaction
kb_knowledge"] COMM["Commerce Backend
REST + Webhooks
TBD — discovery"] OT["OneTrust
privacyportal.*.onetrust.com"] GWS["Google Workspace
Drive API v3"] MOE["MoEngage
Connected Channel"] SMS["SMS BSP
TBD — discovery"] DNC["PDPC DNC Registry"] end WA_APP <--> WABA WABA <--> CLOUD CLOUD <-->|POST /webhook/meta| GW GW --> RED --> AI GW --> NP AI <-->|OAuth Table API| SN AI <-->|OAuth REST| COMM AI <-->|Drive API| GWS NP <-->|HMAC webhook| COMM NP --> CLOUD NP --> SMS CONSENT <-->|Consent Receipt API| OT MOE -->|POST /webhook/moengage| NP NP --> DNC SN -->|async POST outbound webhook| GW
| Leg | Protocol | Auth | Direction | Data persisted |
|---|---|---|---|---|
| Meta ↔ Platform | HTTPS webhooks + Graph API | X-Hub-Signature-256 HMAC |
Bidirectional | None on platform (messages → SN) |
| Platform ↔ ServiceNow | REST (VA API async + Table API) | OAuth 2.0 client credentials or Message Auth token | Bidirectional | ServiceNow (cases, interactions) |
| Commerce ↔ Platform | REST + HTTPS webhooks | OAuth 2.0 / mTLS (TBD) | Bidirectional | Commerce (subscriber); platform transient |
| Platform ↔ OneTrust | REST | Collection point JWT + API key | Outbound + lookup | OneTrust (consent) |
| MoEngage → Platform | HTTPS webhook | HMAC shared secret | Inbound trigger | None (consent check via OT) |
| Platform → SMS BSP | REST | Provider API key | Outbound only | Delivery status aggregate only |
11.1 Meta WhatsApp Cloud API
SPH owns the WABA. QUICKSALES.AI registers as Meta Tech Provider / solution partner and configures webhooks on SPH's WABA.
Webhook Subscription (Platform Receives)
| Field | Value |
|---|---|
| Callback URL | https://api.sph-media.quicksales.ai/v1/webhooks/meta |
| Verify token | SPH-approved static token (Meta challenge handshake) |
| Subscribed fields | messages, message_template_status_update, phone_number_quality_update |
Inbound Webhook Payload (Simplified — Meta Cloud API)
{
"object": "whatsapp_business_account",
"entry": [{
"id": "WABA_ID",
"changes": [{
"field": "messages",
"value": {
"messaging_product": "whatsapp",
"metadata": { "phone_number_id": "PHONE_NUMBER_ID", "display_phone_number": "65XXXXXXXX" },
"contacts": [{ "wa_id": "6591234567", "profile": { "name": "Customer" } }],
"messages": [{
"from": "6591234567",
"id": "wamid.HBgLN...",
"timestamp": "1720412345",
"type": "text",
"text": { "body": "I have not received my newspaper today" },
"context": { "id": "wamid.OUTBOUND_REF", "from": "6598765432" }
}]
}
}]
}]
}
Processing steps: (1) Verify HMAC signature → (2) PCI redaction on text.body → (3) Resolve context.id for C2 notification reply → (4) Lookup subscriber via Commerce API using from (MSISDN) → (5) Sync redacted message to ServiceNow interaction → (6) AI process → (7) POST /{PHONE_NUMBER_ID}/messages reply.
Outbound Send (Utility Template — Payment Failed, RFP Journey 3)
POST https://graph.facebook.com/v21.0/{PHONE_NUMBER_ID}/messages
{
"messaging_product": "whatsapp",
"to": "6591234567",
"type": "template",
"template": {
"name": "payment_failed_v1",
"language": { "code": "en" },
"components": [{
"type": "body",
"parameters": [
{ "type": "text", "text": "07/07/26" }
]
}]
}
}
Context token for C2: Platform stores wamid of outbound message as context_token in ephemeral session (Redis TTL) — when customer replies, messages[].context.id links to payment_failed event payload from Commerce.
11.2 ServiceNow CSM — Primary Integration (D1, D2, B3, A1)
Architecture Decision: Primary Bot = QUICKSALES.AI
Per ServiceNow Virtual Agent Bot Integration API (Yokohama+), QUICKSALES.AI is the primary bot. ServiceNow CSM is the secondary system for live agents and persistent records.
| SN component | Table / record | Purpose |
|---|---|---|
| Provider Application | sys_cs_provider_application |
Channel identity; Inbound ID = our appInboundId |
| Message Auth | message_auth |
Static or hash token for inbound API verification |
| Outbound config | sn_va_as_service_outbound_configuration |
SN async callbacks to our webhook URL |
| Customer case | sn_customerservice_case |
Case per subscriber issue (e.g. INC-2026-0712 in RFP) |
| Interaction | interaction |
Messaging session; transcript fields |
| Knowledge | kb_knowledge |
B4 SN KB articles for RAG |
| AWA queue | awa_queue / work item |
D1 agent routing for escalations |
SPH IT Configuration Checklist (Week 1–2)
| Step | ServiceNow artifact | Action |
|---|---|---|
| 1 | Plugin com.glide.cs.chatbot |
Verify installed (Virtual Agent API) |
| 2 | sys_cs_provider_application |
Create "QUICKSALES.AI WhatsApp" provider; note Inbound ID |
| 3 | message_auth |
Configure static token; link to provider |
| 4 | sn_va_as_service_outbound_configuration |
Set outbound REST to https://api.sph-media.quicksales.ai/v1/webhooks/servicenow |
| 5 | OAuth entity | Create client credentials for Table API access |
| 6 | AWA | Map WhatsApp escalation to existing CS queue |
| 7 | CSM workspace | Enable async messaging channel for Agent Workspace |
VA Bot-to-Bot — Escalate to Live Agent (RFP Journey 1, UC-07)
POST https://{sph-instance}.service-now.com/api/sn_va_as_service/bot/integration
Authorization: Bearer {oauth_token}
Content-Type: application/json
{
"requestId": "qs-uuid-001",
"clientSessionId": "wa-6591234567-20260708",
"appInboundId": "{SPH_PROVIDER_INBOUND_ID}",
"emailId": "tan.wei.ming@email.com",
"action": "AGENT",
"isBotMessage": false,
"message": {
"type": "text",
"text": "Customer disputes delivery after 3 AI attempts. Needs agent.",
"displayName": "Customer"
},
"history": [
{ "isBotMessage": false, "type": "text", "value": "My paper wasn't delivered", "displayName": "Customer" },
{ "isBotMessage": true, "type": "text", "value": "I can help check delivery...", "displayName": "Bot" }
],
"contextVariables": {
"requester_session_language": "en",
"live_agent_only": "true",
"topic": "{AWA_QUEUE_TOPIC_SYS_ID}"
},
"customPayload": {
"sph_subscriber_id": "SUB-123456",
"sph_title": "Lianhe Zaobao",
"sph_intent": "delivery_complaint",
"pci_redacted": "true"
}
}
Note: history[] contains redacted messages only (A3). Raw card data never included.
ServiceNow Async Callback (Agent Reply → Platform → WhatsApp)
When agent types in Agent Workspace, SN POSTs to our outbound webhook:
{
"requestId": "sn-response-uuid",
"clientSessionId": "wa-6591234567-20260708",
"message": {
"type": "text",
"text": "I've contacted our delivery partner to expedite.",
"displayName": "Sarah Tan"
},
"isBotMessage": true,
"agent": true
}
Platform maps clientSessionId → WhatsApp to number → sends via Meta Graph API.
Table API — Persist Transcript (D2, B3)
PATCH https://{sph-instance}.service-now.com/api/now/table/interaction/{sys_id}
{
"work_notes": "[REDACTED] Customer: missed delivery\nAI: verified postal code 238801\nAI: offered redelivery\nCustomer: requests agent",
"channel": "whatsapp",
"u_pci_controls_applied": true
}
All messages (inbound, outbound, offline) written to interaction / linked sn_customerservice_case — not to vendor database.
11.3 SPH Commerce Backend — API Contract (Discovery-Dependent)
Critical dependency: Commerce is SPH's proprietary subscription system. Endpoints below are the contract we will finalize in Week 1 discovery against SPH's OpenAPI documentation. Journey mapping is from RFP verbatim.
RFP Journey → Commerce API Mapping
| RFP journey | Commerce capability required | RFP evidence |
|---|---|---|
| Delivery complaint | GET /delivery/{sub_id}/status, POST /delivery/{sub_id}/redelivery |
Journey 1: verify postal code, check delivery by 7:30 AM |
| Vacation suspend/extend | POST /subscriptions/{id}/suspension, PATCH .../suspension/{ref} |
Journey 2: CS-123456 reference number |
| Payment failure reply | GET /billing/{id}/status, POST /billing/payment-link |
Journey 3: sph.sg/updatecc, sph.sg/xRfU |
| Password reset option | POST /accounts/password-reset |
Journey 3: Option A |
| Payment update verify | GET /billing/{id}/payment-method/status |
Journey 3: "I have updated my card" |
| Doorstep delivery offer | GET /delivery/options, fee $10/month |
Journey 1: doorstep upsell |
Inbound Webhook — Commerce → Platform (C1)
POST https://api.sph-media.quicksales.ai/v1/webhooks/commerce
X-SPH-Signature: sha256={hmac_of_body}
{
"event_id": "evt_uuid",
"event_type": "payment_failed",
"timestamp": "2026-07-08T09:00:00+08:00",
"subscriber": {
"subscriber_id": "SUB-123456",
"msisdn": "6591234567",
"email": "tan.wei.ming@email.com",
"title": "Lianhe Zaobao Digital"
},
"payload": {
"amount": 28.90,
"currency": "SGD",
"due_date": "2026-07-07",
"payment_update_url": "https://sph.sg/updatecc"
}
}
Platform actions: (1) Idempotency check on event_id → (2) WA capability check on msisdn → (3) Send Meta utility template → (4) Store context_token in ephemeral session → (5) Log outbound record to ServiceNow via Table API → (6) If no WA, SMS fallback (C1).
Outbound Lookup — Platform → Commerce (B2 Auth)
GET /api/v1/subscribers/lookup?msisdn=6591234567
→ { subscriber_id, titles[], delivery_address_masked, auth_tier_required }
POST /api/v1/subscribers/verify
{ "subscriber_id": "SUB-123456", "postal_code": "238801" }
→ { "verified": true, "auth_tier": "T1" }
Data handling: Response used in-memory during session. Not persisted in vendor PostgreSQL (Principle 2).
11.4 OneTrust — Consent Integration (E1, E2, E3)
E1 requirement: "These information would be kept within OneTrust" — platform writes consent; does not store master record.
Opt-In at Conversation Close (E2) — Consent Receipt API
POST https://privacyportal.onetrust.com/request/v1/consentreceipts
Content-Type: application/json
{
"identifier": "6591234567",
"identifierType": "Phone",
"requestInformation": "{JWT_FROM_SPH_COLLECTION_POINT}",
"purposes": [{
"Id": "{SPH_WHATSAPP_MARKETING_PURPOSE_GUID}",
"TransactionType": "CONFIRMED"
}],
"interactionDate": "2026-07-08T07:52:00+08:00",
"dsDataElements": {
"sph_subscriber_id": "SUB-123456",
"sph_title": "Lianhe Zaobao",
"channel": "whatsapp"
}
}
Pre-Marketing Consent Check (F2, E1)
GET https://app.onetrust.com/api/consent/v2/datasubjects/6591234567/purposes
→ Check {SPH_WHATSAPP_MARKETING_PURPOSE_GUID} status == OPT_IN
Optional short-TTL cache (≤ 15 min) for batch campaign sends — not consent master record.
Opt-Out (E3) — STOP Keyword
{
"purposes": [{
"Id": "{SPH_WHATSAPP_MARKETING_PURPOSE_GUID}",
"TransactionType": "OPT_OUT"
}],
"withdrawnDate": "2026-07-08T10:00:00+08:00"
}
Discovery required: SPH OneTrust tenant hostname (prod/UAT), collection point JWT, purpose GUIDs for marketing vs utility.
11.5 Knowledge Integration — ServiceNow KB + Google Workspace (B4)
ServiceNow Knowledge Base
GET /api/now/table/kb_knowledge?sysparm_query=active=true^workflow_state=published^language=en
&sysparm_fields=sys_id,short_description,text,kb_category,meta
Indexed into vector DB (embeddings of article text only). Sync schedule: daily + on-demand re-index from Admin Portal.
Google Workspace (Option B)
| Source | API | Scope |
|---|---|---|
| Google Sites | Drive API files.export + Sites sitemap crawl |
Read-only service account |
| Google Docs | GET /drive/v3/files/{id}/export?mimeType=text/plain |
Shared drive IDs from SPH |
| Google Sheets (FAQ) | Export as CSV → chunk FAQ rows | Sheet IDs from SPH |
| Google Slides | Export as PDF → text extract | Product guides |
Exclusion list: SPH provides internal-only doc IDs to exclude from index (Discovery Q6.5).
11.6 MoEngage — Phase 2 Connected Channel (F1, F2)
Why not MoEngage native WhatsApp BSP connector? MoEngage's native connectors (Exotel, MSG91, etc.) send WhatsApp directly from MoEngage, bypassing our PCI redaction, OneTrust pre-check, and DNC scrub layer. SPH's RFP requires our platform to own WABA orchestration; MoEngage triggers campaigns into our platform.
Integration Pattern: MoEngage Connected App → QUICKSALES.AI
| Step | Component | Detail |
|---|---|---|
| 1 | MoEngage Connected App | SPH registers QUICKSALES.AI as custom Connected Channel |
| 2 | Channel Connector JSON | Defines our webhook URL + auth headers |
| 3 | Campaign action | MoEngage sends segment + template name on campaign fire |
| 4 | Platform pre-send | OneTrust consent ✅ → DNC scrub ✅ → Meta template send |
| 5 | Delivery callback | Platform POSTs delivery/read status to MoEngage tracking URL |
MoEngage Campaign Webhook (Inbound to Platform)
POST https://api.sph-media.quicksales.ai/v1/webhooks/moengage
X-MoEngage-Signature: {hmac}
{
"campaign_id": "winback_lapsed_30d",
"template_name": "cny_promo_2026",
"segment_id": "seg_uuid",
"recipients": [
{ "subscriber_id": "SUB-123456", "msisdn": "6591234567", "attributes": { "title": "ST", "lapse_days": 30 } }
]
}
Platform processing: For each recipient → OneTrust marketing consent check → PDPC DNC scrub → Meta marketing template send → aggregate delivery metrics back to MoEngage.
11.7 SMS Fallback + DNC (C1, F3)
SMS Fallback Interface (Provider TBD — Discovery Section 8)
POST {SMS_PROVIDER_URL}/messages
{
"to": "+6591234567",
"from": "SPHMedia",
"body": "[Action required] Your subscription payment failed. Update at https://sph.sg/updatecc by 07/07/26"
}
Triggered when: Commerce event fires AND Meta GET /{phone_number_id}/contacts returns no WhatsApp capability OR delivery fails after retry.
DNC Registry Scrub (F3)
Before Phase 2 marketing batch:
1. Extract MSISDN list from MoEngage payload
2. Submit to SPH's DNC check service (PDPC registry API or SPH internal scrub — TBD in discovery)
3. Exclude DNC-flagged numbers; audit log scrub result count (metadata only)
11.8 Integration Readiness Matrix
| Integration | Discovery doc needed | SPH owner | Sandbox required | Week target | Blocker if missing |
|---|---|---|---|---|---|
| Meta WABA | Business Manager access | Marketing/IT | Meta test number | W1 | Cannot send/receive WA |
| ServiceNow CSM | Instance URL, OAuth, provider setup | SN admin | UAT instance | W1 | Cannot file conversations (D2) |
| Commerce | OpenAPI spec | Commerce team | UAT API | W1 | Cannot build any RFP journey |
| OneTrust | Collection point JWT, purpose IDs | Legal/IT | UAT tenant | W3 | Cannot capture opt-in (E2) |
| Google KB | Drive service account, doc IDs | IT | N/A | W4 | Option B B4 gap |
| MoEngage | Connected App approval | Marketing | UAT workspace | W20 | Phase 2 blocked |
| SMS | Provider API credentials | IT/Telco | Test sender | W2 | C1 SMS fallback blocked |
| DNC | Scrub API or batch process | Legal | N/A | W20 | F3 blocked |
12. Security, PCI & Sensitive Data Controls
12.1 PCI DSS Alignment
While WhatsApp chat is not a card processing channel, SPH's requirement (A3) mandates PCI-aligned handling:
| Control | Implementation |
|---|---|
| No PAN storage | Platform never persists raw card numbers — anywhere |
| Detection at edge | Redaction before ServiceNow write; no raw payload in vendor DB |
| Agent protection | ServiceNow receives only redacted tokens ([REDACTED_CARD_NUMBER]) |
| RFP alignment | No raw card, expiry, or CVV in transcript, agent console, or SN case payload |
| Audit trail | Redaction events logged (timestamp, pattern type — not value) |
| Secure alternatives | Payment links generated by Commerce (PCI-compliant hosted page) |
12.2 Data Classification
| Classification | Examples | Handling |
|---|---|---|
| Restricted | PAN, CVV, NRIC | Detect → redact → never store (vendor or ServiceNow raw) |
| Confidential | Subscriber profile, billing | Fetched from Commerce API during session — not persisted in vendor DB |
| Internal | Session tokens, journey step, aggregated counts | Ephemeral cache (TTL) or config DB — no message text |
| Public | KB articles, template content | Vector index of SPH knowledge sources only |
12.3 Encryption
| Layer | Standard |
|---|---|
| In transit | TLS 1.3 for all API communications |
| At rest | AES-256 for platform configuration databases only (no customer transcripts) |
| Secrets | Vault-managed API keys and tokens |
| Webhook verification | Meta HMAC signature validation |
13. PDPA & Regulatory Compliance
13.1 Personal Data Protection Act (Singapore) Compliance
PDPA Obligation Mapping
| PDPA Obligation | Section | Our Compliance Measure |
|---|---|---|
| Consent Obligation | Sections 13–17 | OneTrust consent capture; explicit opt-in for marketing; utility messages under legitimate business purpose |
| Purpose Limitation | Section 18 | Data collected only for stated purpose (support, notifications, marketing with consent) |
| Notification Obligation | Section 20 | Privacy notice link in first interaction; opt-in prompt explains data use |
| Access & Correction | Sections 21–22 | Subscriber can request data access via agent; Commerce is source of truth |
| Accuracy Obligation | Section 23 | Commerce backend provides authoritative subscriber data |
| Protection Obligation | Section 24 | Encryption, access controls, redaction, no unnecessary retention |
| Retention Limitation | Section 25 | Conversation retention managed by ServiceNow (SPH policy). Vendor retains only ephemeral session cache (TTL ≤ 72 hrs) and aggregated analytics — no message archive. |
| Transfer Limitation | Section 26 | All data processing in Singapore region; no cross-border transfer without SPH approval |
| Data Breach Notification | Section 26D | Incident response plan with 72-hour notification to SPH PDPO |
Consent Model
Data Processing Agreement (DPA)
We will execute a DPA with SPH Media covering:
- Data processor obligations under PDPA
- Sub-processor disclosure (cloud hosting, SMS gateway)
- Data residency in Singapore
- Right to audit
- Data return/deletion on contract termination
- Breach notification procedures
Do Not Call (DNC) Registry — Phase 2
| Step | Action |
|---|---|
| 1 | MoEngage triggers campaign with phone list |
| 2 | Platform submits numbers to DNC registry check |
| 3 | Numbers on DNC list excluded from send |
| 4 | Audit log of scrub results retained |
| 5 | Only consented + DNC-clear numbers receive marketing messages |
Requirement F3 compliance.
13.2 Data Residency & Storage Locations
| Data Type | System of record | Vendor platform handling |
|---|---|---|
| WhatsApp conversation transcripts | ServiceNow (SPH) | Real-time redact → sync to SN → discard from vendor |
| Subscriber PII (name, address, billing) | Commerce (SPH) | Transient API lookup during active session — not written to vendor DB |
| Consent records | OneTrust (SPH) | Write via API; OneTrust is master — optional pre-send cache (TTL ≤ 15 min) only |
| Active session state (routing step, context token) | — | Redis with TTL 24–72 hours — no message body |
| Platform configuration (journeys, templates, admin) | Vendor config DB | Operational settings only — no customer data |
| Knowledge embeddings | Vendor vector DB | SPH KB article content only — not customer chats |
| Analytics | Vendor aggregates | Counts and rates only — e.g. resolution %, volume — no message text |
Principle 2 compliance: Customer data resides exclusively in SPH Media systems. The vendor platform is a transient processing layer — it routes, redacts, and orchestrates, then persists conversation records to ServiceNow and discards message content from its own systems.
14. WhatsApp Business Policy Compliance
SPH and QUICKSALES.AI share a common concern: will Meta restrict or block the SPH WhatsApp Business Account (WABA)? This section explains the risk honestly, why Phase 1 support is a policy-safe use case, and the controls we build to protect the number.
14.1 Plain English — Will Meta Block SPH?
| Concern | Answer |
|---|---|
| "We don't know if Meta will approve this" | SPH already operates a verified business. Customer-initiated support on WhatsApp is an explicitly permitted use case under Meta's Business Messaging Policy. SPH owns the WABA; we implement within Meta's rules — we do not bypass them. |
| "What if subscribers report us as spam?" | Support conversations start because the customer messaged SPH first or replied to a transactional notification they requested (delivery, payment, renewal). We do not cold-message subscribers in Phase 1. Reports and blocks are monitored; spike alerts trigger volume reduction. |
| "What about outbound notifications?" | Only Utility or Authentication templates (payment failed, delivery update, OTP) — never Marketing in Phase 1 without consent. Every outbound send is tied to a Commerce event. Marketing campaigns are Phase 2 with OneTrust opt-in only. |
| "Can we lose the number mid-pilot?" | Meta restricts numbers when quality rating drops (too many blocks/reports) or policy violations occur (unsolicited marketing, wrong template category, sending outside 24-hour window without template). Our platform enforces these rules before messages leave the gateway — violations are blocked in software, not discovered by Meta after the fact. |
14.2 Why Phase 1 Support Is Low Risk
Meta treats messaging differently depending on who started the conversation and what category the message falls under:
| Scenario | Who initiates | Meta policy treatment | SPH Phase 1? |
|---|---|---|---|
| Inbound support — subscriber asks about delivery, billing, account | Customer | ✅ Permitted. Free-form replies allowed for 24 hours after customer's last message. | ✅ Primary use case |
| Transactional notification — payment failed, paper not delivered | SPH (template) | ✅ Permitted with Utility template approved by Meta. Customer can reply; 24-hour window opens on reply. | ✅ Included (C1/C2) |
| OTP / authentication | SPH (template) | ✅ Permitted with Authentication template. | ✅ Tiered auth (B2) |
| Marketing / promotions — offers, winback, upsell | SPH (template) | ⚠️ Requires Marketing template + explicit opt-in. Higher block risk if sent without consent. | ❌ Phase 2 only (F1/F2) |
| Unsolicited bulk messaging — cold outreach to subscriber list | SPH | ❌ Prohibited. Primary cause of number restriction. | ❌ Never. Platform blocks at send time. |
Key point for SPH stakeholders: When a subscriber messages SPH for support, Meta expects SPH to reply. That is not spam — it is the intended use of WhatsApp Business API for customer service. Risk increases only when SPH (or a vendor) sends messages the customer did not ask for, uses the wrong template category, or ignores opt-out requests.
14.3 What Meta Can Restrict — and Why
| Meta action | Typical trigger | Our prevention |
|---|---|---|
| Quality rating → Yellow | Elevated user blocks or "Report spam" on outbound messages | WABA Health dashboard (A6); pause outbound volume; review template content; no marketing in Phase 1 |
| Quality rating → Red | Sustained high block rate; policy complaints | Automatic outbound throttle; escalate to SPH + QUICKSALES.AI war room; SMS fallback for critical Utility only |
| Messaging limit reduction | New number; sudden volume spike; poor quality history | 21-day warm-up playbook (Screen 6); tier-aware rate limiting at gateway |
| Template rejection | Promotional language in Utility template; missing opt-out; wrong category | Template pre-review against Meta guidelines before submission; category enforcement in template manager |
| 24-hour window violation | Free-form agent reply sent >24 hrs after customer's last message | Session clock on every conversation; UI blocks free-form send; prompts agent to use approved template or wait for customer reply |
| Number flag / restriction | Repeated policy violations; unverified business; prohibited content | PCI redaction; no prohibited content categories; SPH Business Verification support; audit trail |
14.4 Platform Enforcement (Before Meta Sees a Message)
QUICKSALES.AI acts as a policy gate between SPH operations and Meta's API. Messages that would violate policy are blocked in software with a clear error to the agent or admin — not sent and then penalised by Meta.
| Control | What it does |
|---|---|
| 24-hour session tracker | Every conversation stores last customer message timestamp. Free-form replies disabled when window expired. |
| Template category lock | Phase 1 outbound queue accepts only Utility + Authentication templates. Marketing templates disabled until Phase 2 flag + OneTrust consent check. |
| Consent pre-send gate | Phase 2 marketing: API call to OneTrust before every campaign send. No consent = message blocked. |
| Opt-out processor | STOP / UNSUBSCRIBE keywords → immediate opt-out in OneTrust + block list. No further outbound to that number. |
| Rate limiter | Aligned to Meta messaging tier + warm-up daily caps. Prevents accidental volume spikes. |
| Quality monitor | Polls Meta phone_number_quality_update webhook. Dashboard shows GREEN/YELLOW/RED with recommended actions. |
| Agent guardrails | ServiceNow agents reply through platform rules — cannot bypass template requirement outside 24-hour window. |
14.5 WABA Warm-Up and Pilot Ramp
New or reactivated numbers must not jump to full volume on day one. Our built-in 21-day warm-up playbook (Admin Portal → WABA Health Centre) guides SPH through a safe ramp:
| Week | Focus | Volume guidance |
|---|---|---|
| Week 1 | Inbound support only; test Utility templates with internal team | Low outbound; monitor quality daily |
| Week 2 | Enable transactional notifications to small subscriber cohort | Gradual increase per Meta tier; watch block rate |
| Week 3 | Expand notification coverage; full inbound AI journeys live | Approach tier capacity only if quality stays GREEN |
| Post warm-up | Steady-state operations; Phase 2 marketing only after opt-in base established | Marketing volume capped by consent audience size |
14.6 If Quality Rating Drops — Escalation Playbook
| Rating | Immediate action | SPH owner |
|---|---|---|
| GREEN | Normal operations. Weekly quality review in governance meeting. | Operations lead |
| YELLOW | Pause all non-essential outbound for 48 hrs. Review last 7 days templates and block reasons. Reduce notification batch size 50%. | Operations + QUICKSALES.AI |
| RED | Stop outbound marketing immediately. Utility-only for critical Commerce events. War room within 4 hours. Meta Business Support ticket if needed. SMS fallback for payment/delivery alerts. | SPH sponsor + QUICKSALES.AI + Legal |
14.7 Policy Requirement Matrix
| Policy Requirement | Our Implementation |
|---|---|
| 24-hour messaging window | Session tracking; template messages for out-of-window; agent UI blocks violations |
| Template categories | Utility for transactional; marketing for campaigns (Phase 2 + consent); authentication for OTP |
| Opt-in for marketing | E2: explicit opt-in at conversation close; OneTrust master record |
| Opt-out handling | STOP keyword + OneTrust revocation within 24 hours; platform block list |
| Quality rating maintenance | A6: health dashboard, proactive monitoring, warm-up, Yellow/Red playbook |
| Message frequency caps | E1: marketing frequency controls via OneTrust; gateway rate limiter |
| Business verification | SPH-owned WABA in SPH Meta Business Manager; verification support included |
| User-initiated support | Phase 1 primary channel; AI + agent replies only within active sessions |
Honest caveat: Meta retains final authority over any WABA. No vendor can guarantee zero restrictions. What we guarantee is policy-by-design architecture, pre-send enforcement, continuous quality monitoring, and a documented escalation playbook — so SPH is never surprised and never dependent on hope alone.
15. Analytics, KPIs & Pilot Success Metrics
15.1 Dashboard Modules
Executive Dashboard
- Total conversations (daily/weekly/monthly)
- AI resolution rate trend
- CSAT score trend
- Channel shift (% of digital support on WhatsApp)
- Cost per resolution (AI vs agent)
Operations Dashboard
- Live queue depth and wait times
- Escalation rate by journey type
- Agent handoff volume
- Offline message backlog (from ServiceNow queue metrics)
- First response time (AI and agent)
Notification Dashboard
- Delivery rate (WA and SMS)
- Read rate
- Click-through rate (link clicks)
- Conversion rate (payment updated after notification)
- SMS fallback rate
Compliance Dashboard
- Consent opt-in rate
- Opt-out volume
- Redaction events
- DNC scrub results (Phase 2)
- Template quality scores
WABA Health Dashboard
- Quality rating (Green/Yellow/Red)
- Messaging tier and limit utilization
- Phone number status
- Warm-up progress
- Blocked/flagged alerts
15.2 Pilot Targets (3 Months)
| KPI | Baseline | Target | Measurement |
|---|---|---|---|
| AI resolution rate | 0% | ≥ 50% | Conversations closed without agent escalation |
| WhatsApp CSAT | 50–60% (web chat) | ≥ 80% | Post-conversation 1–5 rating |
| Chat channel share | 15% | ≥ 30% | WA conversations / total digital support |
| Notification delivery | — | ≥ 95% | Delivered / sent |
| Consent opt-in rate | 0% | Track & optimize | Opt-ins / eligible conversations |
| Escalation rate | — | ≤ 50% | Monitor and tune AI |
16. Implementation Methodology & Project Plan
16.1 Methodology
We follow an Agile delivery model with 2-week sprints, fortnightly demos to SPH stakeholders, and a 3-month pilot measurement window.
16.1.1 Week 1 — Technical Discovery Workshop (Removes All TBDs)
Before development starts, SPH completes Technical Discovery (included in this package). QUICKSALES.AI runs a structured workshop to convert SPH inputs into signed integration contracts.
| Day | Activity | SPH attendees | Output |
|---|---|---|---|
| D1 | Kickoff + pack review | Sponsor, PM, all tech leads | RACI, access request list |
| D2 | Commerce API contract workshop | Commerce team, integration dev | Signed endpoint mapping; OpenAPI imported |
| D3 | ServiceNow CSM setup | SN admin, AWA lead | UAT provider app; OAuth credentials; VA API smoke test |
| D4 | OneTrust + SMS + network | Legal, IT, telco | Purpose GUIDs; SMS adapter spec; VPN/firewall rules |
| D5 | Contract sign-off + updated spec | PM, tech leads | Proposal Section 11 updated with real URLs; sprint 1 backlog |
Critical inputs SPH must provide (Integration Pack sections)
| # | Input | Pack section | Replaces in proposal |
|---|---|---|---|
| 1 | Commerce OpenAPI / Swagger + sandbox URL | A | Section 11.3 illustrative endpoints |
| 2 | ServiceNow instance URL + version + UAT OAuth | B | Section 11.2 {sph-instance} placeholders |
| 3 | OneTrust tenant + purpose GUIDs + collection point JWT | C | Section 11.4 purpose {GUID} placeholders |
| 4 | SMS provider name + API credentials | D | Section 11.7 provider TBD |
| 5 | MoEngage workspace + Connected App approval | E | Section 11.6 Phase 2 trigger |
Until SPH returns the Integration Pack, Section 11 endpoints marked TBD or illustrative remain contract proposals — not production URLs. This is intentional and technically honest.
Post-discovery deliverables (QUICKSALES.AI → SPH)
| Deliverable | Format |
|---|---|
| Commerce API Integration Specification v1.0 | PDF + OpenAPI merge request |
| ServiceNow Integration Runbook | Provider app config steps + test scripts |
| OneTrust Consent Flow Diagram | With SPH purpose IDs |
| Updated Technical Proposal Section 11 | Updated HTML proposal — no TBD on confirmed items |
| Integration test checklist | Per-system pass/fail for UAT |
16.2 Project Timeline — Option B (Professional)
Total duration: ~7 months to pilot go-live (Option B); ~5 months (Option A)
16.3 Sprint Plan Summary — Option A (Essential)
| Sprint | Weeks | Deliverables |
|---|---|---|
| S1 | 1–2 | Discovery, architecture sign-off, environment setup |
| S2 | 3–4 | WABA setup, gateway, webhook, basic SN integration |
| S3 | 5–6 | AI engine, 4 core journeys, postal code auth |
| S4 | 7–8 | 4 more journeys, redaction layer, OTP auth |
| S5 | 9–10 | Notification processor, 3 transactional templates, SMS fallback |
| S6 | 11–12 | OneTrust basic consent, CSAT close flow |
| S7 | 13–14 | Analytics core dashboard, SIT |
| S8 | 15–16 | UAT, pilot go-live, hypercare begins |
16.4 Sprint Plan Summary — Option B (Professional)
| Sprint | Weeks | Deliverables |
|---|---|---|
| S1–S2 | 1–4 | Discovery, full architecture, all integration discovery |
| S3–S4 | 5–8 | Platform foundation, SN full integration, Commerce full API |
| S5–S7 | 9–14 | AI engine, 15+ journeys, multilingual, Google KB |
| S8–S9 | 15–18 | Redaction, full auth tiers, template lifecycle |
| S10–S11 | 19–22 | Notifications (all events), contextual reply, OneTrust full |
| S12–S13 | 23–26 | Analytics full suite, WABA health, admin portal |
| S14–S15 | 27–30 | MoEngage integration, DNC scrubbing, Phase 2 templates |
| S16–S17 | 31–34 | SIT, UAT, training, pilot go-live |
| S18–S29 | 35–46 | 3-month hypercare and KPI optimization |
17. Project Team & Governance
17.1 QUICKSALES.AI Leadership Team
QUICKSALES.AI brings a dedicated executive and delivery team with deep expertise in WhatsApp automation, AI-powered customer engagement, and enterprise system integration.
| Name | Role | Title | Engagement Responsibility |
|---|---|---|---|
| Pei Han | CEO | Chief Executive Officer | Executive sponsorship, strategic direction, and senior client relationship management |
| Dave | CSO | Chief Solution Officer | End-to-end solution architecture, integration design, and alignment with SPH enterprise systems |
| Eddy | CPO | Chief Product Officer | Product vision, customer journey design, and WhatsApp experience quality |
| Andy | CAITO | Chief AI Technology Officer | AI virtual agent, multilingual NLU, knowledge retrieval, and model strategy |
| Zen | BD Manager | Business Development Manager | Account management, proposal delivery, and day-to-day stakeholder coordination |
17.2 Proposed Delivery Team Structure
17.3 Governance Model
| Meeting | Frequency | Participants | Purpose |
|---|---|---|---|
| Steering Committee | Monthly | Sponsors, PM | Strategic decisions, budget, scope |
| Project Status | Weekly | PM, leads, SPH IT | Progress, risks, blockers |
| Sprint Demo | Fortnightly | All + SPH CS | Show working software |
| Technical Design Review | Per milestone | Tech leads, SPH IT | Architecture decisions |
| UAT Review | End of UAT | SPH CS, QA | Acceptance sign-off |
17.4 SPH Media Responsibilities
| Item | Owner | Timeline |
|---|---|---|
| ServiceNow API access + plugin install | SPH IT | Week 1–2 |
| Commerce API documentation + sandbox | SPH Commerce | Week 1–2 |
| OneTrust API access | SPH Legal/IT | Week 3–4 |
| WABA ownership + Meta Business verification | SPH Marketing/IT | Week 1–3 |
| Google Workspace API access | SPH IT | Week 4–6 |
| Test subscriber accounts | SPH CS | Week 5 |
| UAT testers (5–8 agents) | SPH CS | Week 13+ |
| PDPA/DPA sign-off | SPH Legal | Week 2 |
| MoEngage access (Option B) | SPH Marketing | Week 20+ |
18. Competitive Landscape & Vendor Background
This section provides a concise overview of the competing solution vendors who submitted proposals to SPH Media for this engagement, as well as the technology ecosystem partners that form part of SPH's existing or planned stack. Understanding both dimensions helps SPH evaluate total cost of ownership, integration fit, and delivery risk.
18.1 Competing Solution Vendors (RFP Quotes)
The following vendors have submitted commercial proposals for the WhatsApp Customer Engagement Platform. Profiles below are based on publicly available positioning and typical delivery models.
Vendor X — Enterprise Full Suite
| Attribute | Background |
|---|---|
| Vendor profile | Large enterprise customer engagement / CPaaS provider with global footprint and established WhatsApp Business Solution Provider (BSP) partnerships |
| Typical strengths | Broad omnichannel suite (WhatsApp, SMS, email, voice); mature agent desktop; enterprise SLAs; pre-built connectors to major CRMs; strong brand recognition in telco and banking sectors |
| Typical delivery model | Licensed platform + professional services; often 12–18 month enterprise rollout with dedicated account team |
| Relevance to SPH | Capable of handling high-volume messaging and multi-brand routing; may offer packaged "digital engagement" modules beyond WhatsApp |
| Considerations for SPH | Premium pricing tier; risk of over-licensing features SPH does not need; may require SPH to adapt workflows to vendor's product rather than a bespoke ServiceNow + Commerce + OneTrust architecture; longer time-to-value for a focused pilot |
Vendor Y — Mid-Range Platform
| Attribute | Background |
|---|---|
| Vendor profile | Regional conversational messaging or WhatsApp-first platform vendor, often headquartered in APAC with Singapore presence |
| Typical strengths | WhatsApp-native chatbot builder; faster initial deployment; competitive mid-market pricing; template management and basic analytics out of the box |
| Typical delivery model | SaaS subscription + implementation package; 3–6 month delivery for standard use cases |
| Relevance to SPH | Suitable for marketing-led or support-lite WhatsApp programmes; good for broadcast and simple FAQ deflection |
| Considerations for SPH | May not fully cover RFP items such as ServiceNow CSM agent handoff (VA Bot-to-Bot), PCI redaction, OneTrust consent sync, Commerce order journeys, Google KB integration, or Phase 2 MoEngage orchestration without significant custom work or scope exclusions |
QUICKSALES.AI — Positioning vs. Competitors
| Dimension | Vendor X | Vendor Y | QUICKSALES.AI Option A | QUICKSALES.AI Option B |
|---|---|---|---|---|
| Pricing tier | Premium enterprise | Mid-market | Competitive pilot entry | Full-scope mid-market |
| Architecture fit | Generic enterprise suite | WhatsApp-centric SaaS | Purpose-built middleware for SPH stack | Full RFP + Phase 2 foundation |
| ServiceNow CSM integration | Via standard connector (may need customisation) | Limited / add-on | Native VA Bot-to-Bot design | Native + full agent workspace |
| Commerce / OneTrust / Google KB | Custom PS scope | Often out of scope | Core Phase 1 | Full coverage |
| AI orchestration & PCI | Varies by module | Basic chatbot | Dedicated AI agent + redaction layer | Same + advanced analytics |
| Time to pilot | Longer (enterprise rollout) | Moderate | ~16 weeks | ~24 weeks |
| Best for SPH if… | SPH wants a global omnichannel suite and budget is not constrained | SPH needs a quick, WhatsApp-only pilot with limited backend integration | SPH wants validated Phase 1 pilot at focused scope | SPH wants full RFP compliance with SPH-tailored architecture |
Note: Vendor X and Vendor Y are labelled as submitted in SPH's commercial evaluation. QUICKSALES.AI recommends SPH's procurement team map these labels to named vendors in the internal scorecard. This proposal focuses on capability and value alignment rather than disparagement of any competitor.
18.2 SPH Technology Ecosystem — Integration Summary
Full technical specification: Section 11 (API endpoints, JSON payloads, ServiceNow table mappings, discovery checklist).
| Vendor | SPH system of record for… | Integration API (specific) | QUICKSALES.AI integration role |
|---|---|---|---|
| Meta | WhatsApp channel delivery | Graph API v21+ /messages, webhooks messages + message_template_status_update |
WABA webhook owner; template submit; quality monitoring |
| ServiceNow CSM | Cases, agent workspace, conversations (D2), SN KB (B4) | POST /api/sn_va_as_service/bot/integration (AGENT action); Table API sn_customerservice_case, interaction, kb_knowledge |
Primary bot; SN = secondary for agents + persistent transcript |
| Commerce | Subscriber, billing, delivery, payment links | REST + HMAC webhooks — confirm in Integration Pack A. | Journey execution; C1 notifications; B2 auth |
| OneTrust | Consent (E1: "kept within OneTrust") | POST /request/v1/consentreceipts; GET /api/consent/v2/datasubjects/{id}/purposes |
E2 opt-in write; E3 opt-out; F2 pre-send marketing check |
| Google Workspace | Knowledge content (B4) | Drive API v3 export; Sites crawl | RAG index — article embeddings only |
| MoEngage | Campaign orchestration (F1) | Connected Channel webhook → our API | Phase 2 trigger; we own WABA send (not MoEngage native BSP) |
| SMS BSP | SMS delivery (C1 fallback) | Provider REST — TBD (Discovery Section 8) | Fallback when WA unavailable |
| PDPC DNC | Do-not-call compliance (F3) | Registry scrub API/batch — TBD | Pre-marketing number scrub |
Public context: SPH Media uses ServiceNow (with SGITAL) for ITSM and contact centre operations, and AWS for cloud workloads (iTnews, 2024). CSM module usage for customer support is per RFP; instance details confirmed in discovery.
18.3 Vendor Landscape Summary
Enterprise suite"] VY["Vendor Y
Mid-range platform"] QS["QUICKSALES.AI
SPH-tailored middleware"] end subgraph Ecosystem["SPH Technology Ecosystem"] META["Meta WhatsApp"] SN["ServiceNow CSM"] COM["Commerce Backend"] OT["OneTrust"] GKB["Google KB"] MOE["MoEngage"] SMS["SMS Gateway"] end QS --> META QS --> SN QS --> COM QS --> OT QS --> GKB QS --> MOE QS --> SMS VX -.->|"Generic connectors"| SN VY -.->|"Limited depth"| META
Key takeaway for SPH: Vendor X optimises for enterprise breadth; Vendor Y optimises for speed and simplicity with integration gaps; QUICKSALES.AI optimises for SPH's specific architecture — ServiceNow-centric agents, Commerce-backed journeys, OneTrust compliance, and AI orchestration.
19. Commercial Proposal — Scope & Delivery Options
Note: This section defines scope and delivery structure. Full commercial pricing is in the Pricing quotation (SGD, exclusive of GST). Final contract value may be adjusted after discovery workshop if scope changes.
19.1 Delivery Options Overview
| Option | Scope summary | Timeline | Estimated effort |
|---|---|---|---|
| Option A — Essential | Phase 1 pilot — 8 journeys, core integrations | ~5 months | ~128 mandays |
| Option B — Professional | Full Phase 1 + Phase 2 foundation — all RFP items | ~7 months | ~304 mandays |
19.2 Option A — Essential
Scope Summary
Phase 1 pilot-ready platform with 8 priority AI journeys, core integrations, and 3-month hypercare.
Included
| Category | Deliverables |
|---|---|
| Platform | Gateway, session manager, AI engine, redaction layer, auth (T0–T2) |
| Journeys | 8 core: delivery complaint, vacation suspend/extend, payment failure reply, payment link, subscription status, general FAQ, live agent escalation, opt-in/opt-out |
| Integrations | ServiceNow (VA API + case sync), Commerce (core APIs), OneTrust (basic consent) |
| Notifications | All 5 C1 transactional types (Section 9.1.1) + SMS fallback |
| Analytics | Core KPI dashboard (resolution rate, CSAT, volume, notification delivery) |
| WABA | Setup support, basic health monitoring |
| Languages | English + Simplified Chinese |
| Knowledge | ServiceNow KB only |
| Hypercare | 3 months post go-live |
| Training | 1 admin session + 1 agent briefing document |
Excluded (Available as Add-On)
- Google Workspace knowledge connector
- Malay + Tamil language support
- MoEngage / Phase 2 marketing
- DNC scrubbing
- Full template lifecycle manager
- Full WABA warm-up automation
- Extended journeys beyond 8
Effort Breakdown — Option A
| Role | Mandays |
|---|---|
| Project Manager | 16 |
| Business Analyst | 12 |
| Technical Lead / Architect | 14 |
| Backend Developer | 32 |
| AI/ML Engineer | 20 |
| Integration Specialist | 16 |
| Frontend Developer | 8 |
| QA Engineer | 12 |
| DevOps Engineer | 8 |
| Total | 128 mandays |
19.3 Option B — Professional
Scope Summary
Full RFP compliance for Phase 1 and Phase 2 foundation. All 15+ journeys, all integrations, all languages, MoEngage marketing, DNC scrubbing.
Included
| Category | Deliverables |
|---|---|
| Platform | All 9 components (full build) |
| Journeys | 15+ AI journeys covering all RFP scenarios + extended use cases |
| Integrations | ServiceNow (full), Commerce (full), OneTrust (full), Google Workspace, MoEngage, SMS, DNC |
| Notifications | All 6 transactional event types + contextual reply |
| Templates | Full lifecycle manager with Meta sync |
| Analytics | Full dashboard suite (executive, ops, notification, compliance, WABA health) |
| WABA | Full health monitoring + warm-up strategy tooling |
| Languages | EN, ZH-CN, ZH-TW, MS, TA (understand all; reply EN/ZH-CN) |
| Knowledge | ServiceNow KB + Google Sites/Docs/Sheets/Slides |
| Phase 2 | MoEngage connector, DNC scrubbing, marketing template support |
| Hypercare | 3 months post go-live with KPI optimization |
| Training | 2 admin sessions + 2 agent workshops + documentation |
Effort Breakdown — Option B
| Role | Mandays |
|---|---|
| Project Manager | 32 |
| Business Analyst | 24 |
| Technical Lead / Architect | 28 |
| Backend Developer | 64 |
| AI/ML Engineer | 40 |
| Integration Specialist | 36 |
| Frontend Developer | 24 |
| QA Engineer | 28 |
| DevOps Engineer | 16 |
| Security/Compliance Consultant | 12 |
| Total | 304 mandays |
19.4 Side-by-Side Comparison
| Capability | Option A | Option B |
|---|---|---|
| AI Journeys | 8 | 15+ |
| Languages (understand) | EN, ZH-CN | EN, ZH-CN, ZH-TW, MS, TA |
| Knowledge sources | SN KB | SN KB + Google Workspace |
| Transactional notifications | 3 templates | 6 event types |
| Template lifecycle manager | Basic | Full |
| WABA health & warm-up | Basic monitoring | Full dashboard + warm-up |
| OneTrust integration | Basic opt-in/out | Full governance + frequency caps |
| MoEngage / Phase 2 | ❌ | ✅ |
| DNC scrubbing | ❌ | ✅ |
| Analytics dashboards | Core KPIs | Full suite (5 modules) |
| Admin portal | Basic | Full |
| PCI redaction | ✅ | ✅ |
| ServiceNow integration | ✅ Core | ✅ Full |
| SMS fallback | ✅ | ✅ |
| Mandays | 128 | 304 |
| Timeline to go-live | ~5 months | ~7 months |
| Hypercare | 3 months | 3 months |
19.5 Payment Milestones (Structure)
Payment amounts will be confirmed in the separate quotation. Milestone structure:
Option A
| Milestone | % | Trigger |
|---|---|---|
| Contract signing | 30% | Signed agreement |
| Platform foundation complete | 25% | Gateway + SN integration demo |
| UAT sign-off | 25% | SPH UAT acceptance |
| Pilot go-live | 20% | Production launch |
| Total | 100% |
Option B
| Milestone | % | Trigger |
|---|---|---|
| Contract signing | 25% | Signed agreement |
| Phase 1 foundation complete | 20% | Core platform + integrations demo |
| Phase 1 feature complete | 20% | All journeys + notifications demo |
| UAT sign-off | 20% | SPH UAT acceptance |
| Pilot go-live + Phase 2 ready | 15% | Production launch with MoEngage |
| Total | 100% |
19.6 Optional Add-Ons (Scope)
| Add-On | Estimated effort | Available for |
|---|---|---|
| Google KB connector | ~24 mandays | Option A |
| Malay + Tamil language pack | ~20 mandays | Option A |
| MoEngage + Phase 2 marketing | ~60 mandays | Option A |
| DNC scrubbing service | ~10 mandays | Option A |
| Additional AI journey (per journey) | ~6–8 mandays | Both |
| Extended hypercare (per month) | ~8 mandays | Both |
| Dedicated Singapore private cloud tenant (annual) | — | Both |
Clarification: Dedicated cloud tenant means an isolated cloud environment for enhanced data residency — not on-premise hardware. Access remains via web browser.
19.7 Ongoing Costs (Post-Implementation — Categories)
| Category | Billing model | Notes |
|---|---|---|
| Platform hosting & maintenance | Monthly subscription | Cloud hosting in Singapore — Admin Portal, platform services, backups, patches |
| Meta WhatsApp conversation fees | Pass-through | Per Meta's published rates |
| SMS gateway | Pass-through | Per message, via SPH's telco/CPaaS contract |
| LLM API usage | Pass-through or bundled tier | Volume-dependent |
| Support SLA (post-hypercare) | Monthly (optional) | Business hours or extended coverage tiers |
Specific monthly figures will be provided in the commercial quotation.
20. Service Level Agreement & Support
20.1 SLA — Pilot Period (Included in Both Options)
| Metric | Target |
|---|---|
| Platform availability | 99.5% (business hours) |
| Webhook processing latency | < 2 seconds (p95) |
| AI first response | < 3 seconds |
| Agent handoff initiation | < 5 seconds |
| Notification dispatch (event to send) | < 30 seconds |
| Critical bug fix | 4 business hours |
| High bug fix | 1 business day |
| Medium bug fix | 3 business days |
20.2 Hypercare (3 Months Post Go-Live)
| Activity | Detail |
|---|---|
| Dedicated support channel | Slack/Teams + email |
| Weekly KPI review | AI resolution, CSAT, escalation analysis |
| AI tuning | Intent model refinement based on live data |
| Journey optimization | Flow adjustments based on drop-off analysis |
| Template optimization | A/B testing of notification templates |
| On-call support | Business hours (9 AM – 6 PM SGT) |
20.3 Post-Hypercare Support (Optional)
| Tier | Coverage |
|---|---|
| Standard | Business hours support, 99.5% uptime target |
| Premium | Extended hours (8 AM – 10 PM SGT), 99.9% uptime target, dedicated customer success contact |
Monthly fees to be quoted separately.
21. Risk Management
| # | Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|---|
| R1 | Commerce API not ready / undocumented | Medium | High | Early discovery sprint; API contract workshop Week 1 |
| R2 | ServiceNow plugin/version incompatibility | Low | High | Version check in discovery; VA API compatibility test Week 2 |
| R3 | WABA quality rating drops or Meta restricts number | Medium | High | Phase 1 = user-initiated support only; 21-day warm-up; pre-send policy gate; Yellow/Red playbook (Section 14.6); no Phase 1 marketing |
| R4 | AI resolution rate below 50% target | Medium | Medium | Iterative tuning during hypercare; fallback to agent |
| R5 | Meta template rejection | Medium | Low | Pre-review against Meta guidelines; backup templates |
| R6 | PDPA consent flow rejection by Legal | Low | Medium | Early Legal review of consent UX; OneTrust alignment |
| R7 | Google Workspace access restrictions | Medium | Medium | Option A excludes; Option B requires IT access Week 4 |
| R8 | Low subscriber WhatsApp adoption | Medium | Medium | SMS fallback; SPH marketing to promote channel |
| R9 | OneTrust integration complexity | Low | Medium | Use standard Consent Receipt API; early POC |
| R10 | MoEngage API changes (Phase 2) | Low | Low | Abstract campaign trigger interface |
22. Assumptions & Dependencies
22.1 Assumptions
- SPH Media owns the WhatsApp Business Account and Meta Business Manager
- ServiceNow instance is Zurich release or later with CSM and Agent Workspace licensed
- Commerce backend exposes REST APIs for subscriber, billing, and delivery operations
- OneTrust is SPH's system of record for consent; API access will be provisioned
- SPH provides test environments for ServiceNow, Commerce, and OneTrust within 2 weeks of kickoff
- SPH CS team provides journey content (prompts, business rules) within sprint timelines
- Meta template approval timelines (24–72 hours) are outside our control
- SMS gateway account is provisioned by SPH or jointly
- All persistent customer data (conversations, subscriber records, consent) remains in SPH systems (ServiceNow, Commerce, OneTrust); vendor platform stores only ephemeral session cache and operational configuration
- SPH web chat channel remains unchanged
22.2 Dependencies
23. Appendices
Appendix A: Glossary
| Term | Definition |
|---|---|
| WABA | WhatsApp Business Account |
| CSM | Customer Service Management (ServiceNow) |
| AWA | Advanced Work Assignment (ServiceNow) |
| VA | Virtual Agent (ServiceNow) |
| CCIF | Conversational Custom Chat Integration Framework |
| RAG | Retrieval-Augmented Generation |
| PAN | Primary Account Number (credit card) |
| PDPA | Personal Data Protection Act (Singapore) |
| DNC | Do Not Call Registry (Singapore) |
| OTP | One-Time Password |
| CSAT | Customer Satisfaction Score |
Appendix B: RFP Requirement Traceability Index
| RFP Ref | Section | Use Case | Option A | Option B |
|---|---|---|---|---|
| A1 | Self-service & routing | UC-01, UC-07, UC-08 | ✅ | ✅ |
| A2 | Localization | UC-01, UC-06 | ⚠️ | ✅ |
| A3 | Redaction | UC-04 | ✅ | ✅ |
| A4 | Template lifecycle | Section 10.5 | ⚠️ | ✅ |
| A5 | Analytics | Section 15 | ⚠️ | ✅ |
| A6 | WABA health | Section 15.1 | ⚠️ | ✅ |
| B1 | AI resolution | UC-01–04, UC-07–08 (Option A); +UC-05–15 (Option B) | ⚠️ | ✅ |
| B2 | Tiered auth | Section 8.3 | ✅ | ✅ |
| B3 | SN filing | All UCs | ✅ | ✅ |
| B4 | Knowledge | UC-14 | ⚠️ | ✅ |
| B5 | Multilingual | UC-06 | ⚠️ | ✅ |
| C1 | Notifications | UC-03, UC-05, UC-11; Section 9.1.1 (all 5 types) | ✅ | ✅ |
| C2 | Contextual reply | UC-03 (Option A); +UC-05 (Option B) | ⚠️ | ✅ |
| D1 | SN agent workspace | UC-01, UC-03, UC-07 | ✅ | ✅ |
| D2 | SN message traceability | All UCs | ✅ | ✅ |
| E1 | OneTrust PDPA | Section 13 | ⚠️ | ✅ |
| E2 | Opt-in capture | UC-09 | ✅ | ✅ |
| E3 | Consent toggles | UC-10 | ✅ | ✅ |
| F1 | MoEngage | UC-12 | ❌ | ✅ |
| F2 | Consented campaigns | UC-12 | ❌ | ✅ |
| F3 | DNC scrub | Section 13.1 | ❌ | ✅ |
Appendix C: Technology Stack
Note for business readers: The table below is a technical reference for SPH IT. SPH operations teams interact only with the Admin Portal (web browser) and ServiceNow — not these underlying technologies.
| Layer | Technology | Who manages it |
|---|---|---|
| Admin Portal (what SPH sees) | React web application | QUICKSALES.AI — SPH uses via browser |
| API Gateway | Node.js / Python FastAPI | QUICKSALES.AI |
| AI Engine | LLM (GPT-4o / Claude) + custom NLU | QUICKSALES.AI |
| Knowledge RAG | Vector DB (Pinecone / pgvector) | QUICKSALES.AI — SPH KB embeddings only, not customer chats |
| Session cache | Redis (managed cloud, TTL 24–72 hrs) | QUICKSALES.AI — routing tokens only, no message bodies |
| Configuration DB | PostgreSQL (managed cloud) | QUICKSALES.AI — journeys, templates, admin settings — no PII |
| Analytics | Built into Admin Portal + export | QUICKSALES.AI |
| Hosting | AWS Singapore or Azure Southeast Asia | QUICKSALES.AI — no SPH hardware |
| CI/CD | GitHub Actions | QUICKSALES.AI |
| Monitoring | Datadog / Grafana | QUICKSALES.AI |
Appendix D: Commercial Quotation
Full commercial pricing is provided in the dedicated Pricing quotation document, aligned to the scope below.
| Option | Scope | Timeline | Effort |
|---|---|---|---|
| Option A — Essential | Phase 1 pilot | ~5 months | ~128 mandays |
| Option B — Professional | Full RFP + Phase 2 | ~7 months | ~304 mandays |
Currency: Singapore Dollars (SGD), exclusive of GST. Valid for 90 days from quotation date.
Appendix E: Data Storage & Residency — Requirement Audit
This appendix maps every data-related requirement from Requirements - WhatsApp.pdf and the RFP against our proposed architecture. Use this for SPH Legal, IT, and procurement review.
Three Non-Negotiable Principles
| # | SPH requirement (verbatim) | Compliant? | How we comply |
|---|---|---|---|
| 1 | ServiceNow (CSM) remains system of engagement for customer support operations | ✅ | Agents work only in ServiceNow Agent Workspace; platform hands off via VA Bot-to-Bot API |
| 2 | Customer data resides exclusively in SPH Media systems | ✅ | Conversations → ServiceNow; subscriber records → Commerce; consent → OneTrust. Vendor is transient processor only (Section 6.5) |
| 3 | WhatsApp coexists with the existing ServiceNow web chat, not replaces it | ✅ | Web chat unchanged; WhatsApp is additive channel with unified case history in SN |
Phase 1 — Data & Storage Requirements (A–F)
| ID | SPH requirement (verbatim) | Compliant? | Storage / system of record | Vendor platform role |
|---|---|---|---|---|
| A1 | All conversations (including offline messages) should be captured to ServiceNow for reference and follow up | ✅ | ServiceNow | Real-time redact → sync to SN; vendor does not archive |
| A3 | Sensitive content completely redacted/stripped prior to interfacing or syncing logs with ServiceNow | ✅ | Redacted tokens in ServiceNow only | Redaction at gateway before any SN write |
| B3 | Conversation with the AI-assisted agent needs to be filed into ServiceNow for records, review and continuity | ✅ | ServiceNow interaction/case tables | Full redacted AI transcript synced via Table API |
| D2 | All inbound and outbound messages to be integrated into ServiceNow CSM for traceability and followup | ✅ | ServiceNow | Bidirectional sync; vendor holds no message archive |
| E1 | Consent information would be kept within OneTrust | ✅ | OneTrust | Platform writes consent receipts via API; not master record |
| E2 | Writing consent records to OneTrust at conversation close | ✅ | OneTrust | Opt-in flow writes Consent Receipt API |
| RFP PCI | No raw card number, expiry date, or CVV in conversation transcript, agent console, or ServiceNow case payload | ✅ | Redacted placeholders in ServiceNow | Raw PAN never stored anywhere; [REDACTED_*] tokens only |
What the Vendor Platform May Hold (Non-Customer Data)
| Data | Allowed? | Rationale per Principle 2 |
|---|---|---|
| WhatsApp message transcripts | ❌ | Customer data → ServiceNow |
| Subscriber name, address, billing | ❌ | Customer data → Commerce (API lookup only) |
| Consent master records | ❌ | Customer data → OneTrust |
| Raw card numbers / NRIC | ❌ | A3 / RFP PCI — never stored |
| Active session routing token (hashed) | ✅ | Operational — not customer record; TTL ≤ 72 hrs |
| Journey rules, template metadata | ✅ | Platform configuration — no customer content |
| KB article embeddings | ✅ | Copy of SPH knowledge content for AI search — not customer chats |
| Aggregated metrics (counts, %) | ✅ | Analytics — no message text or PII |
Common Misreadings — Clarified
| Misreading | Actual requirement | Our approach |
|---|---|---|
| "Cannot store any WhatsApp data" | Customer data must live in SPH systems | Conversations stored in ServiceNow — as required |
| "Vendor cannot touch messages" | Vendor must not persist customer data | Vendor processes transiently and writes to SN |
| "No databases on vendor side" | No customer data in vendor DB | Config DB + ephemeral cache only (Section 6.5) |
| "Offline messages stay on vendor queue" | Offline messages captured to ServiceNow (A1) | Agent queue in SN AWA; vendor syncs immediately |
Appendix F: Technical Discovery (SPH Action Required)
To replace all TBD integration placeholders with production endpoints, SPH must complete:
Technical Discovery — included in this package
| Section | What SPH provides |
|---|---|
| A. Commerce | OpenAPI/Swagger, sandbox URL, auth, endpoint confirmation table |
| B. ServiceNow | Instance URL, version, OAuth, provider app Inbound ID, AWA queue |
| C. OneTrust | Tenant hostname, marketing purpose GUID, collection point JWT |
| D. SMS | Provider name, API URL, sender ID, test credentials |
| E. MoEngage | Workspace ID, Connected App approval, campaign webhook agreement |
| F. DNC | Scrub process / API for Phase 2 |
| G. Meta WABA | WABA ID, verification status, quality rating, existing templates, admin contact |
Return to: proposals@quicksales.ai within 10 business days of contract signing.
QUICKSALES.AI will publish Integration Specification v1.0 and an updated Section 11 within 7 days of receiving completed Sections A + B.
End of Proposal
Document prepared by QUICKSALES.AI for SPH Media Limited. Private & Confidential.
For questions regarding this proposal, please contact: proposals@quicksales.ai