SMS vs. Confirmator
SMS vs. Confirmator

Одна шестизначная цифровая последовательность. Пятьдесят рублей. Шах и мат.

Давайте сыграем в игру. Я говорю вам услугу, вы угадываете цену.

Услуга: передать по воздуху 140 байт. Не видео в 4K, не архив с исходниками, а строчку «Ваш код: 482913». Себестоимость для оператора - величина, которую аналитики скромно округляют до нуля: сигнальный трафик сети SS7, который и так бежит по оборудованию, уже купленному на ваши абонентские деньги.

Ваш ответ? Копейки? Рубль?

До 45 рублей. Это не фантастика и не опечатка. Это реальный счёт, который небольшой растущий стартап может получить от «Мегафона» за авторизационные SMS при малых объёмах - и я говорю это не по наслышке, а по личному опыту. Сорок пять рублей. За шесть цифр. За одного пользователя. Который, возможно, удалит ваше приложение через двадцать минут.

А теперь представьте, что у вас не двадцать пользователей, а десять тысяч новых в месяц. Откройте калькулятор - дальше будет больно…

Кейс: Papaplant, или анатомия ограбления в реальном времени

Познакомьтесь: DachaGroup и их приложение Papaplant - мобильный сканер растений. Сфотографировал фикус - узнал, почему он грустный. Приложение свежее, аудитория растёт, как алоэ на подоконнике у бабушки: порядка 10 000 новых пользователей в месяц. Каждого нужно зарегистрировать. Каждому - отправить код. А части пользователей - не один раз: переустановил приложение, сменил телефон, вышел из аккаунта, потерялся код в просторах сети.

Теперь арифметика, которую венчурные пособия почему-то обходят стороной:

  • 10 000 регистраций + 10% повторных подтверждений = ~11 000 SMS в месяц.

  • По «потолку» в 45 ₽: до 495 000 ₽ в месяц. Почти 6 млн ₽ в год. Это зарплата двух сеньор-разработчиков. За SMS-коды.

  • По «нормальной» агрегаторской цене в 8 ₽: 88 000 ₽/мес, больше миллиона в год. Уже терпимо, но всё ещё - один хороший сотрудник, работающий исключительно на «Ваш код: 482913».

Стартап, у которого ещё толком нет выручки, платит оператору дань просто за то, что его пользователи хотят войти в приложение. Это не бизнес-модель. Это погонная плата за право существовать.

Хроника обновления тарифов: как это было

Не верите в «до 45 рублей»? Пройдёмся по хронике - с ссылками, чтобы вы могли проверить и возмутиться самостоятельно.

2024 год, прелюдия. По данным Frank RG, средние затраты банков на одно SMS клиенту за год выросли на 23–26% - до ~2,4 ₽, при инфляции 9,5% (Finance Mail.ru, Frank Media). Банки - это киты с миллиардными объёмами и персональными менеджерами. Если им поднимают цены на четверть, представьте, что делают с мелкими.

1 марта 2025, синхронное чудо. МТС, Билайн, Ростелеком и Сбербанк-Телеком повысили цены на авторизационные и сервисные SMS - в один день (хроника агрегатора SMSimple). У МТС авторизационное SMS стало стоить 3,14 ₽, у Билайна сервисное - 3,43 ₽. Совпадение? Не думаю… У всех четырёх одновременно подорожали… электроны, видимо.

Осень 2025, изобретение пакетного ада. Операторы перешли к пакетной тарификации «на уникального абонента в месяц» (AdIndex, 13.11.2025):

  • МегаФон с 1 ноября 2025: пакет из 1–5 транзакционных SMS одному абоненту - 45 ₽. То есть одно-единственное сообщение фактически стоит сорок пять рублей, если абоненту больше ничего не нужно.

  • Билайн с 1 октября 2025: первое транзакционное сообщение абоненту в месяц обходится в 9,6 ₽ в пакетной сетке (официальный комментарий: «от 4,75 ₽ без НДС» - верим, конечно).

  • МТС с сентября 2025: 1 000 ₽ в месяц за каждый зарегистрированный шаблон SMS. Не за сообщения. За текст сообщения. Десять шаблонов - десять тысяч фиксом, даже если вы не отправили ни байта.

  • Оценка источников AdIndex: средняя стоимость SMS для клиентов выросла в 2–3 раза.

1 марта 2026, апофеоз. МТС упразднила категорию «авторизационные» и ввела новые пакеты (i-Digital, 03.03.2026): 1–5 сообщений абоненту в месяц - 9,50 ₽, 6–20 - 46 ₽, 21+ - 64 ₽. Читайте ещё раз: шестое сообщение одному и тому же человеку скачком удорожает весь пакет почти в пять раз. Пользователь пять раз не получил код из-за задержки сети - а платите вы, и по нарастающей. Гениально. Налог на собственную ненадёжность.

