OTP через Telegram вместо SMS — есть подводные?
Публичный постМы начали считать, сколько нам обходятся SMS с OTP-кодами для входа пользователей — и цифры неприятно кусаются.
Поэтому начали смотреть в сторону Telegram как более дешёвую альтернативу.
Что мы уже поресерчили:
Реализация отправки OTP через Telegram-бота:
- Пользователь авторизуется в нашем сервисе.
- Мы проверяем, что у него уже есть связанный Telegram-аккаунт (или предлагаем привязать).
- Отправляем OTP через Telegram-бота.
✅ Плюсы
-Telegram не берёт денег за отправку сообщений (пока?).
-Скорость доставки отличная.
-Простая интеграция (думаем про aiogram + FastAPI).
- Можно настроить failover: если пользователь не ответил в Telegram — шлём SMS.
❌Подводные камни:
- Блокировки и ограничения. Telegram может ограничить бота, если он выглядит как спамер
- Юзеры без Telegram. Нужно предусмотреть fallback на SMS или email(мы в Узбекистане, тут 99.99% юзеров с телегой)
- User matching. Нужно как-то привязывать Telegram-аккаунт к пользователю. Думаем делать это через магическую ссылку, которую пользователь открывает в Telegram — и бот его идентифицирует.
- Безопасность. Важно убедиться, что Telegram — действительно безопасный канал для OTP. Вроде бы Telegram шифрует трафик, но не end-to-end для ботов. Тем не менее, риск перехвата кода кажется сопоставимым с обычной SMS.
Что ещё мы рассматриваем
- Push-уведомления (например, через OneSignal или Firebase) — но у них тоже есть свои сложности: не у всех включены уведомления, плюс нужно поддерживать клиентские SDK.
- Email-коды — дешевле, чем SMS, но часто медленнее и падают в спам и вот почта точно мало у кого будет
- Telegram Login Widget?
Вопросы к клубу:
Кто уже внедрял OTP через Telegram в проде?
Были ли проблемы с доставкой, блокировками или безопасностью?
Есть ли кейсы, где Telegram-бот перестал работать из-за ограничений Telegram?
Насколько легитимно использовать Telegram в качестве первичного канала доставки OTP с точки зрения UX и безопасности?
Кто-то пробовал полностью заменить SMS на Telegram, без fallback? Как на это отреагировали пользователи?
Может, есть готовые решения/библиотеки, которые можно заюзать, чтобы не изобретать велосипед?
Буду благодарна за любые грабли, советы и ссылки 🙌
Почему не хотите TOTP, который вообще не требует провайдера?
Маленький плюс OTP в SMS — часто они легко подтягиваются клавиатурами.
Т.е. флоу такой:
В то время, как флоу с отп в телеге требует чуть больше шагов:
3. Пришло сообщение, переходим в телегу по пушу
4. Копируем код (хорошо, если он выделен кавычками и можно скопировать в один клик)
5. Возвращаемся и вставляем полученный код.
Выходит два лишних шага.
Можно чуть-чуть укоротить этот флоу: высылать юзеру одноразовую ссылку для входа с коротким сроком жизни вместо кода. Тогда юзеру не обязательно будет что-то копипастить.
Но вообще классная альтернатива (причем принципиально относительно близкая к TOTP) — PassKey. Формат сложный для реализации, если не юзать готовую либу: надо, чтобы клиент сгенерил ключевую пару и открытый ключ передал серверу. Затем при входе клиент при помощи закрытого ключа (доступного в идеале по биометрии) генерит подпись, а сервер открытым ключом проверяет, что она настоящая. Для юзера же вообще всё банально: вводишь логин и потом прикладываешь палец.
По поводу Telegram Login Widget хотел сказать вот что:
Очень редко где вижу такой способ авторизации, часто если и есть авторизация через телегу, то ее делают через бота.
Я пробовал добавлять такой виджет себе на сайт, но столкнулся с тем, что коды не приходят в 8-9 случаев из 10, хз что не так