Как это работает
Подтверждение номера телефона звонком: как это работает
Подтверждение номера звонком — способ проверить телефон без SMS и без одноразового кода. Сервис выдаёт выделенный номер, пользователь звонит на него со своего телефона, вызов сбрасывается, а система по номеру вызывающего абонента понимает, что телефон принадлежит именно ему. Вводить ничего не нужно, отвечать на звонок тоже. Проверка живёт 60 секунд и стоит 0,20 ₽, причём списание происходит только за состоявшийся звонок.
Способ выглядит непривычно ровно один раз — пока не увидишь его в деле. Пользователь не ждёт SMS, не переключается в приложение сообщений, не копирует шесть цифр и не возвращается обратно в форму. Он нажимает одну кнопку, телефон начинает набор, через мгновение вызов обрывается — и регистрация продолжается сама.
Ниже — что происходит под капотом, чем это отличается от обычного flash call, почему звонок доходит там, где SMS теряется, и сколько всё это стоит.
Что такое проверка телефона звонком
Задача любой телефонной верификации одна: убедиться, что человек, который вводит номер в форму, действительно имеет к этому номеру доступ. Классическое решение — отправить на него одноразовый код и попросить ввести обратно. Раз код дошёл и был введён, значит, телефон у пользователя в руках.
Проверка номера звонком решает ту же задачу с другой стороны. Вместо того чтобы отправлять что-то абоненту и ждать, что он это получит и перепечатает, сервис просит его сделать исходящий вызов. Телефонная сеть передаёт номер вызывающего абонента вместе с вызовом — это тот же механизм, благодаря которому вы видите, кто вам звонит. Сервис сравнивает определившийся номер с тем, который пользователь ввёл в форму. Совпало — номер подтверждён.
Разница принципиальная. В SMS-сценарии доказательством служит доставленное сообщение, а его доставка зависит от цепочки посредников. В сценарии со звонком доказательством служит сам факт исходящего вызова с проверяемого номера, и никакого содержимого передавать не требуется.
| SMS-код | Звонок на выделенный номер | |
|---|---|---|
| Что делает пользователь | ждёт сообщение, открывает его, запоминает или копирует код, возвращается в форму, вводит | нажимает кнопку вызова и сбрасывает |
| Число действий | пять | два |
| Что подтверждает факт | что сообщение дошло и было прочитано | что вызов совершён с проверяемого номера |
| Где ломается | сообщение не дошло, пришло с задержкой, код введён с ошибкой | номер вызывающего не определяется, звонок с другого телефона |
| За что списываются деньги | за отправку, независимо от доставки | за состоявшийся звонок |
| Ввод кода | обязателен | не нужен |
У способа есть и обратная сторона, о ней честно в разделе про ограничения: он работает, только пока номер вызывающего абонента передаётся сетью, и только для российских номеров.
Как проходит подтверждение: четыре шага
Со стороны интеграции всё сводится к двум запросам к API — на создание проверки и на получение её результата.
- Ваша система создаёт проверку. Отправляет ключ проекта и номер пользователя в формате E.164 (
+79161234567). В ответ приходит идентификатор проверки и выделенный номер, на который нужно позвонить. - Вы показываете этот номер пользователю. На мобильных — ссылкой
tel:, чтобы набор открывался в одно касание и номер не пришлось переписывать руками. Рядом полезен таймер: у проверки есть срок. - Пользователь звонит. Отвечать на вызов не нужно и невозможно — сервис фиксирует входящий и сбрасывает соединение. Звонок сопоставляется с проверкой по паре «выделенный номер + номер вызывающего абонента».
- Ваша система забирает результат. Опрашивает статус проверки по её идентификатору:
PENDING— звонка ещё не было,CONFIRMED— номер подтверждён,EXPIRED— 60 секунд истекли, звонка не поступило.
Важная деталь, которую часто понимают неправильно: выделенный номер не закрепляется за пользователем. Один и тот же номер из пула одновременно обслуживает проверки разных людей — уникальной должна быть только пара «номер плюс звонящий». Поэтому пул не «заканчивается» при всплеске регистраций и не требует запаса номеров под пиковую нагрузку: сервис сам подбирает свободную комбинацию и распределяет вызовы по пулу.
Вторая деталь — про 60 секунд. Это срок жизни проверки, а не срок аренды номера. Если пользователь отвлёкся и позвонил через две минуты, вызов уже ни к чему не привяжется: проверка к тому моменту помечена как истёкшая. Правильная реакция интерфейса — не «ошибка», а кнопка «Позвонить ещё раз», создающая новую проверку.
Чем это отличается от обычного flash call
Термин flash call описывает два зеркальных сценария, и путаница между ними — главный источник недопонимания при выборе провайдера.
Обычный flash call. Звонит сервис. Пользователь видит входящий вызов, который тут же обрывается, а приложение читает номер входящего и подставляет его последние цифры как код подтверждения. Пользователю иногда даже не нужно ничего делать — но только если приложение получило доступ к журналу вызовов.
Здесь и находится слабое место. Доступ к журналу вызовов — чувствительное разрешение: в Google Play его выдача ограничена и требует обоснования, в iOS публичного API для чтения журнала нет вообще, а в браузере такой сценарий недоступен по определению. На практике обычный flash call — это история про Android-приложение с одобренным разрешением, и больше почти нигде.
Обратный (reverse) flash call. Звонит пользователь. Сервису не нужен доступ ни к журналу вызовов, ни к SMS — он видит вызов на своей стороне, потому что вызов пришёл к нему. Отсюда следует, что сценарий одинаково работает и в мобильном приложении, и на обычном сайте в браузере, и никаких особых разрешений не требует.
| Обычный flash call | Обратный flash call | |
|---|---|---|
| Кто звонит | сервис пользователю | пользователь сервису |
| Разрешения в приложении | доступ к журналу вызовов | не нужны |
| Работает на сайте | нет | да |
| Работает на iOS | нет | да |
| Что вводит пользователь | цифры из номера (или автоподстановка) | ничего |
| Что может помешать | отказ в разрешении, ограничения магазинов приложений | номер вызывающего не определяется |
FlashCall работает по второй схеме. Подробный разбор терминологии — включая написания «флеш колл» и синоним call to auth — в отдельном материале что такое flash call и обратный flash call.
Почему звонок доходит там, где SMS не дошла
Чтобы SMS с кодом оказалась на экране, она проходит цепочку: ваш сервис → агрегатор → оператор получателя → устройство. На каждом переходе есть очередь, фильтр и возможность потерять сообщение. Массовые рассылки фильтруются как спам, роуминг и запрет на приём международных сообщений отсекают часть абонентов, переполненная память устройства не даёт сообщение принять, а задержка на стороне агрегатора превращает код в бесполезный — к моменту доставки он уже истёк.
Для бизнеса это не абстрактная проблема, а прямые потери: недоставленная SMS — это не отправленный впустую рубль, а несостоявшаяся регистрация. Причём отправка тарифицируется независимо от того, дошло сообщение или нет.
Исходящий вызов идёт по голосовой сети напрямую. Там нет ни фильтрации массовых рассылок, ни очереди на доставку, ни спам-папки — соединение либо устанавливается, либо нет, и результат виден мгновенно. Отдельно важно, что инициатива на стороне пользователя: он не ждёт, пока до него что-то доедет, а сам совершает действие и сразу видит результат.
Подробный разбор причин, по которым коды не доходят, и что с этим делать пользователю — в материале почему не приходит код подтверждения.
Обещать стопроцентную доставляемость было бы нечестно, поэтому назовём и границы. Верификация телефона звонком не сработает в трёх случаях: у абонента скрыт номер, звонок идёт через корпоративную АТС с подменой исходящего номера, или пользователь находится за пределами России — пул состоит из российских номеров. Разумная архитектура оставляет запасной способ подтверждения: звонок как основной сценарий, SMS как резервный для тех, у кого он не прошёл.
Сколько стоит подтверждение номера
Одно подтверждение — 0,20 ₽. Абонентской платы нет, минимального ежемесячного объёма нет, за подключение платить не нужно.
Ключевое отличие от SMS — в модели списания. Деньги списываются в момент, когда звонок зафиксирован, то есть за результат. Проверка, по которой звонка не было и которая ушла в EXPIRED, не тарифицируется вообще. Вы не платите за попытки, за недоставку и за пользователей, которые передумали на середине формы.
| Подтверждений в месяц | Стоимость при 100 % дозвона | При 80 % дозвона |
|---|---|---|
| 1 000 | 200 ₽ | 160 ₽ |
| 10 000 | 2 000 ₽ | 1 600 ₽ |
| 100 000 | 20 000 ₽ | 16 000 ₽ |
Второй столбец — не скидка, а прямое следствие модели: если из десяти тысяч запущенных проверок звонком завершились восемь тысяч, платить вы будете за восемь. В SMS-сценарии заплатить пришлось бы за все десять тысяч отправок.
Проверка не создастся, если на балансе меньше стоимости одного подтверждения — API вернёт ошибку о недостатке средств. Это стоит обработать в коде заранее и завести оповещение о низком балансе. Актуальные цены и условия — на странице тарифов; подробнее о том, как вообще выбирать провайдера и на что смотреть кроме цены, — в разборе сервисов подтверждения номера.
Где применяют верификацию номера звонком
Сценариев ровно столько же, сколько у SMS-кода, — способ подтверждения меняется, задача остаётся.
- Регистрация. Отсечь фейковые аккаунты и получить рабочий контакт. Здесь короткий сценарий даёт больше всего: чем меньше шагов между «ввёл номер» и «зарегистрирован», тем меньше отвалов.
- Вход в аккаунт. Замена SMS-кода при авторизации, в том числе полностью без пароля. Как это устроено — в материале про авторизацию по звонку.
- Подтверждение операции. Смена пароля, изменение реквизитов, подтверждение заказа — там, где нужно доказать, что действие совершает владелец аккаунта.
- Оформление заказа и доставка. Проверка контактного номера до того, как заказ уйдёт в сборку, а курьер — по адресу с неверным телефоном.
- Объявления и маркетплейсы. Верификация продавца, борьба с мультиаккаунтами и фейковыми регистрациями.
Разбор по отраслям с конкретными задачами — в статье где нужна верификация телефона.
Как подключить
Интеграция занимает несколько часов и не требует SDK: это два HTTP-запроса к REST API.
- Зарегистрируйтесь и создайте проект — он получит собственный ключ.
- На бэкенде вызовите создание проверки, передав ключ проекта и номер пользователя. Ключ хранится только на сервере: во фронтенде его размещать нельзя.
- Отдайте выделенный номер во фронтенд и покажите его пользователю ссылкой
tel:с таймером на 60 секунд. - Опрашивайте статус проверки, пока он не станет
CONFIRMEDилиEXPIRED, и обработайте оба исхода.
Пошаговое описание запросов, форматов и типичных ошибок интеграции — в материале про API подтверждения номера. Инструкция с вашим собственным ключом открывается в кабинете на странице проекта сразу после регистрации.
Частые вопросы
- Что будет, если пользователь позвонит с другого номера?
Проверка не подтвердится. Совпадение ищется по паре «выделенный номер + номер вызывающего абонента», и звонок с телефона, который не был указан при создании проверки, к ней не привяжется. Через 60 секунд она перейдёт в статус
EXPIRED, и деньги за неё списаны не будут.- Звонок платный для пользователя?
Оператор тарифицирует его как обычный вызов на российский номер, по тарифу абонента. Но соединение сбрасывается до ответа, а неотвеченные вызовы операторы не тарифицируют — на практике подтверждение обходится пользователю бесплатно.
- Сработает ли проверка, если у вызывающего скрыт номер?
Нет. Определение номера вызывающего абонента — основа всего способа: если номер не передаётся, сопоставить звонок с проверкой не с чем. Так бывает при включённом антиопределителе и на корпоративных АТС, которые подменяют исходящий номер. Для таких пользователей нужен запасной способ подтверждения.
- Что делать, если звонка так и не было?
Через 60 секунд после создания проверка сама переходит в
EXPIRED— опрос статуса вернёт его вместоPENDING. Это штатная ситуация: покажите пользователю кнопку «Позвонить ещё раз» и создайте новую проверку. Тарифицируется только состоявшийся звонок, поэтому повторные попытки ничего не стоят.- Сколько проверок можно запускать одновременно?
Ограничения на общее число параллельных проверок в проекте нет. Единственное требование — уникальность пары «выделенный номер + номер звонящего» среди ожидающих. Сервис сам подбирает подходящий номер из пула и распределяет по нему нагрузку, так что со стороны интеграции об этом думать не нужно.
- Что произойдёт, если на балансе закончатся деньги?
Проверка просто не создастся: запрос на выдачу номера вернёт ошибку о недостатке средств. Уже созданные проверки при этом дорабатывают штатно. Обработайте эту ошибку в коде заранее — иначе форма регистрации молча перестанет работать, когда баланс дойдёт до нуля.