integrations (Bali Laundry Platform - External Integrations)


Integration Overview

Category Service Purpose Priority
Auth Google OAuth Tourist sign-up P0
Auth SendGrid/SES Email verification P0
Payment Midtrans/Xendit IDR payment processing (PRIMARY for foreigners) P0
Payment QRIS QR payments (IDR only) P0
Comms Firebase FCM Push notifications P0
Comms SendGrid/SES Email P1
Maps Google Maps Zones, navigation P0
AI OpenAI/Claude FAQ bot, translation P0
AI Google Translate Multi-language P0

Email Communication

Use Cases

  1. Email Verification — Sign-up, login
  2. Order Notifications — Status updates at each stage
  3. Order Confirmation — Order details and tracking
  4. Status Updates — Check order status via email

Email Templates (Pre-approved)

Order Confirmed

✅ Order #{{order_id}} confirmed!

Service: {{service_type}}
Pickup: {{pickup_time}}
Address: {{pickup_address}}

Track your order: {{tracking_link}}

Pickup Scheduled

🚗 Your courier is on the way!

Courier: {{courier_name}}
ETA: {{eta_minutes}} minutes
Phone: {{courier_phone}}

Track live: {{tracking_link}}

Order Picked Up

📦 Laundry picked up!

Items: {{item_count}} items, {{weight}} kg
Estimated delivery: {{delivery_time}}

Track: {{tracking_link}}

Ready for Delivery

✨ Your laundry is ready!

Delivery scheduled: {{delivery_time}}
Courier: {{courier_name}}

Track: {{tracking_link}}

Delivered

🎉 Delivered!

Order #{{order_id}} completed.
Total: IDR {{amount}}

Rate your experience: {{rating_link}}

Delay Alert

⚠️ Delay Notice

Order #{{order_id}} is delayed.
Reason: {{delay_reason}}
New ETA: {{new_eta}}

We apologize for the inconvenience.
Questions? Reply to this email.

Provider Options


Payment Gateway (Midtrans/Xendit)

Payment Strategy

Primary Target Market: Foreign tourists and expats prefer card payments as their primary payment method. Card payment infrastructure is prioritized for optimal user experience for international customers.

Currency Compliance: All transactions are processed exclusively in IDR (Indonesian Rupiah) in compliance with Indonesian regulatory requirements. Only IDR is accepted as payment currency. Multi-currency processing is not supported due to Indonesian financial regulations mandating all domestic transactions be conducted in the national currency.

Supported Methods (Priority Order for Foreign Market)

Method Type Priority Target Market Currency
Credit Card Visa, Mastercard, JCB, Amex P0 PRIMARY - Foreigners IDR only
Debit Card International & local bank cards P0 PRIMARY - Foreigners IDR only
QRIS QR code standard P1 Secondary - Local market IDR only
GoPay E-wallet P1 Secondary - Local market IDR only
OVO E-wallet P1 Secondary - Local market IDR only
Dana E-wallet P2 Secondary - Local market IDR only
ShopeePay E-wallet P2 Secondary - Local market IDR only
Bank Transfer VA (Virtual Account) P2 Secondary - Local market IDR only

Note: All payment methods process transactions in IDR only, as mandated by Indonesian banking regulations.

Integration Flow (Card Payment Optimized)

1. Customer selects payment method (Card payment displayed as primary option)
2. Create payment request → Gateway (Card processing prioritized, IDR only)
3. Gateway returns secure card payment form/tokenization
4. Customer completes card payment in IDR (optimized checkout flow)
5. Real-time payment authorization (IDR transaction)
6. Webhook notification → Our server
7. Update order status
8. Send confirmation to customer

Card Payment Features (Priority)

Webhook Events

Currency Policy (Indonesian Regulatory Compliance)


Google Maps Integration

Use Cases

  1. Zone Visualization — Display service coverage areas (Phase 1: Jimbaran & Uluwatu Area)
  2. Address Autocomplete — Pickup/delivery address input
  3. Courier Navigation — Turn-by-turn directions
  4. Live Tracking — Real-time courier location (v2)
  5. Zone Validation — Check if address is serviceable within primary coverage zones

APIs Required

API Purpose Billing
Maps JavaScript Zone display, tracking Per load
Places Address autocomplete Per request
Geocoding Address → coordinates Per request
Directions Route calculation Per request
Distance Matrix ETA calculation Per element

Zone Data Format (GeoJSON)

{
  "type": "Feature",
  "properties": {
    "zone_id": "jimbaran",
    "name": "Jimbaran & Uluwatu Area",
    "delivery_fee": 0,
    "active": true,
    "phase": 1
  },
  "geometry": {
    "type": "Polygon",
    "coordinates": [[[lng, lat], ...]]
  }
}

Push Notifications (Firebase FCM)

Notification Types

Event Title Body
Order Confirmed "Order Confirmed" "Your lau