Skip to content

फ्ल्यास कल

फ्ल्यास कल एक फोन प्रमाणीकरण विधि हो जसले फोन नम्बरहरू प्रमाणित गर्न SMS को सट्टा मिस कल प्रयोग गर्दछ। यो छिटो, अधिक सुरक्षित, र लागत-प्रभावी छ।

सिंहावलोकन

फ्ल्यास कल प्रमाणीकरण निम्न द्वारा काम गर्दछ:

  1. प्रयोगकर्ता अनुरोध प्रमाणीकरण
  2. प्रणालीले प्रयोगकर्ताको फोनमा कल सुरु गर्छ
  3. कल 1-2 घण्टी पछि स्वचालित रूपमा समाप्त हुन्छ
  4. प्रयोगकर्ताको एपले कलर आईडी कब्जा गर्छ
  5. कलर आईडी अपेक्षित ढाँचा विरुद्ध प्रमाणित छ
  6. प्रयोगकर्ता प्रमाणीकृत छ

फाइदाहरू

लागत-प्रभावी

  • SMS भन्दा 10x सस्तो
  • कुनै सन्देश वितरण शुल्क छैन
  • उच्च मात्रा प्रमाणीकरण को लागी लागत कम

छिटो

  • तत्काल प्रमाणीकरण (१-३ सेकेन्ड)
  • एसएमएस डेलिभरीको लागि पर्खनु पर्दैन
  • राम्रो प्रयोगकर्ता अनुभव

थप सुरक्षित

  • एसएमएस भन्दा अवरोध गर्न गाह्रो
  • सूचनाहरूमा कुनै OTP देखिने छैन
  • सिम स्वैप आक्रमणहरूको प्रतिरोधी

विश्वव्यापी पहुँच

  • SMS प्रतिबन्ध भएका देशहरूमा काम गर्दछ
  • एसएमएस फिल्टरिङको साथ कुनै समस्या छैन
  • विश्वव्यापी फोन अनुकूलता

आधारभूत फ्ल्यास कल

अनुरोध

{
  "from": "YourApp",
  "to": "+380XXXXXXXXX",
  "type": "flashcall",
  "messageData": {
    "callerId": "+380123456789"
  }
}

प्यारामिटरहरू

प्यारामिटर प्रकार आवश्यक विवरण
'बाट' स्ट्रिङ हो तपाईंको प्रेषक पहिचानकर्ता
to स्ट्रिङ हो प्रापकको फोन नम्बर (E.164)
प्रकार स्ट्रिङ हो "फ्लैशकल" मा सेट गर्नुहोस्
callerId स्ट्रिङ हो फोन नम्बर जसले प्रयोगकर्तालाई कल गर्नेछ
ttl पूर्णांक छैन सेकेन्डमा बाँच्ने समय (पूर्वनिर्धारित: 60)

यसले कसरी काम गर्छ

१. प्रयोगकर्ताले फोन नम्बर प्रविष्ट गर्दछ

प्रयोगकर्ताले तपाइँको एपमा आफ्नो फोन नम्बर प्रदान गर्दछ:

Phone: +380XXXXXXXXX

२. फ्ल्यास कल अनुरोध गर्नुहोस्

तपाईंको सर्भरले फ्ल्यास कल प्रमाणीकरण अनुरोध गर्दछ:

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
    }]
  }'

३. API प्रतिक्रिया

API ले अपेक्षित कलर ID ढाँचा फर्काउँछ:

{
  "messagelistId": 123456,
  "messages": [
    {
      "messageId": "abc123def456",
      "status": "accepted",
      "callerId": "+380123456789",
      "pattern": "***456789",
      "to": "+380XXXXXXXXX"
    }
  ]
}

४. कल सुरु गर्नुहोस्

प्रणालीले प्रयोगकर्ताको फोनमा कल सुरु गर्छ र 1-2 घण्टी पछि समाप्त हुन्छ।

५. कलर आईडी खिच्नुहोस्

प्रयोगकर्ताको एपले आगमन कलको कलर ID क्याप्चर गर्छ:

// Android example
val cursor = contentResolver.query(
    CallLog.Calls.CONTENT_URI,
    arrayOf(CallLog.Calls.NUMBER),
    null, null,
    CallLog.Calls.DATE + " DESC"
)

६. ढाँचा प्रमाणित गर्नुहोस्

क्याप्चर गरिएको कलर आईडीलाई अपेक्षित ढाँचासँग तुलना गर्नुहोस्:

// 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);
}

कार्यान्वयन उदाहरणहरू

एन्ड्रोइड

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
    }
}

वेब (सर्भर-साइड)

// 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' });
  }
});

प्रतिक्रिया ढाँचा

सफलताको प्रतिक्रिया

{
  "messagelistId": 123456,
  "messages": [
    {
      "messageId": "abc123def456",
      "status": "accepted",
      "callerId": "+380123456789",
      "pattern": "***456789",
      "to": "+380XXXXXXXXX",
      "ttl": 60
    }
  ]
}

प्रतिक्रिया क्षेत्रहरू

क्षेत्र प्रकार विवरण
'messageId' स्ट्रिङ अद्वितीय प्रमाणिकरण आईडी
'स्थिति' स्ट्रिङ स्थिति: 'स्वीकार गरिएको', 'अस्वीकृत'
callerId स्ट्रिङ पूर्ण कलर आईडी नम्बर
ढाँचा स्ट्रिङ मिल्ने ढाँचा (अङ्क + तारा चिन्ह)
to स्ट्रिङ प्रापकको फोन नम्बर
ttl पूर्णांक सेकेन्डमा वैधता अवधि

