Sejħa Flash
Flash Call huwa metodu ta' verifika tat-telefon li juża sejħa mitlufa minflok SMS biex jivverifika n-numri tat-telefon. Huwa aktar mgħaġġel, aktar sigur, u kost-effettiv.
Ħarsa ġenerali
Il-verifika tas-Sejħa Flash taħdem minn:
- L-utent jitlob verifika
- Is-sistema tibda sejħa għat-telefon tal-utent
- Is-sejħa tintemm awtomatikament wara 1-2 ċrieki
- App tal-utent jaqbad l-ID tas-sejjieħ
- L-ID tas-sejjieħ huwa vverifikat kontra l-mudell mistenni
- L-utent huwa awtentikat
Benefiċċji
Kosteffikaċi
- Sa 10x irħas mill-SMS
- Ebda miżati għall-kunsinna tal-messaġġi
- Spejjeż imnaqqsa għal verifika ta 'volum għoli
Aktar malajr
- Verifika immedjata (1-3 sekondi)
- L-ebda stennija għall-kunsinna ta 'SMS
- Esperjenza aħjar tal-utent
Aktar Sikur
- Aktar diffiċli biex jinterċettaw minn SMS
- L-ebda OTP viżibbli fin-notifiki
- Reżistenti għal attakki ta 'skambju ta' SIM
Reach Globali
- Jaħdem f'pajjiżi b'restrizzjonijiet tal-SMS
- Ebda problemi bil-filtrazzjoni tal-SMS
- Kompatibilità universali tat-telefon
Sejħa Flash Bażika
Talba
{
"from": "YourApp",
"to": "+380XXXXXXXXX",
"type": "flashcall",
"messageData": {
"callerId": "+380123456789"
}
}
Parametri
| Parametru | Tip | Meħtieġa | Deskrizzjoni |
|---|---|---|---|
| "minn" | spag | Iva | L-identifikatur tal-mittent tiegħek |
| "għal" | spag | Iva | Numru tat-telefon tar-riċevitur (E.164) |
| "tip" | spag | Iva | Issettja għal "flashcall" |
callId |
spag | Iva | Numru tat-telefon li se jċempel lill-utent |
ttl |
numru sħiħ | Le | Ħin għall-ħajja f'sekondi (default: 60) |
Kif Taħdem
1. Utent Idaħħal in-Numru tat-Telefon
L-utent jipprovdi n-numru tat-telefon tiegħu fl-app tiegħek:
2. Talba Flash Call
Is-server tiegħek jitlob verifika flash call:
curl -X POST https://restapi.smsbat.com/bat/messagelist \
-H "X-Authorization-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"messages": [{
"from": "YourApp",
"to": "+380XXXXXXXXX",
"type": "flashcall",
"messageData": {
"callerId": "+380123456789"
},
"ttl": 60
}]
}'
3. Rispons API
L-API jirritorna l-mudell mistenni tal-ID tas-sejjieħ:
{
"messagelistId": 123456,
"messages": [
{
"messageId": "abc123def456",
"status": "accepted",
"callerId": "+380123456789",
"pattern": "***456789",
"to": "+380XXXXXXXXX"
}
]
}
4. Ibda Sejħa
Is-sistema tibda sejħa għat-telefon tal-utent u tispiċċa wara 1-2 ċrieki.
5. Aqbad l-ID tas-Sejjieħ
L-app tal-utent taqbad l-ID tas-sejjieħ tas-sejħa li tkun deħlin:
// Android example
val cursor = contentResolver.query(
CallLog.Calls.CONTENT_URI,
arrayOf(CallLog.Calls.NUMBER),
null, null,
CallLog.Calls.DATE + " DESC"
)
6. Ivverifika l-mudell
Qabbel l-ID tas-sejjieħ maqbud mal-mudell mistenni:
// JavaScript example
function verifyFlashCall(callerId, pattern) {
// Remove non-digits
const callerDigits = callerId.replace(/\D/g, '');
const patternDigits = pattern.replace(/\*/g, '.');
// Check if matches pattern
const regex = new RegExp(patternDigits);
return regex.test(callerDigits);
}
Eżempji ta' Implimentazzjoni
Android
class FlashCallVerification {
fun requestFlashCall(phoneNumber: String) {
// 1. Request flash call from API
val response = api.requestFlashCall(phoneNumber)
val pattern = response.pattern
// 2. Wait for incoming call
val callReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == TelephonyManager.ACTION_PHONE_STATE_CHANGED) {
val state = intent.getStringExtra(TelephonyManager.EXTRA_STATE)
if (state == TelephonyManager.EXTRA_STATE_RINGING) {
val callerId = intent.getStringExtra(
TelephonyManager.EXTRA_INCOMING_NUMBER
)
// 3. Verify caller ID against pattern
if (verifyPattern(callerId, pattern)) {
onVerificationSuccess()
}
}
}
}
}
// Register receiver
context.registerReceiver(
callReceiver,
IntentFilter(TelephonyManager.ACTION_PHONE_STATE_CHANGED)
)
}
private fun verifyPattern(callerId: String?, pattern: String): Boolean {
if (callerId == null) return false
val regex = pattern.replace("*", "\\d").toRegex()
return regex.matches(callerId)
}
}
iOS
class FlashCallVerification {
func requestFlashCall(phoneNumber: String) {
// 1. Request flash call from API
api.requestFlashCall(phoneNumber) { response in
let pattern = response.pattern
// 2. Use CallKit to detect incoming call
let provider = CXProvider(configuration: providerConfiguration)
provider.setDelegate(self, queue: nil)
// Store pattern for verification
self.expectedPattern = pattern
}
}
// CallKit delegate
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
// Capture caller ID
let callerId = action.callUUID.uuidString
// Verify against pattern
if verifyPattern(callerId: callerId, pattern: expectedPattern) {
onVerificationSuccess()
}
action.fulfill()
}
private func verifyPattern(callerId: String, pattern: String) -> Bool {
let regex = try! NSRegularExpression(
pattern: pattern.replacingOccurrences(of: "*", with: "\\d")
)
let range = NSRange(location: 0, length: callerId.count)
return regex.firstMatch(in: callerId, range: range) != nil
}
}
Web (in-naħa tas-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' });
}
});
Format ta’ Rispons
Rispons ta’ Suċċess
{
"messagelistId": 123456,
"messages": [
{
"messageId": "abc123def456",
"status": "accepted",
"callerId": "+380123456789",
"pattern": "***456789",
"to": "+380XXXXXXXXX",
"ttl": 60
}
]
}
Oqsma ta’ Rispons
| Qasam | Tip | Deskrizzjoni |
|---|---|---|
MessageId |
spag | ID ta' verifika unika |
| "status" | spag | Status: aċċettat, `rifjutat' |
callId |
spag | Numru sħiħ tal-ID tas-sejjieħ |
| "mudell" | spag | Mudell li jqabbel (ċifri + asterisks) |
| "għal" | spag | Numru tat-telefon tar-riċevitur |
ttl |
numru sħiħ | Perjodu ta' validità f'sekondi |
Tqabbil tal-mudelli
L-API jirritorna mudell b'asterisks li jaħbu xi ċifri:
L-app tiegħek għandha:
- Aqbad l-ID tas-sejjieħ li jkun deħlin
- Oħroġ iċ-ċifri mill-ID tas-sejjieħ
- Qabbel mal-mudell (asterisks = kwalunkwe ċifra)
- Ivverifika t-tqabbil fil-perjodu TTL
Fallback għall-SMS
Jekk Flash Call tfalli, awtomatikament terġa' lura għall-SMS:
{
"from": "YourApp",
"to": "+380XXXXXXXXX",
"type": "flashcall",
"messageData": {
"callerId": "+380123456789"
},
"fallback": {
"type": "sms",
"text": "Your verification code is: 123456"
},
"ttl": 60
}
Każijiet ta' Użu
Reġistrazzjoni tal-Kont
Ivverifika n-numri tat-telefon waqt l-iskrizzjoni mingħajr spejjeż tal-SMS.
Verifika tal-login
Awtentikazzjoni b'żewġ fatturi bl-użu ta' sejħa flash.
Aġġornament tan-Numru tat-Telefon
Ivverifika numru tat-telefon ġdid meta l-utent jaġġorna l-profil.
Konferma tat-Tranżazzjoni
Ikkonferma tranżazzjonijiet ta 'valur għoli b'sejħa flash.
L-Aħjar Prattiċi
TTL
- ✅ Issettja TTL għal 60-90 sekonda
- ✅ Ħalli lill-utent jerġa' jipprova wara li jiskadi
- ❌ Tużax TTL itwal minn 120 sekonda
Esperjenza tal-Utent
- Uri messaġġ "Stennija għas-sejħa...".
- Uri timer tal-countdown (60 sekonda)
- Ipprovdi għażla għal "Uża SMS minflok"
- Issib u tivverifika awtomatikament l-ID tas-sejjieħ
Immaniġġjar ta' Żbalji
- Immaniġġja l-permessi tat-telefon nieqsa
- Timeout wara li jiskadi TTL
- Ipprovdi għażla ta 'riżerva ta' SMS
- Uri messaġġi ta' żball ċari
Permessi
Itlob il-permessi tat-telefon qabel is-sejħa flash:
Android:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
iOS:
Ittestjar
- Test fuq apparati differenti
- Test ma 'trasportaturi differenti
- Xenarji ta' ċaħda ta' permess tat-test
- Ittestja xenarji ta' timeout tan-netwerk
Limitazzjonijiet
Appoġġ tal-Pjattaforma
- Jaħdem fuq it-tagħmir mobbli kollu
- Jeħtieġ kapaċità ta 'telefonata
- Jeħtieġ permess READ_PHONE_STATE
- Jista 'ma jaħdimx fuq pilloli mingħajr telefon
Netwerk
- Jeħtieġ konnessjoni attiva tat-telefon
- Jista' jfalli f'kundizzjonijiet ħżiena tan-netwerk
- Jistgħu japplikaw restrizzjonijiet fuq it-trasportatur
- Ir-rati internazzjonali jistgħu jvarjaw
Privatezza
- L-utenti jistgħu jimblokkaw numri mhux magħrufa
- Xi apparati għandhom imblukkar tas-sejħiet
- Jeħtieġ permessi espliċiti
- Ikkunsidra t-tħassib dwar il-privatezza tal-utent
Issolvi l-problemi
Sejħa Mhux Riċevuta
- Iċċekkja t-telefon għandu sinjal
- Ivverifika l-format tan-numru (E.164)
- Iċċekkja r-restrizzjonijiet tat-trasportatur
- Ipprova SMS fallback
Mudell Mhux Tqabbil
- Żgura li tinqabad l-ID korretta ta' min iċempel
- Strixxa karattri mhux ċifri
- Iċċekkja l-format tal-mudell
- Ivverifika fi żmien TTL
Permess Miċħud
- Itlob il-permessi kif suppost
- Spjega għaliex permessi meħtieġa
- Ipprovdi alternattiva (SMS)
- Immaniġġja bil-grazzja
Il-passi li jmiss
- Viber OTP - Kunsinna OTP alternattiva
- Messaġġi SMS - Riżerva SMS
- Iċċekkja l-Istatus - Intraċċa l-istatus tas-sejħa flash