کد تلگرام
ورود با شماره تلفن و کد ۶ رقمی که به جای پیامک از طریق ربات تلگرام خودتان ارسال میشود. ربات را در کنسول ابرووا راه بیندازید؛ کاربران یک بار شمارهشان را با ربات به اشتراک میگذارند و از آن به بعد کدها را همانجا میگیرند.
کاربر شماره تلفنش را وارد میکند و یک کد ورود ۶ رقمی از ربات تلگرام پروژهی شما میگیرد. جایی که تلگرام رایج است، این روش جای پیامک را میگیرد، بدون هزینه برای هر پیام. تلگرام تأیید میکند که شماره متعلق به حساب تلگرام کاربر است، پس کد همیشه فقط به صاحب آن شماره میرسد.
تلگرام در ایران فیلتر است اما پرکاربرد است، و به Google یا Apple وابسته نیست. کاربرانی که تلگرام ندارند به روش دیگری مثل ایمیل یا لینک یکبارمصرف نیاز دارند.
ساخت و وصل کردن ربات#
- در تلگرام با @BotFather صحبت کنید،
/newbotرا بفرستید و یک نام و username برای رباتتان انتخاب کنید (مثلاًMyAppLoginBot). BotFather یک bot token به شما میدهد. - در کنسول ابرووا، Abrova Auth › روشهای ورود را باز کنید، تلگرام را روشن کنید و bot token را جایگذاری کنید.
Abrova Auth توکن را با تلگرام بررسی میکند و ربات را وصل میکند. توکن رمزگذاریشده ذخیره میشود و دیگر نمایش داده نمیشود. از ربات فقط برای Abrova Auth استفاده کنید: ابرووا پیامهای ورودی آن را در دست میگیرد.
کاربر چطور وارد میشود#
- ۱کاربر شماره تلفن را وارد میکندبا قالب بینالمللی، مثلاً +989121234567. اپ شما requestTelegramCode را صدا میزند.
- ۲فقط بار اول: کاربر ربات را وصل میکنداگر این شماره هنوز با ربات شما صحبت نکرده باشد، پاسخ sent: false و یک botUrl دارد. آن را باز کنید: کاربر Start را میزند و روی «Share my phone number» ضربه میزند.
- ۳کد در تلگرام میرسدیک کد ۶ رقمی با اعتبار ۵ دقیقه. بعد از بار اول، کدها بلافاصله میرسند (sent: true).
- ۴کاربر کد را تایپ میکنداپ شما verifyTelegramCode را با شماره و کد صدا میزند.
ربات فقط شمارهی خودِ کاربر را میپذیرد که با دکمهی تلگرام به اشتراک گذاشته شده باشد. مخاطبِ فورواردشدهی شخص دیگر رد میشود.
کد#
// Flutter
final auth = AbrovaAuth.instance;
final r = await auth.requestTelegramCode('+989121234567');
if (!r.sent && r.botUrl != null) {
await launchUrl(Uri.parse(r.botUrl!)); // url_launcher: the user starts the bot and shares the number
}
// ... the user types the code from Telegram:
await auth.verifyTelegramCode('+989121234567', code);// iOS
let r = try await AbrovaAuth.shared.requestTelegramCode(phone: "+989121234567")
if !r.sent, let url = r.botURL { await UIApplication.shared.open(url) }
try await AbrovaAuth.shared.verifyTelegramCode(phone: "+989121234567", code: code)// Android
val r = AbrovaAuth.shared.requestTelegramCode("+989121234567")
if (!r.sent) startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(r.botUrl)))
AbrovaAuth.shared.verifyTelegramCode("+989121234567", code)// Web and React Native
const { sent, botUrl } = await auth.requestTelegramCode({ phone: '+989121234567' });
if (!sent && botUrl) window.open(botUrl); // React Native: Linking.openURL(botUrl)
await auth.verifyTelegramCode({ phone: '+989121234567', code });اولین کد موفق برای یک شماره، کاربر را میسازد. کدهای بعدی برای آن شماره به همان کاربر وارد میشوند.
قواعد#
| قاعده | مقدار |
|---|---|
| کد | ۶ رقم، با اعتبار ۵ دقیقه |
| تلاشها | ۵ بار برای هر کد؛ بعد کد جدید بخواهید |
| کد برای هر شماره | ۵ عدد در ساعت |
| قالب شماره | بینالمللی، با + و کد کشور |
وقتی تلگرام روشن است، getMethods() نام کاربری ربات را بهصورت telegramBot برمیگرداند، اگر بخواهید آن را نشان دهید («کدها از @MyAppLoginBot میآیند»).
خطاها#
| کد | معنا |
|---|---|
| INVALID_CREDENTIALS | کد اشتباه است، منقضی شده، یا تعداد تلاشها تمام شده است. |
| INVALID_INPUT | شماره تلفن در قالب بینالمللی نیست، یا کد ۶ رقمی نیست. |
| RATE_LIMITED | کدهای بیش از حد برای این شماره یا از این مکان. بعد از retryAfterSec دوباره امتحان کنید. |
| NOT_CONFIGURED | تلگرام روشن است، اما هیچ رباتی وصل نیست. |
| USER_DISABLED | این کاربر را در کنسول غیرفعال کردهاید. |
| METHOD_DISABLED | ورود با تلگرام برای پروژه خاموش است. |