ढाँचा मिलान

एपीआईले केही अंकहरू मास्किङ एस्टेरिस्कको साथ ढाँचा फर्काउँछ:

Full number: +380123456789
Pattern:     ***456789

तपाइँको एप हुनुपर्छ:

  1. आगमन कलर ID क्याप्चर गर्नुहोस्
  2. कलर ID बाट अंकहरू निकाल्नुहोस्
  3. ढाँचा विरुद्ध मिलाउनुहोस् (तारांकन = कुनै पनि अंक)
  4. TTL अवधि भित्र मिलान प्रमाणित गर्नुहोस्

SMS मा फर्कनुहोस्

यदि फ्ल्यास कल असफल भयो भने, स्वतः SMS मा फर्कनुहोस्:

{
  "from": "YourApp",
  "to": "+380XXXXXXXXX",
  "type": "flashcall",
  "messageData": {
    "callerId": "+380123456789"
  },
  "fallback": {
    "type": "sms",
    "text": "Your verification code is: 123456"
  },
  "ttl": 60
}

केसहरू प्रयोग गर्नुहोस्

खाता दर्ता

SMS शुल्क बिना साइनअप गर्दा फोन नम्बरहरू प्रमाणित गर्नुहोस्।

लगइन प्रमाणीकरण

फ्लैश कल प्रयोग गरेर दुई-कारक प्रमाणीकरण।

फोन नम्बर अपडेट

प्रयोगकर्ता प्रोफाइल अपडेट गर्दा नयाँ फोन नम्बर प्रमाणित गर्नुहोस्।

लेनदेन पुष्टिकरण

फ्ल्याश कल संग उच्च मूल्य लेनदेन पुष्टि गर्नुहोस्।

उत्तम अभ्यासहरू

TTL

  • ✅ TTL लाई ६०-९० सेकेन्डमा सेट गर्नुहोस्
  • ✅ प्रयोगकर्तालाई म्याद समाप्त भएपछि पुन: प्रयास गर्न अनुमति दिनुहोस्
  • ❌ 120 सेकेन्ड भन्दा लामो TTL प्रयोग नगर्नुहोस्

प्रयोगकर्ता अनुभव

  • "कलको लागि प्रतीक्षा गर्दै ..." सन्देश देखाउनुहोस्
  • काउन्टडाउन टाइमर प्रदर्शन गर्नुहोस् (६० सेकेन्ड)
  • "सट्टामा एसएमएस प्रयोग गर्नुहोस्" विकल्प प्रदान गर्नुहोस्
  • स्वत: पत्ता लगाउनुहोस् र कलर आईडी प्रमाणित गर्नुहोस्

त्रुटि ह्यान्डलिंग

  • हराएको फोन अनुमतिहरू ह्यान्डल गर्नुहोस्
  • TTL म्याद सकिएपछि टाइमआउट
  • एसएमएस फलब्याक विकल्प प्रदान गर्नुहोस्
  • स्पष्ट त्रुटि सन्देशहरू देखाउनुहोस्

अनुमतिहरू

फ्ल्यास कल गर्नु अघि फोन अनुमतिहरू अनुरोध गर्नुहोस्:

एन्ड्रोइड:

<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>

परीक्षण

  • विभिन्न उपकरणहरूमा परीक्षण
  • विभिन्न वाहकहरु संग परीक्षण
  • परीक्षण अनुमति अस्वीकार परिदृश्यहरू
  • परीक्षण नेटवर्क टाइमआउट परिदृश्यहरू

सीमाहरू

प्लेटफर्म समर्थन

  • सबै मोबाइल उपकरणहरूमा काम गर्दछ
  • फोन कल क्षमता चाहिन्छ
  • READ_PHONE_STATE अनुमति चाहिन्छ
  • फोन बिना ट्याब्लेटमा काम नगर्न सक्छ

नेटवर्क

  • सक्रिय फोन जडान आवश्यक छ
  • खराब नेटवर्क अवस्थाहरूमा असफल हुन सक्छ
  • क्यारियर प्रतिबन्धहरू लागू हुन सक्छ
  • अन्तर्राष्ट्रिय दरहरू फरक हुन सक्छ

गोपनीयता

  • प्रयोगकर्ताहरूले अज्ञात नम्बरहरू ब्लक गर्न सक्छन्
  • केहि उपकरणहरूमा कल अवरुद्ध छ
  • स्पष्ट अनुमतिहरू आवश्यक छ
  • प्रयोगकर्ता गोपनीयता चिन्ताहरू विचार गर्नुहोस्

समस्या निवारण

कल प्राप्त भएन

  • फोनमा सिग्नल छ जाँच गर्नुहोस्
  • नम्बर ढाँचा प्रमाणित गर्नुहोस् (E.164)
  • क्यारियर प्रतिबन्धहरू जाँच गर्नुहोस्
  • एसएमएस फलब्याक प्रयास गर्नुहोस्

ढाँचा मिल्दैन

  • सही कलर आईडी कब्जा सुनिश्चित गर्नुहोस्
  • गैर-अंक क्यारेक्टरहरू पट्टी गर्नुहोस्
  • ढाँचा ढाँचा जाँच गर्नुहोस्
  • TTL अवधि भित्र प्रमाणित गर्नुहोस्

अनुमति अस्वीकार गरियो

  • ठीकसँग अनुमतिहरू अनुरोध गर्नुहोस्
  • किन अनुमति चाहिन्छ व्याख्या गर्नुहोस्
  • वैकल्पिक (SMS) प्रदान गर्नुहोस्
  • दयालु रूपमा ह्यान्डल गर्नुहोस्

अर्को चरणहरू