Пересылка sms в Telegram

в 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 этапа

  1. Регистрация telegram бота
  2. Написание простенького php файла
  3. Установка и настройка на телефон смс гейта.
  1. Регистрация 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.

Вот и всё. Теперь любая пришедшая смска должна мгновенно отобразиться в чате с ботом телеграма. Вид смски будет телефон:текст.

В следующем посте посмотрим, как добавить бота в чат с другими людьми, чтобы смски могли видеть все участники группы.

Пересылка sms в Telegram: 10 комментариев

  1. Игорь

    Такая же проблема. Спасибо за готовое решение. Дешевая аренда мобильного номера есть в Zadarma (120р/месяц), не рассматривали данного оператора?

  2. VladiMir Bulantsev

    Добрый !
    Всё работает, спасибо огромное!
    НО! одна мелочь... каждая СМС делится на несколько сообщений в ТЕЛЕГРАМЕ, может можно как то увеличить длинну пересылаемого сообщения чтобы его видно было целиком ?
    Заранее спасибо !

    1. avtomatron

      В настройках smsgateway нет возможности собрать длинные смс в одно сообщение, поэтому нужно будет на Php написать сборщик смс за 2 минуты (например) от одного абонента и отправку всех накопленных.

  3. Владимир

    А подскажите такой момент, СМС приходят по протоколу https:// или только по http:// ?

    1. avtomatron

      Боюсь, что нет, т.к. smsgate датируется 2002 годом, а HTTPS появился в 2000, в настройках программы не нашёл ничего про https. Но есть другие гейты, более современные.

      1. Владимир

        Вот все делаю правильно, по прямому заходу норм работает, без https а с приложения не хочет редиректить, хотя пишет в логи что все отправило. И урл проверил и настройки вроде верные, а куда копать не знаю. Какой гейт есть более современный посоветуйте пожалуйста?

        1. avtomatron

          Не очень понял, в какой момент вы используете HTTPS? Напишите подробнее

  4. Степан

    здравствуйте, получилось реализовать примерно такое же приложение, но в мобильном приложении от 1С, возникла следующая проблема: приложение работает только полчаса и потом перестаёт откликаться. Настройки телефона естественно были выставлены для приложения без фонового режима и эноргосбережения. Но тем не менее, не удаётся выполнить отправку кода. Сталкивались ли вы с подобной проблемой?

    1. avtomatron

      Здравствуйте. Да там масса нюансов, даже в моём приложении не все особенности андроид-оболочек удалось учесть. Операционная система и всякие менеджеры энергосбережения любят отключать приложения. Чем новее операционная система тем сложнее всё учесть.

Добавить комментарий для Владимир Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *