Chapter 1 · The scenario
Example: Grocery riders in Pune
A Pune grocery-delivery app handles 9,000 orders an evening at peak with a pool of 120 proxy numbers. When an order is packed, the app binds customer and rider to a proxy on which neither has a live session and sets expiry to delivery plus 45 minutes. The rider taps "Call customer"; the platform sees (rider's number, proxy ending 0412), finds the session and bridges the call with the proxy showing on the customer's phone. A customer who calls the same proxy the next morning hears that the delivery is complete and is offered the support line instead.
Chapter 2 · What is number masking?
Number masking is a privacy pattern in which two people talk by phone call or SMS through a proxy number instead of their real numbers. A ride-hailing rider and driver, a food-delivery customer and courier, or a buyer and seller on a classifieds marketplace each see only the proxy. When one of them calls it, the platform recognises who is calling, finds the other party in the same session and connects them, showing the proxy as the caller ID on both sides.
The core of the system is the session. When an order starts, the platform binds the pair — customer, courier and a proxy taken from a pool of virtual numbers — and stores it with an expiry. Because a session is identified by the combination of caller and proxy, one proxy number can carry many sessions at the same time, as long as no participant has two live sessions on it. When the delivery is made or the ride ends, the session closes after a short grace period, and later calls to the proxy hear an announcement instead of reaching the other person.
Masking is different from a sender ID, which only labels a business's outbound messages, and from a virtual number used as a business's own line. It is a voice and SMS technique built on cloud telephony: virtual numbers, call bridging and SMS relay. WhatsApp has no proxy-number feature that bridges two consumers; a marketplace that wants buyer and seller to chat there without exchanging numbers relays both sides through its own business account, and the WhatsApp Business Calling API connects a user to a business, not two users to each other.
Key takeaways
- Number masking connects two people through a proxy number so neither ever sees the other's real phone number.
- A session binds both real numbers to a proxy; each call or SMS is matched by caller and proxy, then bridged or relayed to the other party.
- One proxy can carry many sessions at once, provided no participant has two live sessions on the same proxy.
- Sessions should expire soon after the order or ride ends, so a proxy can never reconnect two strangers later.
- Masking hides both private numbers in a two-way exchange; a sender ID only labels a business's one-way outbound messages.
Chapter 3 · How it unfolds
How does number masking work?
Keep a pool of proxy numbers
Rent virtual numbers from a cloud telephony provider, sized for peak concurrent sessions per participant rather than average orders.
Create a session per order
When the order starts, bind customer, partner and a proxy neither of them is using, with a time-to-live such as order completion plus 45 minutes.
Resolve each call or SMS
On an inbound call or text to a proxy, look up the live session by (caller's number, proxy). No session means an announcement, not a connection.
Bridge and log
Dial the other party with the proxy as caller ID and bridge the two legs, or relay the SMS. Log time and duration, and record calls only with notice.
Expire and recycle
Close the session at completion plus the grace period and return the proxy to the pool, with a cool-down before pairing it with the same people again.
Chapter 4 · In code
Number masking in code
type Session = { id: string; a: string; b: string; proxy: string; expiresAt: number };// Pick a proxy on which neither participant already has a live session.export function allocate(pool: string[], a: string, b: string, live: Session[]): string | null {const busy = new Set(live.filter((s) => [s.a, s.b].some((n) => n === a || n === b)).map((s) => s.proxy),);return pool.find((p) => !busy.has(p)) ?? null;}// An inbound call or SMS reached a proxy: who is calling, and whom should they reach?export function resolve(caller: string, proxy: string, live: Session[], now = Date.now()) {const s = live.find((x) => x.proxy === proxy && (x.a === caller || x.b === caller) && x.expiresAt > now,);if (!s) return { action: "announce", say: "This order is complete. Please contact support." };return { action: "bridge", dial: s.a === caller ? s.b : s.a, callerId: proxy };}
The lookup key is the pair (caller, proxy), which is why one proxy can serve many sessions.
Chapter 5 · Why it matters
Why does number masking matter?
Exposed numbers leak beyond the transaction: couriers keep customers' numbers, customers call drivers days later, and marketplace users take deals off-platform. Masking keeps contact inside the business, gives an audit trail of calls for disputes and safety, and fits India's DPDP Act principle of using personal data only for the purpose it was collected for — the courier needs to reach the customer for this order, not afterwards.
Chapter 6 · The facts
Number masking: key facts and limits
| Unit of binding | A session: two real numbers, one proxy, an expiry |
|---|---|
| Lookup key | (caller's number, proxy number) |
| Proxy reuse | Many sessions per proxy, never two per participant |
| Channels | Voice calls and SMS relay |
| Typical expiry | Order or ride end plus a short grace period |
| Built on | Cloud telephony virtual numbers and call bridging |
Chapter 7 · Where it goes wrong
Common mistakes with number masking
Sessions that never expire
A proxy that still connects a customer and courier a week later defeats the purpose. Set a hard time-to-live and close sessions on completion.
Reusing a proxy too soon
If a recycled proxy is paired with someone a caller knew from an earlier order, calls reach the wrong person. Keep a cool-down and enforce one live session per participant per proxy.
Leaking the number elsewhere
Masked calls are pointless if the full number shows on the order screen, in an SMS or in agent tools. Mask it everywhere, logs included.
Recording without notice
Call recordings are personal data. Announce recording, keep recordings only as long as disputes need and restrict who can play them back.
Undersized pools at peak
When every proxy is already in use by a participant, new sessions fail. Size the pool for peak concurrency per participant, not for average order volume.
Chapter 8 · What good teams do
Best practices for number masking
- Play a short announcement such as "connecting you to your delivery partner" so people trust the call.
- Mask numbers in logs and agent dashboards, not only on the phone.
- Route calls after expiry to support rather than to a dead line.
- Watch answer rates per proxy and rotate out numbers that get flagged as spam.
Chapter 9 · Number Masking FAQs