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

Ниже находится статья за 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

После этого нужно отправить боту любой текст. Это нужно для того, чтобы потом определить, кому бот будет отправлять сообщения. Для начала мы рассмотрим простой случай - отправку 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: 8 комментариев

  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? Напишите подробнее

Добавить комментарий

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