По данным IntellectDialog и обзоров на vc.ru, первое транзакционное SMS абоненту МТС в месяц в пиковой комплектации доходит до 66 ₽ с НДС (IntellectDialog, vc.ru).

Шестьдесят шесть рублей, Карл! За «Ваш код: 482913».

Лучший анекдот года рассказал Telegram

В 2023 году выяснилось, что российские операторы выставили Telegram цену до $0,25 за одно SMS с кодом - в 10 раз дороже, чем в Западной Европе, и в 30 раз дороже, чем в США (Хабр, 22.03.2023). Telegram ответил просто: перевёл доставку кодов на email. Ушёл. Хлопнул дверью.

Это, между прочим, единственно верная реакция на ценообразование «потому, что можем». Но у Telegram миллиард пользователей и собственный мессенджер. А у вашего стартапа - двенадцать энтузиастов, надежда и счёт в банке, который тает на SMS-кодах.

«Но ведь есть агрегаторы!» Есть. Смотрим.

Хорошо, скажете вы, не ходи к оператору напрямую - иди через агрегатора. Пошли, посмотрели, записали (цены с официальных страниц тарифов, проверены на начало сентября 2026):

Сервис

Цена за SMS

Условия и подводные камни

Источник

SMS.RU

от 8,36–8,50 ₽ (первое SMS абоненту в месяце, дальше дороже)

Пакетная тарификация как у операторов; абонплата за имя отправителя 2 080–3 000 ₽/мес; шаблоны 1 100–2 000 ₽/мес за штуку

sms.ru/price

P1SMS

2,92 ₽ (цифровое имя, доходит ~60%); общее имя: МТС 12,30 ₽, Билайн 12,50 ₽, МегаФон 10,83 ₽

«Без наценок» - только от 50 000 SMS/мес; МТС берёт +1 000 ₽/мес за шаблон

p1sms.ru

iqSMS

от 2,79–3,25 ₽

Минимальный платёж10 000 ₽; цена «от», точную назовёт менеджер

iqsms.ru

TargetSMS

6,92–9,73 ₽ по операторам (МегаФон и Билайн - пакетная сетка в кабинете)

Без минимального платежа, это плюс; но за имя отправителя 1 500–3 000 ₽/мес

targetsms.ru

ePochta SMS

1,90–2,99 ₽ (прямое подключение)

Претензии по недоставке принимают только на прямых подключениях

epochtasms.ru

SMSint

от 2,38 ₽ (со случайного номера)

От буквенной подписи - сервисный сбор + «внутрисетевая стоимость оператора»

smsint.ru

SMSC

~7,5–7,7 ₽ за SMS в пакетах

Зато у них отличнаялента новостей - сплошная хроника повышений операторов

smsc.ru

SMSDirector

2,69 ₽ единый по РФ; детальный 1,29–2,79 ₽ по операторам

Прайс датирован 01.12.2020 - написан до трёх волн повышений 2024–2026, актуальную цену уточняйте у менеджера

smsdirector.ru/price

Twilio (для сравнения)

$0,7522 за сегмент (~70 ₽) по России

Глобальный игрок делает то же самое, только дороже; новым аккаунтам из РФ с 2022 - несладко

twilio.com

Два вывода из таблицы.

Первый: агрегаторы - не спасение, а комфортная каюта на том же корабле. Они живут на наценке к операторским тарифам, и каждое операторское повышение послушно перепечатывают в свои прайсы (агрегатор TargetSMS даже написал оправдательную статью «Повышения цен являются экономически обоснованными» - спасибо, ребята, очень убедительно, особенно с вашей наценкой сверху). Отдельного упоминания заслуживает SMSDirector: у них есть публичный прайс с честными 2,69 ₽ за SMS - вот только датирован он декабрём 2020 года, до всех волн повышений. Это уже не прайс-лист, а исторический документ ушедшей эпохи.

Второй, и он гораздо важнее: обратите внимание на мелкий шрифт. Платите вы за отправленные, а не за доставленные сообщения. SMS.RU прямо пишет: «платите только за отправленные SMS». Не дошло - ваша проблема. Пользователь не получил код, ушёл к конкуренту, а стоимость SMS списана. Это как платить таксисту за попытку доехать.

