Как превратить старый Android в полноценный SMS-шлюз
Представьте ситуацию: вам нужно прикрутить двухфакторную аутентификацию к небольшому внутреннему сервису или настроить уведомления о падениях сервера в SMS. Идти к крупным агрегаторам вроде Twilio или InfoBip — это сразу бюрократия, договоры, проверка имени отправителя и, конечно, счета в валюте. А если сообщений всего десяток в день? В ящике стола наверняка валяется старый Android-смартфон, который еще вполне бодр, но уже не нужен. Проект android-sms-gateway позволяет вдохнуть в него жизнь, превратив в персональный шлюз с API.
Что это такое
По сути, это связка из мобильного приложения и серверной части. Приложение ставится на телефон, получает доступ к отправке и чтению сообщений, а затем выставляет наружу API. Вы отправляете HTTP-запрос на этот API, а телефон пересылает его как обычную SMS через вставленную сим-карту.
Проект подкупает своей автономностью. Автор предусмотрел несколько режимов работы, включая полностью локальный, когда данные вообще не покидают вашу сеть. Это критично, если вы параноидально относитесь к приватности или работаете в закрытом контуре.
Как это работает на практике
У приложения есть два основных сценария использования.
Локальный сервер
Самый простой вариант для домашних серверов или офисной локалки. Вы включаете тумблер Local Server в приложении, и телефон начинает слушать порт 8080. Теперь можно отправить сообщение обычным curl запросом:
curl -X POST -u user:password \
-H "Content-Type: application/json" \
-d '{ "textMessage": { "text": "Сервер упал, иди чини!" }, "phoneNumbers": ["+79991234567"] }' \
http://192.168.1.50:8080/message
Никаких внешних регистраций, никаких облаков. Главное, чтобы ваш скрипт и телефон находились в одной Wi-Fi сети.
Облачный или приватный сервер
Если телефон подключен к мобильному интернету и не имеет белого IP, на помощь приходит Cloud-режим. Сообщения идут через промежуточный сервер-ретранслятор. Можно использовать готовый сервис от автора или развернуть свой собственный бэкенд (исходники сервера тоже открыты).
Интересная фишка: в облачном режиме можно подключить сразу несколько телефонов к одному аккаунту. Система сама распределит нагрузку между ними. Это полезно, если у вас большой поток сообщений и вы боитесь, что оператор заблокирует одну симку за подозрительную активность.
Пять возможностей, которые упрощают жизнь
- Сквозное шифрование. В облачном режиме содержимое сообщений и номера телефонов шифруются на стороне отправителя и расшифровываются только на самом устройстве. Промежуточный сервер видит только зашифрованные байты.
- Поддержка двух симок. Если в телефоне два слота, в API можно указать, с какой именно карты отправить сообщение. Удобно для разделения личных и рабочих уведомлений.
- Входящие через Webhooks. Это киллер-фича. Вы можете настроить URL, на который телефон будет пересылать все входящие SMS. Так можно делать ботов, которые управляются через сообщения, или автоматически подтверждать транзакции.
- Data SMS. Редкая штука, которая позволяет отправлять бинарные данные. Может пригодиться для каких-нибудь специфических IoT-устройств или своих протоколов поверх SMS.
- Работа со старыми устройствами. Приложение заводится на Android 5.0. Это значит, что даже какой-нибудь древний Galaxy S4 или бюджетный "китаец" десятилетней давности справятся с задачей.
Техническая изнанка
Проект написан на Kotlin с использованием Ktor для сетевого взаимодействия и Room для локальной базы данных. Архитектура выглядит чистой, без лишнего нагромождения фреймворков.
Для тех, кто не любит писать curl руками, автор подготовил CLI-утилиту. С ней отправка выглядит еще проще:
smsgate send --phones '+79991234567' 'Привет из консоли!'
Кому это пригодится
В первую очередь — разработчикам небольших внутренних систем. Если вам нужно 5-10 SMS в день для уведомлений мониторинга или авторизации пары сотрудников, платить за профессиональные шлюзы нет смысла.
Также это отличный вариант для прототипирования. Пока бизнес еще не решил, нужны ли ему SMS-рассылки, вы можете за 15 минут собрать рабочий прототип на старом телефоне.
Единственное ограничение, о котором честно предупреждает автор: не стоит использовать это для массового спама. Мобильные операторы быстро вычисляют аномальную активность и блокируют сим-карту. Но для сервисных сообщений и личных нужд — решение практически идеальное.
Проект живой, активно обновляется (судя по коммитам) и имеет внятную документацию. Если у вас есть потребность в дешевом и контролируемом SMS-шлюзе, android-sms-gateway — это то, с чего стоит начать. Минимум настройки, максимум пользы от "железа", которое иначе просто собирало бы пыль.
Инструкции по сборке и готовые APK лежат в репозитории проекта.
