Help Center Flashcall

Flashcall

#फ्ल्यास कल

फ्ल्यास कल एक फोन प्रमाणीकरण विधि हो जसले फोन नम्बरहरू प्रमाणित गर्न 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) प्रदान गर्नुहोस्
  • दयालु रूपमा ह्यान्डल गर्नुहोस्

अर्को चरणहरू