Ах да, доставляемость. Маркетинговые буклеты обещают «открываемость 98%», но в реальности авторизационные SMS теряются, задерживаются на минуты и тонут в антиспам-фильтрах, что даже горячие сторонники признают: «даже 95% доставляемости - мало для входа в аккаунт». Пять процентов ваших новых пользователей просто не войдут. А вы за это заплатили.

А что в лагере мессенджеров? Спойлер: там другая физика

Вся дороговизна SMS держится на одной вещи: интерконнекте. Оператор владеет «последней милей» до SIM-карты и берёт ренту за доступ. Мессенджеры этой ренты лишены - сообщение идёт через интернет, который пользователь и так оплатил. Поэтому экономика там другая:

Канал

Цена за подтверждение

Нюансы

Источник

Telegram Gateway

$0,01 (~1 ₽) за доставленный код

Оплата только в крипте TON; код приходит в служебный чат; только авторизационные тексты; работает, но зависит от одного мессенджера

gateway.telegram.org, Hi-Tech Mail.ru

WhatsApp (authentication-шаблоны Meta)

~$0,052–0,056 (≈5 ₽) за доставленное + подписка BSP

Россия - в верхней части ценовой сетки Meta; провайдеры берут от 5 000–6 000 ₽/мес за канал и до 20 000 ₽ за настройку; у i-Digital авторизационное - 7,11 ₽ с НДС

i-dgtl.ru, 360dialog, Wazzup

Flash Call (звонок, код = последние цифры)

0,20–1,98 ₽

Дёшево, но операторымассово блокируют Flash Call-пулы, вычисляя их по длительности звонка; zvonok.com честно предупреждает о нестабильности

flashcall.ru, redsms.ru

Viber (сервисные)

~0,92 ₽ +30 500 ₽/мес за бизнес-аккаунт

Абонплата съедает всю экономию при малых объёмах

i-dgtl.ru

VK ID

бесплатно

Но это OAuth-кнопка «Войти через VK», а не подтверждение номера; и аудитория ограничена экосистемой VK

id.vk.com

SMS у оператора/агрегатора

2–45 ₽, платите за отправку

См. всё, что написано выше

см. таблицы выше

Картина ясна: мессенджерные каналы в разы дешевле, но у каждого - своё раздражающее «но». Telegram Gateway - только Telegram и крипта. WhatsApp - подписки провайдеров и цены Meta, как за заграницу. Flash Call блокируют те самые операторы, которым он перешёл дорогу (удивительное совпадение, не правда ли). Viber хочет тридцать тысяч в месяц за право быть дешёвым.

И тут на сцену выходит игрок, который собрал все тузы в одном рукаве.

Confirmator: восемьдесят копеек и ни одного пакета

Confirmator - сервис подтверждения телефона и email через API. Суть: ваш сервер создаёт один challenge, пользователь подтверждает номер в Telegram, MAX или WhatsApp (или вводит код из email), результат прилетает через REST API или подписанный webhook. Всё.

Теперь цифры, ради которых всё затевалось:

  • 0,80 ₽ за одно успешное подтверждение. Не «от», не «при объёме от миллиона», не «плюс абонплата за шаблон». Восемьдесят копеек, фиксированно.

  • Платите только за успех. Отклонённые и истёкшие запросы - бесплатны. Пользователь не подтвердил - вы не заплатили. После десятилетий «платите за отправленные» это звучит, как фантастика.

  • Без карты на старте - можно попробовать на тестовом окружении.

  • Пополнение 100 ₽ = 125 подтверждений. Сто рублей. У оператора на сто рублей вы купите от двух до десяти SMS. Если повезёт.

  • Поддержка MAX - российского мессенджера, который с 1 сентября 2025 предустанавливается на все новые смартфоны в РФ (обзор, Chat2Desk). Это принципиально: MAX не зависит от санкционных качелей, не требует крипты, и его аудитория в России растёт принудительно-органическим образом. Из конкурентов полноценную связку Telegram + MAX + WhatsApp + email в одном API с единой ценой мы не нашли. Если нашли вы - добро пожаловать в комментарии, сравним.

Посчитаем Papaplant на Confirmator: 11 000 подтверждений × 0,80 ₽ = 8 800 ₽ в месяц. Против 88 000 ₽ у среднего агрегатора и против 495 000 ₽ по операторскому «потолку». Экономия - до полумиллиона рублей ежемесячно. Это не оптимизация. Это другая реальность!

Сводная таблица: сколько стоит верифицировать 10 000 пользователей в месяц

Канал

Цена за подтверждение

Стоимость 11 000 подтверждений/мес

Скрытые платежи

SMS напрямую (пакетная сетка операторов)

до 45 ₽

