फ्ल्यास कल
फ्ल्यास कल एक फोन प्रमाणीकरण विधि हो जसले फोन नम्बरहरू प्रमाणित गर्न SMS को सट्टा मिस कल प्रयोग गर्दछ। यो छिटो, अधिक सुरक्षित, र लागत-प्रभावी छ।
सिंहावलोकन
फ्ल्यास कल प्रमाणीकरण निम्न द्वारा काम गर्दछ:
- प्रयोगकर्ता अनुरोध प्रमाणीकरण
- प्रणालीले प्रयोगकर्ताको फोनमा कल सुरु गर्छ
- कल 1-2 घण्टी पछि स्वचालित रूपमा समाप्त हुन्छ
- प्रयोगकर्ताको एपले कलर आईडी कब्जा गर्छ
- कलर आईडी अपेक्षित ढाँचा विरुद्ध प्रमाणित छ
- प्रयोगकर्ता प्रमाणीकृत छ
फाइदाहरू
लागत-प्रभावी
- SMS भन्दा 10x सस्तो
- कुनै सन्देश वितरण शुल्क छैन
- उच्च मात्रा प्रमाणीकरण को लागी लागत कम
छिटो
- तत्काल प्रमाणीकरण (१-३ सेकेन्ड)
- एसएमएस डेलिभरीको लागि पर्खनु पर्दैन
- राम्रो प्रयोगकर्ता अनुभव
थप सुरक्षित
- एसएमएस भन्दा अवरोध गर्न गाह्रो
- सूचनाहरूमा कुनै OTP देखिने छैन
- सिम स्वैप आक्रमणहरूको प्रतिरोधी
विश्वव्यापी पहुँच
- SMS प्रतिबन्ध भएका देशहरूमा काम गर्दछ
- एसएमएस फिल्टरिङको साथ कुनै समस्या छैन
- विश्वव्यापी फोन अनुकूलता
आधारभूत फ्ल्यास कल
अनुरोध
{
"from": "YourApp",
"to": "+380XXXXXXXXX",
"type": "flashcall",
"messageData": {
"callerId": "+380123456789"
}
}
प्यारामिटरहरू
| प्यारामिटर | प्रकार | आवश्यक | विवरण |
|---|---|---|---|
| 'बाट' | स्ट्रिङ | हो | तपाईंको प्रेषक पहिचानकर्ता |
to |
स्ट्रिङ | हो | प्रापकको फोन नम्बर (E.164) |
प्रकार |
स्ट्रिङ | हो | "फ्लैशकल" मा सेट गर्नुहोस् |
callerId |
स्ट्रिङ | हो | फोन नम्बर जसले प्रयोगकर्तालाई कल गर्नेछ |
ttl |
पूर्णांक | छैन | सेकेन्डमा बाँच्ने समय (पूर्वनिर्धारित: 60) |
यसले कसरी काम गर्छ
१. प्रयोगकर्ताले फोन नम्बर प्रविष्ट गर्दछ
प्रयोगकर्ताले तपाइँको एपमा आफ्नो फोन नम्बर प्रदान गर्दछ:
२. फ्ल्यास कल अनुरोध गर्नुहोस्
तपाईंको सर्भरले फ्ल्यास कल प्रमाणीकरण अनुरोध गर्दछ:
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 |
पूर्णांक | सेकेन्डमा वैधता अवधि |
ढाँचा मिलान
एपीआईले केही अंकहरू मास्किङ एस्टेरिस्कको साथ ढाँचा फर्काउँछ:
तपाइँको एप हुनुपर्छ:
- आगमन कलर ID क्याप्चर गर्नुहोस्
- कलर ID बाट अंकहरू निकाल्नुहोस्
- ढाँचा विरुद्ध मिलाउनुहोस् (तारांकन = कुनै पनि अंक)
- 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:
परीक्षण
- विभिन्न उपकरणहरूमा परीक्षण
- विभिन्न वाहकहरु संग परीक्षण
- परीक्षण अनुमति अस्वीकार परिदृश्यहरू
- परीक्षण नेटवर्क टाइमआउट परिदृश्यहरू
सीमाहरू
प्लेटफर्म समर्थन
- सबै मोबाइल उपकरणहरूमा काम गर्दछ
- फोन कल क्षमता चाहिन्छ
- READ_PHONE_STATE अनुमति चाहिन्छ
- फोन बिना ट्याब्लेटमा काम नगर्न सक्छ
नेटवर्क
- सक्रिय फोन जडान आवश्यक छ
- खराब नेटवर्क अवस्थाहरूमा असफल हुन सक्छ
- क्यारियर प्रतिबन्धहरू लागू हुन सक्छ
- अन्तर्राष्ट्रिय दरहरू फरक हुन सक्छ
गोपनीयता
- प्रयोगकर्ताहरूले अज्ञात नम्बरहरू ब्लक गर्न सक्छन्
- केहि उपकरणहरूमा कल अवरुद्ध छ
- स्पष्ट अनुमतिहरू आवश्यक छ
- प्रयोगकर्ता गोपनीयता चिन्ताहरू विचार गर्नुहोस्
समस्या निवारण
कल प्राप्त भएन
- फोनमा सिग्नल छ जाँच गर्नुहोस्
- नम्बर ढाँचा प्रमाणित गर्नुहोस् (E.164)
- क्यारियर प्रतिबन्धहरू जाँच गर्नुहोस्
- एसएमएस फलब्याक प्रयास गर्नुहोस्
ढाँचा मिल्दैन
- सही कलर आईडी कब्जा सुनिश्चित गर्नुहोस्
- गैर-अंक क्यारेक्टरहरू पट्टी गर्नुहोस्
- ढाँचा ढाँचा जाँच गर्नुहोस्
- TTL अवधि भित्र प्रमाणित गर्नुहोस्
अनुमति अस्वीकार गरियो
- ठीकसँग अनुमतिहरू अनुरोध गर्नुहोस्
- किन अनुमति चाहिन्छ व्याख्या गर्नुहोस्
- वैकल्पिक (SMS) प्रदान गर्नुहोस्
- दयालु रूपमा ह्यान्डल गर्नुहोस्
अर्को चरणहरू
- Viber OTP - वैकल्पिक OTP डेलिभरी
- SMS सन्देश - SMS फलब्याक
- स्थिति जाँच गर्नुहोस् - फ्ल्यास कल स्थिति ट्र्याक गर्नुहोस्