Skip to content

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:

  1. L-utent jitlob verifika
  2. Is-sistema tibda sejħa għat-telefon tal-utent
  3. Is-sejħa tintemm awtomatikament wara 1-2 ċrieki
  4. App tal-utent jaqbad l-ID tas-sejjieħ
  5. L-ID tas-sejjieħ huwa vverifikat kontra l-mudell mistenni
  6. 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:

Phone: +380XXXXXXXXX

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:

Full number: +380123456789
Pattern:     ***456789

L-app tiegħek għandha:

  1. Aqbad l-ID tas-sejjieħ li jkun deħlin
  2. Oħroġ iċ-ċifri mill-ID tas-sejjieħ
  3. Qabbel mal-mudell (asterisks = kwalunkwe ċifra)
  4. 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:

<key>NSPhoneCallUsageDescription</key>
<string>We need phone access to verify your number</string>

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