Quick take
Store one canonical E.164 phone number for sending, preserve the selected country and original input for support, and validate before creating OTP or alert attempts.
Phone-number data model
Keep sending data strict and support data explainable.
| Field | Purpose | Example |
|---|---|---|
| canonicalPhoneNumber | The E.164 value used for sending. | +14155550123 |
| countryIso2 | The selected or inferred destination country. | US |
| nationalDisplay | A user-friendly support display value. | (415) 555-0123 |
| originalInput | The value the user typed before normalization. | 415-555-0123 |
| validationState | Whether the number can be used for SMS attempts. | valid, invalid, ambiguous, unsupported |
| lastVerifiedAt | When the phone number last completed verification. | 2026-05-26T09:00:00.000Z |
Implementation notes
Ask for country context before parsing local numbers. Without a country, the same national number can mean different destinations.
For support, show the canonical number, destination country, validation state, and the exact number used for the send. That prevents a common debugging trap: investigating a route when the input was never valid.
- Normalize before sending.
- Keep country selection explicit.
- Avoid storing only formatted display text.
- Do not create duplicate OTP attempts for alternate formatting of the same number.
Start with clean recipient data
Notilify connects phone-number readiness to OTP, alert, and delivery tracking workflows.