Для китайских моделей GOIP существует неплохое решение GOIP-SMS-Сервер, о котором неоднократно упоминалось на просторах интернета и в нашем Habr сообществе в том числе. Это простой, бесплатный и удобный продукт, но СМС через WEB, особенно с мобильных не совсем удобно.
Возникла идея приема и передачи СМС с помощью мессенджера — и была реализована за час с помощью простого скрипта на Python3.6 и бота Telegram (и спустя 2 месяца перенесена на Viber) Прошу под кат:
Логика следующая: Обрабатываем и парсим запрос, извлекаем тело СМС, передаем ботам и Отправляем в личные чаты — получаем СМС, особенно интересна тема владельцам iPhone с 1 sim, когда оперативно нужно получить сообщения в командировке или отпуске, от банков или сервисов регистраций или узнать о пополнении оператора:
Итак рассмотрим первую часть а именно — как получать полноценные СМС из GSM сети прямо в Telegram, нам понадобиться:
- GoIP SMS Сервер
- Зарегистрируйте бота (получите свой TOKEN у папы всех ботов @BotFather)
- Зарегистрируйте новый ящик на Gmail и разрешите прием по IMAP
Разберем пример скрипта, но предварительно в СМС сервере добавим наш емайл получателя (можно несколько емайл через запятую:

Рассмотрим скрипт:
import imaplib import email import telebot # установите в свое окружение библиотеку pip install PyTelegramBotAPI bot = telebot.TeleBot('YOUTOKENBOT') #укажите ваш токен mail = imaplib.IMAP4_SSL('imap.gmail.com') mail.login('yougmail@gmail.com', 'gmailpassword') #ваш новый аккаунт @gmail mail.list() # Смотрим на папки в ящике mail.select('INBOX') # Подключаемся к папке входящие result, data = mail.uid('search', None, 'UNSEEN') # выбираем непрочитанные i = len(data[0].split()) for x in range(i): latest_email_uid = data[0].split()[x] result, email_data = mail.uid('fetch', latest_email_uid, '(RFC822)') raw_email = email_data[0][1] mail.store(latest_email_uid, '+FLAGS', '\Deleted') # удаляем чтоб не было повторной отправки raw_email_string = raw_email.decode('utf-8') email_message = email.message_from_string(raw_email_string) # получаем сырое письмо в виде строки for part in email_message.walk(): if part.get_content_type() == "text/html" or part.get_content_type() == "text/plain": body = part.get_payload(decode=True) s = (email_message['Subject']) numb = s[5:16] # Выделяем номер получателя 11 значный в виде 7XXXXXXXXXX с помощью среза, если 12 значный например для Украины то s[5:17] mss = str(body.decode('unicode-escape')) # декодируем тело письма и в Python3 отменяем unicode, если 2я ветка то отменять не нужно abon = mss[54:67] # выделяем номер отправителя smss = mss[77:] # выделяем тело СМС, а именно собственно само сообщение soobsh=( numb + 'n'+ 'n' + smss + 'n' + 'От:' + abon) # форматируем для отправки bot.send_message(chat_id, soobsh) # укажите ваш chat_id и отправляйте в телегу ваше СМС else: continue
Tеперь запускаем скрипт, посылам СМСку на нашу Sim и ждем обработки — около 3 сек нужно на переброс СМС в месседжер, если все верно, то видим наши сообщения в нашем TelegramBot
(номера реальные стерты во избежание «Яровых» конфликтов):



Скрипт можно обернуть в «def функцию» и вызывать ее каждые 3 или 20 или сколько нужно секунд! Зависит от частоты получение СМС-ок!
Если у кого то не получается повторить, пишите — разберем каждый случай…
До встречи в следующей статье!
73!
P.S.: статья около года пролежала в песочнице (одобрена НЛО 20.08.2018) претерпела несколько изменений, видимо старые статьи автоматом не приходят, даже если новая статья позволила стать полноправным участником. Публикую исходный оригинал.
Теперь ее можно обсудить.

