[{"data":1,"prerenderedAt":7779},["ShallowReactive",2],{"blog-index":3},[4,558,974,1413,1787,2159,2526,2856,3149,3529,3799,4110,4386,4775,5155],{"id":5,"title":6,"body":7,"category":516,"cta":517,"description":522,"draft":523,"extension":524,"faq":525,"h1":544,"meta":545,"navigation":546,"order":547,"path":548,"published":549,"related":550,"seo":554,"stem":555,"summary":556,"updated":549,"__hash__":557},"blog\u002Fblog\u002Fpodtverzhdenie-nomera-zvonkom.md","Подтверждение номера телефона звонком — верификация без SMS",{"type":8,"value":9,"toc":505},"minimark",[10,14,17,22,25,28,31,124,127,131,134,184,191,194,198,201,207,210,216,299,308,312,315,318,321,328,331,335,342,348,401,404,416,420,423,460,467,471,474,497],[11,12,13],"p",{},"Способ выглядит непривычно ровно один раз — пока не увидишь его в деле. Пользователь не ждёт SMS, не переключается в приложение сообщений, не копирует шесть цифр и не возвращается обратно в форму. Он нажимает одну кнопку, телефон начинает набор, через мгновение вызов обрывается — и регистрация продолжается сама.",[11,15,16],{},"Ниже — что происходит под капотом, чем это отличается от обычного flash call, почему звонок доходит там, где SMS теряется, и сколько всё это стоит.",[18,19,21],"h2",{"id":20},"chto-takoe-proverka-telefona-zvonkom","Что такое проверка телефона звонком",[11,23,24],{},"Задача любой телефонной верификации одна: убедиться, что человек, который вводит номер в форму, действительно имеет к этому номеру доступ. Классическое решение — отправить на него одноразовый код и попросить ввести обратно. Раз код дошёл и был введён, значит, телефон у пользователя в руках.",[11,26,27],{},"Проверка номера звонком решает ту же задачу с другой стороны. Вместо того чтобы отправлять что-то абоненту и ждать, что он это получит и перепечатает, сервис просит его сделать исходящий вызов. Телефонная сеть передаёт номер вызывающего абонента вместе с вызовом — это тот же механизм, благодаря которому вы видите, кто вам звонит. Сервис сравнивает определившийся номер с тем, который пользователь ввёл в форму. Совпало — номер подтверждён.",[11,29,30],{},"Разница принципиальная. В SMS-сценарии доказательством служит доставленное сообщение, а его доставка зависит от цепочки посредников. В сценарии со звонком доказательством служит сам факт исходящего вызова с проверяемого номера, и никакого содержимого передавать не требуется.",[32,33,36],"div",{"className":34},[35],"md-table",[37,38,39,54],"table",{},[40,41,42],"thead",{},[43,44,45,48,51],"tr",{},[46,47],"th",{},[46,49,50],{},"SMS-код",[46,52,53],{},"Звонок на выделенный номер",[55,56,57,69,80,91,102,113],"tbody",{},[43,58,59,63,66],{},[60,61,62],"td",{},"Что делает пользователь",[60,64,65],{},"ждёт сообщение, открывает его, запоминает или копирует код, возвращается в форму, вводит",[60,67,68],{},"нажимает кнопку вызова и сбрасывает",[43,70,71,74,77],{},[60,72,73],{},"Число действий",[60,75,76],{},"пять",[60,78,79],{},"два",[43,81,82,85,88],{},[60,83,84],{},"Что подтверждает факт",[60,86,87],{},"что сообщение дошло и было прочитано",[60,89,90],{},"что вызов совершён с проверяемого номера",[43,92,93,96,99],{},[60,94,95],{},"Где ломается",[60,97,98],{},"сообщение не дошло, пришло с задержкой, код введён с ошибкой",[60,100,101],{},"номер вызывающего не определяется, звонок с другого телефона",[43,103,104,107,110],{},[60,105,106],{},"За что списываются деньги",[60,108,109],{},"за отправку, независимо от доставки",[60,111,112],{},"за состоявшийся звонок",[43,114,115,118,121],{},[60,116,117],{},"Ввод кода",[60,119,120],{},"обязателен",[60,122,123],{},"не нужен",[11,125,126],{},"У способа есть и обратная сторона, о ней честно в разделе про ограничения: он работает, только пока номер вызывающего абонента передаётся сетью, и только для российских номеров.",[18,128,130],{"id":129},"kak-prohodit-podtverzhdenie-chetyre-shaga","Как проходит подтверждение: четыре шага",[11,132,133],{},"Со стороны интеграции всё сводится к двум запросам к API — на создание проверки и на получение её результата.",[135,136,137,150,160,166],"ol",{},[138,139,140,144,145,149],"li",{},[141,142,143],"strong",{},"Ваша система создаёт проверку."," Отправляет ключ проекта и номер пользователя в формате E.164 (",[146,147,148],"code",{},"+79161234567","). В ответ приходит идентификатор проверки и выделенный номер, на который нужно позвонить.",[138,151,152,155,156,159],{},[141,153,154],{},"Вы показываете этот номер пользователю."," На мобильных — ссылкой ",[146,157,158],{},"tel:",", чтобы набор открывался в одно касание и номер не пришлось переписывать руками. Рядом полезен таймер: у проверки есть срок.",[138,161,162,165],{},[141,163,164],{},"Пользователь звонит."," Отвечать на вызов не нужно и невозможно — сервис фиксирует входящий и сбрасывает соединение. Звонок сопоставляется с проверкой по паре «выделенный номер + номер вызывающего абонента».",[138,167,168,171,172,175,176,179,180,183],{},[141,169,170],{},"Ваша система забирает результат."," Опрашивает статус проверки по её идентификатору: ",[146,173,174],{},"PENDING"," — звонка ещё не было, ",[146,177,178],{},"CONFIRMED"," — номер подтверждён, ",[146,181,182],{},"EXPIRED"," — 60 секунд истекли, звонка не поступило.",[11,185,186,187,190],{},"Важная деталь, которую часто понимают неправильно: ",[141,188,189],{},"выделенный номер не закрепляется за пользователем",". Один и тот же номер из пула одновременно обслуживает проверки разных людей — уникальной должна быть только пара «номер плюс звонящий». Поэтому пул не «заканчивается» при всплеске регистраций и не требует запаса номеров под пиковую нагрузку: сервис сам подбирает свободную комбинацию и распределяет вызовы по пулу.",[11,192,193],{},"Вторая деталь — про 60 секунд. Это срок жизни проверки, а не срок аренды номера. Если пользователь отвлёкся и позвонил через две минуты, вызов уже ни к чему не привяжется: проверка к тому моменту помечена как истёкшая. Правильная реакция интерфейса — не «ошибка», а кнопка «Позвонить ещё раз», создающая новую проверку.",[18,195,197],{"id":196},"chem-eto-otlichaetsya-ot-obychnogo-flash-call","Чем это отличается от обычного flash call",[11,199,200],{},"Термин flash call описывает два зеркальных сценария, и путаница между ними — главный источник недопонимания при выборе провайдера.",[11,202,203,206],{},[141,204,205],{},"Обычный flash call."," Звонит сервис. Пользователь видит входящий вызов, который тут же обрывается, а приложение читает номер входящего и подставляет его последние цифры как код подтверждения. Пользователю иногда даже не нужно ничего делать — но только если приложение получило доступ к журналу вызовов.",[11,208,209],{},"Здесь и находится слабое место. Доступ к журналу вызовов — чувствительное разрешение: в Google Play его выдача ограничена и требует обоснования, в iOS публичного API для чтения журнала нет вообще, а в браузере такой сценарий недоступен по определению. На практике обычный flash call — это история про Android-приложение с одобренным разрешением, и больше почти нигде.",[11,211,212,215],{},[141,213,214],{},"Обратный (reverse) flash call."," Звонит пользователь. Сервису не нужен доступ ни к журналу вызовов, ни к SMS — он видит вызов на своей стороне, потому что вызов пришёл к нему. Отсюда следует, что сценарий одинаково работает и в мобильном приложении, и на обычном сайте в браузере, и никаких особых разрешений не требует.",[32,217,219],{"className":218},[35],[37,220,221,233],{},[40,222,223],{},[43,224,225,227,230],{},[46,226],{},[46,228,229],{},"Обычный flash call",[46,231,232],{},"Обратный flash call",[55,234,235,246,257,268,277,288],{},[43,236,237,240,243],{},[60,238,239],{},"Кто звонит",[60,241,242],{},"сервис пользователю",[60,244,245],{},"пользователь сервису",[43,247,248,251,254],{},[60,249,250],{},"Разрешения в приложении",[60,252,253],{},"доступ к журналу вызовов",[60,255,256],{},"не нужны",[43,258,259,262,265],{},[60,260,261],{},"Работает на сайте",[60,263,264],{},"нет",[60,266,267],{},"да",[43,269,270,273,275],{},[60,271,272],{},"Работает на iOS",[60,274,264],{},[60,276,267],{},[43,278,279,282,285],{},[60,280,281],{},"Что вводит пользователь",[60,283,284],{},"цифры из номера (или автоподстановка)",[60,286,287],{},"ничего",[43,289,290,293,296],{},[60,291,292],{},"Что может помешать",[60,294,295],{},"отказ в разрешении, ограничения магазинов приложений",[60,297,298],{},"номер вызывающего не определяется",[11,300,301,302,307],{},"FlashCall работает по второй схеме. Подробный разбор терминологии — включая написания «флеш колл» и синоним call to auth — в отдельном материале ",[303,304,306],"a",{"href":305},"\u002Fblog\u002Fchto-takoe-flash-call","что такое flash call и обратный flash call",".",[18,309,311],{"id":310},"pochemu-zvonok-dohodit-tam-gde-sms-ne-doshla","Почему звонок доходит там, где SMS не дошла",[11,313,314],{},"Чтобы SMS с кодом оказалась на экране, она проходит цепочку: ваш сервис → агрегатор → оператор получателя → устройство. На каждом переходе есть очередь, фильтр и возможность потерять сообщение. Массовые рассылки фильтруются как спам, роуминг и запрет на приём международных сообщений отсекают часть абонентов, переполненная память устройства не даёт сообщение принять, а задержка на стороне агрегатора превращает код в бесполезный — к моменту доставки он уже истёк.",[11,316,317],{},"Для бизнеса это не абстрактная проблема, а прямые потери: недоставленная SMS — это не отправленный впустую рубль, а несостоявшаяся регистрация. Причём отправка тарифицируется независимо от того, дошло сообщение или нет.",[11,319,320],{},"Исходящий вызов идёт по голосовой сети напрямую. Там нет ни фильтрации массовых рассылок, ни очереди на доставку, ни спам-папки — соединение либо устанавливается, либо нет, и результат виден мгновенно. Отдельно важно, что инициатива на стороне пользователя: он не ждёт, пока до него что-то доедет, а сам совершает действие и сразу видит результат.",[11,322,323,324,307],{},"Подробный разбор причин, по которым коды не доходят, и что с этим делать пользователю — в материале ",[303,325,327],{"href":326},"\u002Fblog\u002Fne-prihodit-kod-podtverzhdeniya","почему не приходит код подтверждения",[11,329,330],{},"Обещать стопроцентную доставляемость было бы нечестно, поэтому назовём и границы. Верификация телефона звонком не сработает в трёх случаях: у абонента скрыт номер, звонок идёт через корпоративную АТС с подменой исходящего номера, или пользователь находится за пределами России — пул состоит из российских номеров. Разумная архитектура оставляет запасной способ подтверждения: звонок как основной сценарий, SMS как резервный для тех, у кого он не прошёл.",[18,332,334],{"id":333},"skolko-stoit-podtverzhdenie-nomera","Сколько стоит подтверждение номера",[11,336,337,338,341],{},"Одно подтверждение — ",[141,339,340],{},"0,20 ₽",". Абонентской платы нет, минимального ежемесячного объёма нет, за подключение платить не нужно.",[11,343,344,345,347],{},"Ключевое отличие от SMS — в модели списания. Деньги списываются в момент, когда звонок зафиксирован, то есть за результат. Проверка, по которой звонка не было и которая ушла в ",[146,346,182],{},", не тарифицируется вообще. Вы не платите за попытки, за недоставку и за пользователей, которые передумали на середине формы.",[32,349,351],{"className":350},[35],[37,352,353,366],{},[40,354,355],{},[43,356,357,360,363],{},[46,358,359],{},"Подтверждений в месяц",[46,361,362],{},"Стоимость при 100 % дозвона",[46,364,365],{},"При 80 % дозвона",[55,367,368,379,390],{},[43,369,370,373,376],{},[60,371,372],{},"1 000",[60,374,375],{},"200 ₽",[60,377,378],{},"160 ₽",[43,380,381,384,387],{},[60,382,383],{},"10 000",[60,385,386],{},"2 000 ₽",[60,388,389],{},"1 600 ₽",[43,391,392,395,398],{},[60,393,394],{},"100 000",[60,396,397],{},"20 000 ₽",[60,399,400],{},"16 000 ₽",[11,402,403],{},"Второй столбец — не скидка, а прямое следствие модели: если из десяти тысяч запущенных проверок звонком завершились восемь тысяч, платить вы будете за восемь. В SMS-сценарии заплатить пришлось бы за все десять тысяч отправок.",[11,405,406,407,411,412,307],{},"Проверка не создастся, если на балансе меньше стоимости одного подтверждения — API вернёт ошибку о недостатке средств. Это стоит обработать в коде заранее и завести оповещение о низком балансе. Актуальные цены и условия — на странице ",[303,408,410],{"href":409},"\u002Fpricing","тарифов","; подробнее о том, как вообще выбирать провайдера и на что смотреть кроме цены, — в разборе ",[303,413,415],{"href":414},"\u002Fblog\u002Fservis-podtverzhdeniya-nomera","сервисов подтверждения номера",[18,417,419],{"id":418},"gde-primenyayut-verifikaciyu-nomera-zvonkom","Где применяют верификацию номера звонком",[11,421,422],{},"Сценариев ровно столько же, сколько у SMS-кода, — способ подтверждения меняется, задача остаётся.",[424,425,426,432,442,448,454],"ul",{},[138,427,428,431],{},[141,429,430],{},"Регистрация."," Отсечь фейковые аккаунты и получить рабочий контакт. Здесь короткий сценарий даёт больше всего: чем меньше шагов между «ввёл номер» и «зарегистрирован», тем меньше отвалов.",[138,433,434,437,438,307],{},[141,435,436],{},"Вход в аккаунт."," Замена SMS-кода при авторизации, в том числе полностью без пароля. Как это устроено — в материале про ",[303,439,441],{"href":440},"\u002Fblog\u002Favtorizaciya-po-zvonku","авторизацию по звонку",[138,443,444,447],{},[141,445,446],{},"Подтверждение операции."," Смена пароля, изменение реквизитов, подтверждение заказа — там, где нужно доказать, что действие совершает владелец аккаунта.",[138,449,450,453],{},[141,451,452],{},"Оформление заказа и доставка."," Проверка контактного номера до того, как заказ уйдёт в сборку, а курьер — по адресу с неверным телефоном.",[138,455,456,459],{},[141,457,458],{},"Объявления и маркетплейсы."," Верификация продавца, борьба с мультиаккаунтами и фейковыми регистрациями.",[11,461,462,463,307],{},"Разбор по отраслям с конкретными задачами — в статье ",[303,464,466],{"href":465},"\u002Fblog\u002Fgde-nuzhna-verifikaciya-telefona","где нужна верификация телефона",[18,468,470],{"id":469},"kak-podklyuchit","Как подключить",[11,472,473],{},"Интеграция занимает несколько часов и не требует SDK: это два HTTP-запроса к REST API.",[135,475,476,479,482,488],{},[138,477,478],{},"Зарегистрируйтесь и создайте проект — он получит собственный ключ.",[138,480,481],{},"На бэкенде вызовите создание проверки, передав ключ проекта и номер пользователя. Ключ хранится только на сервере: во фронтенде его размещать нельзя.",[138,483,484,485,487],{},"Отдайте выделенный номер во фронтенд и покажите его пользователю ссылкой ",[146,486,158],{}," с таймером на 60 секунд.",[138,489,490,491,493,494,496],{},"Опрашивайте статус проверки, пока он не станет ",[146,492,178],{}," или ",[146,495,182],{},", и обработайте оба исхода.",[11,498,499,500,504],{},"Пошаговое описание запросов, форматов и типичных ошибок интеграции — в материале про ",[303,501,503],{"href":502},"\u002Fblog\u002Fapi-podtverzhdeniya-nomera","API подтверждения номера",". Инструкция с вашим собственным ключом открывается в кабинете на странице проекта сразу после регистрации.",{"title":506,"searchDepth":507,"depth":507,"links":508},"",2,[509,510,511,512,513,514,515],{"id":20,"depth":507,"text":21},{"id":129,"depth":507,"text":130},{"id":196,"depth":507,"text":197},{"id":310,"depth":507,"text":311},{"id":333,"depth":507,"text":334},{"id":418,"depth":507,"text":419},{"id":469,"depth":507,"text":470},"Как это работает",{"title":518,"text":519,"label":520,"href":521},"Попробуйте на своём проекте","Регистрация занимает минуту, ключ проекта выдаётся сразу. Тестовую проверку можно запустить с первого же запроса.","Начать бесплатно","\u002Fregister","Разбираем, как подтвердить номер телефона звонком вместо SMS-кода: схема проверки, отличие от обычного flash call, стоимость и порядок подключения.",false,"md",[526,529,532,535,538,541],{"q":527,"a":528},"Что будет, если пользователь позвонит с другого номера?","Проверка не подтвердится. Совпадение ищется по паре «выделенный номер + номер\nвызывающего абонента», и звонок с телефона, который не был указан при создании\nпроверки, к ней не привяжется. Через 60 секунд она перейдёт в статус `EXPIRED`,\nи деньги за неё списаны не будут.\n",{"q":530,"a":531},"Звонок платный для пользователя?","Оператор тарифицирует его как обычный вызов на российский номер, по тарифу абонента.\nНо соединение сбрасывается до ответа, а неотвеченные вызовы операторы не тарифицируют —\nна практике подтверждение обходится пользователю бесплатно.\n",{"q":533,"a":534},"Сработает ли проверка, если у вызывающего скрыт номер?","Нет. Определение номера вызывающего абонента — основа всего способа: если номер\nне передаётся, сопоставить звонок с проверкой не с чем. Так бывает при включённом\nантиопределителе и на корпоративных АТС, которые подменяют исходящий номер.\nДля таких пользователей нужен запасной способ подтверждения.\n",{"q":536,"a":537},"Что делать, если звонка так и не было?","Через 60 секунд после создания проверка сама переходит в `EXPIRED` — опрос статуса\nвернёт его вместо `PENDING`. Это штатная ситуация: покажите пользователю кнопку\n«Позвонить ещё раз» и создайте новую проверку. Тарифицируется только состоявшийся\nзвонок, поэтому повторные попытки ничего не стоят.\n",{"q":539,"a":540},"Сколько проверок можно запускать одновременно?","Ограничения на общее число параллельных проверок в проекте нет. Единственное\nтребование — уникальность пары «выделенный номер + номер звонящего» среди\nожидающих. Сервис сам подбирает подходящий номер из пула и распределяет по нему\nнагрузку, так что со стороны интеграции об этом думать не нужно.\n",{"q":542,"a":543},"Что произойдёт, если на балансе закончатся деньги?","Проверка просто не создастся: запрос на выдачу номера вернёт ошибку о недостатке\nсредств. Уже созданные проверки при этом дорабатывают штатно. Обработайте эту\nошибку в коде заранее — иначе форма регистрации молча перестанет работать,\nкогда баланс дойдёт до нуля.\n","Подтверждение номера телефона звонком: как это работает",{},true,1,"\u002Fblog\u002Fpodtverzhdenie-nomera-zvonkom","2026-08-08",[551,552,553],"avtorizaciya-po-zvonku","servis-podtverzhdeniya-nomera","chto-takoe-flash-call",{"title":6,"description":522},"blog\u002Fpodtverzhdenie-nomera-zvonkom","Подтверждение номера звонком — способ проверить телефон без SMS и без одноразового кода.\nСервис выдаёт выделенный номер, пользователь звонит на него со своего телефона, вызов\nсбрасывается, а система по номеру вызывающего абонента понимает, что телефон принадлежит\nименно ему. Вводить ничего не нужно, отвечать на звонок тоже. Проверка живёт 60 секунд\nи стоит 0,20 ₽, причём списание происходит только за состоявшийся звонок.\n","Vs3hHENdsOH5tdu4ypInD_PfVG5qPC2vwutGGv1h_7s",{"id":559,"title":560,"body":561,"category":944,"cta":945,"description":948,"draft":523,"extension":524,"faq":949,"h1":965,"meta":966,"navigation":546,"order":507,"path":440,"published":549,"related":967,"seo":970,"stem":971,"summary":972,"updated":549,"__hash__":973},"blog\u002Fblog\u002Favtorizaciya-po-zvonku.md","Авторизация звонком вместо SMS — как настроить вход",{"type":8,"value":562,"toc":934},[563,566,569,573,576,652,655,658,662,665,695,702,708,712,715,718,738,741,745,748,751,758,762,765,778,788,792,795,801,810,861,874,878,881,907,910,912,931],[11,564,565],{},"Вход по SMS-коду выглядит устоявшимся стандартом, но состоит из пяти отдельных шагов, на каждом из которых пользователь может отвалиться. Ввести номер, дождаться сообщения, переключиться в мессенджер или приложение SMS, запомнить или скопировать код, вернуться и ввести его — и всё это при условии, что сообщение вообще дошло.",[11,567,568],{},"Авторизация по звонку убирает четыре шага из пяти. Разбираем, как она устроена, где применима и что даёт по цифрам.",[18,570,572],{"id":571},"sposoby-avtorizacii-po-nomeru-telefona","Способы авторизации по номеру телефона",[11,574,575],{},"Телефон как идентификатор давно вытеснил логин: он уникален, его не надо придумывать и его сложнее забыть. Различаются не идентификаторы, а способы доказать, что телефон ваш.",[32,577,579],{"className":578},[35],[37,580,581,596],{},[40,582,583],{},[43,584,585,588,590,593],{},[46,586,587],{},"Способ",[46,589,62],{},[46,591,592],{},"Что подтверждает",[46,594,595],{},"Слабое место",[55,597,598,612,625,639],{},[43,599,600,603,606,609],{},[60,601,602],{},"Пароль",[60,604,605],{},"вспоминает и вводит",[60,607,608],{},"знание секрета",[60,610,611],{},"забывают, переиспользуют, подбирают по утечкам",[43,613,614,616,619,622],{},[60,615,50],{},[60,617,618],{},"ждёт, читает, вводит",[60,620,621],{},"получение сообщения",[60,623,624],{},"доставляемость, задержки, ошибки ввода",[43,626,627,630,633,636],{},[60,628,629],{},"Push в приложение",[60,631,632],{},"подтверждает нажатием",[60,634,635],{},"доступ к установленному приложению",[60,637,638],{},"требует приложения и работающих пушей",[43,640,641,643,646,649],{},[60,642,53],{},[60,644,645],{},"нажимает вызов",[60,647,648],{},"исходящий вызов с этого номера",[60,650,651],{},"нужен определяемый номер",[11,653,654],{},"У способов с телефоном общий принцип: подтверждается не знание, а владение. Разница в том, что именно считается доказательством владения — принятое сообщение или совершённый вызов.",[11,656,657],{},"Отдельно стоит сказать, чего в этом списке нет. Телефонная авторизация не заменяет и не отменяет пароль в сценариях, где нужен доступ без связи, и не превращает сервис в защищённый сам по себе. Это один слой из нескольких.",[18,659,661],{"id":660},"kak-ustroen-vhod-po-zvonku","Как устроен вход по звонку",[11,663,664],{},"Со стороны пользователя всё выглядит как две кнопки. Со стороны системы — как короткий жизненный цикл проверки с тремя состояниями.",[135,666,667,670,675,681,686],{},[138,668,669],{},"Пользователь вводит номер и нажимает «Войти».",[138,671,672,673,307],{},"Ваш бэкенд создаёт проверку: передаёт ключ проекта и номер в формате E.164. В ответ приходит идентификатор проверки и выделенный номер. Проверка получает статус ",[146,674,174],{},[138,676,677,678,680],{},"Фронтенд показывает выделенный номер ссылкой ",[146,679,158],{}," и таймер на 60 секунд.",[138,682,683,684,307],{},"Пользователь звонит. Отвечать не нужно — сервис фиксирует вызов и сбрасывает соединение. Звонок сопоставляется с проверкой по паре «выделенный номер + номер вызывающего абонента», проверка переходит в ",[146,685,178],{},[138,687,688,689,691,692,694],{},"Бэкенд опрашивает статус проверки. Увидел ",[146,690,178],{}," — открывает сессию и выдаёт токен. Увидел ",[146,693,182],{}," — предлагает позвонить ещё раз.",[11,696,697,698,701],{},"Ключевой момент для проектирования: ",[141,699,700],{},"сессия создаётся только на вашей стороне и только после подтверждения",". Сервис проверки не выдаёт токенов и ничего не знает о вашей модели пользователей — он отвечает ровно на один вопрос, звонил ли этот номер. Поэтому вход по звонку встраивается в существующую аутентификацию как ещё один провайдер, а не как её замена.",[11,703,704,705,307],{},"Подробный разбор самого механизма проверки — в статье про ",[303,706,707],{"href":548},"подтверждение номера телефона звонком",[18,709,711],{"id":710},"avtorizaciya-bez-parolya","Авторизация без пароля",[11,713,714],{},"Passwordless-сценарий — тот случай, когда пароля у пользователя нет вообще. При регистрации он оставляет номер, при каждом входе подтверждает владение им. Хранить в базе нечего: нет хеша пароля, нет процедуры восстановления, нет писем со ссылкой сброса.",[11,716,717],{},"Это снимает целый класс задач:",[424,719,720,726,732],{},[138,721,722,725],{},[141,723,724],{},"Восстановление доступа исчезает как отдельный сценарий."," Вход и восстановление становятся одним и тем же действием — подтвердить номер.",[138,727,728,731],{},[141,729,730],{},"Нечего утекать."," База без паролей не представляет ценности для перебора по другим сервисам.",[138,733,734,737],{},[141,735,736],{},"Нет поддержки по забытым паролям."," По статистике любой службы поддержки это заметная доля обращений.",[11,739,740],{},"Взамен появляется жёсткая зависимость: потерял доступ к номеру — потерял доступ к аккаунту. Поэтому passwordless разумен там, где номер и так является основным контактом — доставка, объявления, программы лояльности, — и рискован там, где аккаунт живёт годами и переживает смену телефона. В последнем случае нужен запасной канал: почта, резервные коды или второй привязанный номер.",[18,742,744],{"id":743},"zvonok-kak-vtoroy-faktor","Звонок как второй фактор",[11,746,747],{},"Если пароль остаётся, звонок работает вторым фактором. Схема стандартная: пользователь вводит логин и пароль, система создаёт проверку и просит позвонить, сессия открывается только после подтверждения.",[11,749,750],{},"По сравнению с другими вторыми факторами звонок находится примерно там же, где SMS-код: он подтверждает владение номером и наследует его слабости, включая подмену SIM-карты. Честное сравнение выглядит так — приложение-генератор одноразовых кодов надёжнее, но требует от пользователя установки и настройки, а телефон есть у всех. Звонок выигрывает не в стойкости, а в том, что через него проходят почти все пользователи, тогда как до настройки TOTP доходит меньшинство.",[11,752,753,754,307],{},"Тот же механизм закрывает и подтверждение отдельных действий — смену пароля, изменение реквизитов, крупную операцию. Разбор трёх сценариев целиком — в материале про ",[303,755,757],{"href":756},"\u002Fblog\u002Fpodtverzhdenie-pri-registracii-i-vhode","подтверждение при регистрации, входе и операциях",[18,759,761],{"id":760},"vhod-po-zvonku-na-sayte-i-v-prilozhenii","Вход по звонку на сайте и в приложении",[11,763,764],{},"Механизм один, интерфейс разный.",[11,766,767,770,771,773,774,307],{},[141,768,769],{},"На сайте"," пользователь чаще всего сидит с десктопа, а звонит с телефона. Значит, номер нужно показать крупно и в удобном для набора виде, а не мелким моноширинным текстом. На мобильном браузере обязательна ссылка ",[146,772,158],{}," — иначе номер придётся переписывать руками, и это худшая точка сценария. Детали реализации — в статье про ",[303,775,777],{"href":776},"\u002Fblog\u002Fpodtverzhdenie-nomera-na-sayte","подтверждение номера на сайте",[11,779,780,783,784,307],{},[141,781,782],{},"В приложении"," сценарий короче: набор открывается одним касанием через системный диалер, а после возврата в приложение статус уже подтверждён. Важное отличие от обычного flash call — приложению не нужны разрешения на чтение SMS или журнала вызовов, а их выдачу ограничивают и Google Play, и App Store. Подробности — в материале про ",[303,785,787],{"href":786},"\u002Fblog\u002Fpodtverzhdenie-nomera-v-prilozhenii","подтверждение номера в мобильном приложении",[18,789,791],{"id":790},"chto-eto-daet-po-cifram","Что это даёт по цифрам",[11,793,794],{},"Считать эффект нужно в двух местах: на конверсии входа и на стоимости.",[11,796,797,800],{},[141,798,799],{},"Конверсия."," Из сценария уходят три шага, на которых теряются пользователи: ожидание сообщения, переключение в другое приложение и ручной ввод кода. Отдельно исчезает самая болезненная ситуация — сообщение не пришло вовсе, и пользователю нечего вводить. Сколько именно вы получите, зависит от вашей аудитории и текущей доставляемости, поэтому единственный честный способ — включить звонок как альтернативный способ входа и сравнить две воронки на своих данных.",[11,802,803,806,807,809],{},[141,804,805],{},"Стоимость."," Одна успешная авторизация — 0,20 ₽, абонентской платы нет. Тарифицируется только состоявшийся звонок: проверка, ушедшая в ",[146,808,182],{},", не стоит ничего. В SMS-сценарии оплачивается отправка независимо от того, дошло сообщение и вошёл ли пользователь.",[32,811,813],{"className":812},[35],[37,814,815,826],{},[40,816,817],{},[43,818,819,822,824],{},[46,820,821],{},"Входов в месяц",[46,823,362],{},[46,825,365],{},[55,827,828,839,850],{},[43,829,830,833,836],{},[60,831,832],{},"5 000",[60,834,835],{},"1 000 ₽",[60,837,838],{},"800 ₽",[43,840,841,844,847],{},[60,842,843],{},"50 000",[60,845,846],{},"10 000 ₽",[60,848,849],{},"8 000 ₽",[43,851,852,855,858],{},[60,853,854],{},"200 000",[60,856,857],{},"40 000 ₽",[60,859,860],{},"32 000 ₽",[11,862,863,864,868,869,871,872,307],{},"Развёрнутое сравнение с SMS по шести параметрам — в материале ",[303,865,867],{"href":866},"\u002Fblog\u002Fflash-call-ili-sms","flash call или SMS",", критерии выбора провайдера — в разборе ",[303,870,415],{"href":414},". Актуальные цены — на странице ",[303,873,410],{"href":409},[18,875,877],{"id":876},"kogda-zvonok-ne-podhodit","Когда звонок не подходит",[11,879,880],{},"Раздел, без которого материал читался бы рекламой.",[424,882,883,889,895,901],{},[138,884,885,888],{},[141,886,887],{},"Пользователь за пределами России."," Пул состоит из российских номеров, зарубежные абоненты сценарий не пройдут.",[138,890,891,894],{},[141,892,893],{},"Скрытый номер."," Антиопределитель или корпоративная АТС с подменой исходящего номера делают сопоставление невозможным.",[138,896,897,900],{},[141,898,899],{},"Нет голосовой связи."," Есть интернет, но нет сети оператора — например, зарубежная SIM с одним мобильным интернетом.",[138,902,903,906],{},[141,904,905],{},"Требуется вход без телефона под рукой."," Тут работает только пароль или резервные коды.",[11,908,909],{},"Практический вывод: звонок ставится основным способом, а SMS или пароль остаются запасным. Кнопка «Войти другим способом» рядом с таймером снимает почти все перечисленные случаи и заодно страхует от сбоя у любого одного провайдера.",[18,911,470],{"id":469},[135,913,914,916,919,928],{},[138,915,478],{},[138,917,918],{},"Добавьте в бэкенд создание проверки при нажатии «Войти» и опрос её статуса.",[138,920,921,922,924,925,927],{},"Выдавайте токен сессии только по статусу ",[146,923,178],{},", обрабатывайте ",[146,926,182],{}," как повод предложить повторный вызов.",[138,929,930],{},"Оставьте в интерфейсе запасной способ входа.",[11,932,933],{},"Инструкция с вашим ключом, запросами и форматами ответов открывается в кабинете на странице проекта сразу после регистрации.",{"title":506,"searchDepth":507,"depth":507,"links":935},[936,937,938,939,940,941,942,943],{"id":571,"depth":507,"text":572},{"id":660,"depth":507,"text":661},{"id":710,"depth":507,"text":711},{"id":743,"depth":507,"text":744},{"id":760,"depth":507,"text":761},{"id":790,"depth":507,"text":791},{"id":876,"depth":507,"text":877},{"id":469,"depth":507,"text":470},"Продукт",{"title":946,"text":947,"label":520,"href":521},"Соберите вход по звонку в своём проекте","Ключ проекта выдаётся сразу после регистрации, тестовую авторизацию можно прогнать в тот же день.","Как работает авторизация звонком: пользователь звонит на выделенный номер вместо ввода SMS-кода. Схема входа, passwordless, второй фактор и стоимость 0,20 ₽.",[950,953,956,959,962],{"q":951,"a":952},"Чем это лучше входа по паролю?","Не лучше и не хуже — это разные компромиссы. Пароль не зависит от связи и работает\nгде угодно, но его забывают, переиспользуют между сервисами и подбирают по утечкам.\nВход по звонку снимает эти три проблемы, но требует, чтобы телефон был под рукой\nи находился в зоне действия сети. Разумно давать оба способа.\n",{"q":954,"a":955},"Можно ли оставить пароль и добавить звонок вторым фактором?","Да, это самый частый сценарий внедрения. Первый фактор остаётся прежним — логин\nи пароль, — а звонок подтверждает, что за входом стоит владелец привязанного\nномера. Переделывать существующую аутентификацию при этом не нужно.\n",{"q":957,"a":958},"Что происходит с сессией, пока пользователь звонит?","Ничего: до подтверждения сессии нет. Сервер держит проверку в статусе `PENDING`\nи выдаёт токен только после того, как звонок зафиксирован. Если за 60 секунд\nвызова не было, проверка становится `EXPIRED`, и вход не происходит.\n",{"q":960,"a":961},"Насколько это защищает от перехвата чужого аккаунта?","Ровно настолько, насколько защищён сам номер. Подтверждение владения телефоном\nне спасает от подмены SIM-карты — как и SMS-код. Если сценарий требует стойкости\nк таким атакам, звонок нужно дополнять другим фактором, а не заменять им всё.\n",{"q":963,"a":964},"Пользователь звонит каждый раз при входе?","Только когда нужна новая сессия. Дальше работает обычный токен с вашим сроком\nжизни, и повторная авторизация требуется по тем же правилам, что и раньше.\nЧастоту вызовов определяет ваша политика сессий, а не сервис подтверждения.\n","Авторизация по звонку: вход в сервис без SMS и пароля",{},[968,969,552],"podtverzhdenie-nomera-zvonkom","podtverzhdenie-pri-registracii-i-vhode",{"title":560,"description":948},"blog\u002Favtorizaciya-po-zvonku","Авторизация звонком заменяет SMS-код на исходящий вызов: пользователь нажимает «Войти»,\nзвонит на показанный номер, вызов сбрасывается — и сессия открывается сама. Вводить\nи запоминать нечего, ждать доставки сообщения не нужно. Способ закрывает и обычный вход,\nи passwordless-сценарий без пароля, и подтверждение входа вторым фактором. Стоит 0,20 ₽\nза успешную проверку, несостоявшаяся не тарифицируется.\n","rJy3HQrXuyQ2azZOP7so-umzKVLSYwXhhmnG_2xR620",{"id":975,"title":976,"body":977,"category":1382,"cta":1383,"description":1386,"draft":523,"extension":524,"faq":1387,"h1":1403,"meta":1404,"navigation":546,"order":1405,"path":414,"published":549,"related":1406,"seo":1409,"stem":1410,"summary":1411,"updated":549,"__hash__":1412},"blog\u002Fblog\u002Fservis-podtverzhdeniya-nomera.md","Сервис подтверждения номера телефона — выбор и цены",{"type":8,"value":978,"toc":1373},[979,982,985,989,992,1064,1070,1073,1079,1083,1089,1095,1101,1107,1113,1119,1125,1129,1134,1143,1197,1203,1208,1212,1215,1229,1232,1234,1271,1280,1284,1287,1337,1341],[11,980,981],{},"Рынок подтверждения номера выглядит однородно: почти все продают «верификацию по цене X за штуку». Разница вылезает позже — когда оказывается, что списывают за попытку, а не за результат, что при недоставке деньги всё равно ушли, а на интеграцию нужен не день, а две недели.",[11,983,984],{},"Ниже — критерии, которые видно до подписания договора, и честный расчёт по FlashCall.",[18,986,988],{"id":987},"sposoby-podtverzhdeniya-i-ih-sebestoimost","Способы подтверждения и их себестоимость",[11,990,991],{},"Первое решение — не «какой провайдер», а «каким способом». От него зависит и цена, и что именно вы покупаете.",[32,993,995],{"className":994},[35],[37,996,997,1011],{},[40,998,999],{},[43,1000,1001,1003,1006,1009],{},[46,1002,587],{},[46,1004,1005],{},"За что списывают",[46,1007,1008],{},"От чего зависит успех",[46,1010,62],{},[55,1012,1013,1026,1040,1052],{},[43,1014,1015,1017,1020,1023],{},[60,1016,50],{},[60,1018,1019],{},"за отправку сообщения",[60,1021,1022],{},"доставляемость, фильтры операторов, роуминг",[60,1024,1025],{},"ждёт, читает, вводит код",[43,1027,1028,1031,1034,1037],{},[60,1029,1030],{},"Голосовой звонок с кодом",[60,1032,1033],{},"за совершённый вызов",[60,1035,1036],{},"дозвон, качество распознавания на слух",[60,1038,1039],{},"принимает вызов, слушает, вводит код",[43,1041,1042,1044,1046,1049],{},[60,1043,229],{},[60,1045,1033],{},[60,1047,1048],{},"разрешение приложению на журнал вызовов",[60,1050,1051],{},"ничего либо вводит цифры номера",[43,1053,1054,1057,1059,1062],{},[60,1055,1056],{},"Обратный звонок",[60,1058,112],{},[60,1060,1061],{},"определяемость номера вызывающего",[60,1063,645],{},[11,1065,1066,1069],{},[141,1067,1068],{},"О ценах конкурентов."," Публичные прайсы на SMS зависят от оператора получателя, объёма и типа трафика, поэтому единой цифры не существует, а «средняя цена SMS» из статей обычно ничем не подтверждена. Если сравниваете — берите свой счёт за прошлый месяц и делите на число доставленных сообщений. Это единственная цифра, которая имеет отношение к вашей ситуации.",[11,1071,1072],{},"Обратите внимание на третий столбец таблицы. Он объясняет, почему два сервиса с одинаковой ценой за штуку дают разный итоговый счёт: у способов разная доля успеха, и оплачиваете вы в одном случае попытки, в другом — результат.",[11,1074,1075,1076,307],{},"Разбор терминологии и разницы между обычным и обратным flash call — в статье ",[303,1077,1078],{"href":305},"что такое flash call",[18,1080,1082],{"id":1081},"sem-kriteriev-vybora-servisa","Семь критериев выбора сервиса",[11,1084,1085,1088],{},[141,1086,1087],{},"1. Модель тарификации: за попытку или за результат."," Главный критерий, который почти никогда не стоит первым в презентации. При оплате за отправку вы платите и за недоставленные сообщения, и за пользователей, которые передумали. При оплате за результат несостоявшаяся проверка стоит ноль. На объёме разница между этими моделями больше, чем разница в цене за штуку.",[11,1090,1091,1094],{},[141,1092,1093],{},"2. Прозрачность статусов."," Вы должны в любой момент видеть, что происходит с конкретной проверкой, и различать «ещё ждём», «подтверждено» и «не сложилось». Если API отдаёт только «успех\u002Fнеуспех» без промежуточного состояния, вы не сможете нормально нарисовать интерфейс ожидания.",[11,1096,1097,1100],{},[141,1098,1099],{},"3. REST API без SDK."," Проприетарная библиотека — это зависимость, которую придётся обновлять, и ограничение по языкам. Обычный HTTP-интерфейс встраивается в любой стек и не устаревает.",[11,1102,1103,1106],{},[141,1104,1105],{},"4. Время интеграции."," Считается не по документации, а по числу сущностей, которые надо завести на своей стороне. Два запроса и три статуса — это день работы. Очередь, подписи, отдельный обработчик и своя таблица состояний — это спринт.",[11,1108,1109,1112],{},[141,1110,1111],{},"5. Отсутствие абонентской платы и минимального объёма."," Обязательный ежемесячный платёж превращает эксперимент в обязательство. Если вы не уверены, что способ подойдёт вашей аудитории, стартовать надо там, где неудачная гипотеза стоит только потраченного времени.",[11,1114,1115,1118],{},[141,1116,1117],{},"6. Документы и юридическая сторона."," Оферта, счёт для юрлиц и ИП, корректный НДС по налоговому статусу. Проверяется до интеграции, а не после, когда бухгалтерия откажется проводить платёж.",[11,1120,1121,1124],{},[141,1122,1123],{},"7. Поддержка живыми людьми."," На этапе внедрения важнее тарифа: половина вопросов возникает в первые два дня и снимается одним ответом.",[18,1126,1128],{"id":1127},"skolko-stoit-podtverzhdenie-v-flashcall","Сколько стоит подтверждение в FlashCall",[11,1130,337,1131,1133],{},[141,1132,340],{},". Абонентской платы нет, минимального месячного объёма нет, плата за подключение отсутствует.",[11,1135,1136,1137,1139,1140,307],{},"Списание происходит в момент, когда звонок зафиксирован. Проверка, по которой звонка не было и которая ушла в статус ",[146,1138,182],{},", ",[141,1141,1142],{},"не тарифицируется вообще",[32,1144,1146],{"className":1145},[35],[37,1147,1148,1162],{},[40,1149,1150],{},[43,1151,1152,1154,1157,1159],{},[46,1153,359],{},[46,1155,1156],{},"При 100 % дозвона",[46,1158,365],{},[46,1160,1161],{},"При 60 % дозвона",[55,1163,1164,1175,1186],{},[43,1165,1166,1168,1170,1172],{},[60,1167,372],{},[60,1169,375],{},[60,1171,378],{},[60,1173,1174],{},"120 ₽",[43,1176,1177,1179,1181,1183],{},[60,1178,383],{},[60,1180,386],{},[60,1182,389],{},[60,1184,1185],{},"1 200 ₽",[43,1187,1188,1190,1192,1194],{},[60,1189,394],{},[60,1191,397],{},[60,1193,400],{},[60,1195,1196],{},"12 000 ₽",[11,1198,1199,1200,307],{},"Столбцы справа — не скидка, а прямое следствие модели: платите за то, что состоялось. Формула для подстановки своих цифр: ",[146,1201,1202],{},"запущенные проверки × доля дозвона × 0,20 ₽",[11,1204,1205,1206,307],{},"Цены в таблице актуальны на дату публикации; источник правды — страница ",[303,1207,410],{"href":409},[18,1209,1211],{"id":1210},"kak-oplatit","Как оплатить",[11,1213,1214],{},"Баланс пополняется двумя способами:",[424,1216,1217,1223],{},[138,1218,1219,1222],{},[141,1220,1221],{},"Счёт"," — для юрлиц и ИП. Реквизиты подставляются из карточки в кабинете, счёт приходит готовым к оплате. Зачисление на баланс происходит автоматически, когда банк подтверждает поступление.",[138,1224,1225,1228],{},[141,1226,1227],{},"Картой"," — если удобнее платить сразу и без бухгалтерии.",[11,1230,1231],{},"Минимальная сумма пополнения по умолчанию — 100 ₽; фактическое значение показано в кабинете. Неизрасходованный баланс не сгорает.",[18,1233,470],{"id":469},[135,1235,1236,1241,1247,1253,1265],{},[138,1237,1238,1240],{},[141,1239,430],{}," Занимает минуту, карта не требуется.",[138,1242,1243,1246],{},[141,1244,1245],{},"Проект."," Создаётся в кабинете, сразу получает собственный ключ. Ключ хранится на сервере — во фронтенде ему не место.",[138,1248,1249,1252],{},[141,1250,1251],{},"Тестовая проверка."," Запускается с первого же запроса, по реальному номеру.",[138,1254,1255,1258,1259,1139,1261,1139,1263,307],{},[141,1256,1257],{},"Интеграция."," Два запроса: создать проверку и получить её статус. Обработать три состояния — ",[146,1260,174],{},[146,1262,178],{},[146,1264,182],{},[138,1266,1267,1270],{},[141,1268,1269],{},"Запасной способ."," Оставьте пользователю альтернативу на случай скрытого номера или зарубежной SIM.",[11,1272,1273,1274,1276,1277,307],{},"Пошаговое описание запросов с примерами кода — в материале про ",[303,1275,503],{"href":502},". Как устроен сам механизм проверки — в статье про ",[303,1278,1279],{"href":548},"подтверждение номера звонком",[18,1281,1283],{"id":1282},"chek-list-pered-integraciey","Чек-лист перед интеграцией",[11,1285,1286],{},"Пройдите его до того, как разработчик начнёт писать код, — все пункты проверяются за час и снимают большую часть будущих сюрпризов.",[135,1288,1289,1295,1301,1307,1313,1319,1325,1331],{},[138,1290,1291,1294],{},[141,1292,1293],{},"Посмотрите на модель списания в документации, а не в презентации."," Найдите, в какой момент уменьшается баланс. Если это момент отправки или создания запроса, вы платите за попытки.",[138,1296,1297,1300],{},[141,1298,1299],{},"Уточните, что происходит с неудачной проверкой."," Есть ли отдельный статус, тарифицируется ли она, видно ли её в статистике.",[138,1302,1303,1306],{},[141,1304,1305],{},"Проверьте формат номера."," E.164 — стандарт; если сервис требует собственный формат, это лишний слой преобразований и источник ошибок.",[138,1308,1309,1312],{},[141,1310,1311],{},"Найдите, где хранится ключ."," Он должен использоваться только с сервера. Если инструкция предлагает положить его во фронтенд, это плохой знак для всей архитектуры.",[138,1314,1315,1318],{},[141,1316,1317],{},"Оцените, что будет на пике."," Спросите про ограничения на число одновременных проверок: узкое место обычно там, а не в тарифе.",[138,1320,1321,1324],{},[141,1322,1323],{},"Прочитайте оферту до слова «ответственность»."," Особенно раздел про возврат неизрасходованного баланса.",[138,1326,1327,1330],{},[141,1328,1329],{},"Задайте один вопрос в поддержку."," Скорость и содержательность ответа на этапе выбора хорошо предсказывают, как будет во время инцидента.",[138,1332,1333,1336],{},[141,1334,1335],{},"Заложите запасной способ."," Ни один канал не работает у ста процентов аудитории; альтернатива в интерфейсе стоит дешевле, чем потерянные регистрации.",[18,1338,1340],{"id":1339},"na-chem-chasche-vsego-oshibayutsya-pri-vybore","На чём чаще всего ошибаются при выборе",[424,1342,1343,1349,1355,1361,1367],{},[138,1344,1345,1348],{},[141,1346,1347],{},"Сравнивают цену за штуку, а не стоимость успешного подтверждения."," Это разные величины, и расходятся они тем сильнее, чем хуже доставляемость.",[138,1350,1351,1354],{},[141,1352,1353],{},"Не считают стоимость потерянных регистраций."," Пользователь, не получивший код, стоит дороже, чем сам код.",[138,1356,1357,1360],{},[141,1358,1359],{},"Берут провайдера под текущий объём."," Проверять надо поведение на пике, а не на среднем.",[138,1362,1363,1366],{},[141,1364,1365],{},"Оставляют один способ подтверждения."," Любой канал иногда не срабатывает; запасной вариант дешевле, чем разбор инцидента.",[138,1368,1369,1372],{},[141,1370,1371],{},"Откладывают документы на потом."," Оферту и порядок выставления счетов проще посмотреть до интеграции.",{"title":506,"searchDepth":507,"depth":507,"links":1374},[1375,1376,1377,1378,1379,1380,1381],{"id":987,"depth":507,"text":988},{"id":1081,"depth":507,"text":1082},{"id":1127,"depth":507,"text":1128},{"id":1210,"depth":507,"text":1211},{"id":469,"depth":507,"text":470},{"id":1282,"depth":507,"text":1283},{"id":1339,"depth":507,"text":1340},"Выбор решения",{"title":1384,"text":1385,"label":520,"href":521},"Посчитайте на своём объёме","Регистрация бесплатная, абонентской платы нет. Тестовую проверку можно запустить сразу после создания проекта.","На что смотреть при выборе сервиса подтверждения номера: способ проверки, цена за подтверждение, модель списания, интеграция, документы и поддержка.",[1388,1391,1394,1397,1400],{"q":1389,"a":1390},"Есть ли минимальный платёж?","Абонентской платы и обязательного месячного объёма нет — вы платите только\nза подтверждения. Минимум есть у пополнения баланса: по умолчанию 100 ₽,\nактуальное значение показано в кабинете на странице пополнения.\n",{"q":1392,"a":1393},"Какие документы получит бухгалтерия?","Юрлицам и ИП выставляется счёт, отношения регулирует публичная оферта.\nРеквизиты компании подставляются в счёт из карточки в кабинете, а НДС\nуказывается согласно налоговому статусу исполнителя.\n",{"q":1395,"a":1396},"Можно ли протестировать до оплаты?","Да. Проект и ключ создаются сразу после регистрации, а стоимость проверки\nтакая, что полноценное тестирование сценария укладывается в минимальное\nпополнение. Отдельного песочного контура с фиктивными звонками нет —\nпроверки идут по реальному пулу номеров.\n",{"q":1398,"a":1399},"Что будет с неизрасходованным балансом?","Он не сгорает и остаётся на счёте: списание идёт по факту подтверждений,\nбез ежемесячного обнуления. Порядок возврата описан в оферте.\n",{"q":1401,"a":1402},"Что делать, если объём сильно больше типового?","Написать до интеграции. Крупные объёмы упираются не в тариф, а в ёмкость\nпула номеров, и это вопрос планирования, а не прайса.\n","Сервис подтверждения номера телефона: как выбрать и сколько стоит",{},3,[968,1407,1408],"flash-call-ili-sms","api-podtverzhdeniya-nomera",{"title":976,"description":1386},"blog\u002Fservis-podtverzhdeniya-nomera","При выборе сервиса подтверждения номера почти всё решают три вопроса: за что именно\nсписывают деньги — за попытку или за результат; что происходит, когда подтверждение\nне доходит до пользователя; за сколько это встраивается в ваш продукт. Цена за штуку\nвторична — на реальную стоимость сильнее влияет модель списания. Ниже разбор критериев\nи расчёт: в FlashCall подтверждение стоит 0,20 ₽, и платите вы только за состоявшиеся.\n","cKsNAXF6yYZKwaXx9i9qxM3vrxbBahCb-ceO101blQ0",{"id":1414,"title":1415,"body":1416,"category":1754,"cta":1755,"description":1756,"draft":523,"extension":524,"faq":1757,"h1":1776,"meta":1777,"navigation":546,"order":1778,"path":1779,"published":549,"related":1780,"seo":1783,"stem":1784,"summary":1785,"updated":549,"__hash__":1786},"blog\u002Fblog\u002Fkod-podtverzhdeniya-chto-eto.md","Код подтверждения телефона — что это и как работает",{"type":8,"value":1417,"toc":1744},[1418,1421,1425,1428,1460,1463,1467,1470,1477,1480,1483,1487,1490,1515,1518,1522,1525,1603,1606,1610,1613,1630,1633,1636,1645,1651,1657,1663,1673,1679,1689,1693,1699,1702,1705,1711,1715,1718,1724,1727,1730],[11,1419,1420],{},"Почти каждая регистрация сегодня упирается в одно и то же: сервис просит номер телефона и присылает несколько цифр, которые нужно ввести обратно. Разбираемся, что это за цифры, зачем они понадобились и что делать, когда механизм даёт сбой.",[18,1422,1424],{"id":1423},"zachem-servisy-prosyat-podtverdit-nomer","Зачем сервисы просят подтвердить номер",[11,1426,1427],{},"Смысл простой: отличить живого человека от того, кто вписал первый попавшийся номер.",[424,1429,1430,1436,1442,1448,1454],{},[138,1431,1432,1435],{},[141,1433,1434],{},"Отсечь фейковые аккаунты."," Без проверки один человек регистрирует тысячу учётных записей за минуту — ради бонусов новичкам, накрутки отзывов или рассылки спама. Подтверждение номера делает такую регистрацию дорогой.",[138,1437,1438,1441],{},[141,1439,1440],{},"Убедиться, что контакт рабочий."," Курьер должен дозвониться, а уведомление о заказе — дойти. Опечатка в номере обнаруживается сразу, а не в день доставки.",[138,1443,1444,1447],{},[141,1445,1446],{},"Дать способ вернуть доступ."," Подтверждённый телефон — это то, чем вы докажете, что аккаунт ваш, если забудете пароль.",[138,1449,1450,1453],{},[141,1451,1452],{},"Защитить вход."," Код при входе с нового устройства означает, что одного украденного пароля недостаточно.",[138,1455,1456,1459],{},[141,1457,1458],{},"Выполнить требования регулятора."," В части отраслей — финансовых сервисах, связи, госуслугах — подтверждённый контакт требуется по закону, и обойти это сервис не может, даже если бы хотел.",[11,1461,1462],{},"Отсюда же ответ на частый вопрос, почему нельзя обойтись одной электронной почтой. Адрес заводится за десять секунд, их можно создать сколько угодно, и стоит это ноль. Номер телефона привязан к SIM-карте, которую нужно купить, а массовая регистрация на сотни номеров становится ощутимо дороже возможной выгоды. Телефон — не лучший идентификатор личности, но хороший ограничитель для автоматических регистраций.",[18,1464,1466],{"id":1465},"chto-takoe-verifikaciya-nomera-telefona-prostymi-slovami","Что такое верификация номера телефона простыми словами",[11,1468,1469],{},"Верификация — проверка, что номер действительно ваш, то есть что вы прямо сейчас имеете к нему доступ. Не что SIM-карта оформлена на ваше имя и не кто её владелец по документам: сервис этого не знает и знать не может. Он проверяет только фактический доступ к телефону.",[11,1471,1472,1473,1476],{},"Отсюда важное следствие: ",[141,1474,1475],{},"подтверждение номера ничего не говорит о вашей личности",". Оно говорит, что человек за формой держит в руках телефон с этим номером. Для большинства задач этого достаточно.",[11,1478,1479],{},"Слова «верификация», «подтверждение» и «проверка номера» в интерфейсах означают одно и то же.",[11,1481,1482],{},"Стоит отделить это и от другой процедуры, которую тоже иногда называют верификацией, — подтверждения личности по документам. Там сервис сверяет паспортные данные и просит фотографию; к коду из SMS это отношения не имеет. Проверка номера решает узкую задачу: убедиться, что телефон, указанный в форме, доступен тому, кто его указал.",[18,1484,1486],{"id":1485},"gde-vy-vstrechaete-podtverzhdenie-nomera","Где вы встречаете подтверждение номера",[11,1488,1489],{},"Механизм один, а поводов запросить код — четыре, и требования у них разные.",[424,1491,1492,1497,1503,1509],{},[138,1493,1494,1496],{},[141,1495,430],{}," Сервис проверяет номер один раз и привязывает его к новому аккаунту.",[138,1498,1499,1502],{},[141,1500,1501],{},"Вход."," Код запрашивается либо вместо пароля, либо в дополнение к нему — обычно при входе с незнакомого устройства.",[138,1504,1505,1508],{},[141,1506,1507],{},"Подтверждение действия."," Смена пароля, изменение реквизитов, крупный перевод, оформление заказа. Здесь код подтверждает не личность, а намерение совершить конкретную операцию.",[138,1510,1511,1514],{},[141,1512,1513],{},"Восстановление доступа."," Забыт пароль — телефон становится доказательством, что аккаунт ваш.",[11,1516,1517],{},"Различать их полезно по одной причине: если вам пришёл код за действие, которого вы не совершали, это уже не бытовая накладка, а сигнал. Особенно когда речь о смене пароля или входе.",[18,1519,1521],{"id":1520},"sposoby-podtverzhdeniya-nomera","Способы подтверждения номера",[11,1523,1524],{},"Одноразовый код — самый известный способ, но не единственный.",[32,1526,1528],{"className":1527},[35],[37,1529,1530,1541],{},[40,1531,1532],{},[43,1533,1534,1536,1538],{},[46,1535,587],{},[46,1537,62],{},[46,1539,1540],{},"Что может пойти не так",[55,1542,1543,1554,1564,1573,1584,1594],{},[43,1544,1545,1548,1551],{},[60,1546,1547],{},"SMS с кодом",[60,1549,1550],{},"ждёт сообщение и вводит код",[60,1552,1553],{},"сообщение не дошло или пришло поздно",[43,1555,1556,1558,1561],{},[60,1557,1030],{},[60,1559,1560],{},"принимает вызов, слушает цифры, вводит",[60,1562,1563],{},"не расслышал, шумно, вызов не дошёл",[43,1565,1566,1568,1570],{},[60,1567,629],{},[60,1569,632],{},[60,1571,1572],{},"нужно установленное приложение",[43,1574,1575,1578,1581],{},[60,1576,1577],{},"Код в мессенджере",[60,1579,1580],{},"читает сообщение и вводит код",[60,1582,1583],{},"нужен аккаунт в этом мессенджере",[43,1585,1586,1588,1591],{},[60,1587,229],{},[60,1589,1590],{},"приложение само считывает номер входящего",[60,1592,1593],{},"требует разрешений, работает не везде",[43,1595,1596,1598,1601],{},[60,1597,53],{},[60,1599,1600],{},"звонит и сбрасывает",[60,1602,651],{},[11,1604,1605],{},"Последние два способа объединяет то, что вводить код не требуется. Про звонок — отдельный разбор ниже.",[18,1607,1609],{"id":1608},"kak-prohodit-podtverzhdenie-shag-za-shagom","Как проходит подтверждение шаг за шагом",[11,1611,1612],{},"Классический сценарий с кодом выглядит одинаково почти везде:",[135,1614,1615,1618,1621,1624,1627],{},[138,1616,1617],{},"Вы вводите номер в формате, который просит сервис, — обычно с кодом страны.",[138,1619,1620],{},"Сервис создаёт одноразовый код и отправляет его на этот номер.",[138,1622,1623],{},"Вы получаете сообщение и вводите цифры в форму.",[138,1625,1626],{},"Сервис сравнивает введённое с отправленным. Совпало — номер подтверждён и привязан к аккаунту.",[138,1628,1629],{},"Код становится недействительным. Для следующей проверки будет сгенерирован новый.",[11,1631,1632],{},"На четвёртом шаге обычно есть ограничение по числу попыток: несколько неверных вводов подряд — и форма временно блокируется. Это защита от простого перебора четырёх цифр.",[18,1634,1540],{"id":1635},"chto-mozhet-poyti-ne-tak",[11,1637,1638,1641,1642,307],{},[141,1639,1640],{},"Код не приходит."," Самая частая проблема и самая многофакторная: сеть, память телефона, фильтры оператора, роуминг, задержка на стороне отправителя. Разбор всех причин и порядок действий — в отдельном материале ",[303,1643,1644],{"href":326},"не приходит код подтверждения",[11,1646,1647,1650],{},[141,1648,1649],{},"Код приходит с задержкой."," Приходит, но уже просроченным. Запрашивайте новый и вводите сразу — старые сообщения при этом лучше игнорировать, действителен всегда последний код.",[11,1652,1653,1656],{},[141,1654,1655],{},"Код не подходит."," Обычно это либо просроченный код, либо код из предыдущего сообщения, либо опечатка. Если пробовали несколько раз подряд, может сработать защита от перебора — тогда нужно подождать.",[11,1658,1659,1662],{},[141,1660,1661],{},"«Этот номер нельзя использовать для подтверждения»."," Номер уже привязан к другому аккаунту, исчерпан лимит регистраций на один телефон, или сервис не принимает номера этого диапазона. Решается только на стороне сервиса.",[11,1664,1665,1668,1669,1672],{},[141,1666,1667],{},"Форма не принимает номер."," Обычно дело в формате: где-то ждут номер с восьмёркой, где-то с плюсом и кодом страны, где-то без пробелов и скобок. Попробуйте международный вид — ",[146,1670,1671],{},"+7"," и десять цифр без разделителей.",[11,1674,1675,1678],{},[141,1676,1677],{},"Кончились попытки."," После нескольких неверных вводов подряд форма блокируется на время. Это защита от подбора: четырёхзначный код перебирается быстро, если не ограничивать попытки. Ждать придётся от нескольких минут до часа.",[11,1680,1681,1684,1685,307],{},[141,1682,1683],{},"Приходят коды, которых вы не запрашивали."," Отдельная ситуация со своими причинами — от чужой опечатки в номере до попытки войти в ваш аккаунт. Разбор — в материале про ",[303,1686,1688],{"href":1687},"\u002Fblog\u002Fchuzhie-kody-podtverzhdeniya","чужие коды подтверждения",[18,1690,1692],{"id":1691},"pochemu-kod-mozhno-ne-vvodit-voobsche","Почему код можно не вводить вообще",[11,1694,1695,1696,307],{},"Ввод кода — не самоцель, а способ доказать, что телефон у вас. Доказать это можно и по-другому: ",[141,1697,1698],{},"позвонить самому",[11,1700,1701],{},"Сценарий выглядит так. Сервис показывает вам номер, вы нажимаете вызов, звонок обрывается через мгновение — и проверка пройдена. Никаких цифр запоминать и вводить не нужно, ждать сообщения тоже: подтверждением служит сам факт вызова с вашего номера, а его сервис видит сразу.",[11,1703,1704],{},"Почему это работает надёжнее: SMS должна пройти цепочку посредников, на каждом звене которой может потеряться, а исходящий вызов идёт по голосовой сети напрямую. Плюс инициатива у вас — вы не ждёте, пока что-то доедет.",[11,1706,1707,1708,1710],{},"Как это устроено технически и почему звонок доходит там, где теряется SMS, — в статье про ",[303,1709,707],{"href":548},". Если вы разрабатываете сервис и хотите так же — там же описан порядок подключения.",[18,1712,1714],{"id":1713},"bezopasnost-komu-nelzya-soobschat-kod","Безопасность: кому нельзя сообщать код",[11,1716,1717],{},"Короткий раздел, но самый важный на странице.",[11,1719,1720,1723],{},[141,1721,1722],{},"Код подтверждения нельзя сообщать никому."," Ни в переписке, ни по телефону, ни «сотруднику банка», ни «службе поддержки», ни знакомому, который «случайно указал ваш номер». Настоящая поддержка любого сервиса никогда не спрашивает код: он ей не нужен, у неё есть доступ к системе.",[11,1725,1726],{},"Схема мошенничества всегда одна и та же: жертве звонят, придумывают повод — подозрительная операция, отмена заказа, перевод от родственника — и просят продиктовать цифры из пришедшего сообщения. В этот момент злоумышленник уже нажал «Войти» или «Восстановить доступ» в вашем аккаунте, и не хватает ему ровно одного — кода, который пришёл вам.",[11,1728,1729],{},"Правила, которые закрывают почти все случаи:",[424,1731,1732,1735,1738,1741],{},[138,1733,1734],{},"Код из сообщения не сообщается никому, без исключений.",[138,1736,1737],{},"Если звонящий торопит и давит — это признак мошенничества, а не срочности. Положите трубку и перезвоните сами по номеру с официального сайта.",[138,1739,1740],{},"Читайте текст сообщения целиком: там обычно написано, для какого действия код. «Код для входа», пришедший, когда вы никуда не входите, — сигнал сменить пароль.",[138,1742,1743],{},"По ссылкам из сообщений с кодами переходить не нужно, там их не бывает.",{"title":506,"searchDepth":507,"depth":507,"links":1745},[1746,1747,1748,1749,1750,1751,1752,1753],{"id":1423,"depth":507,"text":1424},{"id":1465,"depth":507,"text":1466},{"id":1485,"depth":507,"text":1486},{"id":1520,"depth":507,"text":1521},{"id":1608,"depth":507,"text":1609},{"id":1635,"depth":507,"text":1540},{"id":1691,"depth":507,"text":1692},{"id":1713,"depth":507,"text":1714},"Разбираемся",null,"Что такое код подтверждения номера телефона, зачем сервисы его присылают, какие есть способы верификации, что делать при ошибках и почему код можно не вводить.",[1758,1761,1764,1767,1770,1773],{"q":1759,"a":1760},"Чем отличается подтверждение номера от верификации?","Ничем — это синонимы. «Верификация» пришло из английского, «подтверждение» —\nрусский перевод того же слова. Разные сервисы называют одно и то же действие\nпо-разному, разницы для пользователя нет.\n",{"q":1762,"a":1763},"Сколько действует код подтверждения?","Обычно от одной до пятнадцати минут — конкретный срок задаёт сам сервис.\nПосле этого код перестаёт подходить, и нужно запрашивать новый. Именно\nпоэтому SMS, пришедшая с большой задержкой, часто оказывается бесполезной.\n",{"q":1765,"a":1766},"Почему нельзя использовать один и тот же код дважды?","Потому что тогда он перестал бы что-либо доказывать. Смысл одноразового\nкода в том, что он действителен ровно для одной проверки: перехваченный\nили подсмотренный код после использования становится бесполезен.\n",{"q":1768,"a":1769},"Что значит «этот номер нельзя использовать для подтверждения»?","Чаще всего — что номер уже привязан к другому аккаунту, либо исчерпан лимит\nрегистраций на один телефон, либо номер входит в диапазон, который сервис\nне принимает. Решается обращением в поддержку того сервиса, а не оператора.\n",{"q":1771,"a":1772},"Можно ли зарегистрироваться вообще без номера телефона?","Зависит от сервиса: часть допускает регистрацию по почте. Но если телефон\nзапрашивается, обойти проверку не получится — она и существует для того,\nчтобы аккаунт нельзя было создать на чужой или несуществующий номер.\n",{"q":1774,"a":1775},"Обязательно ли вводить код руками?","Нет. Есть способы подтверждения без ввода: приложение может подставить код\nсамо, а при проверке звонком вводить нечего в принципе — вы просто звоните\nна показанный номер.\n","Код подтверждения телефона: что это такое и зачем он нужен",{},4,"\u002Fblog\u002Fkod-podtverzhdeniya-chto-eto",[1781,1782,968],"ne-prihodit-kod-podtverzhdeniya","chuzhie-kody-podtverzhdeniya",{"title":1415,"description":1756},"blog\u002Fkod-podtverzhdeniya-chto-eto","Код подтверждения — одноразовый набор цифр, которым сервис проверяет, что номер телефона\nпринадлежит именно вам. Приходит в SMS, push-уведомлении или голосовым звонком, действует\nнесколько минут и используется один раз. Никакой ценности сам по себе он не имеет и ничего\nне открывает — опасен только в одной ситуации: если вы сообщите его постороннему.\nНиже — зачем этот код нужен, какие бывают способы подтверждения и что делать, когда\nчто-то идёт не так.\n","iLe0ijnDVZCeTKextro9yD_kLWL4AVFAqmloubY9wiQ",{"id":1788,"title":1789,"body":1790,"category":1754,"cta":1755,"description":2130,"draft":523,"extension":524,"faq":2131,"h1":2150,"meta":2151,"navigation":546,"order":2152,"path":326,"published":549,"related":2153,"seo":2155,"stem":2156,"summary":2157,"updated":549,"__hash__":2158},"blog\u002Fblog\u002Fne-prihodit-kod-podtverzhdeniya.md","Не приходит код подтверждения на телефон — причины",{"type":8,"value":1791,"toc":2112},[1792,1795,1799,1802,1834,1837,1841,1846,1849,1853,1856,1860,1863,1867,1870,1874,1877,1881,1884,1888,1891,1895,1898,1902,1905,1909,1947,1951,1954,2019,2022,2025,2029,2032,2055,2064,2068,2071,2077,2080,2100,2103],[11,1793,1794],{},"Ситуация знакомая: форма ждёт шесть цифр, телефон молчит, таймер повторной отправки тикает. Ниже — что проверить прямо сейчас, из-за чего это обычно происходит и что делать, если ничего не помогло.",[18,1796,1798],{"id":1797},"bystraya-proverka-za-dve-minuty","Быстрая проверка за две минуты",[11,1800,1801],{},"Пять действий, которые решают большинство случаев. Делайте по порядку, после каждого проверяйте сообщения.",[135,1803,1804,1810,1816,1822,1828],{},[138,1805,1806,1809],{},[141,1807,1808],{},"Посмотрите на уровень сигнала."," Одно деление или «только экстренные вызовы» — сообщение не дойдёт. Выйдите на открытое место, включите и выключите авиарежим.",[138,1811,1812,1815],{},[141,1813,1814],{},"Проверьте свободную память."," Переполненная память телефона или SIM-карты — причина, которую почти никогда не подозревают. Удалите несколько десятков старых сообщений.",[138,1817,1818,1821],{},[141,1819,1820],{},"Выключите режим «Не беспокоить» и блокировку неизвестных номеров."," Сообщение приходит, но не показывается — вы его просто не видите.",[138,1823,1824,1827],{},[141,1825,1826],{},"Загляните в спам-папку сообщений."," В современных телефонах есть отдельная папка для отфильтрованных SMS, и коды регулярно оказываются там.",[138,1829,1830,1833],{},[141,1831,1832],{},"Перезагрузите телефон."," Заново регистрирует его в сети — застрявшие в очереди сообщения часто приходят сразу после включения.",[11,1835,1836],{},"Не помогло — читайте дальше.",[18,1838,1840],{"id":1839},"pochemu-sms-s-kodom-ne-prihodit-9-prichin","Почему SMS с кодом не приходит: 9 причин",[1842,1843,1845],"h3",{"id":1844},"_1-net-seti-ili-slabyy-signal","1. Нет сети или слабый сигнал",[11,1847,1848],{},"Сообщение доставляется, только когда телефон зарегистрирован в сети. В подвале, лифте, метро и на даче за городом код будет ждать в очереди оператора и придёт, когда связь появится. Wi-Fi здесь не помогает: SMS ходит через сотовую сеть, а не через интернет.",[1842,1850,1852],{"id":1851},"_2-perepolnena-pamyat-telefona-ili-sim-karty","2. Переполнена память телефона или SIM-карты",[11,1854,1855],{},"У SIM-карты собственная небольшая память под сообщения, и если хранилище настроено на неё, при заполнении новые SMS просто не принимаются. То же самое с забитой памятью самого телефона. Симптом характерный: сообщения перестали приходить разом от всех отправителей.",[1842,1857,1859],{"id":1858},"_3-vklyuchen-rezhim-ne-bespokoit-ili-blokirovka-neizvestnyh","3. Включён режим «Не беспокоить» или блокировка неизвестных",[11,1861,1862],{},"Сообщение доставлено, но скрыто. Сюда же — режим фокусирования, отключённые уведомления для приложения сообщений и «тихий режим» для неизвестных отправителей, который включён по умолчанию в некоторых прошивках.",[1842,1864,1866],{"id":1865},"_4-nomer-otpravitelya-v-chernom-spiske-ili-spam-filtre","4. Номер отправителя в чёрном списке или спам-фильтре",[11,1868,1869],{},"Коды приходят с буквенных имён и коротких номеров, а те легко попадают под фильтры — и встроенные в телефон, и включённые на стороне оператора. Если вы когда-то помечали похожее сообщение как спам, последующие могли отправиться туда же автоматически.",[1842,1871,1873],{"id":1872},"_5-rouming-i-zapret-mezhdunarodnyh-soobscheniy","5. Роуминг и запрет международных сообщений",[11,1875,1876],{},"За границей доставка зависит от роумингового партнёра, и часть сообщений теряется. Отдельная ловушка — включённый запрет на приём международных SMS: российские сервисы иногда отправляют коды через зарубежные каналы, и такое сообщение будет отброшено.",[1842,1878,1880],{"id":1879},"_6-filtraciya-massovyh-rassylok-operatorom","6. Фильтрация массовых рассылок оператором",[11,1882,1883],{},"Операторы фильтруют массовый трафик, борясь со спамом, и под фильтр периодически попадают легитимные рассылки с кодами. Пользователь на это повлиять не может — вопрос решается между сервисом и оператором.",[1842,1885,1887],{"id":1886},"_7-zaderzhka-na-storone-otpravitelya","7. Задержка на стороне отправителя",[11,1889,1890],{},"Между сервисом и вашим телефоном стоит цепочка посредников. Очередь на любом её участке — и код приезжает через двадцать минут, когда уже просрочен. Формально сообщение доставлено, практически бесполезно.",[1842,1892,1894],{"id":1893},"_8-nomer-vveden-neverno-ili-smenil-vladelca","8. Номер введён неверно или сменил владельца",[11,1896,1897],{},"Опечатка в одной цифре — и код ушёл постороннему человеку. Отдельный случай — номер, которым вы давно не пользовались: после длительного молчания операторы возвращают номера в продажу, и сообщения получает новый абонент.",[1842,1899,1901],{"id":1900},"_9-srabotal-limit-na-storone-servisa","9. Сработал лимит на стороне сервиса",[11,1903,1904],{},"Слишком много запросов подряд — и сервис временно перестаёт отправлять коды на этот номер. Защита от перебора и от накрутки. Помогает только пауза: обычно от нескольких минут до часа.",[18,1906,1908],{"id":1907},"chto-delat-esli-kod-tak-i-ne-prishel","Что делать, если код так и не пришёл",[135,1910,1911,1917,1923,1929,1935,1941],{},[138,1912,1913,1916],{},[141,1914,1915],{},"Подождите две минуты и не жмите «Отправить снова» подряд."," Каждый новый запрос обнуляет предыдущий код и приближает срабатывание лимита.",[138,1918,1919,1922],{},[141,1920,1921],{},"Запросите код повторно один раз."," Если есть выбор способа — выберите звонок или мессенджер вместо SMS.",[138,1924,1925,1928],{},[141,1926,1927],{},"Перезагрузите телефон"," или переставьте SIM-карту в другой аппарат: это разом проверяет и память, и настройки, и регистрацию в сети.",[138,1930,1931,1934],{},[141,1932,1933],{},"Проверьте номер посимвольно."," Особенно код страны и первую цифру после него.",[138,1936,1937,1940],{},[141,1938,1939],{},"Позвоните оператору."," Спросите прямо: нет ли блокировки на приём сообщений от коротких номеров и не заблокирован ли номер. Это бесплатно и занимает пару минут.",[138,1942,1943,1946],{},[141,1944,1945],{},"Напишите в поддержку сервиса."," Если код не приходит только от одного сервиса, а от остальных приходит, проблема на его стороне — и решить её можете не вы.",[18,1948,1950],{"id":1949},"kak-ponyat-na-chey-storone-problema","Как понять, на чьей стороне проблема",[11,1952,1953],{},"Полезно до обращения в поддержку: от ответа зависит, кому вообще писать.",[32,1955,1957],{"className":1956},[35],[37,1958,1959,1969],{},[40,1960,1961],{},[43,1962,1963,1966],{},[46,1964,1965],{},"Что наблюдаете",[46,1967,1968],{},"Где искать причину",[55,1970,1971,1979,1987,1995,2003,2011],{},[43,1972,1973,1976],{},[60,1974,1975],{},"Не приходят сообщения ни от кого, включая знакомых",[60,1977,1978],{},"телефон или SIM-карта: память, настройки, регистрация в сети",[43,1980,1981,1984],{},[60,1982,1983],{},"От знакомых приходят, от сервисов — нет",[60,1985,1986],{},"фильтры: чёрный список, спам-папка, блокировка коротких номеров",[43,1988,1989,1992],{},[60,1990,1991],{},"Не приходит только от одного сервиса, от других приходит",[60,1993,1994],{},"сторона сервиса или его отправителя",[43,1996,1997,2000],{},[60,1998,1999],{},"Перестало приходить после поездки за границу",[60,2001,2002],{},"роуминг, запрет международных сообщений",[43,2004,2005,2008],{},[60,2006,2007],{},"Перестало приходить внезапно и от всех сервисов",[60,2009,2010],{},"блокировка номера оператором или фильтрация рассылок",[43,2012,2013,2016],{},[60,2014,2015],{},"На другом телефоне с той же SIM всё приходит",[60,2017,2018],{},"настройки исходного аппарата",[11,2020,2021],{},"Быстрый способ разделить «телефон» и «всё остальное» — переставить SIM-карту в другой аппарат. Если там сообщения появились, дело в настройках или памяти вашего телефона, и оператор с сервисом ни при чём.",[11,2023,2024],{},"Второй полезный тест — попросить знакомого отправить вам обычную SMS. Пришла — значит, приём сообщений работает, и причину надо искать в фильтрах или на стороне сервиса. Не пришла — проблема общая, и разбираться нужно с телефоном и оператором.",[18,2026,2028],{"id":2027},"alternativy-kak-podtverdit-nomer-bez-sms","Альтернативы: как подтвердить номер без SMS",[11,2030,2031],{},"Многие сервисы дают выбор способа. Если SMS не доходит, ищите в форме ссылку вроде «Подтвердить другим способом»:",[424,2033,2034,2039,2045,2050],{},[138,2035,2036,2038],{},[141,2037,1030],{}," — робот зачитывает цифры вслух. Идёт по голосовой сети, а не через SMS-канал, поэтому часто доходит там, где сообщение потерялось.",[138,2040,2041,2044],{},[141,2042,2043],{},"Push-уведомление"," — если у сервиса есть приложение и вы в него уже входили.",[138,2046,2047,2049],{},[141,2048,1577],{}," — приходит через интернет, от сотовой сети не зависит.",[138,2051,2052,2054],{},[141,2053,53],{}," — сервис показывает номер, вы звоните и сбрасываете, вводить ничего не нужно. Подтверждением служит сам вызов с вашего телефона.",[11,2056,2057,2058,2060,2061,307],{},"Последний способ отличается от остальных тем, что в нём нечему теряться: не сервис отправляет вам сообщение и ждёт доставки, а вы совершаете вызов, который система видит сразу. Как это устроено — в статье про ",[303,2059,707],{"href":548},". Что вообще делают коды подтверждения и почему их нельзя никому сообщать — в материале ",[303,2062,2063],{"href":1779},"код подтверждения телефона: что это",[18,2065,2067],{"id":2066},"esli-vy-vladelec-servisa-a-kody-ne-dohodyat-vashim-polzovate","Если вы владелец сервиса, а коды не доходят вашим пользователям",[11,2069,2070],{},"До этого места текст был про то, что делать пользователю. Но если вы читаете его, потому что на недоставленные коды жалуются ваши клиенты, — ситуация выглядит иначе, и решается она не на стороне пользователя.",[11,2072,2073,2076],{},[141,2074,2075],{},"Недоставленная SMS — это не сбой связи, а потерянная регистрация."," Пользователь, не получивший код, не пишет в поддержку. Он закрывает вкладку и уходит к конкуренту, а вы видите только необъяснимый провал в воронке между «ввёл номер» и «подтвердил».",[11,2078,2079],{},"Три факта, которые меняют взгляд на экономику:",[424,2081,2082,2088,2094],{},[138,2083,2084,2087],{},[141,2085,2086],{},"Вы платите за отправку, а не за доставку."," Сообщение, потерянное в фильтре оператора, оплачено так же, как доставленное. Деньги ушли, регистрации нет.",[138,2089,2090,2093],{},[141,2091,2092],{},"Доставляемость вам не подконтрольна."," Фильтры массовых рассылок, роуминг, настройки телефона пользователя — ни на один из этих факторов вы повлиять не можете и даже измерить их толком не сумеете.",[138,2095,2096,2099],{},[141,2097,2098],{},"Повторные отправки удваивают расход, а не конверсию."," Если сообщение не проходит фильтр, второе и третье не пройдут тоже.",[11,2101,2102],{},"Выход не в том, чтобы менять SMS-провайдера по кругу, а в том, чтобы убрать зависимость от доставки сообщения. При подтверждении звонком инициатива на стороне пользователя: он сам совершает вызов, система видит его сразу, и доставлять никуда ничего не требуется. Списание при этом происходит только за состоявшийся звонок — за несостоявшуюся проверку платить не приходится.",[11,2104,2105,2106,2108,2109,2111],{},"Разбор механизма — в статье про ",[303,2107,1279],{"href":548},", сравнение затрат с SMS — в материале ",[303,2110,867],{"href":866},". Разумный вариант внедрения — оставить SMS запасным способом, а звонок сделать основным, и сравнить две воронки на своих данных.",{"title":506,"searchDepth":507,"depth":507,"links":2113},[2114,2115,2126,2127,2128,2129],{"id":1797,"depth":507,"text":1798},{"id":1839,"depth":507,"text":1840,"children":2116},[2117,2118,2119,2120,2121,2122,2123,2124,2125],{"id":1844,"depth":1405,"text":1845},{"id":1851,"depth":1405,"text":1852},{"id":1858,"depth":1405,"text":1859},{"id":1865,"depth":1405,"text":1866},{"id":1872,"depth":1405,"text":1873},{"id":1879,"depth":1405,"text":1880},{"id":1886,"depth":1405,"text":1887},{"id":1893,"depth":1405,"text":1894},{"id":1900,"depth":1405,"text":1901},{"id":1907,"depth":507,"text":1908},{"id":1949,"depth":507,"text":1950},{"id":2027,"depth":507,"text":2028},{"id":2066,"depth":507,"text":2067},"Почему не приходит SMS с кодом подтверждения: фильтры оператора, роуминг, переполненная память, блокировки и лимиты. Разбираем девять причин и что делать по шагам.",[2132,2135,2138,2141,2144,2147],{"q":2133,"a":2134},"Сколько ждать сообщение, прежде чем запрашивать новое?","Обычно достаточно минуты-двух. Большинство сервисов ставят таймер повторной\nотправки — не нажимайте «Отправить снова» раньше, чем он истечёт: каждый\nновый запрос делает недействительным предыдущий код, и если старое сообщение\nвсё-таки придёт, оно уже не подойдёт.\n",{"q":2136,"a":2137},"Почему на другой телефон код приходит, а на мой нет?","Разные операторы по-разному фильтруют массовые рассылки, а настройки самого\nустройства отличаются. Чаще всего дело в блокировке неизвестных отправителей,\nпереполненной памяти или в том, что номер попал в фильтр оператора.\n",{"q":2139,"a":2140},"Может ли код не приходить из-за нулевого баланса?","Входящие сообщения обычно бесплатны и приходят при любом балансе. Но если\nномер заблокирован оператором за долг или из-за окончания срока обслуживания,\nвходящие тоже перестают доходить — это стоит проверить у оператора.\n",{"q":2142,"a":2143},"Помогает ли перезагрузка телефона?","Часто да, и это стоит сделать сразу после проверки памяти. Перезагрузка\nзаново регистрирует телефон в сети оператора, и накопившиеся в очереди\nсообщения нередко приходят все разом.\n",{"q":2145,"a":2146},"Что делать, если номер уже не мой?","Если SIM-карта была перевыпущена или номер после долгого молчания передан\nдругому абоненту, коды уходят новому владельцу. Восстановить доступ можно\nтолько через поддержку сервиса — другими способами подтверждения личности.\n",{"q":2148,"a":2149},"Есть ли способ подтвердить номер без SMS?","Да, и не один: голосовой звонок с кодом, push-уведомление в приложении,\nсообщение в мессенджере и звонок на выделенный номер, при котором вводить\nничего не нужно. Какой доступен — зависит от сервиса.\n","Не приходит код подтверждения на телефон: 9 причин и что делать",{},5,[2154,1782,968],"kod-podtverzhdeniya-chto-eto",{"title":1789,"description":2130},"blog\u002Fne-prihodit-kod-podtverzhdeniya","Если код не пришёл, начните с четырёх вещей: проверьте уровень сети и переключитесь\nс Wi-Fi на мобильную связь, освободите память телефона и SIM-карты, выключите режим\n«Не беспокоить» и блокировку неизвестных номеров, загляните в спам-фильтр сообщений.\nЭто закрывает большинство случаев. Если не помогло — ниже разобраны девять причин,\nпорядок действий и способы подтвердить номер вообще без SMS.\n","V29qaqgTOGMOqmWNYd9RbTLTrZXTfbw47TeWKZi2N7w",{"id":2160,"title":2161,"body":2162,"category":944,"cta":2496,"description":2499,"draft":523,"extension":524,"faq":2500,"h1":2516,"meta":2517,"navigation":546,"order":2518,"path":2519,"published":549,"related":2520,"seo":2522,"stem":2523,"summary":2524,"updated":549,"__hash__":2525},"blog\u002Fblog\u002Fregistraciya-po-zvonku-bez-koda.md","Регистрация по звонку — подтверждение номера без SMS",{"type":8,"value":2163,"toc":2488},[2164,2167,2171,2174,2180,2186,2189,2223,2227,2232,2237,2241,2244,2319,2324,2327,2331,2334,2391,2406,2409,2411,2414,2443,2446,2448,2473],[11,2165,2166],{},"SMS-код стал стандартом регистрации не потому, что он удобен, а потому что долго не было альтернативы. Сегодня она есть: пользователь может подтвердить номер сам, совершив короткий вызов. Разбираем, как выглядит такая форма, что происходит с конверсией и где сценарий не подходит.",[18,2168,2170],{"id":2169},"kak-vyglyadit-forma-registracii-bez-sms-koda","Как выглядит форма регистрации без SMS-кода",[11,2172,2173],{},"Сравним два экрана.",[11,2175,2176,2179],{},[141,2177,2178],{},"С SMS-кодом."," Поле для номера → кнопка «Получить код» → экран ожидания → поле для кода → кнопка «Подтвердить». Пользователь вводит номер, ждёт, переключается в приложение сообщений, читает или копирует код, возвращается, вводит, подтверждает. Пять действий, два переключения между приложениями и одно ожидание непредсказуемой длительности.",[11,2181,2182,2185],{},[141,2183,2184],{},"Со звонком."," Поле для номера → кнопка «Продолжить» → экран с номером и кнопкой «Позвонить» → автоматический переход дальше. Пользователь вводит номер и нажимает вызов. Два действия, ноль ввода, ноль ожидания сообщения.",[11,2187,2188],{},"Ключевые элементы второго экрана:",[424,2190,2191,2200,2206,2212,2218],{},[138,2192,2193,2196,2197,2199],{},[141,2194,2195],{},"Номер крупно и кликабельно."," На мобильном — ссылка ",[146,2198,158],{},", чтобы набор открывался в одно касание. Заставлять переписывать номер руками — значит вернуть в сценарий тот самый ручной ввод, ради избавления от которого всё затевалось.",[138,2201,2202,2205],{},[141,2203,2204],{},"Понятная формулировка."," «Позвоните на этот номер. Трубку брать не нужно, вызов оборвётся сам» — этого достаточно. Слова «верификация» и «flash call» пользователю ничего не объясняют.",[138,2207,2208,2211],{},[141,2209,2210],{},"Таймер на 60 секунд."," Показывает, что процесс не завис, и задаёт рамку ожидания.",[138,2213,2214,2217],{},[141,2215,2216],{},"Автоматический переход."," Как только проверка подтверждена, экран меняется сам — нажимать ничего не нужно.",[138,2219,2220,2222],{},[141,2221,1269],{}," Небольшая ссылка «Подтвердить другим способом» рядом с таймером.",[18,2224,2226],{"id":2225},"kak-eto-rabotaet-pod-kapotom","Как это работает под капотом",[11,2228,2229,2230,307],{},"Коротко: ваш бэкенд создаёт проверку и получает выделенный номер, пользователь звонит, система сопоставляет вызов с проверкой по паре «выделенный номер + номер звонящего», ваш код опрашивает статус и завершает регистрацию по ",[146,2231,178],{},[11,2233,2234,2235,307],{},"Важная деталь: выделенный номер ни за кем не закрепляется — один номер одновременно обслуживает проверки разных людей, поэтому всплеск регистраций не упирается в размер пула. Подробный разбор механизма — в статье про ",[303,2236,707],{"href":548},[18,2238,2240],{"id":2239},"chto-eto-daet-konversii-registracii","Что это даёт конверсии регистрации",[11,2242,2243],{},"Разберём, где именно теряются пользователи в SMS-сценарии. Каждая из этих точек в сценарии со звонком либо исчезает, либо становится безобидной.",[32,2245,2247],{"className":2246},[35],[37,2248,2249,2262],{},[40,2250,2251],{},[43,2252,2253,2256,2259],{},[46,2254,2255],{},"Точка потери",[46,2257,2258],{},"Что происходит",[46,2260,2261],{},"Со звонком",[55,2263,2264,2275,2286,2297,2308],{},[43,2265,2266,2269,2272],{},[60,2267,2268],{},"Ожидание сообщения",[60,2270,2271],{},"пользователь ждёт, отвлекается, закрывает вкладку",[60,2273,2274],{},"ожидания нет, вызов идёт сразу",[43,2276,2277,2280,2283],{},[60,2278,2279],{},"Переключение в приложение сообщений",[60,2281,2282],{},"часть пользователей не возвращается",[60,2284,2285],{},"переключения нет",[43,2287,2288,2291,2294],{},[60,2289,2290],{},"Ручной ввод кода",[60,2292,2293],{},"опечатки, просроченный код, исчерпанные попытки",[60,2295,2296],{},"вводить нечего",[43,2298,2299,2302,2305],{},[60,2300,2301],{},"Сообщение не пришло вовсе",[60,2303,2304],{},"регистрация невозможна, пользователь уходит",[60,2306,2307],{},"доставлять нечего",[43,2309,2310,2313,2316],{},[60,2311,2312],{},"Повторный запрос кода",[60,2314,2315],{},"второй и третий запрос обычно не помогают",[60,2317,2318],{},"повторный вызов бесплатен",[11,2320,2321,2322,307],{},"Последняя строка самая дорогая. Пользователь, не получивший код, редко пишет в поддержку — он просто уходит, а в аналитике это выглядит как необъяснимый провал между шагами. Причины, по которым сообщения не доходят, разобраны в материале ",[303,2323,1644],{"href":326},[11,2325,2326],{},"Насколько вырастет именно ваша конверсия, заранее не скажет никто: это зависит от аудитории, региона и текущей доставляемости. Честный способ узнать — включить звонок части пользователей и сравнить две воронки.",[18,2328,2330],{"id":2329},"chto-napisat-na-ekrane-chtoby-polzovatel-ponyal","Что написать на экране, чтобы пользователь понял",[11,2332,2333],{},"Сценарий новый для большинства людей, и провалить его можно одной формулировкой. Разница между работающим и неработающим текстом на этом экране больше, чем разница между двумя способами подтверждения.",[32,2335,2337],{"className":2336},[35],[37,2338,2339,2349],{},[40,2340,2341],{},[43,2342,2343,2346],{},[46,2344,2345],{},"Не работает",[46,2347,2348],{},"Работает",[55,2350,2351,2359,2367,2375,2383],{},[43,2352,2353,2356],{},[60,2354,2355],{},"«Пройдите верификацию номера»",[60,2357,2358],{},"«Позвоните на этот номер»",[43,2360,2361,2364],{},[60,2362,2363],{},"«Инициируйте вызов на указанный номер»",[60,2365,2366],{},"«Нажмите кнопку — откроется набор»",[43,2368,2369,2372],{},[60,2370,2371],{},"«Ожидайте подтверждения»",[60,2373,2374],{},"«Трубку брать не нужно, вызов оборвётся сам»",[43,2376,2377,2380],{},[60,2378,2379],{},"«Звонок будет отклонён»",[60,2381,2382],{},"«Звонок бесплатный»",[43,2384,2385,2388],{},[60,2386,2387],{},"«Используется технология flash call»",[60,2389,2390],{},"ничего, это лишнее",[11,2392,2393,2394,2397,2398,2401,2402,2405],{},"Три вещи, которые обязательно должны быть на экране словами: что звонить нужно ",[141,2395,2396],{},"с того самого телефона",", что ",[141,2399,2400],{},"отвечать не надо",", и что ",[141,2403,2404],{},"это ничего не стоит",". Первое снимает самую частую причину неудачных проверок — звонок с рабочего аппарата. Второе успокаивает тех, кто ждёт разговора с роботом. Третье закрывает опасение, что вызов окажется платным.",[11,2407,2408],{},"Отдельно про подтверждение бесплатности: оператор тарифицирует вызов по тарифу абонента, но соединение сбрасывается до ответа, а неотвеченные вызовы не тарифицируются. Формулировка «звонок бесплатный, соединение не устанавливается» и точна, и понятна.",[18,2410,877],{"id":876},[11,2412,2413],{},"Раздел, без которого материал был бы рекламой.",[424,2415,2416,2422,2426,2431,2437],{},[138,2417,2418,2421],{},[141,2419,2420],{},"Зарубежные абоненты."," Пул состоит из российских номеров; для иностранных SIM сценарий не работает.",[138,2423,2424,894],{},[141,2425,893],{},[138,2427,2428,2430],{},[141,2429,899],{}," Интернет есть, сети оператора нет — сценарий не пройдёт.",[138,2432,2433,2436],{},[141,2434,2435],{},"Нужен именно текстовый код."," Например, если код должен остаться у пользователя в переписке как подтверждение операции.",[138,2438,2439,2442],{},[141,2440,2441],{},"Регистрация с чужого устройства."," Пользователь заполняет форму на компьютере коллеги, а телефон дома. Впрочем, в SMS-сценарии он тоже не получит код.",[11,2444,2445],{},"Вывод практический: звонок ставится основным способом, а SMS остаётся запасным. Это снимает и перечисленные случаи, и главное возражение — «а если не сработает».",[18,2447,470],{"id":469},[135,2449,2450,2452,2455,2461,2470],{},[138,2451,478],{},[138,2453,2454],{},"В форме регистрации после ввода номера вызывайте создание проверки на своём бэкенде. Ключ проекта хранится только на сервере.",[138,2456,2457,2458,2460],{},"Покажите пользователю выделенный номер ссылкой ",[146,2459,158],{}," и таймер.",[138,2462,2463,2464,2466,2467,2469],{},"Опрашивайте статус: ",[146,2465,178],{}," — завершайте регистрацию, ",[146,2468,182],{}," — предлагайте позвонить ещё раз.",[138,2471,2472],{},"Добавьте запасной способ подтверждения.",[11,2474,2475,2476,2478,2479,2482,2483,2485,2486,307],{},"Детали реализации отличаются в зависимости от площадки: для веба — в материале про ",[303,2477,777],{"href":776},", для мобильных — про ",[303,2480,2481],{"href":786},"подтверждение в приложении",". Запросы и примеры кода — в статье про ",[303,2484,503],{"href":502},". Цены — на странице ",[303,2487,410],{"href":409},{"title":506,"searchDepth":507,"depth":507,"links":2489},[2490,2491,2492,2493,2494,2495],{"id":2169,"depth":507,"text":2170},{"id":2225,"depth":507,"text":2226},{"id":2239,"depth":507,"text":2240},{"id":2329,"depth":507,"text":2330},{"id":876,"depth":507,"text":877},{"id":469,"depth":507,"text":470},{"title":2497,"text":2498,"label":520,"href":521},"Соберите форму регистрации без кода","Ключ проекта выдаётся сразу после регистрации — тестовую проверку можно прогнать в тот же день.","Как устроена регистрация с подтверждением номера звонком: пользователь звонит на выделенный номер вместо ввода SMS-кода. Форма, конверсия, ограничения и стоимость.",[2501,2504,2507,2510,2513],{"q":2502,"a":2503},"Пользователь точно поймёт, что от него хотят?","Если формулировать действием, а не термином — да. Работает «Позвоните на этот\nномер, трубку брать не нужно» и крупная кнопка вызова. Не работает «пройдите\nверификацию методом обратного flash call»: пользователю не нужно название\nтехнологии, ему нужно понятное указание.\n",{"q":2505,"a":2506},"Что делать с теми, у кого звонок не проходит?","Оставить в форме вторую кнопку — «Подтвердить другим способом». Скрытый номер,\nзарубежная SIM и корпоративная АТС встречаются редко, но такие пользователи\nбез запасного варианта не зарегистрируются вообще.\n",{"q":2508,"a":2509},"Можно ли внедрить не для всех сразу?","Да, и так правильнее. Включите звонок части аудитории, оставив остальным\nпрежний сценарий, и сравните две воронки на своих данных — от «ввёл номер»\nдо «завершил регистрацию».\n",{"q":2511,"a":2512},"Сколько стоит неудачная попытка?","Ноль. Если пользователь не позвонил, проверка через 60 секунд становится\n`EXPIRED` и не тарифицируется. Повторные попытки тоже бесплатны, пока\nзвонок не состоялся.\n",{"q":2514,"a":2515},"Нужно ли для этого мобильное приложение?","Нет, сценарий работает и в обычном браузере. В приложении он чуть удобнее —\nнабор открывается одним касанием, — но принципиально ничего не меняется.\n","Регистрация по звонку: подтверждение номера без SMS и ввода кода",{},6,"\u002Fblog\u002Fregistraciya-po-zvonku-bez-koda",[968,2521,551],"podtverzhdenie-nomera-na-sayte",{"title":2161,"description":2499},"blog\u002Fregistraciya-po-zvonku-bez-koda","Регистрация по звонку — сценарий, в котором пользователь подтверждает телефон\nисходящим вызовом, а не полученным кодом. Форма показывает номер, пользователь нажимает\n«Позвонить», вызов сбрасывается — регистрация завершена. Вместо пяти шагов остаётся два,\nиз воронки уходит ожидание сообщения и ручной ввод цифр. Подтверждение стоит 0,20 ₽,\nнесостоявшаяся проверка не тарифицируется.\n","cxAeS5elkut53Op9fW9Di8s2TVkAKZyxsvMmTuk3BAc",{"id":2527,"title":2528,"body":2529,"category":2829,"cta":2830,"description":2833,"draft":523,"extension":524,"faq":2834,"h1":2847,"meta":2848,"navigation":546,"order":2849,"path":776,"published":549,"related":2850,"seo":2852,"stem":2853,"summary":2854,"updated":549,"__hash__":2855},"blog\u002Fblog\u002Fpodtverzhdenie-nomera-na-sayte.md","Подтверждение номера телефона на сайте — как реализовать",{"type":8,"value":2530,"toc":2822},[2531,2534,2538,2567,2572,2576,2639,2642,2652,2656,2696,2701,2705,2708,2757,2760,2764,2767,2770],[11,2532,2533],{},"Форма с подтверждением телефона нужна в трёх местах почти любого сайта: при регистрации, при оформлении заказа и при публикации объявления. Разбираем, какие есть варианты реализации, сколько они стоят и как собрать сценарий со звонком.",[18,2535,2537],{"id":2536},"gde-na-sayte-nuzhno-podtverzhdat-nomer","Где на сайте нужно подтверждать номер",[424,2539,2540,2545,2551,2557,2562],{},[138,2541,2542,2544],{},[141,2543,430],{}," Отсечь фейковые аккаунты и получить рабочий контакт.",[138,2546,2547,2550],{},[141,2548,2549],{},"Оформление заказа."," Убедиться, что курьер дозвонится, и отсечь ложные заказы — особенно при оплате при получении.",[138,2552,2553,2556],{},[141,2554,2555],{},"Публикация объявления."," Подтверждённый контакт продавца снижает долю мошеннических размещений.",[138,2558,2559,2561],{},[141,2560,1513],{}," Телефон как доказательство, что аккаунт принадлежит вам.",[138,2563,2564,2566],{},[141,2565,446],{}," Смена реквизитов, крупная покупка, изменение доставки.",[11,2568,2569,2570,307],{},"Разбор задач по отраслям — в статье ",[303,2571,466],{"href":465},[18,2573,2575],{"id":2574},"varianty-realizacii-i-chto-oni-stoyat","Варианты реализации и что они стоят",[32,2577,2579],{"className":2578},[35],[37,2580,2581,2597],{},[40,2582,2583],{},[43,2584,2585,2588,2591,2594],{},[46,2586,2587],{},"Вариант",[46,2589,2590],{},"Срок внедрения",[46,2592,2593],{},"За что платите",[46,2595,2596],{},"Что ломается",[55,2598,2599,2611,2625],{},[43,2600,2601,2604,2607,2609],{},[60,2602,2603],{},"Своя интеграция с SMS-агрегатором",[60,2605,2606],{},"от недели",[60,2608,109],{},[60,2610,1022],{},[43,2612,2613,2616,2619,2622],{},[60,2614,2615],{},"Готовый виджет с кодом",[60,2617,2618],{},"день-два",[60,2620,2621],{},"по тарифу виджета, обычно за попытку",[60,2623,2624],{},"чужой интерфейс на вашем сайте, ограниченная кастомизация",[43,2626,2627,2630,2633,2636],{},[60,2628,2629],{},"Подтверждение звонком",[60,2631,2632],{},"день",[60,2634,2635],{},"только за состоявшийся звонок",[60,2637,2638],{},"не проходит при скрытом номере и у зарубежных SIM",[11,2640,2641],{},"У первых двух вариантов общая слабость: результат зависит от доставки сообщения, на которую вы не влияете. У третьего зависимость другая — от того, передаётся ли номер вызывающего абонента. Она затрагивает меньшую долю аудитории и, в отличие от доставляемости, предсказуема.",[11,2643,2644,2645,2647,2648,2651],{},"Как именно устроена проверка звонком — в статье про ",[303,2646,707],{"href":548},". Если ваш продукт живёт не только в вебе, посмотрите отличия мобильного сценария в материале про ",[303,2649,2650],{"href":786},"подтверждение номера в приложении",": там набор открывается одним касанием, и экран ожидания строится иначе.",[18,2653,2655],{"id":2654},"kak-vstroit-podtverzhdenie-zvonkom-5-shagov","Как встроить подтверждение звонком: 5 шагов",[135,2657,2658,2664,2670,2678,2684],{},[138,2659,2660,2663],{},[141,2661,2662],{},"Зарегистрируйтесь и создайте проект."," Он получит собственный ключ. Ключ живёт в переменных окружения на сервере — не в репозитории и не во фронтенде.",[138,2665,2666,2669],{},[141,2667,2668],{},"Добавьте эндпоинт «начать проверку» на своём бэкенде."," Он принимает номер от фронтенда, валидирует его, вызывает создание проверки и возвращает во фронтенд только идентификатор и выделенный номер.",[138,2671,2672,2675,2676,307],{},[141,2673,2674],{},"Покажите номер пользователю."," Крупно, с таймером на 60 секунд, на мобильных — ссылкой ",[146,2677,158],{},[138,2679,2680,2683],{},[141,2681,2682],{},"Добавьте эндпоинт «статус проверки»."," Фронтенд опрашивает его, а он проксирует запрос с ключом. Наружу отдавайте только статус — ни ключ, ни лишние поля клиенту не нужны.",[138,2685,2686,2689,2690,2692,2693,2695],{},[141,2687,2688],{},"Обработайте результат на бэкенде."," По ",[146,2691,178],{}," — помечайте номер подтверждённым и продолжайте сценарий, по ",[146,2694,182],{}," — предлагайте повторить.",[11,2697,2698,2699,307],{},"Запросы, форматы ответов и примеры кода — в материале про ",[303,2700,503],{"href":502},[18,2702,2704],{"id":2703},"chto-pokazat-polzovatelyu-v-forme","Что показать пользователю в форме",[11,2706,2707],{},"Экран ожидания звонка решает больше, чем кажется: именно на нём пользователь либо делает нужное действие, либо закрывает вкладку.",[424,2709,2710,2720,2726,2734,2740,2745,2751],{},[138,2711,2712,2715,2716,2719],{},[141,2713,2714],{},"Номер — самый крупный элемент экрана."," С разделителями, в привычном виде: ",[146,2717,2718],{},"+7 495 000-00-00",". Его будут набирать руками с другого устройства.",[138,2721,2722,2725],{},[141,2723,2724],{},"Кнопка копирования"," рядом с номером — на десктопе она нужнее, чем кажется.",[138,2727,2728,2733],{},[141,2729,2730,2731],{},"Ссылка ",[146,2732,158],{}," на мобильных: одно касание вместо переписывания.",[138,2735,2736,2739],{},[141,2737,2738],{},"Понятная инструкция."," «Позвоните на этот номер с телефона, который подтверждаете. Трубку брать не нужно — вызов оборвётся сам». Без слова «верификация».",[138,2741,2742,2744],{},[141,2743,2210],{}," Показывает, что процесс идёт, и задаёт рамку ожидания.",[138,2746,2747,2750],{},[141,2748,2749],{},"Автопереход при подтверждении."," Пользователь не должен нажимать «Проверить» — экран меняется сам.",[138,2752,2753,2756],{},[141,2754,2755],{},"После истечения таймера"," — «Позвонить ещё раз» и ссылка «Подтвердить другим способом».",[11,2758,2759],{},"Отдельно про звонок с того же номера: предупредите об этом заранее, одной строкой под номером. Иначе часть пользователей позвонит с рабочего телефона, проверка не подтвердится, и причина будет неочевидна.",[18,2761,2763],{"id":2762},"kak-obrabotat-rezultat-na-bekende","Как обработать результат на бэкенде",[11,2765,2766],{},"Вебхуков в сервисе нет — результат забирается опросом статуса. Это упрощает интеграцию: не нужен публично доступный обработчик, не нужна проверка подписи, не нужно думать о повторных доставках.",[11,2768,2769],{},"Что учесть:",[424,2771,2772,2778,2789,2795,2804,2810,2816],{},[138,2773,2774,2777],{},[141,2775,2776],{},"Интервал опроса."," Раз в одну-две секунды достаточно. Чаще — бессмысленно, реже — заметная задержка на экране.",[138,2779,2780,2783,2784,1139,2786,2788],{},[141,2781,2782],{},"Условия остановки."," Три штуки: ",[146,2785,178],{},[146,2787,182],{},", истёк локальный таймер. Без явных условий опрос продолжится после ухода пользователя со страницы.",[138,2790,2791,2794],{},[141,2792,2793],{},"Доверять только своему серверу."," Решение «номер подтверждён» принимается на бэкенде по ответу API, а не по тому, что прислал фронтенд.",[138,2796,2797,2800,2801,2803],{},[141,2798,2799],{},"Идемпотентность на своей стороне."," Один и тот же ",[146,2802,178],{}," может быть увиден несколькими запросами подряд — привязка номера должна отрабатывать один раз.",[138,2805,2806,2809],{},[141,2807,2808],{},"Проверка баланса."," Если средств не хватает, проверка не создастся и API вернёт ошибку. Обработайте её явно и заведите оповещение о низком балансе: иначе форма молча перестанет работать.",[138,2811,2812,2815],{},[141,2813,2814],{},"Ограничение частоты на своём эндпоинте."," Создание проверок стоит денег, поэтому лимит на число попыток с одного адреса или сессии нужен обязательно.",[138,2817,2818,2821],{},[141,2819,2820],{},"Валидация номера до отправки."," Приведите введённое к формату E.164 на своей стороне — так вы не потратите запрос на заведомо некорректный номер и покажете пользователю понятную ошибку сразу в форме.",{"title":506,"searchDepth":507,"depth":507,"links":2823},[2824,2825,2826,2827,2828],{"id":2536,"depth":507,"text":2537},{"id":2574,"depth":507,"text":2575},{"id":2654,"depth":507,"text":2655},{"id":2703,"depth":507,"text":2704},{"id":2762,"depth":507,"text":2763},"Реализация",{"title":2831,"text":2832,"label":520,"href":521},"Добавьте подтверждение на свой сайт","Два запроса к REST API, без SDK и лишних зависимостей. Ключ проекта выдаётся сразу после регистрации.","Как добавить на сайт подтверждение номера телефона: варианты реализации и их цена, сценарий со звонком, что показывать в форме и как обработать результат.",[2835,2838,2841,2844],{"q":2836,"a":2837},"Пользователь на десктопе — как он позвонит?","С телефона, глядя на экран компьютера. Поэтому номер нужно показывать крупно\nи с разделителями, чтобы его было легко набрать вручную, а не мелким шрифтом\nв одну строку. На мобильных браузерах номер должен быть ссылкой `tel:`.\n",{"q":2839,"a":2840},"Можно ли обойтись без бэкенда?","Нет. Ключ проекта нельзя размещать во фронтенде — из браузера его заберёт кто\nугодно и начнёт тратить ваш баланс. Создание проверки и опрос статуса должны\nидти через ваш собственный сервер.\n",{"q":2842,"a":2843},"Как часто опрашивать статус?","Достаточно раза в пару секунд: сценарий укладывается в 60 секунд, и более\nчастый опрос ничего не ускоряет. Прекращать опрос нужно по `CONFIRMED`,\nпо `EXPIRED` и по истечении таймера, иначе запросы будут идти вечно.\n",{"q":2845,"a":2846},"Что делать с пользователями, у которых звонок не проходит?","Оставить в форме ссылку «Подтвердить другим способом». Скрытый номер,\nзарубежная SIM и корпоративная АТС встречаются нечасто, но без запасного\nварианта такие пользователи не пройдут дальше.\n","Как сделать подтверждение номера телефона на сайте",{},7,[968,2851,1408],"podtverzhdenie-nomera-v-prilozhenii",{"title":2528,"description":2833},"blog\u002Fpodtverzhdenie-nomera-na-sayte","Подтверждение номера на сайте делается тремя способами: своя интеграция с SMS-агрегатором,\nготовый виджет или проверка звонком. Последний вариант не требует доставки сообщения —\nпользователь сам звонит на выделенный номер, и вводить ему нечего. На бэкенде это два\nHTTP-запроса и три статуса, во фронтенде — кликабельный номер и таймер на 60 секунд.\nПодтверждение стоит 0,20 ₽, несостоявшееся не тарифицируется.\n","E4A1c-OYXZBIRTAoVrLxmuUT_fr8E9_Q658zLnHCN8E",{"id":2857,"title":2858,"body":2859,"category":2829,"cta":3124,"description":3127,"draft":523,"extension":524,"faq":3128,"h1":3141,"meta":3142,"navigation":546,"order":3143,"path":786,"published":549,"related":3144,"seo":3145,"stem":3146,"summary":3147,"updated":549,"__hash__":3148},"blog\u002Fblog\u002Fpodtverzhdenie-nomera-v-prilozhenii.md","Подтверждение номера в приложении — как сделать без SMS",{"type":8,"value":2860,"toc":3117},[2861,2864,2868,2875,2878,2881,2884,2888,2920,2923,2927,2930,2941,2950,2958,2972,2976,3049,3053,3056,3111],[11,2862,2863],{},"На мобильных сценарий подтверждения звонком раскрывается лучше всего: телефон, с которого нужно позвонить, — это то же устройство, где открыто приложение. Пользователю не приходится ничего переносить с экрана на экран.",[18,2865,2867],{"id":2866},"chem-podtverzhdenie-v-prilozhenii-otlichaetsya-ot-sayta","Чем подтверждение в приложении отличается от сайта",[11,2869,2870,2871,2874],{},"Главное отличие одно, и оно решающее: ",[141,2872,2873],{},"приложение может открыть набор номера в одно касание",". Пользователь нажимает кнопку — открывается системный диалер с уже подставленным номером, остаётся нажать вызов.",[11,2876,2877],{},"На сайте с десктопа так не получится: номер придётся переносить на телефон руками, и это худшая точка сценария. В приложении её просто нет.",[11,2879,2880],{},"Второе отличие — контроль над экраном. Приложение точно знает, когда пользователь вернулся из диалера, и может проверить статус именно в этот момент, а не по таймеру. Переход к следующему шагу получается мгновенным.",[11,2882,2883],{},"Третье — обратная сторона: приложение уходит на задний план во время вызова, и это надо учитывать в логике, а не считать сбоем.",[18,2885,2887],{"id":2886},"scenariy-so-zvonkom-chto-vidit-polzovatel","Сценарий со звонком: что видит пользователь",[135,2889,2890,2896,2902,2908,2914],{},[138,2891,2892,2895],{},[141,2893,2894],{},"Экран ввода номера."," Поле в международном формате, подсказка про код страны, кнопка «Продолжить».",[138,2897,2898,2901],{},[141,2899,2900],{},"Экран подтверждения."," Крупная кнопка «Позвонить», под ней — номер текстом на случай, если диалер не откроется. Пояснение: трубку брать не нужно, вызов оборвётся сам. Таймер на 60 секунд.",[138,2903,2904,2907],{},[141,2905,2906],{},"Системный диалер."," Открывается с подставленным номером. Пользователь нажимает вызов, соединение сбрасывается через мгновение.",[138,2909,2910,2913],{},[141,2911,2912],{},"Возврат в приложение."," Статус уже подтверждён — экран меняется сам, нажимать ничего не нужно.",[138,2915,2916,2919],{},[141,2917,2918],{},"Если не сложилось."," По истечении таймера — кнопка «Позвонить ещё раз» и ссылка на запасной способ.",[11,2921,2922],{},"Формулировки на втором экране важнее, чем кажется. «Позвоните на этот номер, трубку брать не нужно» пользователь понимает сразу. «Пройдите верификацию» — нет.",[18,2924,2926],{"id":2925},"realizaciya-na-ios-i-android","Реализация на iOS и Android",[11,2928,2929],{},"Логика одинаковая, различается только открытие диалера.",[11,2931,2932,2935,2936,2938,2939,307],{},[141,2933,2934],{},"Общая часть."," Бэкенд создаёт проверку и получает выделенный номер; приложение показывает его и опрашивает статус. Сам механизм проверки разобран в статье про ",[303,2937,707],{"href":548}," — он одинаков для всех платформ. Ключ проекта в приложении хранить нельзя: его место на сервере, а мобильный клиент ходит в ваш собственный API. Веб-версия того же сценария описана в материале про ",[303,2940,777],{"href":776},[11,2942,2943,2946,2947,2949],{},[141,2944,2945],{},"Открытие набора."," На iOS — системная ссылка вида ",[146,2948,158],{},", на Android — намерение набора номера. В обоих случаях открывается штатный диалер с подставленным номером; сам вызов инициирует пользователь. Автоматически совершать звонок за него не нужно и не следует: это требует отдельного разрешения и выглядит подозрительно.",[11,2951,2952,2955,2956,307],{},[141,2953,2954],{},"Разрешения не нужны."," Здесь ключевое отличие от обычного flash call, при котором приложение считывает номер входящего вызова из журнала. Такой доступ ограничен политиками магазинов: в Google Play выдача разрешения на журнал вызовов требует обоснования, а в iOS публичного API для чтения журнала нет вовсе. При обратном сценарии читать нечего — звонок видит сервис на своей стороне. Разбор разницы — в статье ",[303,2957,1078],{"href":305},[11,2959,2960,2963,2964,2966,2967,2969,2970,307],{},[141,2961,2962],{},"Опрос статуса."," Периодический запрос с разумным интервалом плюс обязательная внеочередная проверка при возврате приложения на передний план. Опрос прекращается по ",[146,2965,178],{},", по ",[146,2968,182],{}," или по истечении таймера. Детали запросов — в материале про ",[303,2971,503],{"href":502},[18,2973,2975],{"id":2974},"obrabotka-granichnyh-sluchaev","Обработка граничных случаев",[32,2977,2979],{"className":2978},[35],[37,2980,2981,2991],{},[40,2982,2983],{},[43,2984,2985,2988],{},[46,2986,2987],{},"Ситуация",[46,2989,2990],{},"Что делать",[55,2992,2993,3001,3009,3017,3025,3033,3041],{},[43,2994,2995,2998],{},[60,2996,2997],{},"Приложение свёрнуто во время вызова",[60,2999,3000],{},"проверять статус при возврате на передний план, не только по таймеру",[43,3002,3003,3006],{},[60,3004,3005],{},"Пользователь отменил вызов в диалере",[60,3007,3008],{},"оставить экран активным, таймер продолжает идти — он может позвонить снова",[43,3010,3011,3014],{},[60,3012,3013],{},"Звонок с другого номера",[60,3015,3016],{},"проверка не подтвердится; в подсказке заранее написать, что звонить нужно с указанного номера",[43,3018,3019,3022],{},[60,3020,3021],{},"Нет сигнала сотовой сети",[60,3023,3024],{},"предложить запасной способ подтверждения",[43,3026,3027,3030],{},[60,3028,3029],{},"Диалер не открылся",[60,3031,3032],{},"номер показан текстом, дать кнопку копирования",[43,3034,3035,3038],{},[60,3036,3037],{},"Истекли 60 секунд",[60,3039,3040],{},"показать «Позвонить ещё раз», создать новую проверку",[43,3042,3043,3046],{},[60,3044,3045],{},"Приложение закрыто до подтверждения",[60,3047,3048],{},"при следующем запуске начинать сценарий заново",[18,3050,3052],{"id":3051},"chto-proverit-pered-otpravkoy-v-magazin","Что проверить перед отправкой в магазин",[11,3054,3055],{},"Короткий чек-лист по местам, где мобильная реализация обычно ломается.",[424,3057,3058,3064,3070,3076,3087,3093,3099,3105],{},[138,3059,3060,3063],{},[141,3061,3062],{},"Диалер открывается на реальном устройстве",", а не только в эмуляторе. На части прошивок поведение отличается.",[138,3065,3066,3069],{},[141,3067,3068],{},"Номер показан текстом рядом с кнопкой."," Если системный набор не открылся, пользователю нужен запасной путь — скопировать и набрать вручную.",[138,3071,3072,3075],{},[141,3073,3074],{},"Статус проверяется при возврате на передний план."," Без этого пользователь возвращается на экран ожидания, который уже неактуален.",[138,3077,3078,3081,3082,1139,3084,3086],{},[141,3079,3080],{},"Опрос останавливается."," Три условия: ",[146,3083,178],{},[146,3085,182],{},", истёкший таймер. Иначе запросы продолжатся в фоне и посадят батарею.",[138,3088,3089,3092],{},[141,3090,3091],{},"Ключ проекта не лежит в приложении."," Даже в обфусцированном виде: мобильный клиент разбирается, а ключ тратит ваш баланс. Приложение ходит в ваш собственный API.",[138,3094,3095,3098],{},[141,3096,3097],{},"Экран переживает поворот и сворачивание."," Идентификатор проверки и остаток таймера должны сохраняться.",[138,3100,3101,3104],{},[141,3102,3103],{},"Есть запасной способ подтверждения"," для тех, у кого номер не определяется.",[138,3106,3107,3110],{},[141,3108,3109],{},"Тексты понятны без терминов."," «Позвоните на этот номер, трубку брать не нужно» вместо «пройдите верификацию».",[11,3112,3113,3114,3116],{},"Отдельно про повторные попытки: они ничего не стоят. Тарифицируется только состоявшийся звонок, проверка в статусе ",[146,3115,182],{}," не списывает баланс — поэтому предлагать позвонить ещё раз можно без оглядки на расходы.",{"title":506,"searchDepth":507,"depth":507,"links":3118},[3119,3120,3121,3122,3123],{"id":2866,"depth":507,"text":2867},{"id":2886,"depth":507,"text":2887},{"id":2925,"depth":507,"text":2926},{"id":2974,"depth":507,"text":2975},{"id":3051,"depth":507,"text":3052},{"title":3125,"text":3126,"label":520,"href":521},"Встройте подтверждение в своё приложение","Два HTTP-запроса, никаких SDK и разрешений. Ключ проекта выдаётся сразу после регистрации.","Как реализовать подтверждение номера в мобильном приложении: сценарий со звонком вместо SMS, работа без разрешений, экраны, обработка граничных случаев.",[3129,3132,3135,3138],{"q":3130,"a":3131},"Нужны ли разрешения на чтение SMS или журнала вызовов?","Нет, и это ключевое отличие сценария. Приложение только открывает системный\nдиалер и опрашивает статус проверки по сети. Читать сообщения и журнал\nвызовов не требуется, поэтому и запрашивать соответствующие разрешения\nне нужно.\n",{"q":3133,"a":3134},"Пройдёт ли такое приложение модерацию в магазинах?","С этой стороны придираться не к чему: чувствительные разрешения не запрашиваются,\nфоновой активности нет, всё общение с сервисом идёт обычными HTTP-запросами.\nИменно из-за разрешений обычный flash call часто и не проходит.\n",{"q":3136,"a":3137},"Что если пользователь свернул приложение во время звонка?","Так и будет — набор номера сворачивает приложение по определению. Поэтому\nстатус нужно проверять и при возврате на передний план, а не только по таймеру:\nк этому моменту проверка обычно уже подтверждена.\n",{"q":3139,"a":3140},"Нужен ли отдельный код для iOS и Android?","Отличается только способ открыть диалер — системная ссылка на iOS и намерение\nнабора на Android. Вся логика проверки одинаковая: создать, показать номер,\nопросить статус.\n","Подтверждение номера телефона в мобильном приложении",{},8,[968,2521,553],{"title":2858,"description":3127},"blog\u002Fpodtverzhdenie-nomera-v-prilozhenii","В мобильном приложении подтверждение номера звонком удобнее, чем где-либо ещё: набор\nоткрывается одним касанием через системный диалер, пользователю не нужно ничего\nпереписывать и вводить. Главное преимущество перед обычным flash call — приложению\nне требуются разрешения на чтение SMS и журнала вызовов, а их выдачу ограничивают\nи Google Play, и App Store. Проверка живёт 60 секунд, стоит 0,20 ₽ за состоявшийся звонок.\n","SzYBtnQ2PPpUxp6ImUb7w9yWpfYtOF4vzcvV-g9wfsk",{"id":3150,"title":3151,"body":3152,"category":944,"cta":3502,"description":3505,"draft":523,"extension":524,"faq":3506,"h1":3519,"meta":3520,"navigation":546,"order":3521,"path":756,"published":549,"related":3522,"seo":3525,"stem":3526,"summary":3527,"updated":549,"__hash__":3528},"blog\u002Fblog\u002Fpodtverzhdenie-pri-registracii-i-vhode.md","Подтверждение номера при регистрации и входе — сценарии",{"type":8,"value":3153,"toc":3494},[3154,3157,3163,3167,3173,3179,3185,3194,3198,3203,3208,3213,3220,3224,3229,3234,3239,3253,3258,3260,3263,3349,3352,3355,3359,3454,3457,3461,3487],[11,3155,3156],{},"«Подтвердить номер» звучит как одно действие, но за ним стоят три разные задачи. Спроектированные под одну гребёнку, они дают либо лишнее трение при регистрации, либо недостаточную защиту при выводе средств. Разбираем каждую отдельно.",[11,3158,3159,3160,3162],{},"Технически во всех трёх случаях используется один и тот же механизм — например, ",[303,3161,1279],{"href":548},". Различаются момент, в который он вызывается, и то, что вы делаете с результатом.",[18,3164,3166],{"id":3165},"scenariy-1-registraciya","Сценарий 1 — регистрация",[11,3168,3169,3172],{},[141,3170,3171],{},"Задача:"," отсечь автоматические и фейковые регистрации и получить рабочий контакт.",[11,3174,3175,3178],{},[141,3176,3177],{},"Что важно:"," скорость и конверсия. Каждый лишний шаг здесь стоит живых пользователей, а угроза, от которой мы защищаемся, — массовая, а не адресная. Никто не подбирает конкретный аккаунт, которого ещё не существует.",[11,3180,3181,3184],{},[141,3182,3183],{},"Требования:"," к удобству — высокие, к стойкости — умеренные. Достаточно доказательства, что за формой человек с работающим телефоном.",[11,3186,3187,3190,3191,307],{},[141,3188,3189],{},"Что подходит:"," звонок закрывает сценарий лучше всего — два действия вместо пяти, ничего не нужно вводить и ждать. Разбор формы и влияния на воронку — в материале про ",[303,3192,3193],{"href":2519},"регистрацию по звонку",[18,3195,3197],{"id":3196},"scenariy-2-vhod","Сценарий 2 — вход",[11,3199,3200,3202],{},[141,3201,3171],{}," пустить владельца аккаунта и не пустить постороннего.",[11,3204,3205,3207],{},[141,3206,3177],{}," здесь впервые появляется адресная угроза — кто-то может целенаправленно ломиться в конкретный аккаунт. Одновременно вход происходит часто, поэтому трение накапливается: то, что терпимо один раз при регистрации, раздражает при каждом посещении.",[11,3209,3210,3212],{},[141,3211,3183],{}," баланс. Разумная практика — не требовать подтверждения на каждый вход, а запрашивать его при входе с незнакомого устройства, после долгого перерыва или при смене географии.",[11,3214,3215,3217,3218,307],{},[141,3216,3189],{}," звонок и как самостоятельный способ входа, и как второй фактор поверх пароля. Как это устроено — в статье про ",[303,3219,441],{"href":440},[18,3221,3223],{"id":3222},"scenariy-3-podtverzhdenie-operacii","Сценарий 3 — подтверждение операции",[11,3225,3226,3228],{},[141,3227,3171],{}," доказать, что конкретное действие совершает владелец аккаунта прямо сейчас.",[11,3230,3231,3233],{},[141,3232,3177],{}," здесь подтверждается не личность, а намерение. Ситуация принципиально отличается от входа: злоумышленник уже может находиться внутри сессии — через украденный токен, чужое незаблокированное устройство или социальную инженерию.",[11,3235,3236,3238],{},[141,3237,3183],{}," к стойкости — высокие. Плюс два, о которых часто забывают:",[424,3240,3241,3247],{},[138,3242,3243,3246],{},[141,3244,3245],{},"Привязка подтверждения к операции."," Пользователь должен видеть, что именно подтверждает: сумму, получателя, новые реквизиты. Абстрактное «подтвердите действие» позволяет подсунуть одно вместо другого.",[138,3248,3249,3252],{},[141,3250,3251],{},"Уведомление по другому каналу."," О смене пароля или реквизитов нужно сообщить на почту, даже если операция подтверждена телефоном.",[11,3254,3255,3257],{},[141,3256,3189],{}," для бытовых операций — звонок. Для операций с большой ценой ошибки телефон единственным фактором быть не должен.",[18,3259,744],{"id":743},[11,3261,3262],{},"Соберём честную картину, где звонок стоит среди других вторых факторов.",[32,3264,3266],{"className":3265},[35],[37,3267,3268,3283],{},[40,3269,3270],{},[43,3271,3272,3275,3277,3280],{},[46,3273,3274],{},"Фактор",[46,3276,592],{},[46,3278,3279],{},"Стойкость",[46,3281,3282],{},"Доля пользователей, которые дойдут",[55,3284,3285,3298,3309,3322,3335],{},[43,3286,3287,3289,3292,3295],{},[60,3288,50],{},[60,3290,3291],{},"владение номером",[60,3293,3294],{},"уязвим к подмене SIM и недоставке",[60,3296,3297],{},"высокая",[43,3299,3300,3302,3304,3307],{},[60,3301,53],{},[60,3303,3291],{},[60,3305,3306],{},"уязвим к подмене SIM, не зависит от доставки",[60,3308,3297],{},[43,3310,3311,3313,3316,3319],{},[60,3312,629],{},[60,3314,3315],{},"доступ к устройству с приложением",[60,3317,3318],{},"выше",[60,3320,3321],{},"средняя",[43,3323,3324,3327,3330,3332],{},[60,3325,3326],{},"Приложение-генератор кодов",[60,3328,3329],{},"доступ к секрету на устройстве",[60,3331,3297],{},[60,3333,3334],{},"низкая",[43,3336,3337,3340,3343,3346],{},[60,3338,3339],{},"Аппаратный ключ",[60,3341,3342],{},"владение физическим устройством",[60,3344,3345],{},"самая высокая",[60,3347,3348],{},"очень низкая",[11,3350,3351],{},"Ключевой вывод из таблицы — в последнем столбце. Самые стойкие факторы настраивает меньшинство пользователей, и защита, которую никто не включил, не защищает никого. Звонок находится в той же строке стойкости, что и SMS, но проходит его практически вся аудитория, и он не теряется по дороге.",[11,3353,3354],{},"Заявлять, что звонок защищает от подмены SIM-карты лучше, чем SMS, было бы неправдой: обе схемы подтверждают доступ к номеру, и при перевыпуске SIM злоумышленник получает и то и другое.",[18,3356,3358],{"id":3357},"kakoy-sposob-dlya-kakogo-scenariya","Какой способ для какого сценария",[32,3360,3362],{"className":3361},[35],[37,3363,3364,3379],{},[40,3365,3366],{},[43,3367,3368,3370,3373,3376],{},[46,3369],{},[46,3371,3372],{},"Регистрация",[46,3374,3375],{},"Вход",[46,3377,3378],{},"Операция",[55,3380,3381,3393,3404,3417,3429,3442],{},[43,3382,3383,3386,3389,3391],{},[60,3384,3385],{},"Цена лишнего шага",[60,3387,3388],{},"очень высокая",[60,3390,3297],{},[60,3392,3334],{},[43,3394,3395,3398,3400,3402],{},[60,3396,3397],{},"Цена ошибки защиты",[60,3399,3334],{},[60,3401,3321],{},[60,3403,3297],{},[43,3405,3406,3408,3411,3414],{},[60,3407,50],{},[60,3409,3410],{},"подходит, но теряет часть пользователей",[60,3412,3413],{},"подходит",[60,3415,3416],{},"подходит для бытовых операций",[43,3418,3419,3422,3425,3427],{},[60,3420,3421],{},"Звонок",[60,3423,3424],{},"оптимален",[60,3426,3424],{},[60,3428,3416],{},[43,3430,3431,3434,3437,3440],{},[60,3432,3433],{},"Приложение-генератор",[60,3435,3436],{},"избыточен",[60,3438,3439],{},"подходит как второй фактор",[60,3441,3413],{},[43,3443,3444,3446,3448,3451],{},[60,3445,3339],{},[60,3447,3436],{},[60,3449,3450],{},"избыточен для большинства",[60,3452,3453],{},"подходит для критичных операций",[11,3455,3456],{},"Практическая схема для типового продукта: звонок при регистрации, звонок или пароль плюс звонок при входе с нового устройства, звонок для обычных операций и дополнительный фактор для операций с деньгами и сменой реквизитов.",[18,3458,3460],{"id":3459},"chto-predusmotret-zaranee","Что предусмотреть заранее",[424,3462,3463,3469,3475,3481],{},[138,3464,3465,3468],{},[141,3466,3467],{},"Смену номера."," Процедура должна существовать до того, как понадобится: подтверждение старого номера или другого канала перед привязкой нового.",[138,3470,3471,3474],{},[141,3472,3473],{},"Резервный канал."," Почта или резервные коды на случай потери доступа к телефону.",[138,3476,3477,3480],{},[141,3478,3479],{},"Ограничение попыток."," И на число проверок с одного адреса, и на число привязок одного номера к разным аккаунтам — иначе подтверждение перестаёт отсекать мультиаккаунты.",[138,3482,3483,3486],{},[141,3484,3485],{},"Журнал событий."," Кто и когда подтверждал номер — это то, что понадобится при разборе спорной ситуации.",[11,3488,3489,3490,307],{},"Как именно телефонная проверка помогает против фейковых регистраций и где её пределы — в материале про ",[303,3491,3493],{"href":3492},"\u002Fblog\u002Fproverka-prinadlezhnosti-nomera","проверку принадлежности номера",{"title":506,"searchDepth":507,"depth":507,"links":3495},[3496,3497,3498,3499,3500,3501],{"id":3165,"depth":507,"text":3166},{"id":3196,"depth":507,"text":3197},{"id":3222,"depth":507,"text":3223},{"id":743,"depth":507,"text":744},{"id":3357,"depth":507,"text":3358},{"id":3459,"depth":507,"text":3460},{"title":3503,"text":3504,"label":520,"href":521},"Проверьте, где звонок закроет ваш сценарий","Один и тот же механизм работает и при регистрации, и при входе, и при подтверждении операции.","Три сценария телефонной верификации: регистрация, вход и подтверждение операций. Чем отличаются требования и где звонка достаточно, а где нужен другой фактор.",[3507,3510,3513,3516],{"q":3508,"a":3509},"Нужно ли подтверждать номер при каждом входе?","Обычно нет. Практика такая: подтверждение при регистрации, затем при входе\nс незнакомого устройства или после долгого перерыва, дальше работает обычная\nсессия. Требовать проверку на каждый вход имеет смысл только там, где цена\nчужого доступа очень высока.\n",{"q":3511,"a":3512},"Звонок надёжнее SMS как второй фактор?","Не надёжнее по стойкости — оба подтверждают владение номером и одинаково\nуязвимы к подмене SIM-карты. Звонок выигрывает в другом: он не зависит\nот доставки сообщения, поэтому доходит там, где SMS теряется.\n",{"q":3514,"a":3515},"Можно ли использовать телефон единственным фактором при выводе средств?","Не стоит. Для операций с высокой ценой ошибки нужен второй фактор другого\nтипа — приложение-генератор кодов, аппаратный ключ или подтверждение\nс задержкой и уведомлением на все привязанные каналы.\n",{"q":3517,"a":3518},"Что делать, если пользователь сменил номер?","Заранее предусмотреть процедуру смены: подтверждение старого номера или\nдругого привязанного канала перед привязкой нового. Если этого нет, при\nпотере доступа к телефону пользователь остаётся без аккаунта.\n","Подтверждение номера телефона при регистрации, входе и операциях",{},9,[551,3523,3524],"registraciya-po-zvonku-bez-koda","proverka-prinadlezhnosti-nomera",{"title":3151,"description":3505},"blog\u002Fpodtverzhdenie-pri-registracii-i-vhode","Телефонная верификация выглядит одинаково во всех трёх сценариях, но задачи у них разные.\nПри регистрации важнее скорость и конверсия, при входе — баланс между удобством\nи защитой, при подтверждении операции — стойкость доказательства. Из этого следует,\nчто один и тот же способ не может быть оптимальным везде: там, где при регистрации\nдостаточно звонка, для вывода средств может понадобиться второй фактор другого типа.\n","EyHXoaTqxfGzoZNKP-hIf_n-wFA4HeLQac-IToYF_A8",{"id":3530,"title":3531,"body":3532,"category":944,"cta":3773,"description":3776,"draft":523,"extension":524,"faq":3777,"h1":3790,"meta":3791,"navigation":546,"order":3792,"path":3492,"published":549,"related":3793,"seo":3795,"stem":3796,"summary":3797,"updated":549,"__hash__":3798},"blog\u002Fblog\u002Fproverka-prinadlezhnosti-nomera.md","Проверка принадлежности номера телефона — как подтвердить",{"type":8,"value":3533,"toc":3765},[3534,3541,3545,3548,3554,3560,3563,3567,3642,3645,3649,3652,3655,3660,3664,3667,3670,3673,3699,3705,3709,3712,3744,3747,3751,3754,3757],[11,3535,3536,3537,3540],{},"Уточним предмет с первой строки, потому что формулировка «проверка принадлежности номера» звучит двусмысленно. Речь о том, чтобы убедиться: ",[141,3538,3539],{},"телефон, указанный в вашей форме, доступен тому человеку, который его указал",". Не о том, чтобы выяснить что-либо о постороннем номере — это другая задача, и она здесь не рассматривается.",[18,3542,3544],{"id":3543},"chto-znachit-proverit-prinadlezhnost-nomera","Что значит «проверить принадлежность номера»",[11,3546,3547],{},"Различают две вещи, и путать их дорого.",[11,3549,3550,3553],{},[141,3551,3552],{},"Регистрационные данные."," На кого оформлена SIM-карта по документам. Эти сведения защищены законом, операторы их не раскрывают, и построить на них проверку невозможно.",[11,3555,3556,3559],{},[141,3557,3558],{},"Фактический доступ."," Может ли человек прямо сейчас воспользоваться этим номером — принять на него сообщение или совершить с него вызов. Именно это проверяется на практике, и именно этого достаточно почти для всех продуктовых задач.",[11,3561,3562],{},"Разница существенна. Фактический доступ не говорит, что перед вами конкретный гражданин, — он говорит, что перед вами тот же человек, который сможет ответить на звонок курьера и получить код при восстановлении доступа. Для большинства сценариев это ровно то, что нужно.",[18,3564,3566],{"id":3565},"sposoby-podtverdit-dostup-k-nomeru","Способы подтвердить доступ к номеру",[32,3568,3570],{"className":3569},[35],[37,3571,3572,3586],{},[40,3573,3574],{},[43,3575,3576,3578,3581,3584],{},[46,3577,587],{},[46,3579,3580],{},"Что доказывает",[46,3582,3583],{},"Надёжность",[46,3585,62],{},[55,3587,3588,3601,3615,3629],{},[43,3589,3590,3592,3595,3598],{},[60,3591,50],{},[60,3593,3594],{},"сообщение получено на этот номер",[60,3596,3597],{},"зависит от доставки; код можно передать посреднику",[60,3599,3600],{},"ждёт и вводит код",[43,3602,3603,3606,3609,3612],{},[60,3604,3605],{},"Голосовой код",[60,3607,3608],{},"вызов принят на этот номер",[60,3610,3611],{},"выше, чем у SMS: сложнее автоматизировать приём",[60,3613,3614],{},"принимает вызов, слушает, вводит",[43,3616,3617,3620,3623,3626],{},[60,3618,3619],{},"Входящий flash call",[60,3621,3622],{},"вызов поступил на этот номер",[60,3624,3625],{},"требует разрешений приложению",[60,3627,3628],{},"ничего либо вводит цифры",[43,3630,3631,3634,3637,3640],{},[60,3632,3633],{},"Исходящий звонок пользователя",[60,3635,3636],{},"вызов совершён с этого номера",[60,3638,3639],{},"самая высокая из перечисленных",[60,3641,645],{},[11,3643,3644],{},"Строки упорядочены по строгости доказательства, и она растёт сверху вниз.",[18,3646,3648],{"id":3647},"pochemu-zvonok-ot-polzovatelya-samyy-strogiy-variant","Почему звонок от пользователя — самый строгий вариант",[11,3650,3651],{},"Все способы с кодом устроены одинаково: сервис что-то отправляет на номер, а пользователь пересылает полученное обратно. Слабое место в том, что пересылать может кто угодно. Достаточно иметь доступ к принимаемым на номер сообщениям — не к самой SIM-карте, а к потоку сообщений, — и код будет введён.",[11,3653,3654],{},"Исходящий вызов работает иначе. Подтверждением служит не полученное сообщение, а сам факт вызова с проверяемого номера: сервис видит номер вызывающего абонента на своей стороне. Чтобы это подделать, нужно не принимать сообщения, а управлять исходящей линией с конкретного номера — задача принципиально другого порядка сложности.",[11,3656,3657,3658,307],{},"Побочный эффект приятный: пользователю не приходится ничего вводить, то есть более строгая проверка оказывается ещё и более быстрой. Как это устроено технически — в статье про ",[303,3659,707],{"href":548},[18,3661,3663],{"id":3662},"zaschita-ot-feykovyh-registraciy-i-multiakkauntov","Защита от фейковых регистраций и мультиаккаунтов",[11,3665,3666],{},"Телефонная проверка не делает регистрацию невозможной — она делает её дорогой. Это и есть её работа.",[11,3668,3669],{},"Без верификации создание аккаунта стоит ноль и занимает секунду, поэтому массовая регистрация ограничена только скоростью скрипта. С верификацией каждый аккаунт требует отдельного работающего номера: их надо где-то взять, они стоят денег, и процесс перестаёт масштабироваться бесплатно. Экономика атаки ломается — а именно она, а не техническая невозможность, останавливает большинство злоупотреблений.",[11,3671,3672],{},"Что это закрывает на практике:",[424,3674,3675,3681,3687,3693],{},[138,3676,3677,3680],{},[141,3678,3679],{},"Регистрации ради приветственных бонусов."," Промокод новичка перестаёт быть бесконечным.",[138,3682,3683,3686],{},[141,3684,3685],{},"Мультиаккаунты для накрутки."," Отзывы, рейтинги, голосования — всё, что считается «по одному на человека».",[138,3688,3689,3692],{},[141,3690,3691],{},"Ложные заказы."," Особенно при оплате при получении, где фейковый заказ стоит вам логистики.",[138,3694,3695,3698],{},[141,3696,3697],{},"Автоматическую регистрацию ботами."," Полностью автоматический пайплайн упирается в необходимость управлять телефонными номерами.",[11,3700,3701,3704],{},[141,3702,3703],{},"Где пределы, честно."," Сервисы, предоставляющие доступ к чужим номерам ради приёма сообщений, существуют, и притворяться, что верификация закрывает эту дыру полностью, нельзя. Она поднимает стоимость и снижает скорость атаки, но не сводит её к нулю. Поэтому телефонная проверка — один слой защиты, а не вся защита: рядом должны стоять лимиты на действия нового аккаунта, ограничение числа привязок одного номера и анализ поведения.",[18,3706,3708],{"id":3707},"chto-esche-dolzhno-stoyat-ryadom-s-proverkoy","Что ещё должно стоять рядом с проверкой",[11,3710,3711],{},"Телефонная верификация закрывает один вопрос — есть ли у человека доступ к указанному номеру. Всё остальное она не решает, и рассчитывать на неё как на единственный барьер не стоит. Минимальный набор рядом:",[424,3713,3714,3720,3726,3732,3738],{},[138,3715,3716,3719],{},[141,3717,3718],{},"Лимит привязок одного номера."," Без него проверка перестаёт ограничивать мультиаккаунты: подтвердить один и тот же телефон можно сколько угодно раз.",[138,3721,3722,3725],{},[141,3723,3724],{},"Ограничение действий нового аккаунта."," Отзыв, вывод средств или публикация с первой минуты жизни учётной записи — самая уязвимая точка.",[138,3727,3728,3731],{},[141,3729,3730],{},"Лимит на число проверок"," с одного адреса и одной сессии. Создание проверок стоит денег, и без ограничения форма превращается в способ тратить ваш баланс.",[138,3733,3734,3737],{},[141,3735,3736],{},"Анализ поведения."," Десять регистраций с одного устройства за час выглядят одинаково подозрительно, сколько бы номеров ни было подтверждено.",[138,3739,3740,3743],{},[141,3741,3742],{},"Журнал подтверждений."," Кто, когда и с какого номера — это то, что понадобится при разборе спорной ситуации.",[11,3745,3746],{},"Полезно сразу задать себе вопрос, сколько стоит обойти вашу защиту. Если приветственный бонус или триал дороже, чем усилия на обход, схема окупается для злоумышленника — и никакая проверка сама по себе этого не изменит. Верификация сдвигает экономику атаки, а не отменяет её.",[18,3748,3750],{"id":3749},"zaschita-ot-feykovyh-zakazov","Защита от фейковых заказов",[11,3752,3753],{},"Отдельный сценарий с понятной ценой ошибки. В e-commerce ложный заказ — это не только несостоявшаяся продажа: товар зарезервирован, собран, отправлен и вернулся, а логистику вы оплатили.",[11,3755,3756],{},"Проверка номера на этапе оформления решает сразу две задачи. Во-первых, отсекает заказы, оформленные на выдуманный телефон. Во-вторых, ловит обычные опечатки — а это гораздо более частый случай, чем злой умысел: неверная цифра в номере означает, что курьер не дозвонится и заказ вернётся ровно так же, как и подложный.",[11,3758,3759,3760,3762,3763,307],{},"Порядок такой: подтверждать номер до того, как заказ уйдёт в сборку, а не после. Разбор задач по отраслям — в материале ",[303,3761,466],{"href":465},", выбор сценария под этап пользовательского пути — в статье про ",[303,3764,757],{"href":756},{"title":506,"searchDepth":507,"depth":507,"links":3766},[3767,3768,3769,3770,3771,3772],{"id":3543,"depth":507,"text":3544},{"id":3565,"depth":507,"text":3566},{"id":3647,"depth":507,"text":3648},{"id":3662,"depth":507,"text":3663},{"id":3707,"depth":507,"text":3708},{"id":3749,"depth":507,"text":3750},{"title":3774,"text":3775,"label":520,"href":521},"Проверяйте номер до того, как он попал в базу","Одно подтверждение — 0,20 ₽, несостоявшаяся проверка не тарифицируется.","Как убедиться, что пользователь действительно имеет доступ к указанному номеру: способы проверки, защита от фейковых регистраций и мультиаккаунтов, пределы метода.",[3778,3781,3784,3787],{"q":3779,"a":3780},"Можно ли узнать, на кого оформлена SIM-карта?","Нет, и такой задачи сервис не решает. Данные абонентов защищены законом\nи операторам передавать их некому. Проверяется только фактический доступ\nк номеру: тот, кто указал телефон в форме, должен подтвердить его действием.\n",{"q":3782,"a":3783},"Спасает ли проверка от сервисов приёма SMS на чужие номера?","Не полностью. Такие сервисы существуют, и полностью закрыть эту дыру\nверификация не может. Но она делает массовую регистрацию платной\nи медленной, а сценарий с исходящим вызовом усложняет её дополнительно.\n",{"q":3785,"a":3786},"Чем звонок строже SMS-кода?","Тем, что подтверждается: SMS доказывает приём сообщения на номер, звонок —\nсовершение вызова с него. Первое можно организовать через посредника,\nполучающего сообщения, второе требует управления самой линией.\n",{"q":3788,"a":3789},"Как быть, если номер один, а аккаунтов нужно несколько?","Это ваше продуктовое решение, а не техническое ограничение. Заведите явный\nлимит привязок одного номера — без него верификация перестаёт отсекать\nмультиаккаунты, а с ним придётся продумать легитимные случаи вроде\nсемейных или рабочих учётных записей.\n","Как проверить, что номер телефона принадлежит пользователю",{},10,[968,3794,969],"gde-nuzhna-verifikaciya-telefona",{"title":3531,"description":3776},"blog\u002Fproverka-prinadlezhnosti-nomera","Речь идёт о проверке, что номер, введённый в вашу форму, доступен тому, кто его вводит.\nЭто не определение чужого номера и не поиск сведений об абоненте — такой задачи здесь\nнет. Доступ подтверждается действием: получением одноразового кода или, что строже,\nисходящим вызовом с этого номера. Ниже — сравнение способов, их надёжность\nи честный разбор того, от чего телефонная проверка защищает, а от чего нет.\n","kOIxBHBqpPfsqHWfvwTt7tgQuZ6IrA6b9hFRW1TEeOw",{"id":3800,"title":3801,"body":3802,"category":1754,"cta":4085,"description":4088,"draft":523,"extension":524,"faq":4089,"h1":4102,"meta":4103,"navigation":546,"order":4104,"path":305,"published":549,"related":4105,"seo":4106,"stem":4107,"summary":4108,"updated":549,"__hash__":4109},"blog\u002Fblog\u002Fchto-takoe-flash-call.md","Что такое Flash Call — и чем отличается reverse flash call",{"type":8,"value":3803,"toc":4077},[3804,3807,3811,3814,3817,3820,3827,3831,3837,3851,3858,3861,3865,3870,3884,3891,3896,3900,3991,3994,3998,4001,4027,4035,4039,4042,4074],[11,3805,3806],{},"Термин flash call встречается в двух противоположных значениях, и разница между ними определяет, заработает сценарий в вашем продукте или нет. Разбираем оба, чтобы при разговоре с провайдером было понятно, о чём именно речь.",[18,3808,3810],{"id":3809},"chto-takoe-flash-call-prostymi-slovami","Что такое flash call простыми словами",[11,3812,3813],{},"Flash call — это подтверждение номера телефона с помощью короткого вызова, который сбрасывается до ответа. Соединение не устанавливается, разговора не происходит, тарификация как за разговор не наступает. Полезную информацию несёт не содержание звонка, а сам факт вызова и номер, который при этом определился.",[11,3815,3816],{},"Название переводится буквально: flash — «вспышка», call — «вызов». То есть «вызов-вспышка», мелькнувший звонок. В русских текстах пишут по-разному — флеш колл, флэш колл, флешколл, — и все варианты означают одно и то же. Встречается также описательное «звонок-сброс».",[11,3818,3819],{},"Смысл в сравнении с SMS: там нужно доставить сообщение и заставить пользователя переписать код, здесь достаточно установить и оборвать вызов. Меньше шагов, меньше зависимости от доставки.",[11,3821,3822,3823,3826],{},"Синоним, который стоит знать, — ",[141,3824,3825],{},"call to auth"," (иногда call2auth), «звонок для аутентификации». Термин описывает ту же идею: вызов вместо кода как способ подтвердить владение номером. В маркетинговых материалах он встречается наравне с flash call.",[18,3828,3830],{"id":3829},"kak-rabotaet-obychnyy-flash-call","Как работает обычный flash call",[11,3832,3833,3834,307],{},"Направление вызова: ",[141,3835,3836],{},"сервис звонит пользователю",[135,3838,3839,3842,3845,3848],{},[138,3840,3841],{},"Пользователь вводит номер в приложении.",[138,3843,3844],{},"Сервис инициирует вызов на этот номер с заранее известного номера и сразу сбрасывает.",[138,3846,3847],{},"Приложение видит входящий вызов и считывает номер звонившего.",[138,3849,3850],{},"Последние цифры этого номера играют роль кода: приложение подставляет их само либо просит пользователя ввести.",[11,3852,3853,3854,3857],{},"Схема выглядит изящно, но у неё есть жёсткое ограничение: ",[141,3855,3856],{},"приложению нужен доступ к журналу вызовов",". Это чувствительное разрешение, и платформы его ограничивают. В Google Play выдача разрешения на журнал вызовов требует обоснования и проходит отдельную проверку, а в iOS публичного интерфейса для чтения журнала нет вовсе. В браузере такой сценарий невозможен по определению — веб-страница к журналу вызовов доступа не имеет.",[11,3859,3860],{},"На практике это означает, что обычный flash call применим в одном случае: Android-приложение с одобренным разрешением. Всё остальное — веб, iOS, мобильная версия сайта — остаётся за бортом.",[18,3862,3864],{"id":3863},"chto-takoe-obratnyy-reverse-flash-call","Что такое обратный (reverse) flash call",[11,3866,3833,3867,307],{},[141,3868,3869],{},"пользователь звонит сервису",[135,3871,3872,3875,3878,3881],{},[138,3873,3874],{},"Пользователь вводит номер в форме.",[138,3876,3877],{},"Сервис выдаёт выделенный номер и показывает его пользователю.",[138,3879,3880],{},"Пользователь звонит на этот номер со своего телефона. Отвечать не нужно — соединение сбрасывается автоматически.",[138,3882,3883],{},"Сервис определяет номер вызывающего абонента и сопоставляет вызов с ожидающей проверкой.",[11,3885,3886,3887,3890],{},"Ключевое следствие: ",[141,3888,3889],{},"читать ничего не нужно",". Звонок приходит к сервису, и он видит его на своей стороне — никакого доступа к журналу вызовов или сообщениям на устройстве пользователя не требуется. Поэтому сценарий одинаково работает в мобильном приложении, в мобильном браузере и на десктопе, и не упирается в политики магазинов приложений.",[11,3892,3893,3894,307],{},"Именно по этой схеме работает FlashCall. Подробный разбор механизма — в статье про ",[303,3895,707],{"href":548},[18,3897,3899],{"id":3898},"obychnyy-i-obratnyy-flash-call-sravnenie","Обычный и обратный flash call: сравнение",[32,3901,3903],{"className":3902},[35],[37,3904,3905,3915],{},[40,3906,3907],{},[43,3908,3909,3911,3913],{},[46,3910],{},[46,3912,229],{},[46,3914,232],{},[55,3916,3917,3925,3936,3945,3954,3962,3970,3980],{},[43,3918,3919,3921,3923],{},[60,3920,239],{},[60,3922,242],{},[60,3924,245],{},[43,3926,3927,3930,3933],{},[60,3928,3929],{},"Что служит доказательством",[60,3931,3932],{},"входящий вызов на номер",[60,3934,3935],{},"исходящий вызов с номера",[43,3937,3938,3941,3943],{},[60,3939,3940],{},"Разрешения приложению",[60,3942,253],{},[60,3944,256],{},[43,3946,3947,3950,3952],{},[60,3948,3949],{},"Работает в браузере",[60,3951,264],{},[60,3953,267],{},[43,3955,3956,3958,3960],{},[60,3957,272],{},[60,3959,264],{},[60,3961,267],{},[43,3963,3964,3966,3968],{},[60,3965,62],{},[60,3967,1051],{},[60,3969,645],{},[43,3971,3972,3975,3978],{},[60,3973,3974],{},"Основной риск",[60,3976,3977],{},"отказ в разрешении, ограничения магазинов",[60,3979,298],{},[43,3981,3982,3985,3988],{},[60,3983,3984],{},"Строгость доказательства",[60,3986,3987],{},"подтверждает приём вызова",[60,3989,3990],{},"подтверждает совершение вызова",[11,3992,3993],{},"Последняя строка часто остаётся за кадром, а она содержательна: исходящий вызов доказывает больше, чем входящий. Принять вызов на номер проще, чем совершить вызов с него.",[18,3995,3997],{"id":3996},"chto-vybrat","Что выбрать",[11,3999,4000],{},"Ответ зависит от того, где живёт ваш продукт.",[424,4002,4003,4009,4015,4021],{},[138,4004,4005,4008],{},[141,4006,4007],{},"Только Android-приложение, разрешение уже есть"," — обычный flash call допустим, пользователь не делает вообще ничего.",[138,4010,4011,4014],{},[141,4012,4013],{},"Есть веб-версия или iOS"," — обычный flash call не покроет их, нужен обратный.",[138,4016,4017,4020],{},[141,4018,4019],{},"Хочется одну реализацию на все платформы"," — обратный, других вариантов нет.",[138,4022,4023,4026],{},[141,4024,4025],{},"Не хочется зависеть от политик магазинов"," — обратный: он не запрашивает чувствительных разрешений и не рискует при очередном ужесточении правил.",[11,4028,4029,4030,4032,4033,307],{},"Сравнение с SMS по стоимости и доставляемости — в материале ",[303,4031,867],{"href":866},". Особенности реализации на мобильных — в статье про ",[303,4034,2650],{"href":786},[18,4036,4038],{"id":4037},"gde-primenyaetsya","Где применяется",[11,4040,4041],{},"Механизм один, а поводов подтвердить номер несколько:",[424,4043,4044,4051,4059,4065],{},[138,4045,4046,4048,4049,307],{},[141,4047,3372],{}," — отсечь фейковые аккаунты, см. ",[303,4050,3193],{"href":2519},[138,4052,4053,4056,4057,307],{},[141,4054,4055],{},"Вход в аккаунт"," — вместо пароля или как второй фактор, см. ",[303,4058,441],{"href":440},[138,4060,4061,4064],{},[141,4062,4063],{},"Подтверждение операции"," — смена реквизитов, оформление заказа.",[138,4066,4067,4070,4071,307],{},[141,4068,4069],{},"Проверка контакта"," — перед доставкой или публикацией объявления, см. ",[303,4072,4073],{"href":465},"сценарии по отраслям",[11,4075,4076],{},"Общее ограничение у обеих схем одно и о нём стоит помнить при планировании: они работают, пока номер вызывающего абонента передаётся сетью, и в пределах той страны, чьи номера есть в пуле провайдера.",{"title":506,"searchDepth":507,"depth":507,"links":4078},[4079,4080,4081,4082,4083,4084],{"id":3809,"depth":507,"text":3810},{"id":3829,"depth":507,"text":3830},{"id":3863,"depth":507,"text":3864},{"id":3898,"depth":507,"text":3899},{"id":3996,"depth":507,"text":3997},{"id":4037,"depth":507,"text":4038},{"title":4086,"text":4087,"label":520,"href":521},"Обратный flash call на своём продукте","Работает в вебе и в приложениях, разрешений не требует. Ключ проекта выдаётся сразу после регистрации.","Flash call простыми словами: как работает подтверждение номера сбрасываемым звонком, чем от него отличается обратный (reverse) flash call и что выбрать для продукта.",[4090,4093,4096,4099],{"q":4091,"a":4092},"Как правильно писать — flash call, flashcall или флеш колл?","Все написания встречаются и означают одно и то же. В англоязычной документации\nчаще «flash call» в два слова, в русских текстах — «флеш колл», «флэш колл»\nи слитное «флешколл». Устоявшейся нормы для русского написания нет.\n",{"q":4094,"a":4095},"Flash call — это то же самое, что звонок-сброс?","Да, «звонок-сброс» и «сбрасываемый вызов» — русские описательные названия\nтого же механизма. Общее у всех вариантов одно: соединение не устанавливается,\nразговор не происходит, а информацию несёт сам факт вызова и номер.\n",{"q":4097,"a":4098},"Почему обычный flash call не работает в браузере?","Потому что он требует прочитать номер входящего вызова из журнала, а веб-страница\nк журналу вызовов доступа не имеет и иметь не может. Это ограничение самой\nплатформы, а не конкретной реализации.\n",{"q":4100,"a":4101},"Обратный flash call дороже обычного?","Не по природе механизма — обе схемы это один короткий вызов. Разница\nв модели тарификации у конкретного провайдера: важнее не тип flash call,\nа списывают ли деньги за попытку или за результат.\n","Что такое Flash Call и чем отличается обратный Flash Call",{},11,[968,1407,2851],{"title":3801,"description":4088},"blog\u002Fchto-takoe-flash-call","Flash call — подтверждение номера телефона сбрасываемым звонком вместо SMS-кода.\nТермин описывает два зеркальных сценария, и их постоянно путают. При обычном flash call\nзвонит сервис, а приложение считывает номер входящего вызова — для этого ему нужен доступ\nк журналу вызовов. При обратном (reverse) flash call звонит сам пользователь, и никаких\nразрешений не требуется, поэтому сценарий работает и в браузере, и на iOS.\n","203EjzAVRkoDjYAsBaU82tUjkJ47sQQRHBg9EaP47c0",{"id":4111,"title":4112,"body":4113,"category":1754,"cta":1755,"description":4364,"draft":523,"extension":524,"faq":4365,"h1":4378,"meta":4379,"navigation":546,"order":4380,"path":1687,"published":549,"related":4381,"seo":4382,"stem":4383,"summary":4384,"updated":549,"__hash__":4385},"blog\u002Fblog\u002Fchuzhie-kody-podtverzhdeniya.md","Приходят коды подтверждения на телефон — что это значит",{"type":8,"value":4114,"toc":4351},[4115,4118,4122,4126,4129,4133,4136,4140,4147,4151,4154,4158,4161,4165,4168,4174,4177,4180,4194,4197,4200,4250,4254,4257,4289,4292,4300,4304,4307,4339],[11,4116,4117],{},"Телефон коротко звякает, на экране — сообщение с кодом от сервиса, куда вы не заходили. Через минуту ещё одно. Разбираемся, что это значит, чем это грозит и в какой момент ситуация становится по-настоящему опасной.",[18,4119,4121],{"id":4120},"pochemu-prihodyat-kody-kotorye-vy-ne-zaprashivali","Почему приходят коды, которые вы не запрашивали",[1842,4123,4125],{"id":4124},"kto-to-oshibsya-nomerom","Кто-то ошибся номером",[11,4127,4128],{},"Самая частая и самая безобидная причина. Человек регистрируется, промахивается на одну цифру — и код улетает вам. Обычно приходит одно-два сообщения, после чего всё прекращается: отправитель понимает, что ошибся.",[1842,4130,4132],{"id":4131},"nomer-ranshe-prinadlezhal-drugomu-cheloveku","Номер раньше принадлежал другому человеку",[11,4134,4135],{},"Операторы возвращают в продажу номера, которыми долго не пользовались. Если ваш номер вторичный, вы будете получать коды от сервисов, где зарегистрирован прежний абонент. Такие сообщения приходят нерегулярно, годами, от разных сервисов — характерный признак именно этой причины.",[1842,4137,4139],{"id":4138},"kto-to-pytaetsya-voyti-v-vash-akkaunt","Кто-то пытается войти в ваш аккаунт",[11,4141,4142,4143,4146],{},"Тревожный вариант. Если код пришёл от сервиса, где у вас ",[141,4144,4145],{},"есть"," учётная запись, и в тексте написано «код для входа» или «код для восстановления доступа», — значит, кто-то ввёл ваш номер на странице входа. Пароль он может уже знать, а не хватать ему ровно этого кода.",[1842,4148,4150],{"id":4149},"flud-kodami","Флуд кодами",[11,4152,4153],{},"На номер разом обрушивается поток сообщений от десятков сервисов. Иногда это месть или травля, но чаще — приём: за лавиной сообщений прячут одно важное уведомление, например о реальной операции по счёту, чтобы вы его не заметили.",[1842,4155,4157],{"id":4156},"nomer-popal-v-bazu-dlya-registraciy","Номер попал в базу для регистраций",[11,4159,4160],{},"Кто-то использует ваш номер, чтобы создавать аккаунты. Сообщения будут приходить от однотипных сервисов — маркетплейсов, сервисов доставки, площадок с бонусами новичкам.",[18,4162,4164],{"id":4163},"opasno-li-eto","Опасно ли это",[11,4166,4167],{},"Сам по себе код безвреден. Пока цифры лежат у вас в сообщениях, они не дают доступа никому, включая того, кто их запросил. Это просто набор символов, который что-то значит только внутри одной конкретной проверки.",[11,4169,4170,4171,307],{},"Опасность возникает в один-единственный момент: ",[141,4172,4173],{},"когда вы сообщаете код другому человеку",[11,4175,4176],{},"Схема всегда устроена одинаково. Злоумышленник уже нажал «Войти» или «Восстановить доступ» в вашем аккаунте, и код ушёл вам. Теперь ему нужно, чтобы вы его продиктовали. Для этого придумывается повод — звонок «из службы безопасности банка» о подозрительной операции, «из поддержки» об отмене заказа, сообщение от «знакомого», который «случайно указал ваш номер и просит переслать код».",[11,4178,4179],{},"Признаки, по которым такой разговор узнаётся:",[424,4181,4182,4185,4188,4191],{},[138,4183,4184],{},"Вас торопят и создают ощущение, что медлить нельзя.",[138,4186,4187],{},"Просят продиктовать цифры из сообщения — под любым предлогом.",[138,4189,4190],{},"Просят не класть трубку и никому не звонить.",[138,4192,4193],{},"Звонок случился сразу после того, как пришёл код.",[11,4195,4196],{},"Настоящая поддержка никогда не спрашивает код подтверждения. Он ей не нужен: у сотрудника есть доступ к системе, и проверить вас он может другими способами.",[18,4198,2990],{"id":4199},"chto-delat",[135,4201,4202,4208,4214,4220,4226,4232,4238,4244],{},[138,4203,4204,4207],{},[141,4205,4206],{},"Никому не сообщайте код."," Ни при каких обстоятельствах и ни под каким предлогом. Это правило без исключений.",[138,4209,4210,4213],{},[141,4211,4212],{},"Определите, ваш ли это сервис."," Если у вас там нет аккаунта — скорее всего, кто-то ошибся номером, ничего делать не нужно.",[138,4215,4216,4219],{},[141,4217,4218],{},"Если аккаунт есть — смените пароль."," Код для входа, который вы не запрашивали, означает, что кто-то знает ваш логин и пробует войти. Меняйте пароль сразу и не используйте его больше нигде.",[138,4221,4222,4225],{},[141,4223,4224],{},"Включите второй фактор",", если сервис это позволяет.",[138,4227,4228,4231],{},[141,4229,4230],{},"Проверьте активные сессии и историю входов"," в настройках аккаунта — там видно, была ли попытка успешной.",[138,4233,4234,4237],{},[141,4235,4236],{},"При потоке сообщений обратитесь к оператору."," У операторов есть инструменты фильтрации; заодно просмотрите поток на предмет спрятанного уведомления о реальной операции.",[138,4239,4240,4243],{},[141,4241,4242],{},"Не переходите по ссылкам"," из таких сообщений. В настоящих сообщениях с кодами ссылок не бывает — если ссылка есть, это фишинг.",[138,4245,4246,4249],{},[141,4247,4248],{},"Не отвечайте на сообщение."," Ответ уходит в никуда, но подтверждает, что номер живой.",[18,4251,4253],{"id":4252},"chto-oznachaet-etot-nomer-nelzya-ispolzovat-dlya-podtverzhde","Что означает «этот номер нельзя использовать для подтверждения»",[11,4255,4256],{},"Формулировка встречается при попытке привязать номер, и означает она не проблему с телефоном, а отказ конкретного сервиса. Причины обычно такие:",[424,4258,4259,4265,4271,4277,4283],{},[138,4260,4261,4264],{},[141,4262,4263],{},"Номер уже привязан"," к другой учётной записи в этом же сервисе.",[138,4266,4267,4270],{},[141,4268,4269],{},"Исчерпан лимит регистраций"," на один телефон — многие сервисы разрешают одну-две учётные записи на номер.",[138,4272,4273,4276],{},[141,4274,4275],{},"Номер из непринимаемого диапазона."," Некоторые сервисы отказываются работать с номерами, которые не относятся к обычным абонентским.",[138,4278,4279,4282],{},[141,4280,4281],{},"Номер заблокирован сервисом"," после подозрительной активности.",[138,4284,4285,4288],{},[141,4286,4287],{},"Технический сбой или превышение частоты запросов"," — тогда достаточно подождать и повторить.",[11,4290,4291],{},"Решается это только на стороне сервиса — оператор связи здесь ни при чём. Если аккаунт с вашим номером завёл кто-то другой, обращаться нужно в поддержку сервиса с описанием ситуации.",[11,4293,4294,4295,4297,4298,307],{},"Что такое коды подтверждения вообще и зачем сервисы их присылают — в материале ",[303,4296,2063],{"href":1779},". Обратная ситуация, когда нужный вам код не приходит, разобрана в статье ",[303,4299,1644],{"href":326},[18,4301,4303],{"id":4302},"esli-vash-servis-rassylaet-kody-kak-ne-stat-istochnikom-prob","Если ваш сервис рассылает коды — как не стать источником проблемы",[11,4305,4306],{},"Часть сообщений, о которых идёт речь выше, отправляют вполне добросовестные сервисы, просто не поставившие ограничений. Если вы разрабатываете продукт с телефонной верификацией, минимум выглядит так:",[424,4308,4309,4315,4321,4327,4333],{},[138,4310,4311,4314],{},[141,4312,4313],{},"Лимит на число запросов кода"," — на номер, на адрес и на сессию. Без него форма превращается в бесплатный инструмент флуда чужих телефонов.",[138,4316,4317,4320],{},[141,4318,4319],{},"Задержка между повторными отправками"," и явный таймер в интерфейсе.",[138,4322,4323,4326],{},[141,4324,4325],{},"Капча или проверка перед первым запросом"," — чтобы форму нельзя было дёргать скриптом.",[138,4328,4329,4332],{},[141,4330,4331],{},"Понятный текст сообщения."," Название сервиса, назначение кода и предупреждение, что его никому нельзя сообщать. Человек, получивший чужой код, должен сразу понимать, откуда он.",[138,4334,4335,4338],{},[141,4336,4337],{},"Ограничение на число разных номеров с одного клиента"," за короткий промежуток.",[11,4340,4341,4342,4345,4346,4348,4349,307],{},"Отдельно стоит отметить свойство проверки исходящим звонком: ",[141,4343,4344],{},"её невозможно использовать для флуда чужого номера",". При этом сценарии сервис никому ничего не отправляет — звонит сам пользователь. Указать чужой телефон и завалить его сообщениями там просто нечем. Как это устроено — в статье про ",[303,4347,1279],{"href":548},", а разбор того, что вообще даёт телефонная проверка против злоупотреблений, — в материале про ",[303,4350,3493],{"href":3492},{"title":506,"searchDepth":507,"depth":507,"links":4352},[4353,4360,4361,4362,4363],{"id":4120,"depth":507,"text":4121,"children":4354},[4355,4356,4357,4358,4359],{"id":4124,"depth":1405,"text":4125},{"id":4131,"depth":1405,"text":4132},{"id":4138,"depth":1405,"text":4139},{"id":4149,"depth":1405,"text":4150},{"id":4156,"depth":1405,"text":4157},{"id":4163,"depth":507,"text":4164},{"id":4199,"depth":507,"text":2990},{"id":4252,"depth":507,"text":4253},{"id":4302,"depth":507,"text":4303},"Почему на телефон приходят чужие коды подтверждения, опасно ли это, что делать при потоке SMS с кодами и как защитить свои аккаунты от попыток входа.",[4366,4369,4372,4375],{"q":4367,"a":4368},"Опасно ли просто получить чужой код?","Нет. Полученное сообщение не даёт никому доступа и ничего не активирует.\nОпасность появляется только в момент, когда код передан другому человеку —\nв переписке, по телефону или на постороннем сайте.\n",{"q":4370,"a":4371},"Надо ли отвечать на такие сообщения?","Нет. Отвечать некуда и незачем: коды приходят с сервисных номеров, которые\nне принимают входящие сообщения. Переходить по ссылкам, если они вдруг есть\nв тексте, тоже не нужно — в настоящих сообщениях с кодами ссылок не бывает.\n",{"q":4373,"a":4374},"Что делать, если кодов приходит очень много подряд?","Это флуд, и цель у него обычно одна — замусорить экран, чтобы вы не заметили\nважное сообщение. Не удаляйте всё подряд, а просмотрите список: там может\nбыть уведомление о реальной операции. Затем обратитесь к оператору\nза фильтрацией и смените пароли в сервисах из списка.\n",{"q":4376,"a":4377},"Может ли кто-то войти в аккаунт, зная только мой номер?","Нет, если код остаётся у вас. Номер телефона не секрет, и одного его\nнедостаточно. Именно поэтому мошенники не взламывают что-либо технически,\nа звонят и просят продиктовать цифры.\n","На телефон приходят коды подтверждения, которые вы не запрашивали",{},12,[2154,1781,3524],{"title":4112,"description":4364},"blog\u002Fchuzhie-kody-podtverzhdeniya","Код, который вы не запрашивали, сам по себе не опасен: он ничего не открывает и никому\nне даёт доступа, пока остаётся у вас. Опасна ровно одна вещь — сообщить его постороннему.\nПричины бывают безобидные (кто-то ошибся цифрой в номере) и тревожные (кто-то пытается\nвойти в ваш аккаунт). Ниже — как отличить одно от другого и что делать в каждом случае.\n","JbSMHH-oZU6S_G2MXdN8FDva1ZCTjZ0HDATIYb7pnpo",{"id":4387,"title":4388,"body":4389,"category":1382,"cta":4750,"description":4753,"draft":523,"extension":524,"faq":4754,"h1":4767,"meta":4768,"navigation":546,"order":4769,"path":866,"published":549,"related":4770,"seo":4771,"stem":4772,"summary":4773,"updated":549,"__hash__":4774},"blog\u002Fblog\u002Fflash-call-ili-sms.md","Flash Call или SMS — чем заменить SMS-коды подтверждения",{"type":8,"value":4390,"toc":4742},[4391,4394,4398,4401,4427,4433,4437,4442,4448,4452,4549,4552,4556,4559,4568,4571,4638,4641,4646,4650,4653,4684,4687,4691,4694,4726,4729],[11,4392,4393],{},"Вопрос «чем заменить SMS-коды» возникает обычно из двух соображений: расходы растут вместе с числом регистраций, а часть пользователей всё равно не получает сообщения. Разбираем, что даёт замена на подтверждение звонком, где реальная экономия и когда SMS всё-таки нужны.",[18,4395,4397],{"id":4396},"skolko-stoit-sms-podtverzhdenie","Сколько стоит SMS-подтверждение",[11,4399,4400],{},"Затраты на SMS складываются не только из цены сообщения.",[424,4402,4403,4409,4415,4421],{},[138,4404,4405,4408],{},[141,4406,4407],{},"Цена за отправку."," Зависит от оператора получателя, объёма и типа трафика. Единой цифры не существует, поэтому ориентироваться на «среднюю цену SMS» из статей бессмысленно — считайте по своему счёту.",[138,4410,4411,4414],{},[141,4412,4413],{},"Оплата независимо от доставки."," Сообщение, отфильтрованное оператором или не дошедшее из-за роуминга, оплачено так же, как доставленное.",[138,4416,4417,4420],{},[141,4418,4419],{},"Повторные отправки."," Пользователь жмёт «Отправить снова» — счёт растёт, конверсия чаще всего нет: если сообщение не прошло фильтр, второе тоже не пройдёт.",[138,4422,4423,4426],{},[141,4424,4425],{},"Стоимость потерянных регистраций."," Самая крупная и самая невидимая статья. Пользователь, не получивший код, просто уходит.",[11,4428,4429,4432],{},[141,4430,4431],{},"Практическая формула вашей фактической стоимости:"," счёт за SMS за месяц, делённый на число подтверждённых номеров за тот же месяц. Полученное почти всегда заметно больше цены за одно сообщение — на разницу влияет доля недоставок и повторных отправок.",[18,4434,4436],{"id":4435},"skolko-stoit-podtverzhdenie-zvonkom","Сколько стоит подтверждение звонком",[11,4438,337,4439,4441],{},[141,4440,340],{},". Абонентской платы нет, минимального месячного объёма нет.",[11,4443,4444,4445,4447],{},"Списание происходит в момент, когда звонок зафиксирован. Проверка, по которой звонка не было и которая перешла в статус ",[146,4446,182],{},", не тарифицируется. То есть цена за штуку и фактическая стоимость успешного подтверждения здесь совпадают — в отличие от SMS-сценария.",[18,4449,4451],{"id":4450},"sravnenie-po-shesti-parametram","Сравнение по шести параметрам",[32,4453,4455],{"className":4454},[35],[37,4456,4457,4470],{},[40,4458,4459],{},[43,4460,4461,4464,4466,4468],{},[46,4462,4463],{},"Параметр",[46,4465,50],{},[46,4467,1030],{},[46,4469,1056],{},[55,4471,4472,4485,4496,4510,4524,4536],{},[43,4473,4474,4477,4480,4483],{},[60,4475,4476],{},"Цена за подтверждение",[60,4478,4479],{},"зависит от оператора и объёма",[60,4481,4482],{},"обычно выше SMS",[60,4484,340],{},[43,4486,4487,4489,4492,4494],{},[60,4488,1005],{},[60,4490,4491],{},"за отправку",[60,4493,1033],{},[60,4495,112],{},[43,4497,4498,4501,4504,4507],{},[60,4499,4500],{},"Зависимость от доставки",[60,4502,4503],{},"высокая: фильтры, роуминг, память",[60,4505,4506],{},"средняя: нужен дозвон",[60,4508,4509],{},"отсутствует: звонит пользователь",[43,4511,4512,4515,4518,4521],{},[60,4513,4514],{},"Время подтверждения",[60,4516,4517],{},"от секунд до минут, непредсказуемо",[60,4519,4520],{},"ограничено длительностью вызова",[60,4522,4523],{},"ограничено 60 секундами",[43,4525,4526,4529,4531,4534],{},[60,4527,4528],{},"Действия пользователя",[60,4530,1025],{},[60,4532,4533],{},"принимает, слушает, вводит код",[60,4535,645],{},[43,4537,4538,4541,4544,4546],{},[60,4539,4540],{},"География",[60,4542,4543],{},"практически любая",[60,4545,4543],{},[60,4547,4548],{},"Россия",[11,4550,4551],{},"Последняя строка — главный ограничитель, и его надо учитывать до внедрения, а не после.",[18,4553,4555],{"id":4554},"raschet-ekonomii","Расчёт экономии",[11,4557,4558],{},"Формула для подстановки своих цифр:",[4560,4561,4566],"pre",{"className":4562,"code":4564,"language":4565},[4563],"language-text","Стоимость SMS      = запущенные проверки × цена отправки\nСтоимость звонка   = запущенные проверки × доля дозвона × 0,20 ₽\n","text",[146,4567,4564],{"__ignoreMap":506},[11,4569,4570],{},"Разница между формулами принципиальная: в первой доля успеха отсутствует — платите за все отправки. Во второй она стоит множителем, потому что неудачная проверка бесплатна.",[32,4572,4574],{"className":4573},[35],[37,4575,4576,4592],{},[40,4577,4578],{},[43,4579,4580,4583,4586,4589],{},[46,4581,4582],{},"Проверок в месяц",[46,4584,4585],{},"Звонок при 100 %",[46,4587,4588],{},"Звонок при 80 %",[46,4590,4591],{},"Звонок при 60 %",[55,4593,4594,4604,4614,4624],{},[43,4595,4596,4598,4600,4602],{},[60,4597,372],{},[60,4599,375],{},[60,4601,378],{},[60,4603,1174],{},[43,4605,4606,4608,4610,4612],{},[60,4607,383],{},[60,4609,386],{},[60,4611,389],{},[60,4613,1185],{},[43,4615,4616,4618,4620,4622],{},[60,4617,394],{},[60,4619,397],{},[60,4621,400],{},[60,4623,1196],{},[43,4625,4626,4629,4632,4635],{},[60,4627,4628],{},"500 000",[60,4630,4631],{},"100 000 ₽",[60,4633,4634],{},"80 000 ₽",[60,4636,4637],{},"60 000 ₽",[11,4639,4640],{},"Чтобы сравнить со своей ситуацией, подставьте в левый столбец число запущенных проверок за прошлый месяц и сопоставьте результат со счётом за SMS за тот же период. Считать нужно именно по запущенным проверкам, а не по подтверждённым: в SMS-сценарии вы платили за все.",[11,4642,4643,4644,307],{},"Второй эффект, который стоит посчитать отдельно, — доля пользователей, не получивших код. Каждый из них не просто не заплатил вам за оплаченную отправку, но и не стал клиентом. Разбор причин недоставки — в материале ",[303,4645,1644],{"href":326},[18,4647,4649],{"id":4648},"kogda-sms-vse-taki-nuzhny","Когда SMS всё-таки нужны",[11,4651,4652],{},"Раздел, без которого текст читался бы рекламой.",[424,4654,4655,4660,4666,4672,4678],{},[138,4656,4657,4659],{},[141,4658,2420],{}," Пул состоит из российских номеров. Если заметная доля аудитории за границей, SMS для неё остаются.",[138,4661,4662,4665],{},[141,4663,4664],{},"Скрытый номер и корпоративные АТС."," Если номер вызывающего не передаётся, сопоставить звонок не с чем.",[138,4667,4668,4671],{},[141,4669,4670],{},"Код нужен в текстовом виде."," Сценарии, где пользователь должен сохранить или переслать подтверждение, — например, код получения заказа в пункте выдачи.",[138,4673,4674,4677],{},[141,4675,4676],{},"Транзакционные уведомления."," Статус заказа, чек, напоминание — это не верификация, и звонком их не заменить.",[138,4679,4680,4683],{},[141,4681,4682],{},"Пользователь без голосовой связи."," Зарубежная SIM с одним интернетом, звонки недоступны.",[11,4685,4686],{},"Практический вывод: SMS не исчезают из продукта, они перестают быть единственным способом подтверждения.",[18,4688,4690],{"id":4689},"kak-pereyti-postepenno","Как перейти постепенно",[11,4692,4693],{},"Одномоментная замена не нужна и рискованна. Рабочая последовательность:",[135,4695,4696,4702,4708,4714,4720],{},[138,4697,4698,4701],{},[141,4699,4700],{},"Подключите звонок параллельно."," Интеграция — два запроса, существующий SMS-сценарий не трогается.",[138,4703,4704,4707],{},[141,4705,4706],{},"Включите звонок части аудитории."," Например, десяти процентам новых регистраций, остальным оставьте прежний путь.",[138,4709,4710,4713],{},[141,4711,4712],{},"Сравните две воронки"," от «ввёл номер» до «подтвердил». Это единственный способ узнать эффект на своих данных, а не на чужих обещаниях.",[138,4715,4716,4719],{},[141,4717,4718],{},"Сделайте звонок основным, SMS — запасным."," Кнопка «Подтвердить другим способом» рядом с таймером снимает и вопрос зарубежных номеров, и главное возражение «а если не сработает».",[138,4721,4722,4725],{},[141,4723,4724],{},"Следите за долей ухода на запасной способ."," Она покажет реальный размер сегмента, для которого звонок не подходит.",[11,4727,4728],{},"Такая схема заодно решает задачу отказоустойчивости: два независимых канала подтверждения означают, что сбой у одного провайдера не останавливает регистрации.",[11,4730,4731,4732,4734,4735,4737,4738,871,4740,307],{},"Как устроен сам механизм — в статье про ",[303,4733,1279],{"href":548},". Чем обратный flash call отличается от обычного — в материале ",[303,4736,1078],{"href":305},". Критерии выбора провайдера и расчёт стоимости — в разборе ",[303,4739,415],{"href":414},[303,4741,410],{"href":409},{"title":506,"searchDepth":507,"depth":507,"links":4743},[4744,4745,4746,4747,4748,4749],{"id":4396,"depth":507,"text":4397},{"id":4435,"depth":507,"text":4436},{"id":4450,"depth":507,"text":4451},{"id":4554,"depth":507,"text":4555},{"id":4648,"depth":507,"text":4649},{"id":4689,"depth":507,"text":4690},{"title":4751,"text":4752,"label":520,"href":521},"Посчитайте на своих объёмах","0,20 ₽ за состоявшееся подтверждение, без абонентской платы и минимального объёма.","Сравнение SMS-кодов и подтверждения звонком: стоимость, доставляемость, время, действия пользователя. Считаем экономию при замене SMS-авторизации и когда SMS нужны.",[4755,4758,4761,4764],{"q":4756,"a":4757},"Обязательно отказываться от SMS полностью?","Нет, и в большинстве случаев не нужно. Рабочая схема — звонок основным\nспособом, SMS запасным для тех, у кого он не прошёл. Так закрываются\nи зарубежные абоненты, и скрытые номера, и риск сбоя у одного провайдера.\n",{"q":4759,"a":4760},"Как посчитать выгоду, не внедряя?","Возьмите счёт за SMS за прошлый месяц и число подтверждённых номеров\nза тот же период. Первое, делённое на второе, — ваша фактическая стоимость\nодного успешного подтверждения. Её и сравнивайте с 0,20 ₽.\n",{"q":4762,"a":4763},"Что делать, если часть пользователей не может позвонить?","Оставить им прежний способ. Доля таких пользователей обычно невелика,\nи запасной вариант в интерфейсе решает вопрос полностью — переход\nне обязан быть одномоментным и стопроцентным.\n",{"q":4765,"a":4766},"Насколько сложно перейти?","Интеграция — два HTTP-запроса и три статуса, обычно день работы.\nДольше идёт не техническая часть, а переделка интерфейса и A\u002FB-сравнение\nдвух воронок.\n","Flash Call или SMS: чем заменить SMS-коды и сколько это экономит",{},13,[552,968,553],{"title":4388,"description":4753},"blog\u002Fflash-call-ili-sms","Короткий вывод до аргументации: подтверждение звонком дешевле SMS и не зависит\nот доставляемости, но работает только для российских номеров и требует, чтобы номер\nвызывающего абонента определялся. Главная экономия не в цене за штуку, а в модели\nсписания: за SMS платят при отправке независимо от доставки, за звонок — только когда\nон состоялся. Ниже формула, по которой можно подставить свои цифры.\n","Gracrg0iFIfyW4kz0m05TI0qd-Ru_dSsatIsySzzCRQ",{"id":4776,"title":4777,"body":4778,"category":1382,"cta":5130,"description":5133,"draft":523,"extension":524,"faq":5134,"h1":5147,"meta":5148,"navigation":546,"order":5149,"path":465,"published":549,"related":5150,"seo":5151,"stem":5152,"summary":5153,"updated":549,"__hash__":5154},"blog\u002Fblog\u002Fgde-nuzhna-verifikaciya-telefona.md","Где нужна верификация номера телефона — по отраслям",{"type":8,"value":4779,"toc":5121},[4780,4783,4864,4867,4873,4879,4885,4891,4895,4900,4905,4910,4918,4921,4926,4931,4936,4941,4945,4950,4955,4960,4966,4969,4974,4979,4984,4988,4993,4998,5005,5009,5108,5111,5114],[11,4781,4782],{},"Верификация телефона — не универсальное требование, а инструмент под конкретную задачу. Ниже разобрано, где он окупается и что именно ломается без него.",[32,4784,4786],{"className":4785},[35],[37,4787,4788,4801],{},[40,4789,4790],{},[43,4791,4792,4795,4798],{},[46,4793,4794],{},"Отрасль",[46,4796,4797],{},"Задача",[46,4799,4800],{},"Раздел",[55,4802,4803,4814,4824,4834,4844,4854],{},[43,4804,4805,4808,4811],{},[60,4806,4807],{},"E-commerce и доставка",[60,4809,4810],{},"дозвониться курьером, отсечь ложные заказы",[60,4812,4813],{},"ниже",[43,4815,4816,4819,4822],{},[60,4817,4818],{},"Маркетплейсы и объявления",[60,4820,4821],{},"подтвердить продавца, ограничить мультиаккаунты",[60,4823,4813],{},[43,4825,4826,4829,4832],{},[60,4827,4828],{},"Программы лояльности",[60,4830,4831],{},"не раздавать бонусы новичка одному человеку многократно",[60,4833,4813],{},[43,4835,4836,4839,4842],{},[60,4837,4838],{},"SaaS",[60,4840,4841],{},"ограничить повторные триалы",[60,4843,4813],{},[43,4845,4846,4849,4852],{},[60,4847,4848],{},"CRM и колл-центры",[60,4850,4851],{},"держать базу контактов чистой",[60,4853,4813],{},[43,4855,4856,4859,4862],{},[60,4857,4858],{},"Финансовые сервисы",[60,4860,4861],{},"подтверждать операции",[60,4863,4813],{},[18,4865,4807],{"id":4866},"e-commerce-i-dostavka",[11,4868,4869,4872],{},[141,4870,4871],{},"Задача."," Убедиться, что по указанному телефону можно дозвониться, до того как заказ уйдёт в сборку.",[11,4874,4875,4878],{},[141,4876,4877],{},"Что ломается без проверки."," Опечатка в номере обнаруживается в день доставки: курьер не дозванивается, заказ возвращается, логистика оплачена дважды. Отдельно — ложные заказы при оплате при получении, где товар собран, отправлен и вернулся. Опечатки при этом встречаются чаще злого умысла, а стоят столько же.",[11,4880,4881,4884],{},[141,4882,4883],{},"Как закрывается."," Подтверждение номера на шаге оформления, до передачи заказа в сборку. Сценарий со звонком добавляет два действия и не требует ждать сообщение — на этапе оформления заказа это критично, потому что любое трение здесь бьёт по конверсии напрямую.",[11,4886,4887,4890],{},[141,4888,4889],{},"Что считать."," Долю недозвонов курьера и стоимость одного возврата. Умножьте на число заказов — получите цену вопроса.",[18,4892,4894],{"id":4893},"marketpleysy-i-doski-obyavleniy","Маркетплейсы и доски объявлений",[11,4896,4897,4899],{},[141,4898,4871],{}," Подтвердить, что за объявлением стоит человек с работающим контактом, и ограничить создание аккаунтов пачками.",[11,4901,4902,4904],{},[141,4903,4877],{}," Фейковые продавцы, объявления с подставными контактами, накрутка отзывов и рейтингов с десятков учётных записей, обход блокировок регистрацией нового аккаунта.",[11,4906,4907,4909],{},[141,4908,4883],{}," Проверка номера продавца перед публикацией первого объявления и лимит на число аккаунтов, привязанных к одному телефону. Второе без первого не работает: без подтверждения номер в профиле — просто строка текста.",[11,4911,4912,4915,4916,307],{},[141,4913,4914],{},"Важное ограничение."," Верификация не делает регистрацию невозможной, она делает её дорогой. Сервисы приёма сообщений на чужие номера существуют, поэтому телефонная проверка — один слой защиты, рядом с лимитами и анализом поведения. Подробнее — в материале про ",[303,4917,3493],{"href":3492},[18,4919,4828],{"id":4920},"programmy-loyalnosti",[11,4922,4923,4925],{},[141,4924,4871],{}," Выдать приветственный бонус одному человеку один раз.",[11,4927,4928,4930],{},[141,4929,4877],{}," Бонус новичка превращается в бесконечный: один пользователь регистрируется десятками, накапливает баллы и обналичивает их скидками. Отдельная разновидность — «фермы» аккаунтов под акции с реферальными начислениями.",[11,4932,4933,4935],{},[141,4934,4883],{}," Подтверждённый номер как ключ участника плюс жёсткий лимит: один номер — одно участие. Проверять нужно до начисления бонуса, а не после регистрации.",[11,4937,4938,4940],{},[141,4939,4889],{}," Размер приветственного бонуса. Он же — предел, который злоумышленник готов потратить на обход: если бонус дороже стоимости SIM-карты, схема окупается, и без верификации её ничто не сдерживает.",[18,4942,4944],{"id":4943},"saas-servisy","SaaS-сервисы",[11,4946,4947,4949],{},[141,4948,4871],{}," Ограничить повторное использование бесплатного периода.",[11,4951,4952,4954],{},[141,4953,4877],{}," Триал по кругу: новая почта — новый бесплатный месяц. Почтовый адрес заводится мгновенно и бесплатно, поэтому ограничителем служить не может.",[11,4956,4957,4959],{},[141,4958,4883],{}," Телефон при регистрации на триал и лимит триалов на номер. Для платных тарифов проверка обычно избыточна — там ограничителем работает сама оплата.",[11,4961,4962,4965],{},[141,4963,4964],{},"Нюанс."," В B2B телефонная верификация встречается реже: регистрация часто идёт через менеджера, и барьер создаёт он. Проверка нужна там, где пользователь заводит аккаунт сам.",[18,4967,4848],{"id":4968},"crm-i-koll-centry",[11,4970,4971,4973],{},[141,4972,4871],{}," Держать базу контактов рабочей.",[11,4975,4976,4978],{},[141,4977,4877],{}," База наполняется номерами с опечатками, устаревшими и выдуманными. Обнаруживается это на обзвоне: оператор тратит время на недозвоны, конверсия кампании падает, а качество базы никто не измеряет, пока не станет плохо.",[11,4980,4981,4983],{},[141,4982,4883],{}," Подтверждение номера в точке его попадания в базу — в форме заявки, при регистрации, на лендинге. Проверенный контакт стоит дороже непроверенного ровно на стоимость сэкономленных попыток дозвона.",[18,4985,4987],{"id":4986},"finansovye-i-mikrofinansovye-servisy","Финансовые и микрофинансовые сервисы",[11,4989,4990,4992],{},[141,4991,4871],{}," Подтверждать операции и вход, а не только регистрацию.",[11,4994,4995,4997],{},[141,4996,4877],{}," Здесь цена ошибки самая высокая, и требования к сценарию другие: подтверждать нужно не факт доступа к аккаунту, а намерение совершить конкретное действие — с указанием суммы и получателя.",[11,4999,5000,5002,5003,307],{},[141,5001,4883],{}," Телефонная проверка на входе и для обычных операций. Для операций с деньгами телефон не должен быть единственным фактором: подтверждение владения номером не защищает от подмены SIM-карты — ни в варианте с SMS, ни в варианте со звонком. Разбор требований по сценариям — в материале про ",[303,5004,757],{"href":756},[18,5006,5008],{"id":5007},"kak-vybrat-scenariy-pod-svoyu-zadachu","Как выбрать сценарий под свою задачу",[32,5010,5012],{"className":5011},[35],[37,5013,5014,5030],{},[40,5015,5016],{},[43,5017,5018,5021,5024,5027],{},[46,5019,5020],{},"Тип задачи",[46,5022,5023],{},"Что подтверждаем",[46,5025,5026],{},"Когда проверять",[46,5028,5029],{},"Достаточно ли звонка",[55,5031,5032,5045,5057,5069,5082,5094],{},[43,5033,5034,5037,5040,5043],{},[60,5035,5036],{},"Отсечь массовые регистрации",[60,5038,5039],{},"доступ к номеру",[60,5041,5042],{},"при создании аккаунта",[60,5044,267],{},[43,5046,5047,5050,5052,5055],{},[60,5048,5049],{},"Получить рабочий контакт",[60,5051,5039],{},[60,5053,5054],{},"до сборки заказа, до публикации",[60,5056,267],{},[43,5058,5059,5062,5064,5067],{},[60,5060,5061],{},"Пустить в аккаунт",[60,5063,5039],{},[60,5065,5066],{},"при входе с нового устройства",[60,5068,267],{},[43,5070,5071,5074,5077,5080],{},[60,5072,5073],{},"Подтвердить бытовую операцию",[60,5075,5076],{},"намерение",[60,5078,5079],{},"перед выполнением",[60,5081,267],{},[43,5083,5084,5087,5089,5091],{},[60,5085,5086],{},"Подтвердить операцию с деньгами",[60,5088,5076],{},[60,5090,5079],{},[60,5092,5093],{},"нужен второй фактор другого типа",[43,5095,5096,5099,5102,5105],{},[60,5097,5098],{},"Установить личность по документам",[60,5100,5101],{},"личность",[60,5103,5104],{},"по требованию регулятора",[60,5106,5107],{},"нет, это другая процедура",[11,5109,5110],{},"Общий принцип: проверяйте номер в тот момент, когда неподтверждённый контакт впервые начинает что-то стоить. Раньше — лишнее трение, позже — фиксация убытка.",[11,5112,5113],{},"Из этого следует и обратное правило: если неподтверждённый номер вам ничего не стоит, проверка не нужна. Форма обратной связи, подписка на рассылку, заявка на консультацию — там телефон и так перезвонят вручную, и лишний шаг только уменьшит число заявок.",[11,5115,5116,5117,868,5119,307],{},"Как устроен механизм проверки — в статье про ",[303,5118,707],{"href":548},[303,5120,415],{"href":414},{"title":506,"searchDepth":507,"depth":507,"links":5122},[5123,5124,5125,5126,5127,5128,5129],{"id":4866,"depth":507,"text":4807},{"id":4893,"depth":507,"text":4894},{"id":4920,"depth":507,"text":4828},{"id":4943,"depth":507,"text":4944},{"id":4968,"depth":507,"text":4848},{"id":4986,"depth":507,"text":4987},{"id":5007,"depth":507,"text":5008},{"title":5131,"text":5132,"label":520,"href":521},"Проверьте свой сценарий","Один механизм закрывает все перечисленные задачи. Ключ проекта выдаётся сразу после регистрации.","Разбираем, где телефонная верификация решает конкретную задачу: e-commerce и доставка, маркетплейсы, программы лояльности, SaaS, CRM и финансовые сервисы.",[5135,5138,5141,5144],{"q":5136,"a":5137},"В какой момент сценария подтверждать номер?","До того, как неподтверждённый номер начнёт что-то стоить: до сборки заказа,\nдо публикации объявления, до начисления бонуса, до выдачи триала. После —\nэто уже фиксация убытка, а не его предотвращение.\n",{"q":5139,"a":5140},"Не отпугнёт ли проверка часть покупателей?","Отпугивает не проверка, а лишние шаги. Сценарий со звонком — два действия\nбез ввода и ожидания сообщения, и он короче привычного SMS-кода. Сравнить\nстоит на своих данных, включив его части аудитории.\n",{"q":5142,"a":5143},"Нужна ли верификация в B2B-сервисе?","Реже, чем в B2C: там регистрация обычно идёт по рабочей почте и через\nменеджера. Но для самостоятельной регистрации на триал телефонная проверка\nостаётся самым простым способом ограничить бесконечные повторные заходы.\n",{"q":5145,"a":5146},"Можно ли одним механизмом закрыть несколько сценариев сразу?","Да, механизм один — различаются только момент вызова и то, что вы делаете\nс результатом. Регистрация, вход, оформление заказа и подтверждение\nоперации используют одну и ту же проверку.\n","Где нужна верификация телефона: разбор по отраслям",{},14,[3524,968,969],{"title":4777,"description":5133},"blog\u002Fgde-nuzhna-verifikaciya-telefona","Телефонная верификация нужна не везде, а там, где неподтверждённый контакт стоит денег:\nкурьер не дозвонился, бонус новичка ушёл в двадцатый аккаунт одного человека, триал\nиспользуют по кругу. Ниже — разбор шести отраслей по единой схеме: какая задача,\nчто ломается без проверки, как её закрывает подтверждение звонком. Начните с таблицы —\nона приведёт сразу к нужному разделу.\n","mO3vREwVBxOSnOTK5Kp1hFu-vh7UDdA5dejpaHXPk8A",{"id":5156,"title":5157,"body":5158,"category":2829,"cta":7751,"description":7755,"draft":523,"extension":524,"faq":7756,"h1":7772,"meta":7773,"navigation":546,"order":5801,"path":502,"published":549,"related":7774,"seo":7775,"stem":7776,"summary":7777,"updated":549,"__hash__":7778},"blog\u002Fblog\u002Fapi-podtverzhdeniya-nomera.md","API подтверждения номера телефона — REST с примерами",{"type":8,"value":5159,"toc":7734},[5160,5163,5167,5223,5230,5239,5243,5290,5293,5328,5341,5344,5406,5410,5416,5429,5433,5445,5518,5524,5527,5549,5553,5557,6135,6139,6302,6306,6454,6458,6465,6469,6997,7001,7605,7609,7661,7665,7722,7725,7730],[11,5161,5162],{},"Интеграция подтверждения номера обычно занимает не больше рабочего дня. Ниже — весь путь: от первого запроса до обработки граничных случаев, с примерами, которые можно копировать.",[18,5164,5166],{"id":5165},"kak-ustroen-api","Как устроен API",[424,5168,5169,5178,5184,5202,5210],{},[138,5170,5171,5174,5175],{},[141,5172,5173],{},"Базовый адрес:"," ",[146,5176,5177],{},"https:\u002F\u002Fflashcall.ru\u002Fapi\u002Fv1",[138,5179,5180,5183],{},[141,5181,5182],{},"Формат:"," JSON, обычный REST.",[138,5185,5186,5189,5190,5193,5194,5197,5198,5201],{},[141,5187,5188],{},"Авторизация:"," ключ проекта передаётся полем ",[146,5191,5192],{},"token"," — в теле ",[146,5195,5196],{},"POST \u002Fget-phone"," или в query-строке ",[146,5199,5200],{},"GET \u002Fstatus",". Отдельных заголовков авторизации нет.",[138,5203,5204,5207,5208,307],{},[141,5205,5206],{},"Формат номера:"," E.164 — знак плюс, код страны и номер без разделителей: ",[146,5209,148],{},[138,5211,5212,5174,5215,5217,5218,179,5220,5222],{},[141,5213,5214],{},"Статусы проверки:",[146,5216,174],{}," — ждём звонок, ",[146,5219,178],{},[146,5221,182],{}," — за 60 секунд звонка не было.",[11,5224,5225,5226,5229],{},"Всего два запроса. Третий эндпоинт, ",[146,5227,5228],{},"POST \u002Finbound-call",", вызывает оператор телефонии при поступлении звонка — со стороны интеграции он не используется.",[11,5231,5232,5233,5235,5236,307],{},"Если механизм в целом ещё не знаком, начните с разбора в статье про ",[303,5234,707],{"href":548},": дальше по тексту предполагается, что схема «выдали номер — пользователь позвонил — забрали статус» уже понятна. Модель тарификации и критерии выбора провайдера — в материале про ",[303,5237,5238],{"href":414},"сервисы подтверждения номера",[18,5240,5242],{"id":5241},"shag-1-sozdat-proverku","Шаг 1. Создать проверку",[4560,5244,5248],{"className":5245,"code":5246,"language":5247,"meta":506,"style":506},"language-bash shiki shiki-themes github-light github-dark","curl -X POST \"https:\u002F\u002Fflashcall.ru\u002Fapi\u002Fv1\u002Fget-phone\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"token\": \"YOUR_API_KEY\", \"phone\": \"+79161234567\" }'\n","bash",[146,5249,5250,5272,5282],{"__ignoreMap":506},[5251,5252,5254,5258,5262,5266,5269],"span",{"class":5253,"line":547},"line",[5251,5255,5257],{"class":5256},"sScJk","curl",[5251,5259,5261],{"class":5260},"sj4cs"," -X",[5251,5263,5265],{"class":5264},"sZZnC"," POST",[5251,5267,5268],{"class":5264}," \"https:\u002F\u002Fflashcall.ru\u002Fapi\u002Fv1\u002Fget-phone\"",[5251,5270,5271],{"class":5260}," \\\n",[5251,5273,5274,5277,5280],{"class":5253,"line":507},[5251,5275,5276],{"class":5260},"  -H",[5251,5278,5279],{"class":5264}," \"Content-Type: application\u002Fjson\"",[5251,5281,5271],{"class":5260},[5251,5283,5284,5287],{"class":5253,"line":1405},[5251,5285,5286],{"class":5260},"  -d",[5251,5288,5289],{"class":5264}," '{ \"token\": \"YOUR_API_KEY\", \"phone\": \"+79161234567\" }'\n",[11,5291,5292],{},"Ответ:",[4560,5294,5298],{"className":5295,"code":5296,"language":5297,"meta":506,"style":506},"language-json shiki shiki-themes github-light github-dark","{ \"id\": \"c1x8f2k9b0001\", \"phone\": \"+74950000000\" }\n","json",[146,5299,5300],{"__ignoreMap":506},[5251,5301,5302,5306,5309,5312,5315,5317,5320,5322,5325],{"class":5253,"line":547},[5251,5303,5305],{"class":5304},"sVt8B","{ ",[5251,5307,5308],{"class":5260},"\"id\"",[5251,5310,5311],{"class":5304},": ",[5251,5313,5314],{"class":5264},"\"c1x8f2k9b0001\"",[5251,5316,1139],{"class":5304},[5251,5318,5319],{"class":5260},"\"phone\"",[5251,5321,5311],{"class":5304},[5251,5323,5324],{"class":5264},"\"+74950000000\"",[5251,5326,5327],{"class":5304}," }\n",[11,5329,5330,5333,5334,5337,5338,5340],{},[146,5331,5332],{},"id"," — идентификатор проверки, по нему запрашивается статус. ",[146,5335,5336],{},"phone"," — выделенный номер, на который пользователь должен позвонить. Проверка создаётся в статусе ",[146,5339,174],{}," и живёт 60 секунд.",[11,5342,5343],{},"Возможные ошибки:",[32,5345,5347],{"className":5346},[35],[37,5348,5349,5361],{},[40,5350,5351],{},[43,5352,5353,5356,5359],{},[46,5354,5355],{},"Код",[46,5357,5358],{},"Причина",[46,5360,2990],{},[55,5362,5363,5374,5384,5395],{},[43,5364,5365,5368,5371],{},[60,5366,5367],{},"400",[60,5369,5370],{},"неверный формат номера",[60,5372,5373],{},"привести к E.164 до отправки",[43,5375,5376,5378,5381],{},[60,5377,5367],{},[60,5379,5380],{},"недостаточно средств на балансе",[60,5382,5383],{},"пополнить, заранее завести оповещение",[43,5385,5386,5389,5392],{},[60,5387,5388],{},"404",[60,5390,5391],{},"ключ проекта не найден",[60,5393,5394],{},"проверить ключ и окружение",[43,5396,5397,5400,5403],{},[60,5398,5399],{},"503",[60,5401,5402],{},"нет доступных номеров в пуле",[60,5404,5405],{},"повторить попытку, показать запасной способ",[18,5407,5409],{"id":5408},"shag-2-pokazat-nomer-polzovatelyu","Шаг 2. Показать номер пользователю",[11,5411,5412,5413,5415],{},"Во фронтенд отдаются только ",[146,5414,5332],{}," и выделенный номер — ключ проекта наружу не уходит.",[11,5417,5418,5419,5421,5422,5425,5426,307],{},"Что должно быть на экране: номер крупно и с разделителями, на мобильных — ссылкой ",[146,5420,158],{},"; таймер на 60 секунд; пояснение, что трубку брать не нужно; подсказка, что звонить надо именно с подтверждаемого номера. Разбор интерфейса — в материалах про ",[303,5423,5424],{"href":776},"подтверждение на сайте"," и ",[303,5427,5428],{"href":786},"в мобильном приложении",[18,5430,5432],{"id":5431},"shag-3-poluchit-rezultat","Шаг 3. Получить результат",[4560,5434,5436],{"className":5245,"code":5435,"language":5247,"meta":506,"style":506},"curl \"https:\u002F\u002Fflashcall.ru\u002Fapi\u002Fv1\u002Fstatus?token=YOUR_API_KEY&id=c1x8f2k9b0001\"\n",[146,5437,5438],{"__ignoreMap":506},[5251,5439,5440,5442],{"class":5253,"line":547},[5251,5441,5257],{"class":5256},[5251,5443,5444],{"class":5264}," \"https:\u002F\u002Fflashcall.ru\u002Fapi\u002Fv1\u002Fstatus?token=YOUR_API_KEY&id=c1x8f2k9b0001\"\n",[4560,5446,5448],{"className":5295,"code":5447,"language":5297,"meta":506,"style":506},"{\n  \"id\": \"c1x8f2k9b0001\",\n  \"status\": \"PENDING\",\n  \"callerPhone\": \"+79161234567\",\n  \"cost\": \"0.20\",\n  \"createdAt\": \"2026-08-08T18:00:00.000Z\"\n}\n",[146,5449,5450,5455,5467,5479,5491,5503,5513],{"__ignoreMap":506},[5251,5451,5452],{"class":5253,"line":547},[5251,5453,5454],{"class":5304},"{\n",[5251,5456,5457,5460,5462,5464],{"class":5253,"line":507},[5251,5458,5459],{"class":5260},"  \"id\"",[5251,5461,5311],{"class":5304},[5251,5463,5314],{"class":5264},[5251,5465,5466],{"class":5304},",\n",[5251,5468,5469,5472,5474,5477],{"class":5253,"line":1405},[5251,5470,5471],{"class":5260},"  \"status\"",[5251,5473,5311],{"class":5304},[5251,5475,5476],{"class":5264},"\"PENDING\"",[5251,5478,5466],{"class":5304},[5251,5480,5481,5484,5486,5489],{"class":5253,"line":1778},[5251,5482,5483],{"class":5260},"  \"callerPhone\"",[5251,5485,5311],{"class":5304},[5251,5487,5488],{"class":5264},"\"+79161234567\"",[5251,5490,5466],{"class":5304},[5251,5492,5493,5496,5498,5501],{"class":5253,"line":2152},[5251,5494,5495],{"class":5260},"  \"cost\"",[5251,5497,5311],{"class":5304},[5251,5499,5500],{"class":5264},"\"0.20\"",[5251,5502,5466],{"class":5304},[5251,5504,5505,5508,5510],{"class":5253,"line":2518},[5251,5506,5507],{"class":5260},"  \"createdAt\"",[5251,5509,5311],{"class":5304},[5251,5511,5512],{"class":5264},"\"2026-08-08T18:00:00.000Z\"\n",[5251,5514,5515],{"class":5253,"line":2849},[5251,5516,5517],{"class":5304},"}\n",[11,5519,5520,5523],{},[141,5521,5522],{},"Вебхуков нет"," — результат забирается опросом. Это заметно упрощает интеграцию: не нужен публично доступный обработчик, не нужна проверка подписи, не нужна защита от повторной доставки.",[11,5525,5526],{},"Правила опроса:",[424,5528,5529,5532,5540,5543],{},[138,5530,5531],{},"Интервал одна-две секунды. Чаще бессмысленно, реже — заметная задержка на экране.",[138,5533,5534,5535,1139,5537,5539],{},"Три условия остановки: ",[146,5536,178],{},[146,5538,182],{}," и истечение локального таймера. Без последнего цикл может не завершиться никогда.",[138,5541,5542],{},"Решение «номер подтверждён» принимается на сервере по ответу API, а не по тому, что прислал браузер.",[138,5544,5545,5546,5548],{},"Привязка номера должна отрабатывать один раз, даже если ",[146,5547,178],{}," увиден несколькими запросами подряд.",[18,5550,5552],{"id":5551},"primery-integracii","Примеры интеграции",[1842,5554,5556],{"id":5555},"node-js","Node.js",[4560,5558,5562],{"className":5559,"code":5560,"language":5561,"meta":506,"style":506},"language-js shiki shiki-themes github-light github-dark","const API = 'https:\u002F\u002Fflashcall.ru\u002Fapi\u002Fv1'\nconst TOKEN = process.env.FLASHCALL_TOKEN\n\nexport async function createVerification(phone) {\n  const res = await fetch(`${API}\u002Fget-phone`, {\n    method: 'POST',\n    headers: { 'Content-Type': 'application\u002Fjson' },\n    body: JSON.stringify({ token: TOKEN, phone }),\n  })\n  if (!res.ok) throw new Error(`get-phone: ${res.status}`)\n\n  \u002F\u002F callTo показываем пользователю — на него нужно позвонить\n  const { id, phone: callTo } = await res.json()\n  return { id, callTo }\n}\n\nexport async function getStatus(id) {\n  const url = `${API}\u002Fstatus?token=${encodeURIComponent(TOKEN)}&id=${encodeURIComponent(id)}`\n  const res = await fetch(url)\n  if (!res.ok) throw new Error(`status: ${res.status}`)\n  return (await res.json()).status\n}\n\n\u002F** Ждём результат, пока проверка жива: TTL 60 секунд. *\u002F\nexport async function waitForCall(id, timeoutMs = 60_000) {\n  const deadline = Date.now() + timeoutMs\n  while (Date.now() \u003C deadline) {\n    const status = await getStatus(id)\n    if (status === 'CONFIRMED') return true\n    if (status === 'EXPIRED') return false\n    await new Promise((r) => setTimeout(r, 2000))\n  }\n  return false\n}\n","js",[146,5563,5564,5579,5594,5599,5622,5652,5662,5678,5700,5705,5747,5751,5757,5791,5799,5804,5809,5827,5869,5885,5917,5934,5939,5944,5950,5978,6003,6022,6040,6064,6083,6117,6123,6130],{"__ignoreMap":506},[5251,5565,5566,5570,5573,5576],{"class":5253,"line":547},[5251,5567,5569],{"class":5568},"szBVR","const",[5251,5571,5572],{"class":5260}," API",[5251,5574,5575],{"class":5568}," =",[5251,5577,5578],{"class":5264}," 'https:\u002F\u002Fflashcall.ru\u002Fapi\u002Fv1'\n",[5251,5580,5581,5583,5586,5588,5591],{"class":5253,"line":507},[5251,5582,5569],{"class":5568},[5251,5584,5585],{"class":5260}," TOKEN",[5251,5587,5575],{"class":5568},[5251,5589,5590],{"class":5304}," process.env.",[5251,5592,5593],{"class":5260},"FLASHCALL_TOKEN\n",[5251,5595,5596],{"class":5253,"line":1405},[5251,5597,5598],{"emptyLinePlaceholder":546},"\n",[5251,5600,5601,5604,5607,5610,5613,5616,5619],{"class":5253,"line":1778},[5251,5602,5603],{"class":5568},"export",[5251,5605,5606],{"class":5568}," async",[5251,5608,5609],{"class":5568}," function",[5251,5611,5612],{"class":5256}," createVerification",[5251,5614,5615],{"class":5304},"(",[5251,5617,5336],{"class":5618},"s4XuR",[5251,5620,5621],{"class":5304},") {\n",[5251,5623,5624,5627,5630,5632,5635,5638,5640,5643,5646,5649],{"class":5253,"line":2152},[5251,5625,5626],{"class":5568},"  const",[5251,5628,5629],{"class":5260}," res",[5251,5631,5575],{"class":5568},[5251,5633,5634],{"class":5568}," await",[5251,5636,5637],{"class":5256}," fetch",[5251,5639,5615],{"class":5304},[5251,5641,5642],{"class":5264},"`${",[5251,5644,5645],{"class":5260},"API",[5251,5647,5648],{"class":5264},"}\u002Fget-phone`",[5251,5650,5651],{"class":5304},", {\n",[5251,5653,5654,5657,5660],{"class":5253,"line":2518},[5251,5655,5656],{"class":5304},"    method: ",[5251,5658,5659],{"class":5264},"'POST'",[5251,5661,5466],{"class":5304},[5251,5663,5664,5667,5670,5672,5675],{"class":5253,"line":2849},[5251,5665,5666],{"class":5304},"    headers: { ",[5251,5668,5669],{"class":5264},"'Content-Type'",[5251,5671,5311],{"class":5304},[5251,5673,5674],{"class":5264},"'application\u002Fjson'",[5251,5676,5677],{"class":5304}," },\n",[5251,5679,5680,5683,5686,5688,5691,5694,5697],{"class":5253,"line":3143},[5251,5681,5682],{"class":5304},"    body: ",[5251,5684,5685],{"class":5260},"JSON",[5251,5687,307],{"class":5304},[5251,5689,5690],{"class":5256},"stringify",[5251,5692,5693],{"class":5304},"({ token: ",[5251,5695,5696],{"class":5260},"TOKEN",[5251,5698,5699],{"class":5304},", phone }),\n",[5251,5701,5702],{"class":5253,"line":3521},[5251,5703,5704],{"class":5304},"  })\n",[5251,5706,5707,5710,5713,5716,5719,5722,5725,5728,5730,5733,5736,5738,5741,5744],{"class":5253,"line":3792},[5251,5708,5709],{"class":5568},"  if",[5251,5711,5712],{"class":5304}," (",[5251,5714,5715],{"class":5568},"!",[5251,5717,5718],{"class":5304},"res.ok) ",[5251,5720,5721],{"class":5568},"throw",[5251,5723,5724],{"class":5568}," new",[5251,5726,5727],{"class":5256}," Error",[5251,5729,5615],{"class":5304},[5251,5731,5732],{"class":5264},"`get-phone: ${",[5251,5734,5735],{"class":5304},"res",[5251,5737,307],{"class":5264},[5251,5739,5740],{"class":5304},"status",[5251,5742,5743],{"class":5264},"}`",[5251,5745,5746],{"class":5304},")\n",[5251,5748,5749],{"class":5253,"line":4104},[5251,5750,5598],{"emptyLinePlaceholder":546},[5251,5752,5753],{"class":5253,"line":4380},[5251,5754,5756],{"class":5755},"sJ8bj","  \u002F\u002F callTo показываем пользователю — на него нужно позвонить\n",[5251,5758,5759,5761,5764,5766,5768,5770,5772,5775,5778,5781,5783,5786,5788],{"class":5253,"line":4769},[5251,5760,5626],{"class":5568},[5251,5762,5763],{"class":5304}," { ",[5251,5765,5332],{"class":5260},[5251,5767,1139],{"class":5304},[5251,5769,5336],{"class":5618},[5251,5771,5311],{"class":5304},[5251,5773,5774],{"class":5260},"callTo",[5251,5776,5777],{"class":5304}," } ",[5251,5779,5780],{"class":5568},"=",[5251,5782,5634],{"class":5568},[5251,5784,5785],{"class":5304}," res.",[5251,5787,5297],{"class":5256},[5251,5789,5790],{"class":5304},"()\n",[5251,5792,5793,5796],{"class":5253,"line":5149},[5251,5794,5795],{"class":5568},"  return",[5251,5797,5798],{"class":5304}," { id, callTo }\n",[5251,5800,5802],{"class":5253,"line":5801},15,[5251,5803,5517],{"class":5304},[5251,5805,5807],{"class":5253,"line":5806},16,[5251,5808,5598],{"emptyLinePlaceholder":546},[5251,5810,5812,5814,5816,5818,5821,5823,5825],{"class":5253,"line":5811},17,[5251,5813,5603],{"class":5568},[5251,5815,5606],{"class":5568},[5251,5817,5609],{"class":5568},[5251,5819,5820],{"class":5256}," getStatus",[5251,5822,5615],{"class":5304},[5251,5824,5332],{"class":5618},[5251,5826,5621],{"class":5304},[5251,5828,5830,5832,5835,5837,5840,5842,5845,5848,5850,5852,5855,5858,5860,5862,5864,5866],{"class":5253,"line":5829},18,[5251,5831,5626],{"class":5568},[5251,5833,5834],{"class":5260}," url",[5251,5836,5575],{"class":5568},[5251,5838,5839],{"class":5264}," `${",[5251,5841,5645],{"class":5260},[5251,5843,5844],{"class":5264},"}\u002Fstatus?token=${",[5251,5846,5847],{"class":5256},"encodeURIComponent",[5251,5849,5615],{"class":5264},[5251,5851,5696],{"class":5260},[5251,5853,5854],{"class":5264},")",[5251,5856,5857],{"class":5264},"}&id=${",[5251,5859,5847],{"class":5256},[5251,5861,5615],{"class":5264},[5251,5863,5332],{"class":5304},[5251,5865,5854],{"class":5264},[5251,5867,5868],{"class":5264},"}`\n",[5251,5870,5872,5874,5876,5878,5880,5882],{"class":5253,"line":5871},19,[5251,5873,5626],{"class":5568},[5251,5875,5629],{"class":5260},[5251,5877,5575],{"class":5568},[5251,5879,5634],{"class":5568},[5251,5881,5637],{"class":5256},[5251,5883,5884],{"class":5304},"(url)\n",[5251,5886,5888,5890,5892,5894,5896,5898,5900,5902,5904,5907,5909,5911,5913,5915],{"class":5253,"line":5887},20,[5251,5889,5709],{"class":5568},[5251,5891,5712],{"class":5304},[5251,5893,5715],{"class":5568},[5251,5895,5718],{"class":5304},[5251,5897,5721],{"class":5568},[5251,5899,5724],{"class":5568},[5251,5901,5727],{"class":5256},[5251,5903,5615],{"class":5304},[5251,5905,5906],{"class":5264},"`status: ${",[5251,5908,5735],{"class":5304},[5251,5910,307],{"class":5264},[5251,5912,5740],{"class":5304},[5251,5914,5743],{"class":5264},[5251,5916,5746],{"class":5304},[5251,5918,5920,5922,5924,5927,5929,5931],{"class":5253,"line":5919},21,[5251,5921,5795],{"class":5568},[5251,5923,5712],{"class":5304},[5251,5925,5926],{"class":5568},"await",[5251,5928,5785],{"class":5304},[5251,5930,5297],{"class":5256},[5251,5932,5933],{"class":5304},"()).status\n",[5251,5935,5937],{"class":5253,"line":5936},22,[5251,5938,5517],{"class":5304},[5251,5940,5942],{"class":5253,"line":5941},23,[5251,5943,5598],{"emptyLinePlaceholder":546},[5251,5945,5947],{"class":5253,"line":5946},24,[5251,5948,5949],{"class":5755},"\u002F** Ждём результат, пока проверка жива: TTL 60 секунд. *\u002F\n",[5251,5951,5953,5955,5957,5959,5962,5964,5966,5968,5971,5973,5976],{"class":5253,"line":5952},25,[5251,5954,5603],{"class":5568},[5251,5956,5606],{"class":5568},[5251,5958,5609],{"class":5568},[5251,5960,5961],{"class":5256}," waitForCall",[5251,5963,5615],{"class":5304},[5251,5965,5332],{"class":5618},[5251,5967,1139],{"class":5304},[5251,5969,5970],{"class":5618},"timeoutMs",[5251,5972,5575],{"class":5568},[5251,5974,5975],{"class":5260}," 60_000",[5251,5977,5621],{"class":5304},[5251,5979,5981,5983,5986,5988,5991,5994,5997,6000],{"class":5253,"line":5980},26,[5251,5982,5626],{"class":5568},[5251,5984,5985],{"class":5260}," deadline",[5251,5987,5575],{"class":5568},[5251,5989,5990],{"class":5304}," Date.",[5251,5992,5993],{"class":5256},"now",[5251,5995,5996],{"class":5304},"() ",[5251,5998,5999],{"class":5568},"+",[5251,6001,6002],{"class":5304}," timeoutMs\n",[5251,6004,6006,6009,6012,6014,6016,6019],{"class":5253,"line":6005},27,[5251,6007,6008],{"class":5568},"  while",[5251,6010,6011],{"class":5304}," (Date.",[5251,6013,5993],{"class":5256},[5251,6015,5996],{"class":5304},[5251,6017,6018],{"class":5568},"\u003C",[5251,6020,6021],{"class":5304}," deadline) {\n",[5251,6023,6025,6028,6031,6033,6035,6037],{"class":5253,"line":6024},28,[5251,6026,6027],{"class":5568},"    const",[5251,6029,6030],{"class":5260}," status",[5251,6032,5575],{"class":5568},[5251,6034,5634],{"class":5568},[5251,6036,5820],{"class":5256},[5251,6038,6039],{"class":5304},"(id)\n",[5251,6041,6043,6046,6049,6052,6055,6058,6061],{"class":5253,"line":6042},29,[5251,6044,6045],{"class":5568},"    if",[5251,6047,6048],{"class":5304}," (status ",[5251,6050,6051],{"class":5568},"===",[5251,6053,6054],{"class":5264}," 'CONFIRMED'",[5251,6056,6057],{"class":5304},") ",[5251,6059,6060],{"class":5568},"return",[5251,6062,6063],{"class":5260}," true\n",[5251,6065,6067,6069,6071,6073,6076,6078,6080],{"class":5253,"line":6066},30,[5251,6068,6045],{"class":5568},[5251,6070,6048],{"class":5304},[5251,6072,6051],{"class":5568},[5251,6074,6075],{"class":5264}," 'EXPIRED'",[5251,6077,6057],{"class":5304},[5251,6079,6060],{"class":5568},[5251,6081,6082],{"class":5260}," false\n",[5251,6084,6086,6089,6091,6094,6097,6100,6102,6105,6108,6111,6114],{"class":5253,"line":6085},31,[5251,6087,6088],{"class":5568},"    await",[5251,6090,5724],{"class":5568},[5251,6092,6093],{"class":5260}," Promise",[5251,6095,6096],{"class":5304},"((",[5251,6098,6099],{"class":5618},"r",[5251,6101,6057],{"class":5304},[5251,6103,6104],{"class":5568},"=>",[5251,6106,6107],{"class":5256}," setTimeout",[5251,6109,6110],{"class":5304},"(r, ",[5251,6112,6113],{"class":5260},"2000",[5251,6115,6116],{"class":5304},"))\n",[5251,6118,6120],{"class":5253,"line":6119},32,[5251,6121,6122],{"class":5304},"  }\n",[5251,6124,6126,6128],{"class":5253,"line":6125},33,[5251,6127,5795],{"class":5568},[5251,6129,6082],{"class":5260},[5251,6131,6133],{"class":5253,"line":6132},34,[5251,6134,5517],{"class":5304},[1842,6136,6138],{"id":6137},"php","PHP",[4560,6140,6143],{"className":6141,"code":6142,"language":6137,"meta":506,"style":506},"language-php shiki shiki-themes github-light github-dark","\u003C?php\nconst FLASHCALL_API = 'https:\u002F\u002Fflashcall.ru\u002Fapi\u002Fv1';\n\nfunction flashcallRequest(string $url, ?array $body = null): array {\n    $ch = curl_init($url);\n    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n    curl_setopt($ch, CURLOPT_TIMEOUT, 10);\n    if ($body !== null) {\n        curl_setopt($ch, CURLOPT_POST, true);\n        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));\n        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application\u002Fjson']);\n    }\n    $response = curl_exec($ch);\n    $code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);\n    curl_close($ch);\n\n    if ($code >= 400) {\n        throw new RuntimeException(\"FlashCall API вернул $code: $response\");\n    }\n    return json_decode($response, true);\n}\n\nfunction createVerification(string $phone): array {\n    return flashcallRequest(FLASHCALL_API . '\u002Fget-phone', [\n        'token' => getenv('FLASHCALL_TOKEN'),\n        'phone' => $phone,\n    ]);\n}\n\nfunction getStatus(string $id): string {\n    $query = http_build_query(['token' => getenv('FLASHCALL_TOKEN'), 'id' => $id]);\n    return flashcallRequest(FLASHCALL_API . '\u002Fstatus?' . $query)['status'];\n}\n",[146,6144,6145,6150,6155,6159,6164,6169,6174,6179,6184,6189,6194,6199,6204,6209,6214,6219,6223,6228,6233,6237,6242,6246,6250,6255,6260,6265,6270,6275,6279,6283,6288,6293,6298],{"__ignoreMap":506},[5251,6146,6147],{"class":5253,"line":547},[5251,6148,6149],{},"\u003C?php\n",[5251,6151,6152],{"class":5253,"line":507},[5251,6153,6154],{},"const FLASHCALL_API = 'https:\u002F\u002Fflashcall.ru\u002Fapi\u002Fv1';\n",[5251,6156,6157],{"class":5253,"line":1405},[5251,6158,5598],{"emptyLinePlaceholder":546},[5251,6160,6161],{"class":5253,"line":1778},[5251,6162,6163],{},"function flashcallRequest(string $url, ?array $body = null): array {\n",[5251,6165,6166],{"class":5253,"line":2152},[5251,6167,6168],{},"    $ch = curl_init($url);\n",[5251,6170,6171],{"class":5253,"line":2518},[5251,6172,6173],{},"    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n",[5251,6175,6176],{"class":5253,"line":2849},[5251,6177,6178],{},"    curl_setopt($ch, CURLOPT_TIMEOUT, 10);\n",[5251,6180,6181],{"class":5253,"line":3143},[5251,6182,6183],{},"    if ($body !== null) {\n",[5251,6185,6186],{"class":5253,"line":3521},[5251,6187,6188],{},"        curl_setopt($ch, CURLOPT_POST, true);\n",[5251,6190,6191],{"class":5253,"line":3792},[5251,6192,6193],{},"        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));\n",[5251,6195,6196],{"class":5253,"line":4104},[5251,6197,6198],{},"        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application\u002Fjson']);\n",[5251,6200,6201],{"class":5253,"line":4380},[5251,6202,6203],{},"    }\n",[5251,6205,6206],{"class":5253,"line":4769},[5251,6207,6208],{},"    $response = curl_exec($ch);\n",[5251,6210,6211],{"class":5253,"line":5149},[5251,6212,6213],{},"    $code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);\n",[5251,6215,6216],{"class":5253,"line":5801},[5251,6217,6218],{},"    curl_close($ch);\n",[5251,6220,6221],{"class":5253,"line":5806},[5251,6222,5598],{"emptyLinePlaceholder":546},[5251,6224,6225],{"class":5253,"line":5811},[5251,6226,6227],{},"    if ($code >= 400) {\n",[5251,6229,6230],{"class":5253,"line":5829},[5251,6231,6232],{},"        throw new RuntimeException(\"FlashCall API вернул $code: $response\");\n",[5251,6234,6235],{"class":5253,"line":5871},[5251,6236,6203],{},[5251,6238,6239],{"class":5253,"line":5887},[5251,6240,6241],{},"    return json_decode($response, true);\n",[5251,6243,6244],{"class":5253,"line":5919},[5251,6245,5517],{},[5251,6247,6248],{"class":5253,"line":5936},[5251,6249,5598],{"emptyLinePlaceholder":546},[5251,6251,6252],{"class":5253,"line":5941},[5251,6253,6254],{},"function createVerification(string $phone): array {\n",[5251,6256,6257],{"class":5253,"line":5946},[5251,6258,6259],{},"    return flashcallRequest(FLASHCALL_API . '\u002Fget-phone', [\n",[5251,6261,6262],{"class":5253,"line":5952},[5251,6263,6264],{},"        'token' => getenv('FLASHCALL_TOKEN'),\n",[5251,6266,6267],{"class":5253,"line":5980},[5251,6268,6269],{},"        'phone' => $phone,\n",[5251,6271,6272],{"class":5253,"line":6005},[5251,6273,6274],{},"    ]);\n",[5251,6276,6277],{"class":5253,"line":6024},[5251,6278,5517],{},[5251,6280,6281],{"class":5253,"line":6042},[5251,6282,5598],{"emptyLinePlaceholder":546},[5251,6284,6285],{"class":5253,"line":6066},[5251,6286,6287],{},"function getStatus(string $id): string {\n",[5251,6289,6290],{"class":5253,"line":6085},[5251,6291,6292],{},"    $query = http_build_query(['token' => getenv('FLASHCALL_TOKEN'), 'id' => $id]);\n",[5251,6294,6295],{"class":5253,"line":6119},[5251,6296,6297],{},"    return flashcallRequest(FLASHCALL_API . '\u002Fstatus?' . $query)['status'];\n",[5251,6299,6300],{"class":5253,"line":6125},[5251,6301,5517],{},[1842,6303,6305],{"id":6304},"python","Python",[4560,6307,6310],{"className":6308,"code":6309,"language":6304,"meta":506,"style":506},"language-python shiki shiki-themes github-light github-dark","import os, time, requests\n\nAPI = \"https:\u002F\u002Fflashcall.ru\u002Fapi\u002Fv1\"\nTOKEN = os.environ[\"FLASHCALL_TOKEN\"]\n\n\ndef create_verification(phone: str) -> tuple[str, str]:\n    r = requests.post(f\"{API}\u002Fget-phone\", json={\"token\": TOKEN, \"phone\": phone}, timeout=10)\n    r.raise_for_status()\n    data = r.json()\n    # второй элемент — номер, на который звонит пользователь\n    return data[\"id\"], data[\"phone\"]\n\n\ndef get_status(check_id: str) -> str:\n    r = requests.get(f\"{API}\u002Fstatus\", params={\"token\": TOKEN, \"id\": check_id}, timeout=10)\n    r.raise_for_status()\n    return r.json()[\"status\"]\n\n\ndef wait_for_call(check_id: str, timeout: float = 60.0) -> bool:\n    deadline = time.monotonic() + timeout\n    while time.monotonic() \u003C deadline:\n        status = get_status(check_id)\n        if status == \"CONFIRMED\":\n            return True\n        if status == \"EXPIRED\":\n            return False\n        time.sleep(2)\n    return False\n",[146,6311,6312,6317,6321,6326,6331,6335,6339,6344,6349,6354,6359,6364,6369,6373,6377,6382,6387,6391,6396,6400,6404,6409,6414,6419,6424,6429,6434,6439,6444,6449],{"__ignoreMap":506},[5251,6313,6314],{"class":5253,"line":547},[5251,6315,6316],{},"import os, time, requests\n",[5251,6318,6319],{"class":5253,"line":507},[5251,6320,5598],{"emptyLinePlaceholder":546},[5251,6322,6323],{"class":5253,"line":1405},[5251,6324,6325],{},"API = \"https:\u002F\u002Fflashcall.ru\u002Fapi\u002Fv1\"\n",[5251,6327,6328],{"class":5253,"line":1778},[5251,6329,6330],{},"TOKEN = os.environ[\"FLASHCALL_TOKEN\"]\n",[5251,6332,6333],{"class":5253,"line":2152},[5251,6334,5598],{"emptyLinePlaceholder":546},[5251,6336,6337],{"class":5253,"line":2518},[5251,6338,5598],{"emptyLinePlaceholder":546},[5251,6340,6341],{"class":5253,"line":2849},[5251,6342,6343],{},"def create_verification(phone: str) -> tuple[str, str]:\n",[5251,6345,6346],{"class":5253,"line":3143},[5251,6347,6348],{},"    r = requests.post(f\"{API}\u002Fget-phone\", json={\"token\": TOKEN, \"phone\": phone}, timeout=10)\n",[5251,6350,6351],{"class":5253,"line":3521},[5251,6352,6353],{},"    r.raise_for_status()\n",[5251,6355,6356],{"class":5253,"line":3792},[5251,6357,6358],{},"    data = r.json()\n",[5251,6360,6361],{"class":5253,"line":4104},[5251,6362,6363],{},"    # второй элемент — номер, на который звонит пользователь\n",[5251,6365,6366],{"class":5253,"line":4380},[5251,6367,6368],{},"    return data[\"id\"], data[\"phone\"]\n",[5251,6370,6371],{"class":5253,"line":4769},[5251,6372,5598],{"emptyLinePlaceholder":546},[5251,6374,6375],{"class":5253,"line":5149},[5251,6376,5598],{"emptyLinePlaceholder":546},[5251,6378,6379],{"class":5253,"line":5801},[5251,6380,6381],{},"def get_status(check_id: str) -> str:\n",[5251,6383,6384],{"class":5253,"line":5806},[5251,6385,6386],{},"    r = requests.get(f\"{API}\u002Fstatus\", params={\"token\": TOKEN, \"id\": check_id}, timeout=10)\n",[5251,6388,6389],{"class":5253,"line":5811},[5251,6390,6353],{},[5251,6392,6393],{"class":5253,"line":5829},[5251,6394,6395],{},"    return r.json()[\"status\"]\n",[5251,6397,6398],{"class":5253,"line":5871},[5251,6399,5598],{"emptyLinePlaceholder":546},[5251,6401,6402],{"class":5253,"line":5887},[5251,6403,5598],{"emptyLinePlaceholder":546},[5251,6405,6406],{"class":5253,"line":5919},[5251,6407,6408],{},"def wait_for_call(check_id: str, timeout: float = 60.0) -> bool:\n",[5251,6410,6411],{"class":5253,"line":5936},[5251,6412,6413],{},"    deadline = time.monotonic() + timeout\n",[5251,6415,6416],{"class":5253,"line":5941},[5251,6417,6418],{},"    while time.monotonic() \u003C deadline:\n",[5251,6420,6421],{"class":5253,"line":5946},[5251,6422,6423],{},"        status = get_status(check_id)\n",[5251,6425,6426],{"class":5253,"line":5952},[5251,6427,6428],{},"        if status == \"CONFIRMED\":\n",[5251,6430,6431],{"class":5253,"line":5980},[5251,6432,6433],{},"            return True\n",[5251,6435,6436],{"class":5253,"line":6005},[5251,6437,6438],{},"        if status == \"EXPIRED\":\n",[5251,6440,6441],{"class":5253,"line":6024},[5251,6442,6443],{},"            return False\n",[5251,6445,6446],{"class":5253,"line":6042},[5251,6447,6448],{},"        time.sleep(2)\n",[5251,6450,6451],{"class":5253,"line":6066},[5251,6452,6453],{},"    return False\n",[18,6455,6457],{"id":6456},"frontend","Фронтенд",[11,6459,6460,6461,6464],{},"Оба примера ходят в ",[141,6462,6463],{},"ваш"," эндпоинт, а не в API напрямую: ключ проекта в браузере размещать нельзя.",[1842,6466,6468],{"id":6467},"vue","Vue",[4560,6470,6473],{"className":6471,"code":6472,"language":6467,"meta":506,"style":506},"language-vue shiki shiki-themes github-light github-dark","\u003Cscript setup>\nimport { ref, onUnmounted } from 'vue'\n\nconst callTo = ref('')\nconst secondsLeft = ref(0)\nconst done = ref(false)\nlet timer = null\n\nasync function start(phone) {\n  const res = await fetch('\u002Fapi\u002Fverification\u002Fstart', {\n    method: 'POST',\n    headers: { 'Content-Type': 'application\u002Fjson' },\n    body: JSON.stringify({ phone }),\n  })\n  const { id, callTo: number } = await res.json()\n\n  callTo.value = number\n  secondsLeft.value = 60\n\n  timer = setInterval(async () => {\n    secondsLeft.value--\n    const { status } = await (await fetch(`\u002Fapi\u002Fverification\u002F${id}`)).json()\n\n    if (status === 'CONFIRMED') {\n      done.value = true\n      stop()\n    } else if (status === 'EXPIRED' || secondsLeft.value \u003C= 0) {\n      stop()\n    }\n  }, 2000)\n}\n\nfunction stop() {\n  clearInterval(timer)\n  timer = null\n}\n\nonUnmounted(stop)\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Ca v-if=\"callTo && !done\" :href=\"`tel:${callTo}`\">Позвонить на {{ callTo }}\u003C\u002Fa>\n  \u003Cp v-if=\"secondsLeft > 0\">Ждём звонок: {{ secondsLeft }} с\u003C\u002Fp>\n\u003C\u002Ftemplate>\n",[146,6474,6475,6489,6503,6507,6526,6544,6562,6575,6579,6595,6614,6622,6634,6647,6651,6680,6684,6694,6704,6708,6730,6738,6774,6778,6790,6799,6806,6837,6843,6847,6856,6860,6864,6875,6883,6892,6897,6902,6911,6921,6926,6936,6967,6988],{"__ignoreMap":506},[5251,6476,6477,6479,6483,6486],{"class":5253,"line":547},[5251,6478,6018],{"class":5304},[5251,6480,6482],{"class":6481},"s9eBZ","script",[5251,6484,6485],{"class":5256}," setup",[5251,6487,6488],{"class":5304},">\n",[5251,6490,6491,6494,6497,6500],{"class":5253,"line":507},[5251,6492,6493],{"class":5568},"import",[5251,6495,6496],{"class":5304}," { ref, onUnmounted } ",[5251,6498,6499],{"class":5568},"from",[5251,6501,6502],{"class":5264}," 'vue'\n",[5251,6504,6505],{"class":5253,"line":1405},[5251,6506,5598],{"emptyLinePlaceholder":546},[5251,6508,6509,6511,6514,6516,6519,6521,6524],{"class":5253,"line":1778},[5251,6510,5569],{"class":5568},[5251,6512,6513],{"class":5260}," callTo",[5251,6515,5575],{"class":5568},[5251,6517,6518],{"class":5256}," ref",[5251,6520,5615],{"class":5304},[5251,6522,6523],{"class":5264},"''",[5251,6525,5746],{"class":5304},[5251,6527,6528,6530,6533,6535,6537,6539,6542],{"class":5253,"line":2152},[5251,6529,5569],{"class":5568},[5251,6531,6532],{"class":5260}," secondsLeft",[5251,6534,5575],{"class":5568},[5251,6536,6518],{"class":5256},[5251,6538,5615],{"class":5304},[5251,6540,6541],{"class":5260},"0",[5251,6543,5746],{"class":5304},[5251,6545,6546,6548,6551,6553,6555,6557,6560],{"class":5253,"line":2518},[5251,6547,5569],{"class":5568},[5251,6549,6550],{"class":5260}," done",[5251,6552,5575],{"class":5568},[5251,6554,6518],{"class":5256},[5251,6556,5615],{"class":5304},[5251,6558,6559],{"class":5260},"false",[5251,6561,5746],{"class":5304},[5251,6563,6564,6567,6570,6572],{"class":5253,"line":2849},[5251,6565,6566],{"class":5568},"let",[5251,6568,6569],{"class":5304}," timer ",[5251,6571,5780],{"class":5568},[5251,6573,6574],{"class":5260}," null\n",[5251,6576,6577],{"class":5253,"line":3143},[5251,6578,5598],{"emptyLinePlaceholder":546},[5251,6580,6581,6584,6586,6589,6591,6593],{"class":5253,"line":3521},[5251,6582,6583],{"class":5568},"async",[5251,6585,5609],{"class":5568},[5251,6587,6588],{"class":5256}," start",[5251,6590,5615],{"class":5304},[5251,6592,5336],{"class":5618},[5251,6594,5621],{"class":5304},[5251,6596,6597,6599,6601,6603,6605,6607,6609,6612],{"class":5253,"line":3792},[5251,6598,5626],{"class":5568},[5251,6600,5629],{"class":5260},[5251,6602,5575],{"class":5568},[5251,6604,5634],{"class":5568},[5251,6606,5637],{"class":5256},[5251,6608,5615],{"class":5304},[5251,6610,6611],{"class":5264},"'\u002Fapi\u002Fverification\u002Fstart'",[5251,6613,5651],{"class":5304},[5251,6615,6616,6618,6620],{"class":5253,"line":4104},[5251,6617,5656],{"class":5304},[5251,6619,5659],{"class":5264},[5251,6621,5466],{"class":5304},[5251,6623,6624,6626,6628,6630,6632],{"class":5253,"line":4380},[5251,6625,5666],{"class":5304},[5251,6627,5669],{"class":5264},[5251,6629,5311],{"class":5304},[5251,6631,5674],{"class":5264},[5251,6633,5677],{"class":5304},[5251,6635,6636,6638,6640,6642,6644],{"class":5253,"line":4769},[5251,6637,5682],{"class":5304},[5251,6639,5685],{"class":5260},[5251,6641,307],{"class":5304},[5251,6643,5690],{"class":5256},[5251,6645,6646],{"class":5304},"({ phone }),\n",[5251,6648,6649],{"class":5253,"line":5149},[5251,6650,5704],{"class":5304},[5251,6652,6653,6655,6657,6659,6661,6663,6665,6668,6670,6672,6674,6676,6678],{"class":5253,"line":5801},[5251,6654,5626],{"class":5568},[5251,6656,5763],{"class":5304},[5251,6658,5332],{"class":5260},[5251,6660,1139],{"class":5304},[5251,6662,5774],{"class":5618},[5251,6664,5311],{"class":5304},[5251,6666,6667],{"class":5260},"number",[5251,6669,5777],{"class":5304},[5251,6671,5780],{"class":5568},[5251,6673,5634],{"class":5568},[5251,6675,5785],{"class":5304},[5251,6677,5297],{"class":5256},[5251,6679,5790],{"class":5304},[5251,6681,6682],{"class":5253,"line":5806},[5251,6683,5598],{"emptyLinePlaceholder":546},[5251,6685,6686,6689,6691],{"class":5253,"line":5811},[5251,6687,6688],{"class":5304},"  callTo.value ",[5251,6690,5780],{"class":5568},[5251,6692,6693],{"class":5304}," number\n",[5251,6695,6696,6699,6701],{"class":5253,"line":5829},[5251,6697,6698],{"class":5304},"  secondsLeft.value ",[5251,6700,5780],{"class":5568},[5251,6702,6703],{"class":5260}," 60\n",[5251,6705,6706],{"class":5253,"line":5871},[5251,6707,5598],{"emptyLinePlaceholder":546},[5251,6709,6710,6713,6715,6718,6720,6722,6725,6727],{"class":5253,"line":5887},[5251,6711,6712],{"class":5304},"  timer ",[5251,6714,5780],{"class":5568},[5251,6716,6717],{"class":5256}," setInterval",[5251,6719,5615],{"class":5304},[5251,6721,6583],{"class":5568},[5251,6723,6724],{"class":5304}," () ",[5251,6726,6104],{"class":5568},[5251,6728,6729],{"class":5304}," {\n",[5251,6731,6732,6735],{"class":5253,"line":5919},[5251,6733,6734],{"class":5304},"    secondsLeft.value",[5251,6736,6737],{"class":5568},"--\n",[5251,6739,6740,6742,6744,6746,6748,6750,6752,6754,6756,6758,6760,6763,6765,6767,6770,6772],{"class":5253,"line":5936},[5251,6741,6027],{"class":5568},[5251,6743,5763],{"class":5304},[5251,6745,5740],{"class":5260},[5251,6747,5777],{"class":5304},[5251,6749,5780],{"class":5568},[5251,6751,5634],{"class":5568},[5251,6753,5712],{"class":5304},[5251,6755,5926],{"class":5568},[5251,6757,5637],{"class":5256},[5251,6759,5615],{"class":5304},[5251,6761,6762],{"class":5264},"`\u002Fapi\u002Fverification\u002F${",[5251,6764,5332],{"class":5304},[5251,6766,5743],{"class":5264},[5251,6768,6769],{"class":5304},")).",[5251,6771,5297],{"class":5256},[5251,6773,5790],{"class":5304},[5251,6775,6776],{"class":5253,"line":5941},[5251,6777,5598],{"emptyLinePlaceholder":546},[5251,6779,6780,6782,6784,6786,6788],{"class":5253,"line":5946},[5251,6781,6045],{"class":5568},[5251,6783,6048],{"class":5304},[5251,6785,6051],{"class":5568},[5251,6787,6054],{"class":5264},[5251,6789,5621],{"class":5304},[5251,6791,6792,6795,6797],{"class":5253,"line":5952},[5251,6793,6794],{"class":5304},"      done.value ",[5251,6796,5780],{"class":5568},[5251,6798,6063],{"class":5260},[5251,6800,6801,6804],{"class":5253,"line":5980},[5251,6802,6803],{"class":5256},"      stop",[5251,6805,5790],{"class":5304},[5251,6807,6808,6811,6814,6817,6819,6821,6823,6826,6829,6832,6835],{"class":5253,"line":6005},[5251,6809,6810],{"class":5304},"    } ",[5251,6812,6813],{"class":5568},"else",[5251,6815,6816],{"class":5568}," if",[5251,6818,6048],{"class":5304},[5251,6820,6051],{"class":5568},[5251,6822,6075],{"class":5264},[5251,6824,6825],{"class":5568}," ||",[5251,6827,6828],{"class":5304}," secondsLeft.value ",[5251,6830,6831],{"class":5568},"\u003C=",[5251,6833,6834],{"class":5260}," 0",[5251,6836,5621],{"class":5304},[5251,6838,6839,6841],{"class":5253,"line":6024},[5251,6840,6803],{"class":5256},[5251,6842,5790],{"class":5304},[5251,6844,6845],{"class":5253,"line":6042},[5251,6846,6203],{"class":5304},[5251,6848,6849,6852,6854],{"class":5253,"line":6066},[5251,6850,6851],{"class":5304},"  }, ",[5251,6853,6113],{"class":5260},[5251,6855,5746],{"class":5304},[5251,6857,6858],{"class":5253,"line":6085},[5251,6859,5517],{"class":5304},[5251,6861,6862],{"class":5253,"line":6119},[5251,6863,5598],{"emptyLinePlaceholder":546},[5251,6865,6866,6869,6872],{"class":5253,"line":6125},[5251,6867,6868],{"class":5568},"function",[5251,6870,6871],{"class":5256}," stop",[5251,6873,6874],{"class":5304},"() {\n",[5251,6876,6877,6880],{"class":5253,"line":6132},[5251,6878,6879],{"class":5256},"  clearInterval",[5251,6881,6882],{"class":5304},"(timer)\n",[5251,6884,6886,6888,6890],{"class":5253,"line":6885},35,[5251,6887,6712],{"class":5304},[5251,6889,5780],{"class":5568},[5251,6891,6574],{"class":5260},[5251,6893,6895],{"class":5253,"line":6894},36,[5251,6896,5517],{"class":5304},[5251,6898,6900],{"class":5253,"line":6899},37,[5251,6901,5598],{"emptyLinePlaceholder":546},[5251,6903,6905,6908],{"class":5253,"line":6904},38,[5251,6906,6907],{"class":5256},"onUnmounted",[5251,6909,6910],{"class":5304},"(stop)\n",[5251,6912,6914,6917,6919],{"class":5253,"line":6913},39,[5251,6915,6916],{"class":5304},"\u003C\u002F",[5251,6918,6482],{"class":6481},[5251,6920,6488],{"class":5304},[5251,6922,6924],{"class":5253,"line":6923},40,[5251,6925,5598],{"emptyLinePlaceholder":546},[5251,6927,6929,6931,6934],{"class":5253,"line":6928},41,[5251,6930,6018],{"class":5304},[5251,6932,6933],{"class":6481},"template",[5251,6935,6488],{"class":5304},[5251,6937,6939,6942,6944,6947,6949,6952,6955,6957,6960,6963,6965],{"class":5253,"line":6938},42,[5251,6940,6941],{"class":5304},"  \u003C",[5251,6943,303],{"class":6481},[5251,6945,6946],{"class":5256}," v-if",[5251,6948,5780],{"class":5304},[5251,6950,6951],{"class":5264},"\"callTo && !done\"",[5251,6953,6954],{"class":5256}," :href",[5251,6956,5780],{"class":5304},[5251,6958,6959],{"class":5264},"\"`tel:${callTo}`\"",[5251,6961,6962],{"class":5304},">Позвонить на {{ callTo }}\u003C\u002F",[5251,6964,303],{"class":6481},[5251,6966,6488],{"class":5304},[5251,6968,6970,6972,6974,6976,6978,6981,6984,6986],{"class":5253,"line":6969},43,[5251,6971,6941],{"class":5304},[5251,6973,11],{"class":6481},[5251,6975,6946],{"class":5256},[5251,6977,5780],{"class":5304},[5251,6979,6980],{"class":5264},"\"secondsLeft > 0\"",[5251,6982,6983],{"class":5304},">Ждём звонок: {{ secondsLeft }} с\u003C\u002F",[5251,6985,11],{"class":6481},[5251,6987,6488],{"class":5304},[5251,6989,6991,6993,6995],{"class":5253,"line":6990},44,[5251,6992,6916],{"class":5304},[5251,6994,6933],{"class":6481},[5251,6996,6488],{"class":5304},[1842,6998,7000],{"id":6999},"react","React",[4560,7002,7006],{"className":7003,"code":7004,"language":7005,"meta":506,"style":506},"language-jsx shiki shiki-themes github-light github-dark","import { useEffect, useRef, useState } from 'react'\n\nexport function CallVerification({ phone, onConfirmed }) {\n  const [callTo, setCallTo] = useState('')\n  const [secondsLeft, setSecondsLeft] = useState(0)\n  const idRef = useRef(null)\n\n  useEffect(() => {\n    let cancelled = false\n\n    async function start() {\n      const res = await fetch('\u002Fapi\u002Fverification\u002Fstart', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application\u002Fjson' },\n        body: JSON.stringify({ phone }),\n      })\n      const data = await res.json()\n      if (cancelled) return\n\n      idRef.current = data.id\n      setCallTo(data.callTo)\n      setSecondsLeft(60)\n    }\n\n    start()\n    return () => { cancelled = true }\n  }, [phone])\n\n  useEffect(() => {\n    if (!idRef.current || secondsLeft \u003C= 0) return\n\n    const timer = setTimeout(async () => {\n      const { status } = await (await fetch(`\u002Fapi\u002Fverification\u002F${idRef.current}`)).json()\n      if (status === 'CONFIRMED') onConfirmed()\n      else setSecondsLeft((s) => s - 2)\n    }, 2000)\n\n    return () => clearTimeout(timer)\n  }, [secondsLeft, onConfirmed])\n\n  if (!callTo) return null\n  return (\n    \u003C>\n      \u003Ca href={`tel:${callTo}`}>Позвонить на {callTo}\u003C\u002Fa>\n      {secondsLeft > 0 && \u003Cp>Ждём звонок: {secondsLeft} с\u003C\u002Fp>}\n    \u003C\u002F>\n  )\n}\n","jsx",[146,7007,7008,7020,7024,7046,7074,7100,7119,7123,7135,7147,7151,7162,7181,7190,7203,7216,7221,7238,7249,7253,7263,7271,7283,7287,7291,7298,7317,7322,7326,7336,7361,7365,7386,7426,7442,7470,7479,7483,7496,7501,7505,7520,7527,7532,7561,7588,7594,7600],{"__ignoreMap":506},[5251,7009,7010,7012,7015,7017],{"class":5253,"line":547},[5251,7011,6493],{"class":5568},[5251,7013,7014],{"class":5304}," { useEffect, useRef, useState } ",[5251,7016,6499],{"class":5568},[5251,7018,7019],{"class":5264}," 'react'\n",[5251,7021,7022],{"class":5253,"line":507},[5251,7023,5598],{"emptyLinePlaceholder":546},[5251,7025,7026,7028,7030,7033,7036,7038,7040,7043],{"class":5253,"line":1405},[5251,7027,5603],{"class":5568},[5251,7029,5609],{"class":5568},[5251,7031,7032],{"class":5256}," CallVerification",[5251,7034,7035],{"class":5304},"({ ",[5251,7037,5336],{"class":5618},[5251,7039,1139],{"class":5304},[5251,7041,7042],{"class":5618},"onConfirmed",[5251,7044,7045],{"class":5304}," }) {\n",[5251,7047,7048,7050,7053,7055,7057,7060,7063,7065,7068,7070,7072],{"class":5253,"line":1778},[5251,7049,5626],{"class":5568},[5251,7051,7052],{"class":5304}," [",[5251,7054,5774],{"class":5260},[5251,7056,1139],{"class":5304},[5251,7058,7059],{"class":5260},"setCallTo",[5251,7061,7062],{"class":5304},"] ",[5251,7064,5780],{"class":5568},[5251,7066,7067],{"class":5256}," useState",[5251,7069,5615],{"class":5304},[5251,7071,6523],{"class":5264},[5251,7073,5746],{"class":5304},[5251,7075,7076,7078,7080,7083,7085,7088,7090,7092,7094,7096,7098],{"class":5253,"line":2152},[5251,7077,5626],{"class":5568},[5251,7079,7052],{"class":5304},[5251,7081,7082],{"class":5260},"secondsLeft",[5251,7084,1139],{"class":5304},[5251,7086,7087],{"class":5260},"setSecondsLeft",[5251,7089,7062],{"class":5304},[5251,7091,5780],{"class":5568},[5251,7093,7067],{"class":5256},[5251,7095,5615],{"class":5304},[5251,7097,6541],{"class":5260},[5251,7099,5746],{"class":5304},[5251,7101,7102,7104,7107,7109,7112,7114,7117],{"class":5253,"line":2518},[5251,7103,5626],{"class":5568},[5251,7105,7106],{"class":5260}," idRef",[5251,7108,5575],{"class":5568},[5251,7110,7111],{"class":5256}," useRef",[5251,7113,5615],{"class":5304},[5251,7115,7116],{"class":5260},"null",[5251,7118,5746],{"class":5304},[5251,7120,7121],{"class":5253,"line":2849},[5251,7122,5598],{"emptyLinePlaceholder":546},[5251,7124,7125,7128,7131,7133],{"class":5253,"line":3143},[5251,7126,7127],{"class":5256},"  useEffect",[5251,7129,7130],{"class":5304},"(() ",[5251,7132,6104],{"class":5568},[5251,7134,6729],{"class":5304},[5251,7136,7137,7140,7143,7145],{"class":5253,"line":3521},[5251,7138,7139],{"class":5568},"    let",[5251,7141,7142],{"class":5304}," cancelled ",[5251,7144,5780],{"class":5568},[5251,7146,6082],{"class":5260},[5251,7148,7149],{"class":5253,"line":3792},[5251,7150,5598],{"emptyLinePlaceholder":546},[5251,7152,7153,7156,7158,7160],{"class":5253,"line":4104},[5251,7154,7155],{"class":5568},"    async",[5251,7157,5609],{"class":5568},[5251,7159,6588],{"class":5256},[5251,7161,6874],{"class":5304},[5251,7163,7164,7167,7169,7171,7173,7175,7177,7179],{"class":5253,"line":4380},[5251,7165,7166],{"class":5568},"      const",[5251,7168,5629],{"class":5260},[5251,7170,5575],{"class":5568},[5251,7172,5634],{"class":5568},[5251,7174,5637],{"class":5256},[5251,7176,5615],{"class":5304},[5251,7178,6611],{"class":5264},[5251,7180,5651],{"class":5304},[5251,7182,7183,7186,7188],{"class":5253,"line":4769},[5251,7184,7185],{"class":5304},"        method: ",[5251,7187,5659],{"class":5264},[5251,7189,5466],{"class":5304},[5251,7191,7192,7195,7197,7199,7201],{"class":5253,"line":5149},[5251,7193,7194],{"class":5304},"        headers: { ",[5251,7196,5669],{"class":5264},[5251,7198,5311],{"class":5304},[5251,7200,5674],{"class":5264},[5251,7202,5677],{"class":5304},[5251,7204,7205,7208,7210,7212,7214],{"class":5253,"line":5801},[5251,7206,7207],{"class":5304},"        body: ",[5251,7209,5685],{"class":5260},[5251,7211,307],{"class":5304},[5251,7213,5690],{"class":5256},[5251,7215,6646],{"class":5304},[5251,7217,7218],{"class":5253,"line":5806},[5251,7219,7220],{"class":5304},"      })\n",[5251,7222,7223,7225,7228,7230,7232,7234,7236],{"class":5253,"line":5811},[5251,7224,7166],{"class":5568},[5251,7226,7227],{"class":5260}," data",[5251,7229,5575],{"class":5568},[5251,7231,5634],{"class":5568},[5251,7233,5785],{"class":5304},[5251,7235,5297],{"class":5256},[5251,7237,5790],{"class":5304},[5251,7239,7240,7243,7246],{"class":5253,"line":5829},[5251,7241,7242],{"class":5568},"      if",[5251,7244,7245],{"class":5304}," (cancelled) ",[5251,7247,7248],{"class":5568},"return\n",[5251,7250,7251],{"class":5253,"line":5871},[5251,7252,5598],{"emptyLinePlaceholder":546},[5251,7254,7255,7258,7260],{"class":5253,"line":5887},[5251,7256,7257],{"class":5304},"      idRef.current ",[5251,7259,5780],{"class":5568},[5251,7261,7262],{"class":5304}," data.id\n",[5251,7264,7265,7268],{"class":5253,"line":5919},[5251,7266,7267],{"class":5256},"      setCallTo",[5251,7269,7270],{"class":5304},"(data.callTo)\n",[5251,7272,7273,7276,7278,7281],{"class":5253,"line":5936},[5251,7274,7275],{"class":5256},"      setSecondsLeft",[5251,7277,5615],{"class":5304},[5251,7279,7280],{"class":5260},"60",[5251,7282,5746],{"class":5304},[5251,7284,7285],{"class":5253,"line":5941},[5251,7286,6203],{"class":5304},[5251,7288,7289],{"class":5253,"line":5946},[5251,7290,5598],{"emptyLinePlaceholder":546},[5251,7292,7293,7296],{"class":5253,"line":5952},[5251,7294,7295],{"class":5256},"    start",[5251,7297,5790],{"class":5304},[5251,7299,7300,7303,7305,7307,7310,7312,7315],{"class":5253,"line":5980},[5251,7301,7302],{"class":5568},"    return",[5251,7304,6724],{"class":5304},[5251,7306,6104],{"class":5568},[5251,7308,7309],{"class":5304}," { cancelled ",[5251,7311,5780],{"class":5568},[5251,7313,7314],{"class":5260}," true",[5251,7316,5327],{"class":5304},[5251,7318,7319],{"class":5253,"line":6005},[5251,7320,7321],{"class":5304},"  }, [phone])\n",[5251,7323,7324],{"class":5253,"line":6024},[5251,7325,5598],{"emptyLinePlaceholder":546},[5251,7327,7328,7330,7332,7334],{"class":5253,"line":6042},[5251,7329,7127],{"class":5256},[5251,7331,7130],{"class":5304},[5251,7333,6104],{"class":5568},[5251,7335,6729],{"class":5304},[5251,7337,7338,7340,7342,7344,7347,7350,7353,7355,7357,7359],{"class":5253,"line":6066},[5251,7339,6045],{"class":5568},[5251,7341,5712],{"class":5304},[5251,7343,5715],{"class":5568},[5251,7345,7346],{"class":5304},"idRef.current ",[5251,7348,7349],{"class":5568},"||",[5251,7351,7352],{"class":5304}," secondsLeft ",[5251,7354,6831],{"class":5568},[5251,7356,6834],{"class":5260},[5251,7358,6057],{"class":5304},[5251,7360,7248],{"class":5568},[5251,7362,7363],{"class":5253,"line":6085},[5251,7364,5598],{"emptyLinePlaceholder":546},[5251,7366,7367,7369,7372,7374,7376,7378,7380,7382,7384],{"class":5253,"line":6119},[5251,7368,6027],{"class":5568},[5251,7370,7371],{"class":5260}," timer",[5251,7373,5575],{"class":5568},[5251,7375,6107],{"class":5256},[5251,7377,5615],{"class":5304},[5251,7379,6583],{"class":5568},[5251,7381,6724],{"class":5304},[5251,7383,6104],{"class":5568},[5251,7385,6729],{"class":5304},[5251,7387,7388,7390,7392,7394,7396,7398,7400,7402,7404,7406,7408,7410,7413,7415,7418,7420,7422,7424],{"class":5253,"line":6125},[5251,7389,7166],{"class":5568},[5251,7391,5763],{"class":5304},[5251,7393,5740],{"class":5260},[5251,7395,5777],{"class":5304},[5251,7397,5780],{"class":5568},[5251,7399,5634],{"class":5568},[5251,7401,5712],{"class":5304},[5251,7403,5926],{"class":5568},[5251,7405,5637],{"class":5256},[5251,7407,5615],{"class":5304},[5251,7409,6762],{"class":5264},[5251,7411,7412],{"class":5304},"idRef",[5251,7414,307],{"class":5264},[5251,7416,7417],{"class":5304},"current",[5251,7419,5743],{"class":5264},[5251,7421,6769],{"class":5304},[5251,7423,5297],{"class":5256},[5251,7425,5790],{"class":5304},[5251,7427,7428,7430,7432,7434,7436,7438,7440],{"class":5253,"line":6132},[5251,7429,7242],{"class":5568},[5251,7431,6048],{"class":5304},[5251,7433,6051],{"class":5568},[5251,7435,6054],{"class":5264},[5251,7437,6057],{"class":5304},[5251,7439,7042],{"class":5256},[5251,7441,5790],{"class":5304},[5251,7443,7444,7447,7450,7452,7455,7457,7459,7462,7465,7468],{"class":5253,"line":6885},[5251,7445,7446],{"class":5568},"      else",[5251,7448,7449],{"class":5256}," setSecondsLeft",[5251,7451,6096],{"class":5304},[5251,7453,7454],{"class":5618},"s",[5251,7456,6057],{"class":5304},[5251,7458,6104],{"class":5568},[5251,7460,7461],{"class":5304}," s ",[5251,7463,7464],{"class":5568},"-",[5251,7466,7467],{"class":5260}," 2",[5251,7469,5746],{"class":5304},[5251,7471,7472,7475,7477],{"class":5253,"line":6894},[5251,7473,7474],{"class":5304},"    }, ",[5251,7476,6113],{"class":5260},[5251,7478,5746],{"class":5304},[5251,7480,7481],{"class":5253,"line":6899},[5251,7482,5598],{"emptyLinePlaceholder":546},[5251,7484,7485,7487,7489,7491,7494],{"class":5253,"line":6904},[5251,7486,7302],{"class":5568},[5251,7488,6724],{"class":5304},[5251,7490,6104],{"class":5568},[5251,7492,7493],{"class":5256}," clearTimeout",[5251,7495,6882],{"class":5304},[5251,7497,7498],{"class":5253,"line":6913},[5251,7499,7500],{"class":5304},"  }, [secondsLeft, onConfirmed])\n",[5251,7502,7503],{"class":5253,"line":6923},[5251,7504,5598],{"emptyLinePlaceholder":546},[5251,7506,7507,7509,7511,7513,7516,7518],{"class":5253,"line":6928},[5251,7508,5709],{"class":5568},[5251,7510,5712],{"class":5304},[5251,7512,5715],{"class":5568},[5251,7514,7515],{"class":5304},"callTo) ",[5251,7517,6060],{"class":5568},[5251,7519,6574],{"class":5260},[5251,7521,7522,7524],{"class":5253,"line":6938},[5251,7523,5795],{"class":5568},[5251,7525,7526],{"class":5304}," (\n",[5251,7528,7529],{"class":5253,"line":6969},[5251,7530,7531],{"class":5304},"    \u003C>\n",[5251,7533,7534,7537,7539,7542,7544,7547,7550,7552,7554,7557,7559],{"class":5253,"line":6990},[5251,7535,7536],{"class":5304},"      \u003C",[5251,7538,303],{"class":6481},[5251,7540,7541],{"class":5256}," href",[5251,7543,5780],{"class":5568},[5251,7545,7546],{"class":5304},"{",[5251,7548,7549],{"class":5264},"`tel:${",[5251,7551,5774],{"class":5304},[5251,7553,5743],{"class":5264},[5251,7555,7556],{"class":5304},"}>Позвонить на {callTo}\u003C\u002F",[5251,7558,303],{"class":6481},[5251,7560,6488],{"class":5304},[5251,7562,7564,7567,7570,7572,7575,7578,7580,7583,7585],{"class":5253,"line":7563},45,[5251,7565,7566],{"class":5304},"      {secondsLeft ",[5251,7568,7569],{"class":5568},">",[5251,7571,6834],{"class":5260},[5251,7573,7574],{"class":5568}," &&",[5251,7576,7577],{"class":5304}," \u003C",[5251,7579,11],{"class":6481},[5251,7581,7582],{"class":5304},">Ждём звонок: {secondsLeft} с\u003C\u002F",[5251,7584,11],{"class":6481},[5251,7586,7587],{"class":5304},">}\n",[5251,7589,7591],{"class":5253,"line":7590},46,[5251,7592,7593],{"class":5304},"    \u003C\u002F>\n",[5251,7595,7597],{"class":5253,"line":7596},47,[5251,7598,7599],{"class":5304},"  )\n",[5251,7601,7603],{"class":5253,"line":7602},48,[5251,7604,5517],{"class":5304},[18,7606,7608],{"id":7607},"tipichnye-oshibki-pri-integracii","Типичные ошибки при интеграции",[424,7610,7611,7619,7625,7631,7637,7643,7649,7655],{},[138,7612,7613,7618],{},[141,7614,7615,7616,307],{},"Не обрабатывают ",[146,7617,182],{}," Пользователь видит вечный спиннер вместо кнопки «Позвонить ещё раз». Самая частая ошибка.",[138,7620,7621,7624],{},[141,7622,7623],{},"Держат ключ во фронтенде."," Ключ забирают из исходников страницы и тратят ваш баланс.",[138,7626,7627,7630],{},[141,7628,7629],{},"Опрашивают статус слишком часто."," Десять запросов в секунду ничего не ускоряют.",[138,7632,7633,7636],{},[141,7634,7635],{},"Не останавливают опрос."," Без условия по таймеру цикл продолжается после ухода пользователя со страницы.",[138,7638,7639,7642],{},[141,7640,7641],{},"Не проверяют баланс."," При нулевом балансе проверка не создастся, и форма перестанет работать молча.",[138,7644,7645,7648],{},[141,7646,7647],{},"Не ограничивают частоту на своём эндпоинте."," Создание проверок стоит денег — лимит на попытки обязателен.",[138,7650,7651,7654],{},[141,7652,7653],{},"Не приводят номер к E.164."," Номер с восьмёркой, скобками и дефисами не пройдёт валидацию.",[138,7656,7657,7660],{},[141,7658,7659],{},"Забывают предупредить, что звонить надо с подтверждаемого номера."," Звонок с рабочего телефона не подтвердится, а причина будет неочевидна.",[18,7662,7664],{"id":7663},"skolko-eto-zanimaet","Сколько это занимает",[32,7666,7668],{"className":7667},[35],[37,7669,7670,7680],{},[40,7671,7672],{},[43,7673,7674,7677],{},[46,7675,7676],{},"Шаг",[46,7678,7679],{},"Время",[55,7681,7682,7690,7698,7707,7714],{},[43,7683,7684,7687],{},[60,7685,7686],{},"Регистрация, проект, ключ",[60,7688,7689],{},"5 минут",[43,7691,7692,7695],{},[60,7693,7694],{},"Два эндпоинта на бэкенде",[60,7696,7697],{},"1–2 часа",[43,7699,7700,7705],{},[60,7701,7702,7703],{},"Экран ожидания с таймером и ",[146,7704,158],{},[60,7706,7697],{},[43,7708,7709,7712],{},[60,7710,7711],{},"Обработка граничных случаев и лимиты",[60,7713,7697],{},[43,7715,7716,7719],{},[60,7717,7718],{},"Тестирование на реальных номерах",[60,7720,7721],{},"1 час",[11,7723,7724],{},"Итого рабочий день на разработчика. Дольше обычно идёт не техническая часть, а согласование интерфейса и сравнение воронок.",[11,7726,7727,7728,504],{},"Актуальные цены — на странице ",[303,7729,410],{"href":409},[7731,7732,7733],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":506,"searchDepth":507,"depth":507,"links":7735},[7736,7737,7738,7739,7740,7745,7749,7750],{"id":5165,"depth":507,"text":5166},{"id":5241,"depth":507,"text":5242},{"id":5408,"depth":507,"text":5409},{"id":5431,"depth":507,"text":5432},{"id":5551,"depth":507,"text":5552,"children":7741},[7742,7743,7744],{"id":5555,"depth":1405,"text":5556},{"id":6137,"depth":1405,"text":6138},{"id":6304,"depth":1405,"text":6305},{"id":6456,"depth":507,"text":6457,"children":7746},[7747,7748],{"id":6467,"depth":1405,"text":6468},{"id":6999,"depth":1405,"text":7000},{"id":7607,"depth":507,"text":7608},{"id":7663,"depth":507,"text":7664},{"title":7752,"text":7753,"label":7754,"href":521},"Получите ключ и попробуйте","Проект и ключ создаются сразу после регистрации. Инструкция с вашим ключом открывается в кабинете.","Получить API-ключ","Как интегрировать подтверждение номера через REST API: создание проверки, опрос статуса, обработка ошибок и примеры на Node.js, PHP, Python, Vue и React.",[7757,7760,7763,7766,7769],{"q":7758,"a":7759},"Есть ли вебхуки?","Нет. Результат забирается опросом `GET \u002Fstatus`. Это упрощает интеграцию:\nне нужен публично доступный обработчик, проверка подписи и защита\nот повторной доставки. Если вебхуки появятся, опрос продолжит работать.\n",{"q":7761,"a":7762},"Можно ли вызывать API прямо из браузера?","Нет. Запрос содержит ключ проекта, а всё, что попало во фронтенд, доступно\nпользователю. Оба запроса должны идти с вашего сервера, а браузер общается\nс вашим собственным эндпоинтом.\n",{"q":7764,"a":7765},"Сколько живёт проверка?","60 секунд с момента создания. После этого она переходит в `EXPIRED`,\nи звонок, поступивший позже, к ней уже не привяжется. Создавайте новую\nпроверку вместо продления старой.\n",{"q":7767,"a":7768},"Что вернётся, если на балансе нет денег?","Создание проверки завершится ошибкой о недостатке средств — проверка\nне будет создана. Уже существующие проверки при этом дорабатывают штатно.\n",{"q":7770,"a":7771},"Нужен ли SDK?","Нет. Это обычный REST с JSON: два запроса, которые делаются штатным\nHTTP-клиентом любого языка. Отдельной библиотеки не требуется.\n","API подтверждения номера телефона: интеграция за час",{},[2521,2851,552],{"title":5157,"description":7755},"blog\u002Fapi-podtverzhdeniya-nomera","Интеграция состоит из двух запросов: создать проверку и узнать её статус. Первый\nвозвращает выделенный номер, который нужно показать пользователю, второй — одно из трёх\nсостояний: `PENDING`, `CONFIRMED` или `EXPIRED`. Вебхуков нет, результат забирается\nопросом — поэтому не нужен публичный обработчик, проверка подписи и защита от повторных\nдоставок. Ключ проекта используется только с сервера.\n","FCFlMRQUYKfE8axfA1BS8q2zx_WEzpDY3DgBePLh8Ho",1787687889901]