до 495 000 ₽

Абонплаты за имя и шаблоны (1 000–3 000 ₽/мес за каждый), плата за недоставленные

SMS через агрегатора

8–12 ₽ (буквенное имя)

88 000–132 000 ₽

Абонплаты за имя/шаблоны, плата за отправку, а не доставку

SMS через агрегатора (цифровое имя)

2,4–3 ₽

26 000–33 000 ₽

Доставляемость ~60% - пользователь может просто не получить код

WhatsApp OTP через провайдера

~5–7 ₽

55 000–77 000 ₽

Подписка BSP 5 000–25 000 ₽/мес, настройка до 20 000 ₽

Telegram Gateway

~1 ₽

~11 000 ₽

Оплата в TON, один мессенджер, зависимость от внешней платформы

Flash Call

0,2–2 ₽

2 200–22 000 ₽

Операторы блокируют пулы номеров, стабильность - лотерея

Confirmator

0,80 ₽

8 800 ₽

Нет: платите только за успешные подтверждения, все каналы включены

(Цены - из открытых источников по состоянию на сентябрь 2026, ссылки приведены выше. Тарифы меняются, операторы - быстрее всего. Перепроверяйте перед подписанием договора.)

Техническая начинка: три HTTP-запроса и ноль страданий

Хватит финансов, поговорим как инженеры. Всё, что делает интеграция с Confirmator API, - это три вызова:

POST /v1/challenges              → создали проверку, получили ссылки на ботов
GET  /v1/challenges/:id/status   → подождали результата (или webhook вместо polling)
POST /v1/challenges/:id/consume  → одноразово забрали типизированный proof

Никаких SDK, XML и «личных кабинетов с менеджером» - голый HTTPS + Bearer-токен. Поэтому на любом языке интеграция выглядит одинаково и укладывается в один экран кода. Смотрите сами.

Node.js (plain fetch, без единой зависимости)

const apiKey = process.env.CONFIRMATOR_API_KEY;

async function call(path, init = {}) {
  const res = await fetch("https://confirmator.ru" + path, {
    ...init,
    headers: {
      authorization: `Bearer ${apiKey}`,
      "content-type": "application/json",
      ...init.headers,
    },
  });
  const body = await res.json();
  if (!res.ok) throw new Error(body.error?.code ?? String(res.status));
  return body;
}

export async function verifyPhone(phone) {
  // 1. Создаём challenge - 0,80 ₽ резервируются, а не списываются
  const challenge = await call("/v1/challenges", {
    method: "POST",
    body: JSON.stringify({ phone, purpose: "login", deliveryMode: "polling" }),
  });

  // Пользователю показываем challenge.authorization_url
  // или кнопки мессенджеров из challenge.links (Telegram, MAX, WhatsApp)

  // 2. Ждём терминальный статус (polling; в проде лучше webhook)
  let status;
  do {
    await new Promise((r) => setTimeout(r, 1000));
    status = await call(`/v1/challenges/${challenge.id}/status`);
  } while (status.status === "created" || status.status === "opened");

  if (status.status !== "confirmed") return false; // rejected/expired - бесплатно

  // 3. Одноразово забираем proof
  const { proof } = await call(`/v1/challenges/${challenge.id}/consume`, {
    method: "POST",
    headers: { "idempotency-key": crypto.randomUUID() },
  });
  return proof.phoneVerified === true;
}

Python (requests, тот же самый flow - буквально построчно)

import os, time, uuid
import requests

API_KEY = os.environ["CONFIRMATOR_API_KEY"]
BASE = "https://confirmator.ru"

def call(path, method="GET", **kwargs):
    headers = {"Authorization": f"Bearer {API_KEY}"}
    headers.update(kwargs.pop("headers", {}))
    response = requests.request(
        method, BASE + path, headers=headers, timeout=10, **kwargs
    )
    body = response.json()
    if not response.ok:
        raise RuntimeError(body.get("error", {}).get("code", response.status_code))
    return body

def verify_phone(phone: str) -> bool:
    # 1. Создаём challenge - 0,80 ₽ резервируются, а не списываются
    challenge = call("/v1/challenges", "POST", json={
        "phone": phone, "purpose": "login", "deliveryMode": "polling",
    })

    # Пользователю показываем challenge["authorization_url"]
    # или кнопки мессенджеров из challenge["links"] (Telegram, MAX, WhatsApp)

    # 2. Ждём терминальный статус (polling; в проде лучше webhook)
    while True:
        status = call(f"/v1/challenges/{challenge['id']}/status")
        if status["status"] not in ("created", "opened"):
            break
        time.sleep(1)

    if status["status"] != "confirmed":
        return False  # rejected/expired - бесплатно

    # 3. Одноразово забираем proof
    proof = call(
        f"/v1/challenges/{challenge['id']}/consume", "POST",
        headers={"Idempotency-Key": str(uuid.uuid4())},
    )["proof"]
    return proof.get("phoneVerified") is True

