Chiamata flash
Flash Call è un metodo di verifica telefonica che utilizza una chiamata persa anziché un SMS per verificare i numeri di telefono. È più veloce, più sicuro e conveniente.
Panoramica
La verifica delle chiamate flash funziona in base a:
- L'utente richiede la verifica
- Il sistema avvia una chiamata al telefono dell'utente
- La chiamata viene terminata automaticamente dopo 1-2 squilli
- L'app dell'utente acquisisce l'ID chiamante
- L'ID chiamante viene verificato rispetto al modello previsto
- L'utente è autenticato
Vantaggi
Conveniente
- Fino a 10 volte più economico degli SMS
- Nessun costo per la consegna dei messaggi
- Costi ridotti per la verifica di volumi elevati
Più veloce
- Verifica istantanea (1-3 secondi)
- Nessuna attesa per la consegna degli SMS
- Migliore esperienza utente
Più sicuro
- Più difficile da intercettare rispetto agli SMS
- Nessun OTP visibile nelle notifiche
- Resistente agli attacchi SIM swap
Portata globale
- Funziona nei paesi con restrizioni SMS
- Nessun problema con il filtraggio degli SMS
- Compatibilità telefonica universale
Chiamata Flash di base
Richiesta
{
"from": "YourApp",
"to": "+380XXXXXXXXX",
"type": "flashcall",
"messageData": {
"callerId": "+380123456789"
}
}
Parametri
| Parametro | Digitare | Obbligatorio | Descrizione |
|---|---|---|---|
| "da" | stringa | Sì | Il tuo identificatore mittente |
| "a" | stringa | Sì | Numero di telefono del destinatario (E.164) |
| "tipo" | stringa | Sì | Imposta su "flashcall" |
ID chiamante |
stringa | Sì | Numero di telefono che chiamerà l'utente |
ttl |
intero | No | Durata in secondi (impostazione predefinita: 60) |
Come funziona
1. L'utente inserisce il numero di telefono
L'utente fornisce il proprio numero di telefono nella tua app:
2. Richiedi chiamata flash
Il tuo server richiede la verifica della chiamata flash:
CODICE_BLOCCO_2
3. Risposta API
L'API restituisce il modello ID chiamante previsto:
{
"messagelistId": 123456,
"messages": [
{
"messageId": "abc123def456",
"status": "accepted",
"callerId": "+380123456789",
"pattern": "***456789",
"to": "+380XXXXXXXXX"
}
]
}
4. Avviare la chiamata
Il sistema avvia una chiamata al telefono dell'utente e termina dopo 1-2 squilli.
5. Cattura l'ID chiamante
L'app dell'utente acquisisce l'ID chiamante della chiamata in arrivo:
// Android example
val cursor = contentResolver.query(
CallLog.Calls.CONTENT_URI,
arrayOf(CallLog.Calls.NUMBER),
null, null,
CallLog.Calls.DATE + " DESC"
)
6. Verifica modello
Confronta l'ID chiamante acquisito con il modello previsto:
CODICE_BLOCCO_5
Esempi di implementazione
Android
CODICE_BLOCCO_6
iOS
CODICE_BLOCCO_7
Web (lato server)
// Node.js example
const express = require('express');
const app = express();
app.post('/request-verification', async (req, res) => {
const { phoneNumber } = req.body;
// 1. Request flash call
const response = await fetch('https://restapi.smsbat.com/bat/messagelist', {
method: 'POST',
headers: {
'X-Authorization-Key': process.env.SMSBAT_API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
messages: [{
from: 'YourApp',
to: phoneNumber,
type: 'flashcall',
messageData: {
callerId: process.env.FLASH_CALL_NUMBER
},
ttl: 60
}]
})
});
const data = await response.json();
const { messageId, pattern } = data.messages[0];
// 2. Store pattern for verification
await redis.setex(`flashcall:${messageId}`, 60, pattern);
// 3. Return pattern to client
res.json({ messageId, pattern });
});
app.post('/verify-flashcall', async (req, res) => {
const { messageId, callerId } = req.body;
// 1. Get expected pattern
const pattern = await redis.get(`flashcall:${messageId}`);
if (!pattern) {
return res.status(400).json({ error: 'Verification expired' });
}
// 2. Verify caller ID
const regex = new RegExp(pattern.replace(/\*/g, '\\d'));
const isValid = regex.test(callerId);
if (isValid) {
// Mark phone as verified
await markPhoneVerified(callerId);
res.json({ verified: true });
} else {
res.status(400).json({ error: 'Invalid caller ID' });
}
});
Formato della risposta
Risposta riuscita
{
"messagelistId": 123456,
"messages": [
{
"messageId": "abc123def456",
"status": "accepted",
"callerId": "+380123456789",
"pattern": "***456789",
"to": "+380XXXXXXXXX",
"ttl": 60
}
]
}
Campi di risposta
| Campo | Digitare | Descrizione |
|---|---|---|
messaggioId |
stringa | ID di verifica univoco |
stato |
stringa | Stato: accettato, rifiutato |
ID chiamante |
stringa | Numero ID chiamante completo |
| "modello" | stringa | Modello da abbinare (cifre + asterischi) |
| "a" | stringa | Numero di telefono del destinatario |
ttl |
intero | Periodo di validità in secondi |
Corrispondenza modello
L'API restituisce uno schema con asterischi che mascherano alcune cifre:
La tua app dovrebbe:
- Cattura l'ID del chiamante in entrata
- Estrarre le cifre dall'ID chiamante
- Confronta con il modello (asterischi = qualsiasi cifra)
- Verificare la corrispondenza entro il periodo TTL
Fallback agli SMS
Se la chiamata Flash fallisce, torna automaticamente agli SMS:
{
"from": "YourApp",
"to": "+380XXXXXXXXX",
"type": "flashcall",
"messageData": {
"callerId": "+380123456789"
},
"fallback": {
"type": "sms",
"text": "Your verification code is: 123456"
},
"ttl": 60
}
Casi d'uso
Registrazione dell'account
Verifica i numeri di telefono durante la registrazione senza costi SMS.
Verifica dell'accesso
Autenticazione a due fattori tramite chiamata flash.
Aggiornamento del numero di telefono
Verifica il nuovo numero di telefono quando l'utente aggiorna il profilo.
Conferma della transazione
Conferma le transazioni di alto valore con la chiamata flash.
Migliori pratiche
TTL
- ✅ Imposta TTL su 60-90 secondi
- ✅ Consenti all'utente di riprovare dopo la scadenza
- ❌ Non utilizzare TTL per più di 120 secondi
Esperienza utente
- Mostra il messaggio "In attesa di chiamata...".
- Visualizza il conto alla rovescia (60 secondi)
- Fornire l'opzione "Utilizza invece SMS"
- Rileva e verifica automaticamente l'ID chiamante
Gestione degli errori
- Gestire le autorizzazioni telefoniche mancanti
- Timeout dopo la scadenza del TTL
- Fornire l'opzione di fallback SMS
- Mostra messaggi di errore chiari
Autorizzazioni
Richiedi le autorizzazioni telefoniche prima della chiamata flash:
Android: CODICE_BLOCCO_12
iOS:
Test
- Prova su diversi dispositivi
- Test con diversi operatori
- Testare gli scenari di negazione dell'autorizzazione
- Testare gli scenari di timeout della rete
Limitazioni
Supporto della piattaforma
- Funziona su tutti i dispositivi mobili
- Richiede la funzionalità di chiamata telefonica
- Richiede l'autorizzazione READ_PHONE_STATE
- Potrebbe non funzionare su tablet senza telefono
Rete
- Richiede una connessione telefonica attiva
- Potrebbe non funzionare in condizioni di rete scadenti
- Potrebbero essere applicate restrizioni da parte del vettore
- Le tariffe internazionali possono variare
Privacy
- Gli utenti possono bloccare numeri sconosciuti
- Alcuni dispositivi dispongono del blocco delle chiamate
- Richiede autorizzazioni esplicite
- Considerare le preoccupazioni sulla privacy degli utenti
Risoluzione dei problemi
Chiamata non ricevuta
- Controlla che il telefono abbia segnale
- Verifica formato numero (E.164)
- Controlla le restrizioni del corriere
- Prova il fallback SMS
Modello non corrispondente
- Assicurati di acquisire l'ID chiamante corretto
- Elimina i caratteri non numerici
- Controllare il formato del modello
- Verificare entro il periodo TTL
Autorizzazione negata
- Richiedere le autorizzazioni correttamente
- Spiegare perché sono necessarie le autorizzazioni
- Fornire alternative (SMS)
- Maneggiare con grazia
Passaggi successivi
- Viber OTP - Consegna OTP alternativa
- Messaggi SMS - SMS di riserva
- Verifica stato - Tieni traccia dello stato delle chiamate flash