|
|
| Prepared by |
QUICKSALES.AI |
| Prepared for |
SPH Media Limited |
| Purpose |
Collect the five critical integration inputs required to replace all "TBD" placeholders in the technical proposal with real endpoints, credentials, and signed API contracts |
| Companion doc |
Business Discovery (full operational questionnaire) |
| Date |
8 July 2026 |
| Classification |
Private & Confidential |
How to Use This Pack
- Assign one SPH owner per section (Commerce, ServiceNow, OneTrust, SMS, MoEngage).
- Complete every field marked
SPH TO COMPLETE β leave blank if unknown and note expected date.
- Attach documents where requested (OpenAPI, architecture diagrams, API credentials via secure channel).
- Return to: proposals@quicksales.ai β Subject:
SPH Technical Discovery β [Date]
- Target: Within 10 business days of contract signing (Week 1 of project).
What QUICKSALES.AI Will Produce After You Return This Pack
| Deliverable |
When |
Owner |
| Signed Commerce API Integration Spec (no more TBD endpoints) |
Week 1 Day 5 |
QUICKSALES.AI + SPH Commerce |
| ServiceNow Provider Application configured in SPH UAT |
Week 2 |
SPH IT + QUICKSALES.AI |
| OneTrust consent flow wired to collection point |
Week 3 |
SPH Legal + QUICKSALES.AI |
| SMS fallback adapter implemented |
Week 2 |
QUICKSALES.AI |
| MoEngage Connected Channel config (Option B) |
Week 20 |
SPH Marketing + QUICKSALES.AI |
| Updated proposal Section 11 with your real instance URLs |
Week 1 Day 7 |
QUICKSALES.AI |
A. Commerce Backend (Highest Priority β Blocks All RFP Journeys)
SPH owner: ____ Email: ____ Due: ____
RFP references: postal code verification, CS-123456 case refs, https://sph.sg/updatecc, https://sph.sg/xRfU, vacation suspend/extend, delivery status, payment verify.
A.1 System Identification
| Field |
SPH TO COMPLETE |
| Commerce system name |
|
| Internal system code / project name |
|
| Technology stack (e.g. Java, .NET, custom) |
|
| Production API base URL |
https:// |
| UAT / Sandbox API base URL |
https:// |
| API documentation URL (Swagger/OpenAPI) |
|
| OpenAPI/Swagger file attached? |
Yes / No β File name: |
| Primary integration contact |
Name / Email |
A.2 Authentication
| Field |
SPH TO COMPLETE |
| Auth method |
OAuth 2.0 client credentials / API key / mTLS / Other: |
| Token endpoint (if OAuth) |
|
| Scopes required |
|
| Credential delivery method |
Secure vault / 1Password / SPH IAM portal |
| IP whitelist required for QUICKSALES.AI platform? |
Yes / No β IPs to whitelist: |
A.3 Subscriber Identity Model
| Field |
SPH TO COMPLETE |
| Primary subscriber key |
subscriber_id format example: |
| Lookup by WhatsApp MSISDN supported? |
Yes / No β Endpoint: |
| Lookup by email supported? |
Yes / No β Endpoint: |
| Multi-title subscription model |
One account / multiple subscriptions per title |
| Example test subscriber IDs (5) |
1. 2. 3. 4. 5. |
A.4 Outbound API Contract β SPH Confirms or Corrects Endpoints
QUICKSALES.AI proposes this contract based on RFP journeys. Strike through and correct any row that differs in your system.
| # |
Operation |
Proposed method + path |
RFP journey |
Available? |
SPH actual endpoint |
| 1 |
Lookup subscriber by MSISDN |
GET /api/v1/subscribers/lookup?msisdn={msisdn} |
All |
Y / N / Partial |
|
| 2 |
Verify postal code (T1 auth) |
POST /api/v1/subscribers/verify |
Journey 1, 2 |
Y / N / Partial |
|
| 3 |
Get delivery status |
GET /api/v1/delivery/{subscription_id}/status |
Journey 1 |
Y / N / Partial |
|
| 4 |
Request redelivery |
POST /api/v1/delivery/{subscription_id}/redelivery |
Journey 1 |
Y / N / Partial |
|
| 5 |
Get delivery options (doorstep fee) |
GET /api/v1/delivery/{subscription_id}/options |
Journey 1 |
Y / N / Partial |
|
| 6 |
Create vacation suspension |
POST /api/v1/subscriptions/{id}/suspension |
Journey 2 |
Y / N / Partial |
|
| 7 |
Update vacation suspension |
PATCH /api/v1/subscriptions/{id}/suspension/{ref} |
Journey 2 |
Y / N / Partial |
|
| 8 |
Get billing / payment status |
GET /api/v1/billing/{subscriber_id}/status |
Journey 3 |
Y / N / Partial |
|
| 9 |
Generate secure payment link |
POST /api/v1/billing/payment-link |
Journey 3 (sph.sg/xRfU) |
Y / N / Partial |
|
| 10 |
Generate password reset link |
POST /api/v1/accounts/password-reset |
Journey 3 Option A |
Y / N / Partial |
|
| 11 |
Verify payment method updated |
GET /api/v1/billing/{subscriber_id}/payment-method/status |
Journey 3 |
Y / N / Partial |
|
| 12 |
Send email OTP (T2 auth) |
POST /api/v1/auth/otp/email |
Journey 3 |
Y / N / Partial |
|
| 13 |
Validate OTP |
POST /api/v1/auth/otp/verify |
Journey 3 |
Y / N / Partial |
|
A.5 Inbound Webhook Contract β Commerce β QUICKSALES.AI (C1 Notifications)
Webhook URL (QUICKSALES.AI provides after sandbox provision): https://api.sph-media.quicksales.ai/v1/webhooks/commerce
| Field |
SPH TO COMPLETE |
| Can Commerce push webhooks? |
Yes / No / Needs development |
| If No, estimated availability |
|
| Preferred auth |
HMAC-SHA256 header / OAuth / mTLS |
| Shared secret delivery |
|
| Retry policy on failure |
|
Event types β confirm availability
| Event type |
Required for RFP |
Commerce can emit? |
Payload fields available |
payment_failed |
C1 |
Y / N |
subscriber_id, msisdn, amount, due_date, payment_update_url |
renewal_reminder |
C1 |
Y / N |
subscriber_id, plan_name, renewal_date, amount |
pending_payment |
C1 |
Y / N |
subscriber_id, amount, days_overdue |
subscription_expiry |
C1 |
Y / N |
subscriber_id, plan_name, expiry_date |
payment_confirmed |
C1 |
Y / N |
subscriber_id, amount, receipt_ref |
welcome_message |
C1 |
Y / N |
subscriber_id, msisdn |
Sample webhook payload (SPH to validate or provide actual sample)
{
"event_id": "evt_20260708_001",
"event_type": "payment_failed",
"timestamp": "2026-07-08T09:00:00+08:00",
"subscriber": {
"subscriber_id": "SUB-XXXXXX",
"msisdn": "6591234567",
"email": "customer@example.com",
"title": "Lianhe Zaobao Digital"
},
"payload": {
"amount": 28.90,
"currency": "SGD",
"due_date": "2026-07-07",
"payment_update_url": "https://sph.sg/updatecc"
}
}
SPH comments / corrections to payload schema:
B. ServiceNow CSM
SPH owner: ____ Email: ____ Due: ____
B.1 Instance Details
| Field |
SPH TO COMPLETE |
| Production instance URL |
https:// |
| UAT / Sandbox instance URL |
https:// |
| ServiceNow release/version |
e.g. Zurich, Xanadu, Yokohama |
| CSM module licensed? |
Yes / No |
| Agent Workspace licensed? |
Yes / No |
| AWA (Advanced Work Assignment) enabled? |
Yes / No |
| Existing WhatsApp integration? |
None / Twilio SN adapter / Cloud API SN adapter / Other |
| If existing β decommission or parallel? |
|
B.2 Virtual Agent API Readiness
| Field |
SPH TO COMPLETE |
Plugin com.glide.cs.chatbot installed? |
Yes / No |
| VA Bot-to-Bot API tested before? |
Yes / No |
| OAuth client for integration β can provision? |
Yes / No |
| OAuth client ID (UAT) |
(secure channel) |
| Preferred auth for VA API |
OAuth 2.0 / Message Auth static token |
B.3 Provider Application (QUICKSALES.AI as Primary Bot)
SPH IT creates in UAT; QUICKSALES.AI assists on call.
| Field |
SPH TO COMPLETE |
sys_cs_provider_application β Inbound ID assigned |
|
message_auth record name |
|
| Outbound webhook URL registered |
https://api.sph-media.quicksales.ai/v1/webhooks/servicenow |
| Async outbound configured? |
Yes / No |
B.4 Case & Interaction Tables
| Field |
SPH TO COMPLETE |
| Case table |
sn_customerservice_case / Custom: |
| Interaction table |
interaction / Custom: |
| Custom fields for WhatsApp channel |
Field names: |
| AWA queue for WhatsApp escalations |
Queue name / sys_id: |
| Business hours schedule |
|
| SN KB table access for integration user? |
Yes / No |
| Role |
Name |
Email |
| ServiceNow admin |
|
|
| CSM operations lead |
|
|
| Integration developer (if separate) |
|
|
C. OneTrust (Consent β E1, E2, E3)
SPH owner: ____ Email: ____ Due: ____
E1: "These information would be kept within OneTrust"
C.1 Tenant
| Field |
SPH TO COMPLETE |
| Production tenant hostname |
e.g. privacyportal.onetrust.com / custom: |
| UAT tenant hostname |
|
| OneTrust admin contact |
Name / Email |
| API access provisioned for integration? |
Yes / No |
C.2 Collection Points & Purpose IDs
| Purpose |
SPH TO COMPLETE |
| WhatsApp marketing opt-in purpose GUID |
|
| WhatsApp transactional/utility purpose GUID (if separate) |
|
| Collection point ID for WhatsApp opt-in at conversation close |
|
Collection point JWT (requestInformation token) β UAT |
(secure channel) |
| Approved opt-in prompt text (E2) |
|
C.3 API Endpoints Used
| Operation |
OneTrust API |
SPH confirmed |
| Create consent receipt (opt-in) |
POST /request/v1/consentreceipts |
Y / N |
| Create identified consent receipt |
POST /request/v1/consentreceipts/identified |
Y / N |
| Check consent status (pre-marketing) |
GET /api/consent/v2/datasubjects/{id}/purposes |
Y / N |
| Revoke consent (STOP keyword) |
POST /request/v1/consentreceipts (OPT_OUT) |
Y / N |
C.4 Identifier Model
| Field |
SPH TO COMPLETE |
| Primary identifier for WhatsApp subscribers |
MSISDN / Email / subscriber_id |
| Identifier type value for API |
Phone / Email / Custom: |
| Marketing frequency cap policy |
e.g. max 2 per week |
D. SMS Gateway (C1 Fallback)
SPH owner: ____ Email: ____ Due: ____
| Field |
SPH TO COMPLETE |
| Current SMS provider |
Twilio / Vonage / Singtel / M1 / Wavecell / Infobip / MSG91 / Other: |
| Existing contract owner at SPH |
|
| API base URL |
|
| API documentation link |
|
| Authentication method |
API key / OAuth / Other |
| Sender ID / alphanumeric sender |
e.g. SPHMedia |
| Singapore SMS template registration required? |
Yes / No |
| Can provision UAT/test credentials? |
Yes / No β By date: |
| Estimated % subscribers without WhatsApp |
% |
SMS fallback message approval
| Notification |
Approved SMS text (or attach template doc) |
| payment_failed |
|
| renewal_reminder |
|
E. MoEngage (Phase 2 β Option B: F1, F2)
SPH owner: ____ Email: ____ Due: ____
| Field |
SPH TO COMPLETE |
| MoEngage deployed? |
Yes / No / Planned |
| Workspace / App ID |
|
| Data center region |
US / EU / India / Other |
| UAT workspace available? |
Yes / No |
| MoEngage admin contact |
Name / Email |
| Can create Connected App for external WhatsApp channel? |
Yes / No |
| Preferred campaign trigger method |
Webhook / S2S API / CSV upload |
| Planned Phase 2 go-live |
|
| Target consented audience size |
|
MoEngage β QUICKSALES.AI webhook (we provide URL in UAT)
| Field |
SPH TO COMPLETE |
| Campaign webhook URL |
https://api.sph-media.quicksales.ai/v1/webhooks/moengage |
| Auth method agreed |
HMAC shared secret / API key |
| Delivery status callback URL (MoEngage tracking URL) |
(from MoEngage dashboard) |
F. DNC Registry (F3 β Phase 2)
SPH owner: ____ Email: ____ Due: ____
| Field |
SPH TO COMPLETE |
| Current DNC scrub process |
PDPC API / Internal batch / Third-party vendor |
| DNC vendor name (if third-party) |
|
| API or batch file format |
|
| Scrub frequency for campaigns |
Real-time / Daily batch |
| DNC integration contact |
Name / Email |
SPH owner: _______________ Email: _______________ Due: _______
Confirm current WhatsApp Business Account status so we can assess blocking risk before go-live. See proposal Section 14.
| Field |
SPH TO COMPLETE |
| Meta Business Manager ID |
|
| WABA ID (WhatsApp Business Account) |
|
| Phone number(s) to use for SPH support |
+65 β¦ |
| Business verification status |
Verified / Pending / Not started |
| Current quality rating (if known) |
GREEN / YELLOW / RED / Unknown |
| Current messaging tier / daily limit |
|
| Any past restrictions or number blocks? |
Yes β details: / No |
| Existing approved templates (count + categories) |
Utility: __ / Marketing: __ / Auth: __ |
| Is this number currently used for other channels? |
Yes β which: / No β new number |
| Meta Business admin contact for WABA access |
Name / Email |
H. Integration Sign-Off
| Section |
SPH completed |
SPH signatory |
Date |
| A. Commerce |
β |
|
|
| B. ServiceNow |
β |
|
|
| C. OneTrust |
β |
|
|
| D. SMS |
β |
|
|
| E. MoEngage |
β |
|
|
| F. DNC |
β |
|
|
| G. Meta WABA |
β |
|
|
Return completed pack to: proposals@quicksales.ai
QUICKSALES.AI will schedule a 2-hour Integration Contract Workshop within 48 hours of receiving Sections A + B to walk through endpoint mapping live with SPH technical leads.