Для китайских моделей 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) претерпела несколько изменений, видимо старые статьи автоматом не приходят, даже если новая статья позволила стать полноправным участником. Публикую исходный оригинал.
Теперь ее можно обсудить.
Комментарии (31)
cellmon Автор
22.08.2019 14:46+1Можно.
Но Плохо идею я занес.
Вот например мы хотим принять смс на свои офисные симки, они у нас в Битрикс или в амоцрм интегрированы.
SMPP каждому припейд абоненту никто не даст в принципе.
Для отсылки(рассылки) конечно smpp удобнее.
BoDRbI
23.08.2019 12:28«SMPP каждому припейд абоненту никто не даст в принципе.» а причем тут абонент/не абонент и кто должен дать? У вас goip имеет поддержку smpp, к goip'у подключаетесь скриптом и всё вытягиваете.
cellmon Автор
23.08.2019 13:51Это давно есть. И выигрываем время и упрощаем путь.
Но сам Goip не очень хочется facetointernet делать…
Во избежание нападения терминаторов.
vp7
24.08.2019 00:21Не знаю, как сейчас, а года 3 назад SMPP там был скорее для галочки и имел огромное количество ограничений. Начиная с того, что нельзя узнать статус отправки SMS именно по SMPP (но можно дёрнуть по HTTP), заканчивая тем, что перед отправкой пакета по SMPP крайне желательно дёрнуть шлюз по HTTP и узнать «а готов ли он сейчас принимать SMPP пакет» иначе можно было получить успешный SUBMIT_SM_RESP, при этом само сообщение теряется где-то в недрах шлюза.
В итоге пришлось остановиться на HTTP интерфейсе, у которого при всех недостатках было важное преимущество — он работал.
dss_kalika
22.08.2019 15:45+1А схема как сделать это простым абонентам есть?)
Ahen
23.08.2019 09:38Можно же. Самое простое — взять с авито 3г свисток, перед этим узнав какие модели подходят и какие можно отвязать от оператора. Цена вопроса не более 500р. Статей по теме куча.
https://habr.com/ru/post/111305/
Главный минус — держать включённым пк/сервер дома когда уезжаете. Не безопасно.
Наверняка можно и на ардуине какой-то, но цена вопроса уже не та.
cellmon Автор
23.08.2019 10:03Ваще круто и бюджетненько.
Имеется ввиду что сервер, Астериск или что-то ещё уже есть, и есть не дома. В идеале на хостинге.
А Goip то, он потребляет энергии сравнимо с wifi роутером. Его можно не выключать никогда.
vp7
23.08.2019 12:32Вариантов, собственно, много.
Для 1-2 линий самое дешевое — 3G свисток (1-2 штуки) в любой компьютер (подойдёт даже raspberry pi), на него на выбор:
1. asterisk — можно принимать звонки (и отдавать их по SIP) и SMS
2. kannel — принимает только SMS, но обвязка поудобнее, он сам может отправлять POST запросы куда скажете
Ну и самый последний вариант — если я не ошибаюсь, на мультифоне мегафона можно принимать не только звонки, но ещё и SMS.
Если так, то достаточно будет включить эту услугу и получать SMS по IP прямо на вашем хостинге, без всяких танцев с бубном с USB модемами.cellmon Автор
23.08.2019 12:55Там отлично согласен, так с мультом и работаем.
Вы не в курсе может хоть какое апи есть по смс у них?
Было бы мега здорово из мегахостинга прямо на свой Viber sms получать входящие!!!
vp7
23.08.2019 17:35Вы не в курсе может хоть какое апи есть по смс у них?
Не, не в курсе.
Мультифон тестировал сразу после запуска, а мегафона у меня никогда не было.
pyrk2142
23.08.2019 23:42Боюсь, что в случае Мультифона могут быть ограничения. Как минимум, Emotion (кажется, это очень похоже на Мультифон) не даёт доступ к банковским СМС.
cellmon Автор
25.08.2019 10:43Друг другу показывают? А более серьезные банки и авторизации — емотион их не показыает.
Даже не знаю плюс мегафону или минус за такие перестраховки.....
Javian
25.08.2019 19:15Судя по скриншотам смысл задачи получать/отправлять СМС от украинских и российских абонентов.
Имхо, для простых абонентов эта задача не очень востребованна, а им было бы интереснее и выгоднее иметь личный голосовой шлюз Россия-Украина. Скорее всего для SIP телефонии хватило бы OrangePi.cellmon Автор
25.08.2019 19:34Разумеется. Например в крымских спойлерах, кроме большой тройки ниодин оператор не регистрируется. А если смс надо?
На Кубань выезжать или на Украину чтоб принять… Лучше костыльно но стационарно.
И, кстати, украинский lifecell, даёт услугу как мультифон, если кому интересно. Звонки из интернет по местным тарифам, но не чистый sip как у мультифона, а через свой месенджер "BiP".....
Javian
25.08.2019 20:27Посмотрел приложение на 4pda. Второй комментарий темы:
Как бы только заставить побольше людей им пользоваться :rofl:
Дело ведь в том, что в большинстве пакетов звонки и смс Life:) — Life:) и так бесплатны, а для остальных Skype & Viber гораздо привычней..cellmon Автор
25.08.2019 21:00Они lifecell как и megafon с emotion, этот BiP, откровено не рекламируют. Им то что — Гиги за шаги или тряси смартфон.....
А это разумеется выгодней пользователям чем Viber out или Skype out.
Javian
26.08.2019 09:16Информации об этом приложении на офсайте почти ноль. Не понятно во сколько выйдут звонки на Киевстар, например.
Периодически использую zadarma.com для звонков по тарифу в направлении Украины по $0.016.cellmon Автор
26.08.2019 10:45Звонки на Киевстар и МТС (UMC)по тарифу вашему. Например у меня 70 минут в мес, бесплатно а далее по 1грн
cellmon Автор
22.08.2019 16:44Это и есть схема. Только простым накладно будет скорее всего goip приобретать, если лишние 70уе
dss_kalika
22.08.2019 17:04ну, примерно на это и намекал. =)
За границей вполне можно жить в вайфай-зоне, а вот попытка перевести денег обломилась из-за кода в смс.
Ну и вообще — избавиться ещё от одной кнопочки на телефоне — приятно.cellmon Автор
22.08.2019 19:29Как будет GoIP и если не разберётесь, смело пишите в личку — помогу без промедления.
vp7
23.08.2019 12:33Обычно входящие SMS заграницей бесплатны.
Так что на телефоне ставим безусловную переадресацию куда-либо (возможно на автоответчик, говорящий «звоните мне, пожалуйста, в телеграмм или вотсапп»), SIM'ку оставляем в телефоне, отключая на ней передачу данных и вуаля — входящие SMS приходят без проблем.cellmon Автор
23.08.2019 13:32Так тоже можно.
А Если труба на 2сим то вообще огонь
А если в iPhone местную симку.....
dss_kalika
23.08.2019 15:55Проблема в том, что включение мобильника в сеть за границей, автоматически включает роуминг-опции и списывает деньги за день (как минимум). Ну или не доставляет СМС. (только недавно проверил в отпуске)…
vp7
23.08.2019 17:38Либо это какая-то ошибка, либо операторы обнаглели.
Задайте вопрос оператору — «что за нафиг??».
Помню, что операторы анонсиловали «для удобства пользователей» активацию ежесуточных «подписок» за 200-500 рублей в сутки, но они должна активизироваться в момент начала использования.
Если на уровне оператора отключить передачу данных, то проблем быть не должно.Ahen
25.08.2019 21:40Сейчас в роуминге, мегафон, каждый день шлёт мне смс о том что на счету нет средств для списания ежедневной платы за роуминг. Входящие смс приходят, все нормально.
Текст смс:
На Вашем счете недостаточно средств для списания ежедневной платы 269 руб. за связь за границей. Пополните счет, чтобы продолжать общаться.
BoDRbI
Поидее, можно обойтись без SMS центра GOIP и gmail, а скриптом по SMPP получать смс, и сразу отправлять в телеграмм/viber или куда-то ещё.