Во многих компаниях использующих IP-телефонию и применяющих GSM-шлюзы для корпоративной связи часто возникает вопрос приема и отправки СМС со своих номеров.
Для китайских моделей 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) претерпела несколько изменений, видимо старые статьи автоматом не приходят, даже если новая статья позволила стать полноправным участником. Публикую исходный оригинал.
Теперь ее можно обсудить.
Автор: cellmon