Как превратить старый Android в бесплатный SMS-шлюз

06 мар 2026
5,073
902
37
3 недели

Представьте: вам нужно отправлять сервисные уведомления, коды подтверждения или просто собирать входящие сообщения от клиентов. Первое, что приходит в голову — Twilio, Vonage или их локальные аналоги. Но тут вы заходите в прайс-лист и видите, что цена за одно сообщение в некоторых регионах кусается, а в других странах купить виртуальный номер — тот еще квест с документами.

Разработчик из Камеруна столкнулся именно с этой проблемой и решил её элегантно. Он написал httpSMS — инструмент, который превращает обычный Android-смартфон в полноценный HTTP-шлюз. У вас есть телефон, есть симка с безлимитными SMS? Значит, у вас есть собственный API для рассылок.

header

Что это такое

Проект состоит из трех частей: мобильного приложения на Kotlin, облачного бэкенда на Go и веб-интерфейса. Работает всё просто: вы отправляете HTTP-запрос на API, бэкенд пробрасывает пуш-уведомление на ваш телефон, и приложение отправляет SMS через встроенные API Android.

Это не просто «отправлялка». Автор предусмотрел сценарии, когда сообщений много или когда телефон уходит в офлайн. Например, есть встроенная очередь с механизмом Back Pressure. Если вы решите заспамить API сотней сообщений в секунду, приложение не «ляжет» и не заставит оператора заблокировать вашу симку — оно будет отправлять их с заданной скоростью (например, 3 сообщения в минуту).

Чем интересен httpSMS

Меня зацепило, что проект закрывает вопросы безопасности и надежности, которые обычно игнорируют в наколенных решениях.

Реклама

Сквозное шифрование

Если вы не доверяете облачному бэкенду автора (хотя проект open-source), можно включить AES-256. Ключ хранится только на телефоне. Сервер увидит зашифрованную «кашу», а расшифрует её само приложение перед отправкой. Это редкость для подобных утилит.

Двусторонняя связь через Webhooks

Шлюз работает в обе стороны. Когда на телефон приходит SMS, приложение может переслать его на ваш сервер через Webhook. Это позволяет делать интерактивных ботов или системы подтверждения регистрации без сторонних сервисов.

Контроль срока жизни

У сообщений есть параметр экспирации. Если телефон был выключен или находился вне зоны доступа, а пуш пришел слишком поздно, сообщение не уйдет. Это критично для одноразовых паролей (OTP), которые живут пару минут.

Как это выглядит в коде

Для быстрой интеграции есть готовые клиенты на Go и Node.js. Отправка сообщения выглядит максимально стандартно:

client := htpsms.New(htpsms.WithAPIKey("ваш_ключ"))

client.Messages.Send(context.Background(), &httpsms.MessageSendParams{
    Content: "Привет! Это сообщение из кода через мой старый телефон",
    From:    "+79991234567",
    To:      "+79997654321",
})

В ответ вы получаете статус 202 Accepted. Дальше в дело вступает асинхронная магия: API ставит задачу в очередь, стучится в Firebase Cloud Messaging, а телефон забирает сообщение и отправляет отчет о доставке.

Технический стек

Архитектура проекта довольно современная, без лишнего «легаси»:

  • Бэкенд: Go с фреймворком Fiber. В качестве базы данных используется CockroachDB.
  • Фронтенд: Nuxt и Vuetify.
  • Мобильное приложение: Нативный Kotlin.
  • Инфраструктура: Firebase для пушей и авторизации.

Интересно, что автор предлагает два пути: использовать его готовый сервис httpsms.com (там есть бесплатный лимит) или развернуть всю инфраструктуру у себя через Docker.

Как запустить Self-Hosted версию

Если вы решите развернуться на своем сервере, приготовьтесь к небольшому квесту с настройкой Firebase. Вам понадобится создать проект в консоли Google, настроить Firebase Cloud Messaging и получить файл с ключами сервисного аккаунта.

В репозитории лежит готовый docker-compose.yml, который поднимает API, веб-морду и базу. Основные шаги выглядят так:

  1. Настроить Firebase и SMTP (для уведомлений об офлайне телефона).
  2. Прописать переменные окружения в .env.
  3. Собрать Android-приложение в Android Studio, подложив в него свой google-services.json.

Процесс не самый тривиальный для новичка, но для опытного разработчика это дело на 20-30 минут.

Кому это пригодится

Я вижу несколько сценариев, где httpSMS выигрывает у платных шлюзов:

  • Локальные проекты: Когда нужно отправлять SMS в стране, где международные провайдеры стоят запредельно дорого.
  • Умный дом: Уведомления от Home Assistant или Zigbee-датчиков, которые придут даже если интернет на сервере пропадет (если сервер и телефон запитаны от ИБП).
  • Тестирование: Когда нужно отлаживать логику регистрации по SMS, не сливая бюджет на Twilio.

Проект живой, у него активное комьюнити в Discord и больше полутора тысяч звезд на GitHub. Это отличный пример того, как личная «боль» разработчика превращается в качественный инструмент для всех.

Если у вас в тумбочке валяется старый Android с разбитым экраном — самое время дать ему вторую жизнь в качестве вашего личного SMS-сервера.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.