Flash ခေါ်ဆိုမှု
Flash Call သည် ဖုန်းနံပါတ်များကို အတည်ပြုရန် SMS အစား လွတ်သွားသောခေါ်ဆိုမှုကို အသုံးပြုသည့် ဖုန်းအတည်ပြုနည်းလမ်းတစ်ခုဖြစ်သည်။ ၎င်းသည် ပိုမိုမြန်ဆန်၊ ပိုမိုလုံခြုံပြီး ကုန်ကျစရိတ်သက်သာသည်။
ခြုံငုံသုံးသပ်ချက်
Flash Call အတည်ပြုခြင်းမှာ အောက်ပါတို့ လုပ်ဆောင်သည်-
- အသုံးပြုသူတောင်းဆိုမှုများကို အတည်ပြုခြင်း။
- စနစ်သည် သုံးစွဲသူ၏ဖုန်းသို့ ခေါ်ဆိုမှုကို စတင်သည်။
- 1-2 မြည်ပြီးနောက် ခေါ်ဆိုမှုကို အလိုအလျောက် ရပ်ဆိုင်းပါသည်။
- အသုံးပြုသူ၏အက်ပ်သည် ခေါ်ဆိုသူ ID ကို ဖမ်းယူသည်။
- ခေါ်ဆိုသူ ID ကို မျှော်လင့်ထားသည့်ပုံစံနှင့် ကိုက်ညီကြောင်း အတည်ပြုထားသည်။
- အသုံးပြုသူသည် စစ်မှန်ကြောင်းသက်သေပြထားသည်။
အကျိုးကျေးဇူး
ကုန်ကျစရိတ်သက်သာခြင်း။
- SMS ထက် 10 ဆအထိ စျေးသက်သာသည်။
- မက်ဆေ့ချ်ပေးပို့ခမရှိပါ။
- ပမာဏမြင့်မားစွာ အတည်ပြုခြင်းအတွက် ကုန်ကျစရိတ်ကို လျှော့ချပါ။
ပိုမြန်တယ်။
- ချက်ချင်းအတည်ပြုခြင်း (1-3 စက္ကန့်)
- SMS ပေးပို့ခြင်းကို စောင့်ဆိုင်းခြင်းမရှိပါ။
- ပိုမိုကောင်းမွန်သောအသုံးပြုသူအတွေ့အကြုံ
ပိုလုံခြုံတယ်။
- SMS ထက် ကြားဖြတ်ရခက်သည်။
- အကြောင်းကြားချက်များတွင် OTP မတွေ့ပါ။
- SIM လဲလှယ်တိုက်ခိုက်မှုများကိုခံနိုင်ရည်ရှိသည်။
ကမ္ဘာလုံးဆိုင်ရာ လက်လှမ်းမီမှု
- SMS ကန့်သတ်ချက်များရှိသောနိုင်ငံများတွင်အလုပ်လုပ်သည်။
- SMS စစ်ထုတ်ခြင်းတွင် ပြဿနာမရှိပါ။
- Universal ဖုန်းနှင့်လိုက်ဖက်မှု
အခြေခံ Flash Call
တောင်းဆိုခြင်း။
{
"from": "YourApp",
"to": "+380XXXXXXXXX",
"type": "flashcall",
"messageData": {
"callerId": "+380123456789"
}
}
ကန့်သတ်ချက်များ
| ကန့်သတ်ချက် | ရိုက် | လိုအပ်သည် | ဖော်ပြချက် |
|---|---|---|---|
from |
string | ဟုတ်တယ် | သင့်ပေးပို့သူအမှတ်အသား |
to |
string | ဟုတ်တယ် | လက်ခံသူဖုန်းနံပါတ် (E.164) |
ရိုက် |
string | ဟုတ်တယ် | "flashcall" |
callerId |
string | ဟုတ်တယ် | အသုံးပြုသူ |
ttl |
ကိန်းပြည့် | မရှိ | စက္ကန့်အတွင်း တိုက်ရိုက်ထုတ်လွှင့်ရန် အချိန် (ပုံမှန်- 60) |
ဘယ်လိုအလုပ်လုပ်လဲ။
1. အသုံးပြုသူသည် ဖုန်းနံပါတ်ကို ထည့်သွင်းပါ။
အသုံးပြုသူက သင့်အက်ပ်တွင် ၎င်းတို့၏ဖုန်းနံပါတ်ကို ပေးသည်-
2. Flash Call တောင်းဆိုပါ။
သင့်ဆာဗာသည် flash ခေါ်ဆိုမှု အတည်ပြုချက်ကို တောင်းဆိုသည်-
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. API တုံ့ပြန်မှု
API သည် မျှော်လင့်ထားသည့် ခေါ်ဆိုသူ ID ပုံစံကို ပြန်ပေးသည်-
{
"messagelistId": 123456,
"messages": [
{
"messageId": "abc123def456",
"status": "accepted",
"callerId": "+380123456789",
"pattern": "***456789",
"to": "+380XXXXXXXXX"
}
]
}
4. စတင်ခေါ်ဆိုပါ။
စနစ်သည် အသုံးပြုသူ၏ဖုန်းသို့ ခေါ်ဆိုမှုကို စတင်ပြီး 1-2 မြည်ပြီးနောက် ရပ်ဆိုင်းသည်။
5. ခေါ်ဆိုသူ ID ကို ရိုက်ကူးပါ။
အသုံးပြုသူ၏အက်ပ်သည် အဝင်ခေါ်ဆိုမှု၏ခေါ်ဆိုသူ ID ကိုဖမ်းယူသည်-
// Android example
val cursor = contentResolver.query(
CallLog.Calls.CONTENT_URI,
arrayOf(CallLog.Calls.NUMBER),
null, null,
CallLog.Calls.DATE + " DESC"
)
6. Pattern ကို အတည်ပြုပါ။
ဖမ်းယူထားသော ခေါ်ဆိုသူ ID ကို မျှော်လင့်ထားသည့်ပုံစံနှင့် နှိုင်းယှဉ်ပါ-
// 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);
}
အကောင်အထည်ဖော်မှု ဥပမာများ
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
}
}
ဝဘ် (ဆာဗာ-ဘေး)
// 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 |
string | သီးသန့်အတည်ပြု ID |
အဆင့်အတန်း |
string | အခြေအနေ- လက်ခံသည်၊ ပယ်ချသည် |
callerId |
string | ခေါ်ဆိုသူ ID နံပါတ် အပြည့်အစုံ |
ပုံစံ |
string | ကိုက်ညီရန် ပုံစံ (ဂဏန်း + ကြယ်ပွင့်များ) |
to |
string | လက်ခံသူဖုန်းနံပါတ် |
ttl |
ကိန်းပြည့် | သက်တမ်း စက္ကန့် |
Pattern ကိုက်ညီခြင်း။
API သည် ဂဏန်းအချို့ကို ဖုံးအုပ်ထားသော ခရေပွင့်များဖြင့် ပုံစံတစ်ခုကို ပြန်ပေးသည်-
သင့်အက်ပ်သည်-
- အဝင်ခေါ်ဆိုသူ ID ကိုရိုက်ပါ။
- ခေါ်ဆိုသူ ID မှ ဂဏန်းများကို ထုတ်ယူပါ။
- ပုံစံနှင့် ကိုက်ညီသည် (ကြယ်ပွင့် = မည်သည့်ဂဏန်း)
- TTL ကာလအတွင်း ကိုက်ညီမှုရှိမရှိ စစ်ဆေးပါ။
SMS သို့ ပြန်ပြောင်း
Flash Call မအောင်မြင်ပါက၊ SMS သို့ အလိုအလျောက် ပြန်ရောက်သွားသည်-
{
"from": "YourApp",
"to": "+380XXXXXXXXX",
"type": "flashcall",
"messageData": {
"callerId": "+380123456789"
},
"fallback": {
"type": "sms",
"text": "Your verification code is: 123456"
},
"ttl": 60
}
Cases ကိုအသုံးပြုပါ။
အကောင့်မှတ်ပုံတင်ခြင်း။
SMS ကုန်ကျစရိတ်မပါဘဲ စာရင်းသွင်းစဉ်အတွင်း ဖုန်းနံပါတ်များကို အတည်ပြုပါ။
ဝင်ရောက်စစ်ဆေးခြင်း
flash call ကို အသုံးပြု၍ two-factor authentication
ဖုန်းနံပါတ်အပ်ဒိတ်
အသုံးပြုသူ ပရိုဖိုင်ကို အပ်ဒိတ်လုပ်သည့်အခါ ဖုန်းနံပါတ်အသစ်ကို အတည်ပြုပါ။
ငွေလွှဲအတည်ပြုခြင်း။
flash call ဖြင့် တန်ဖိုးမြင့် ငွေလွှဲမှုများကို အတည်ပြုပါ။
အကောင်းဆုံးအလေ့အကျင့်များ
TTL
- ✅ TTL ကို 60-90 စက္ကန့်သတ်မှတ်ပါ။
- ✅ သက်တမ်းကုန်ဆုံးပြီးနောက် ပြန်လည်ကြိုးစားရန် အသုံးပြုသူအား ခွင့်ပြုပါ။
- ❌ TTL ကို စက္ကန့် 120 ထက် ပိုကြာအောင် မသုံးပါနဲ့။
အသုံးပြုသူအတွေ့အကြုံ
- "ခေါ်ဆိုရန်စောင့်နေသည်..." မက်ဆေ့ချ်ကို ပြပါ။
- နှစ်သစ်တိုင်တိုင်ပြသခြင်း (60 စက္ကန့်)
- "အစား SMS ကိုသုံးပါ" ရန်ရွေးချယ်ခွင့်ပေးပါ။
- ခေါ်ဆိုသူ ID ကို အလိုအလျောက်ရှာဖွေပြီး အတည်ပြုပါ။
မှားယွင်းကိုင်တွယ်ခြင်း။
- ပျောက်ဆုံးနေသောဖုန်းခွင့်ပြုချက်များကိုကိုင်တွယ်ပါ။
- TTL သက်တမ်းကုန်ဆုံးပြီးနောက် အချိန်ကုန်သွားသည်။
- SMS အစားထိုးရွေးချယ်မှုကို ပေးပါ။
- ရှင်းလင်းသောအမှားမက်ဆေ့ချ်များကိုပြသပါ။
ခွင့်ပြုချက်များ
Flash မခေါ်ဆိုမီ ဖုန်းခွင့်ပြုချက်တောင်းခံပါ-
Android-
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
iOS-
စမ်းသပ်ခြင်း။
- မတူညီသောစက်ပစ္စည်းများတွင်စမ်းသပ်ပါ။
- မတူညီသောသယ်ဆောင်သူနှင့်အတူစမ်းသပ်ပါ။
- စမ်းသပ်ခွင့်ပြုချက်ငြင်းဆိုမှုအခြေအနေများ
- ကွန်ရက် အချိန်ကုန်သည့် အခြေအနေများကို စမ်းသပ်ပါ။
ကန့်သတ်ချက်များ
ပလပ်ဖောင်းပံ့ပိုးမှု
- မိုဘိုင်းကိရိယာအားလုံးတွင်အလုပ်လုပ်သည်။
- ဖုန်းခေါ်ဆိုမှုစွမ်းရည်လိုအပ်သည်။
- READ_PHONE_STATE ခွင့်ပြုချက် လိုအပ်ပါသည်။
- ဖုန်းမပါဘဲ တက်ဘလက်များတွင် အလုပ်မလုပ်ရပါ။
ကွန်ရက်
- တက်ကြွသောဖုန်းချိတ်ဆက်မှုလိုအပ်သည်။
- ညံ့ဖျင်းသောကွန်ရက်အခြေအနေများတွင်ပျက်ကွက်နိုင်သည်။
- ဝန်ဆောင်မှုပေးသူ ကန့်သတ်ချက်များ သက်ရောက်နိုင်သည်။
- နိုင်ငံတကာနှုန်းထားများ ကွဲပြားနိုင်သည်။
ကိုယ်ရေးကိုယ်တာ
- အသုံးပြုသူများသည် အမည်မသိနံပါတ်များကို ပိတ်ဆို့နိုင်သည်။
- အချို့စက်ပစ္စည်းများတွင် ခေါ်ဆိုမှုပိတ်ဆို့ခြင်း ရှိသည်။
- ပြတ်သားသောခွင့်ပြုချက်များလိုအပ်သည်။
- သုံးစွဲသူ၏ ကိုယ်ရေးကိုယ်တာဆိုင်ရာ စိုးရိမ်မှုများကို ထည့်သွင်းစဉ်းစားပါ။
ပြဿနာဖြေရှင်းခြင်း။
ဖုန်းခေါ်ဆိုမှု လက်ခံမရပါ။
- ဖုန်းတွင် signal ရှိသည်ကိုစစ်ဆေးပါ။
- နံပါတ်ဖော်မတ် (E.164) အတည်ပြုပါ
- ဝန်ဆောင်မှုပေးသူ၏ကန့်သတ်ချက်များကိုစစ်ဆေးပါ။
- SMS အမှားကို စမ်းကြည့်ပါ။
ပုံစံက မကိုက်ညီပါ။
- မှန်ကန်သောခေါ်ဆိုသူ ID ကိုဖမ်းယူကြောင်းသေချာပါစေ။
- ဂဏန်းမဟုတ်သော အက္ခရာများကို ဖယ်ထုတ်ပါ။
- ပုံစံဖော်မတ်စစ်ဆေးပါ။
- TTL ကာလအတွင်း အတည်ပြုပါ။
ခွင့်ပြုချက် ငြင်းဆိုထားသည်။
- ခွင့်ပြုချက်မှန်ကန်စွာတောင်းဆိုပါ။
- အဘယ်ကြောင့်ခွင့်ပြုချက်လိုအပ်ကြောင်းရှင်းပြပါ။
- အခြားရွေးချယ်စရာ (SMS) ပေးပါ။
- သပ်ရပ်စွာ ကိုင်တွယ်ပါ။
နောက်အဆင့်များ
- Viber OTP - အစားထိုး OTP ပေးပို့ခြင်း။
- SMS Messages - SMS ပေးပို့မှု
- Check Status - flash call status ကို ခြေရာခံပါ။