в 2023 году я подготовил приложение для Android по пересылке смс в телеграм. Приложение, к сожалению, пока не удалось опубликовать в play market, т.к. Google запрещает (за редким исключением) приложениям читать смс, но всегда будет возможность установки из стороннего источника.
Урезанная версия доступна по ссылке. В выходные дни приложение функционально на 100%, в будние дни получать в телеграм (или по API) SMS можно только с длинных номеров, фильтрация также не работает по будням.
DetectSms-release-v1.28.2.S (361).apk
Полная версия приложения - платная, доступна по запросу.
Ниже находится статья за 2016 год. В 2018 году появилось более простое решение, доступное даже домохозяйке, и не требующее телефона как такового, подробнее в этой статье.
У нас в команде нередко платежи проходят с банковских карт: оплачиваем хостинг, всякие сопутствующие работу сервисы и пр. Но при оплате почти всегда приходится вводить код авторизации из смс. Всё бы ничего, но корпоративная карточка привязана к одному телефонному номеру, а оплачивать приходится не всегда тому, у кого в руках телефон. Помню был случай, когда минут 20 было потрачено на оплату - то не приходила смс, то человек, у которого телефон, был в метро, то кончалось время на ввод кода, то ошибка при вводе - куча впустую убитого времени.
Как же можно решить эту проблему? В некоторых странах, например, в США, можно получить виртуальный мобильный номер (я брал у twilio) и через API сервиса принимать и посылать смски. К сожалению, мне не удалось привязать мобильный банк к такому номеру - смски приходят с короткого номера, а в США эти номера заняты кем-то другим или вовосе не используются. Арендовать в России виртуальный номер для приёма смс дороговато, дорога также и услуга смс-хостинга (когда ваша карта отдаётся в компанию, где подключается к их платформе). Посмотрел цены у трёх операторов: цена за подключение 10$ и абонентка 20$ в месяц, у другой конторы - 2000 в месяц, у третьей - подключение 3000р и 2000р в месяц абонентки. Нет, конечно, есть и бесплатные простые способы - публичные номера. Море ресурсов позволяет использовать один или несколько номеров для регистрации в соцсетях и т.п., все приходящие смски видно сразу тут же - на сайте. Регистрировать мобильный банк через такую систему мы не хотели.
Был выбран чуть более сложный путь - поставить на android телефон программу по пересылке смсок на наш сервер, где простенький php файл в одну строку отправляет сообщение в telegram. Таким образом, телефон можно подключить к зарядке и забыть о нём, раз в 2-3 месяца отправляя с него смс (это позже тоже можно будет автоматизировать) или совершая звонок, чтобы оператор не заблокировал номер. Но обо всём по порядку. Всего будет 3 этапа
- Регистрация telegram бота
- Написание простенького php файла
- Установка и настройка на телефон смс гейта.
-
Регистрация telegram бота
Для регистрации бона нужно найти пользователя BotFather в списке контактов
И написать ему /newbot
, на что он спросит имя, придумать имя на латинице, потом он попросит придумать имя пользователя (будем считать это ник-неймом) с обязательной припиской _bot в конце. Вот весь диалог, красным я выделил самую его важную часть - id бота и token (будем считать его паролем).
Проверим, работает ли бот. Для этого нажмём в последнем сообщении от BotFather на первую ссылку: telegram.me/smstotelegram_bot. Откроется окно чата с ботом, нужно нажать START. Если вы находитесь в России, то с 2018 года телеграм заблокирован и для работы над ботом придётся использовать, например, бразуер Opera со включённым VPN режимом.
После этого нужно отправить боту любой текст. Это нужно для того, чтобы потом определить, кому бот будет отправлять сообщения. Для начала мы рассмотрим простой случай - отправку sms одному пользователю, потом отправку sms в групповой чат. на картинке ниже - скриншот после отправки "привета":
Теперь зайдём в браузер и увидим весь лог этого чата. Для этого сформируем строку:
https://api.telegram.org/bot152314208:AAAAAAAAAAAAAAAAAA/getUpdates
Где AAAAAAAAAAAAAAAAAA нужно заменить на token (пароль), а 152314208 на id вашего бота. Обратите внимание, приписка bot должна быть до id!
Отправьте получившуюся строку в адресную строку и нажмите ввод. Если в ответном сообщении есть только "{"ok":true,"result":[]}", снова напишите боту "Привет" и обновите страницу в браузере. Должен появится лог общения. Примерно такой:
Красным я выделил собственно надпись "привет" в формате json (не будем вдаваться в подробности, но \u043f это "п"). Зелёным выделен id моего аккаунта, т.е. того, под которым я обычно логинюсь. Отправим теперь от бота мне сообщение "и тебе привет". Для этого сформируем запрос:
https://api.telegram.org/bot152314208:AAAAAAAAAAAAAAAAAA/sendMessage?chat_id=70843541&text=и тебе привет
Где AAAAAAAAAAAAAAAAAA нужно заменить на token (пароль), а 152314208 на id вашего бота. 70843541 необходимо заменить на id, который обозначен зелёным - это id чата. Вот, что получится, если вставить сформированный запрос в адресную строку браузера
Это именно то, что нам и было нужно. Переходим ко второму этапу
2.Написание простенького php файла
Программа для андроид телефона, которую мы буем использовать, не умеет, к сожалению, посылать запросы по произвольному адресу (будет разъяснено ниже), поэтому нам нужен скрипт-посредник, который преобразует данные в нужный вид. Итак, достаточно любого php хостинга (у кого нет никакого, попробуйте бесплатный тариф у моего хостера Бегет https://beget.com/ru/free-hosting).
Создайте файл такого вида
<?php
file_get_contents("https://api.telegram.org/bot152314208:AAAAAAAAAAAAAAAAAA/sendMessage?chat_id=70843541&text=".(string)$_GET["phone"].":".$_GET["text"]);
?>
Тёмно-зелёным цветом отмечена строчка, полученная ранее.
(string)$_GET["phone"].":".$_GET["text"])
означает взять и преобразовать в строку номер телефона, добавить : и текст сообщения.
Сохраним этот файл на хостинге, обзовём его test.php
3. Установка и настройка на телефон смс гейта.
В GooglePlay много разных sms гейтов, но воспользуемся вот этим (upd2018: программа пропала из GooglePlay, но APK есть в архиве сайта apkmonk:
https://www.apkmonk.com/app/eu.apksoft.android.smsgateway/
Он работает, к сожалению, не со всеми телефонами, например, с моим текущим XIAOMI REDMI 3 PRO он не работает, а с LG L90 работает.
Итак, вот, как нужно настроить программу, зайдя после запуска в Settings:
Красным я отметил необязательный пункт, вернее нужно тестировать, я на всякий случай сразу отметил, т.к. мой телефон любит засыпать и отключать все каналы интернет-связи. Далее кликаем на HTTP Settings и прописываем адрес до своего test.php
После правки адреса жмём дважды "назад" и попадаем в главное меню программы, где нажимаем Start.
Вот и всё. Теперь любая пришедшая смска должна мгновенно отобразиться в чате с ботом телеграма. Вид смски будет телефон:текст.
В следующем посте посмотрим, как добавить бота в чат с другими людьми, чтобы смски могли видеть все участники группы.