Про OTP входящим звонком сейчас говорят все. С 1 ноября Flash Call на AutoCall.kz будет отключён, и бизнес ищет чем его заменить. А мы в поддержке каждый день объясняем одно и то же: как это вообще работает и кто кому звонит.
Поэтому собрали всё в одну статью: как работает входящий звонок, чем отличаются четыре способа, как мошенники обходят любые коды и как сделать проверку, на которой бот сломается. С мемами, ведь так будет веселее.
Зачем бизнесу вообще OTP
Код подтверждения нужен не для галочки. Он отвечает на простые вопросы.
- Номер правда принадлежит этому человеку, а не взят из головы или из чужой базы.
- Регистрируется живой человек, а не скрипт, который за ночь заводит тысячу аккаунтов.
- Вход, смену пароля или перевод делает владелец аккаунта, а не кто-то с его паролем.
Если OTP легко обойти, то в базе копятся фейки и бонусы за регистрацию уходят ботам, а ваши рассылки летят на мёртвые номера.
Как работает входящий звонок
Обычно код отправляем мы: SMS, сообщение в WhatsApp или в Telegram. Тут наоборот: звонит сам пользователь.
- Пользователь вводит свой номер у вас на сайте, например +7 701 123 45 67.
- Ваш сервер отправляет нам запрос, мы отвечаем номером, на который надо позвонить. Например +7 747 000 00 00.
- Вы показываете кнопку «Позвонить». На телефоне она сразу открывает набор.
- Пользователь звонит со своего номера. Мы видим, кто звонит и куда. Совпало, значит это он.
- Вам приходит вебхук: номер подтверждён. Не позвонил за 2 минуты? Значит не подтверждён.
Подробно с примерами запросов разобрали на странице входящего звонка.
Плюсы. Быстро: одно нажатие. Дёшево: маяк стоит от 2 ₸, это самый дешёвый способ из всех. Работает без интернета на всех операторах. И не нарушает п. 3-1 ст. 21 Закона «О связи», потому что звоним не мы, а звонит сам пользователь. Ну и необычно - такое запоминается.
Минус по сути один: звонить должен пользователь. Кто-то не любит звонить, у кого-то ноль на балансе. Для таких оставьте запасной вариант через WhatsApp или Telegram.
Как мошенники обходят OTP
Прежде чем ставить оценки, давайте честно обсудим несколько фактов о противнике. Информация взята из открытых источников. Вот "стандартный набор" мошенника:
- Сим-фермы и GSM-шлюзы. Ящик или целая стойка на десятки и сотни сим-карт. Принимают SMS, звонят, держат аккаунты в мессенджерах. Номера настоящие, местные.
- Номера в аренду. Сервисы, где номер для приёма SMS сдают на 15 минут за копейки. Получил код, вернул номер.
- Серые SIP-транки и подмена номера. Звонок идёт через интернет-телефонию, а в поле «кто звонит» подставляют любой номер. Операторы такое режут, но серые провайдеры находят дыры.
- Боты с ИИ. Распознать речь, прочитать картинку, сказать фразу синтезом сегодня стоит копейки.
Абсолютной защиты не бывает. Задача OTP сделать обход дороже, чем стоит то, ради чего его обходят.
P.S. Недавние события с дата-центрами Яндекс наглядно показали, что боты могут спокойно обходить защиту в социальных сетях X (бывш. Twitter), Threads и Instagram, где в основном используются OTP через SMS и WhatsApp.Разбор всех способов
SMS
Классика. Код приходит текстом, пользователь вводит его у вас.
| Удобство | ★★★★★ |
| Безопасность | ★★☆☆☆ |
| Сложность обхода для мошенника | ★★☆☆☆ |
WhatsApp и Telegram
Код приходит в мессенджер. В WhatsApp с кнопкой «Копировать», в Telegram от официального бота. Платите только за доставленные.
| Удобство | ★★★★★ |
| Безопасность | ★★★☆☆ |
| Сложность обхода для мошенника | ★★★☆☆ |
Маяк missed
Пользователь звонит, мы не берём трубку. Он слышит «занято», звонок для него бесплатный. Сам факт звонка с нужного номера и есть подтверждение.
| Удобство | ★★★★★ |
| Безопасность | ★★☆☆☆ |
| Сложность обхода для мошенника | ★★☆☆☆ |
Прослушать listen
Пользователь звонит, робот называет вашу компанию и код. Пользователь вводит код у вас в приложении. Вот так это звучит в трубке:
| Удобство | ★★★☆☆ |
| Безопасность | ★★★☆☆ |
| Сложность обхода для мошенника | ★★★☆☆ |
Набрать press
Код показан у вас на экране. Пользователь звонит и набирает его на клавиатуре телефона. Три ошибки, и всё, заявка не прошла.
| Удобство | ★★★☆☆ |
| Безопасность | ★★★★☆ |
| Сложность обхода для мошенника | ★★★☆☆ |
Назвать say
Пользователь звонит и называет код вслух: цифры или слово. Речь распознаём сами, на русском и казахском.
| Удобство | ★★★★☆ |
| Безопасность | ★★★★☆ |
| Сложность обхода для мошенника | ★★★★☆ |
Сводная таблица
| Способ | Удобство | Безопасность | Сложность обхода | Цена |
|---|---|---|---|---|
| SMS | ★★★★★ | ★★☆☆☆ | ★★☆☆☆ | от 18.95 ₸ |
| WhatsApp, Telegram | ★★★★★ | ★★★☆☆ | ★★★☆☆ | от 7 ₸ |
| Маяк missed | ★★★★★ | ★★☆☆☆ | ★★☆☆☆ | от 2 ₸ |
| Прослушать listen | ★★★☆☆ | ★★★☆☆ | ★★★☆☆ | от 5 ₸ |
| Набрать press | ★★★☆☆ | ★★★★☆ | ★★★☆☆ | от 3 ₸ |
| Назвать say | ★★★★☆ | ★★★★☆ | ★★★★☆ | от 7 ₸ |
| press или say с задачей | ★★★☆☆ | ★★★★★ | ★★★★★ | как press или say |
Хороший OTP это баланс между удобством, скоростью, ценой и защитой. Для обычной регистрации в доставке хватит маяка. Раздаёте бонусы за регистрацию? Берите press с задачей. Переводы денег и смена пароля? press с датой рождения или say.
Лайфхаки: делаем press и say злее
Самое интересное. Код на экране не обязан быть просто кодом. Вы сами решаете, что показать пользователю, а мы только сверяем ответ.
1. press: задача вместо кода
Не показывайте код, покажите пример. В запросе передаёте "code": "5922", а на экране
картинкой рисуете вот это:
Человек посчитает в уме за пять секунд. Боту надо распознать картинку, посчитать, позвонить с нужного номера и набрать ответ, и всё это успеть за 2 минуты. Можно, но каждая такая регистрация начинает стоить денег и ресурсов злоумышленнику.
Для переводов денег и других важных операций попросите набрать дату рождения в формате ДДММГГГГ, это 8 цифр. Её знает владелец аккаунта, а бот с чужим номером нет.
2. say: казахский, уровень «бог»
Назовите слово, которое на экране:
33 буквы! Мы сами с первого раза выговариваем через раз. Синтезу речи тоже тяжело, а настоящий казахстанец хотя бы попробует и посмеётся. Хотя для реальных пользователей лучше слово попроще, мы же не экзамен принимаем.
3. say: вопрос, который поймёт только местный
Код не обязательно показывать. Покажите картинку и спросите о ней.
Ответ: пятьсот семьдесят. Кто знает, тот поймёт. Зумер из Алматы ответит не задумываясь, ферма из
соседней страны будет гуглить, пока не кончатся 2 минуты. В запросе это просто
"code": "570". Засчитаем и «пятьсот семьдесят» и «бес жүз жетпіс теңге» как за
правильный
ответ.
4. say: ЧБД - что было дальше?
- Сломает трубку: скажите «трубка»
- Сядет на стул и упадёт: «стул»
- Недовольно махнёт рукой: «рука»
- Уронит шапку: «шапка»
Правильный ответ «рука», и это ваш код: "code": "рука". Видео все видели, а боты
нет. Говорящие картинки существуют!
5. Подбирайте вопрос под человека
Вопросы вы выбираете на своей стороне, так что их можно подстроить под пользователя. Молодым мем из тиктока, тем кто постарше «В каком городе стоит Байтерек?». Ответ «Астана» знает каждый, а вот бот из-за границы сначала должен понять, что такое Байтерек. Используя дешёвый TTS без казахского языка, мошенник скорее всего произнесёт "БайтЭрЭк" - что не будет считаться правильным ответом.
И ещё один момент о котором часто забывают. В press и say пользователь подтверждает не только номер. Он заодно доказывает, что он живой человек, понимает язык и может говорить. Это больше, чем даёт любая SMS.
Как подключить
Один запрос к API. Тип проверки в поле type, а код или слово в code:
POST https://autocall.kz/api/v1/otp/incoming-call
Authorization: Bearer {ваш_токен}
Content-Type: application/json
{
"number": "+77011234567",
"type": "press",
"code": "5922",
"language": ["kk", "ru"],
"brand": "Clinic Plus",
"callback_url": "https://example.kz/otp-hook"
}
В ответе придёт call_to: номер для кнопки «Позвонить». Итог прилетит вебхуком.
Попробовать на себе можно прямо на странице входящего звонка, это бесплатно.
Надеемся, что эта статья поможет вам лучше понять как работают OTP с входящими звонками.
Творите, импровизируйте и защищайте свои приложения, стартапы, сервера только надежными и безопасными OTP с адекватными ценами!