Сравните: это не «похожие» примеры - это один и тот же код, просто написанный дважды. fetch против requests, остальное совпадает до пунктуации. Если ваша команда завтра переедет с Node на Python (или наоборот), верификацию вы перепишете за время одного созвона.

Если не хочется polling: пожалуйста, webhook с подписью

Для продакшена есть deliveryMode: "webhook": Confirmator сам придёт на ваш endpoint, подписав тело HMAC-SHA256 (заголовок x-confirmator-signature, строка подписи - timestamp + "." + rawBody). Проверка - три строчки в любом фреймворке, например на FastAPI:

import hmac, hashlib, time

def check_signature(raw_body: bytes, timestamp: str, signature: str, secret: str) -> bool:
    if abs(time.time() - int(timestamp)) > 300:        # отсекаем replay
        return False
    expected = "v1=" + hmac.new(
        secret.encode(), timestamp.encode() + b"." + raw_body, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature)    # timing-safe сравнение

Тот же HMAC на Node - createHmac("sha256", secret) + timingSafeEqual, полный пример на Express есть в документации. Два нюанса из разряда «сделайте это сразу»: дедуплицируйте события по x-confirmator-event-id (доставка - at-least-once, до пяти повторов) и создавайте сессию пользователя только по proof.phoneVerified === true, а не по факту открытия ссылки на бота.

И заметьте, чего в этом API нет: нет регистрации шаблонов (по 1 000 ₽/мес за штуку у МТС, напоминаю), нет абонплаты за имя отправителя, нет статуса «доставлено в операторскую сеть, дальше не наша забота». Есть insufficient_balance с кодом 402, если деньги кончились, - и это, пожалуй, самый честный HTTP-код во всей этой истории.

Провокационные тезисы, за которые меня закидают в комментариях

  1. Авторизационное SMS - это искусственно дефицитный товар. Себестоимость доставки шести цифр стремится к нулю; цена в 45 ₽ - это чистая рента за доступ к инфраструктуре, построенной на абонентских деньгах.

  2. Пакетная тарификация - мошенническая по сути механика. Вы платите не за то, что отправили, а за то, что могли бы отправить. Представьте, что ресторан берёт с вас «пакет на столик»: заказали салат - платите, как за всё дегустационное меню.

  3. Операторы блокируют Flash Call не из соображений безопасности, а потому что это конкурент их марже. Когда «защита абонентов» точечно убивает только те сервисы, которые дешевле вашего прайса, - это не защита абонентов.

  4. Синхронные повышения цен четырёх игроков в один день - это просто совпадение. (Этот тезис защищать не буду, скажите мне сами, что это было.)

  5. SMS-код как фактор аутентификации мёртв, и цена - последняя, но не главная причина. SIM-swapping, перехват через SS7, доставляемость 95% на входе в аккаунт. Мы платим втридорога за технологию 1992 года, которая ещё и небезопасна.

Что делать стартапу прямо сейчас

  • Посчитайте честно. Не «цена за SMS», а стоимость успешной регистрации: цена × доля доставленных × доля введённых кодов + абонплаты + шаблоны + стоимость поддержки «мне не пришёл код». Число вас не порадует.

  • Перестаньте платить за попытки. Канал, где списывают за отправку, а не за результат, перекладывает на вас риск, который не вы создаёте.

  • Давайте пользователю выбор канала. Кто-то живёт в Telegram, кто-то - в WhatsApp, а через год половина новых смартфонов в стране будет с MAX из коробки. Один API, много каналов - это уже не роскошь, это confirmator.ru.

  • И заложите в юнит-экономику 80 копеек, а не 45 рублей. Разница между этими числами - это ещё один разработчик в вашей команде. Или ещё один месяц жизни вашего стартапа.


Дисклеймер: статья написана при участии команды Confirmator, что, впрочем, не делает цифры в таблицах менее кликабельными - все источники открыты, проверяйте. Мнение об операторском ценообразовании - оценочное суждение автора. Цены актуальны на начало сентября 2026 и, зная темпы, к моменту вашего прочтения могут вырасти. Ещё раз.

Обсудим в комментариях: сколько платите за верификацию вы? И главное - за что, собственно, мы всё это время платили?

Комментарии (0)