Во многих компаниях использующих IP-телефонию и применяющих GSM-шлюзы для корпоративной связи часто возникает вопрос приема и отправки СМС со своих номеров.

Для китайских моделей GOIP существует неплохое решение GOIP-SMS-Сервер, о котором неоднократно упоминалось на просторах интернета и в нашем Habr сообществе в том числе. Это простой, бесплатный и удобный продукт, но СМС через WEB, особенно с мобильных не совсем удобно.

Возникла идея приема и передачи СМС с помощью мессенджера — и была реализована за час с помощью простого скрипта на Python3.6 и бота Telegram (и спустя 2 месяца перенесена на Viber) Прошу под кат:

Логика следующая: Обрабатываем и парсим запрос, извлекаем тело СМС, передаем ботам и Отправляем в личные чаты — получаем СМС, особенно интересна тема владельцам iPhone с 1 sim, когда оперативно нужно получить сообщения в командировке или отпуске, от банков или сервисов регистраций или узнать о пополнении оператора:

Итак рассмотрим первую часть а именно — как получать полноценные СМС из GSM сети прямо в Telegram, нам понадобиться:

  • GoIP SMS Сервер
  • Зарегистрируйте бота (получите свой TOKEN у папы всех ботов @BotFather)
  • Зарегистрируйте новый ящик на Gmail и разрешите прием по IMAP

Разберем пример скрипта, но предварительно в СМС сервере добавим наш емайл получателя (можно несколько емайл через запятую:

image

Рассмотрим скрипт:

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
(номера реальные стерты во избежание «Яровых» конфликтов):

image

image

image

Скрипт можно обернуть в «def функцию» и вызывать ее каждые 3 или 20 или сколько нужно секунд! Зависит от частоты получение СМС-ок!

Если у кого то не получается повторить, пишите — разберем каждый случай…

До встречи в следующей статье!
73!

P.S.: статья около года пролежала в песочнице (одобрена НЛО 20.08.2018) претерпела несколько изменений, видимо старые статьи автоматом не приходят, даже если новая статья позволила стать полноправным участником. Публикую исходный оригинал.

Теперь ее можно обсудить.

Комментарии (31)


  1. BoDRbI
    22.08.2019 14:27
    +1

    Поидее, можно обойтись без SMS центра GOIP и gmail, а скриптом по SMPP получать смс, и сразу отправлять в телеграмм/viber или куда-то ещё.


  1. cellmon Автор
    22.08.2019 14:46
    +1

    Можно.
    Но Плохо идею я занес.
    Вот например мы хотим принять смс на свои офисные симки, они у нас в Битрикс или в амоцрм интегрированы.
    SMPP каждому припейд абоненту никто не даст в принципе.


    Для отсылки(рассылки) конечно smpp удобнее.


    1. BoDRbI
      23.08.2019 12:28

      «SMPP каждому припейд абоненту никто не даст в принципе.» а причем тут абонент/не абонент и кто должен дать? У вас goip имеет поддержку smpp, к goip'у подключаетесь скриптом и всё вытягиваете.


      1. cellmon Автор
        23.08.2019 13:51

        Это давно есть. И выигрываем время и упрощаем путь.
        Но сам Goip не очень хочется facetointernet делать…
        Во избежание нападения терминаторов.


      1. vp7
        24.08.2019 00:21

        Не знаю, как сейчас, а года 3 назад SMPP там был скорее для галочки и имел огромное количество ограничений. Начиная с того, что нельзя узнать статус отправки SMS именно по SMPP (но можно дёрнуть по HTTP), заканчивая тем, что перед отправкой пакета по SMPP крайне желательно дёрнуть шлюз по HTTP и узнать «а готов ли он сейчас принимать SMPP пакет» иначе можно было получить успешный SUBMIT_SM_RESP, при этом само сообщение теряется где-то в недрах шлюза.

        В итоге пришлось остановиться на HTTP интерфейсе, у которого при всех недостатках было важное преимущество — он работал.


        1. cellmon Автор
          24.08.2019 08:42

          Лучшее враг рабочего!


  1. dss_kalika
    22.08.2019 15:45
    +1

    А схема как сделать это простым абонентам есть?)


    1. Ahen
      23.08.2019 09:38

      Можно же. Самое простое — взять с авито 3г свисток, перед этим узнав какие модели подходят и какие можно отвязать от оператора. Цена вопроса не более 500р. Статей по теме куча.
      https://habr.com/ru/post/111305/
      Главный минус — держать включённым пк/сервер дома когда уезжаете. Не безопасно.


      Наверняка можно и на ардуине какой-то, но цена вопроса уже не та.


      1. cellmon Автор
        23.08.2019 10:03

        Ваще круто и бюджетненько.


        Имеется ввиду что сервер, Астериск или что-то ещё уже есть, и есть не дома. В идеале на хостинге.


        А Goip то, он потребляет энергии сравнимо с wifi роутером. Его можно не выключать никогда.


        1. 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 модемами.


          1. cellmon Автор
            23.08.2019 12:55

            Там отлично согласен, так с мультом и работаем.
            Вы не в курсе может хоть какое апи есть по смс у них?


            Было бы мега здорово из мегахостинга прямо на свой Viber sms получать входящие!!!


            1. vp7
              23.08.2019 17:35

              Вы не в курсе может хоть какое апи есть по смс у них?

              Не, не в курсе.
              Мультифон тестировал сразу после запуска, а мегафона у меня никогда не было.


          1. pyrk2142
            23.08.2019 23:42

            Боюсь, что в случае Мультифона могут быть ограничения. Как минимум, Emotion (кажется, это очень похоже на Мультифон) не даёт доступ к банковским СМС.


            1. cellmon Автор
              25.08.2019 10:43

              Друг другу показывают? А более серьезные банки и авторизации — емотион их не показыает.
              Даже не знаю плюс мегафону или минус за такие перестраховки.....


      1. Javian
        25.08.2019 19:15

        Судя по скриншотам смысл задачи получать/отправлять СМС от украинских и российских абонентов.

        Имхо, для простых абонентов эта задача не очень востребованна, а им было бы интереснее и выгоднее иметь личный голосовой шлюз Россия-Украина. Скорее всего для SIP телефонии хватило бы OrangePi.


        1. cellmon Автор
          25.08.2019 19:34

          Разумеется. Например в крымских спойлерах, кроме большой тройки ниодин оператор не регистрируется. А если смс надо?
          На Кубань выезжать или на Украину чтоб принять… Лучше костыльно но стационарно.


          И, кстати, украинский lifecell, даёт услугу как мультифон, если кому интересно. Звонки из интернет по местным тарифам, но не чистый sip как у мультифона, а через свой месенджер "BiP".....


          1. Javian
            25.08.2019 20:27

            Посмотрел приложение на 4pda. Второй комментарий темы:

            Как бы только заставить побольше людей им пользоваться :rofl:
            Дело ведь в том, что в большинстве пакетов звонки и смс Life:) — Life:) и так бесплатны, а для остальных Skype & Viber гораздо привычней..


            1. cellmon Автор
              25.08.2019 21:00

              Они lifecell как и megafon с emotion, этот BiP, откровено не рекламируют. Им то что — Гиги за шаги или тряси смартфон.....


              А это разумеется выгодней пользователям чем Viber out или Skype out.


              1. Javian
                26.08.2019 09:16

                Информации об этом приложении на офсайте почти ноль. Не понятно во сколько выйдут звонки на Киевстар, например.
                Периодически использую zadarma.com для звонков по тарифу в направлении Украины по $0.016.


                1. cellmon Автор
                  26.08.2019 10:45

                  Звонки на Киевстар и МТС (UMC)по тарифу вашему. Например у меня 70 минут в мес, бесплатно а далее по 1грн


  1. cellmon Автор
    22.08.2019 16:44

    Это и есть схема. Только простым накладно будет скорее всего goip приобретать, если лишние 70уе


    1. dss_kalika
      22.08.2019 17:04

      ну, примерно на это и намекал. =)
      За границей вполне можно жить в вайфай-зоне, а вот попытка перевести денег обломилась из-за кода в смс.
      Ну и вообще — избавиться ещё от одной кнопочки на телефоне — приятно.


      1. cellmon Автор
        22.08.2019 19:29

        Как будет GoIP и если не разберётесь, смело пишите в личку — помогу без промедления.


      1. vp7
        23.08.2019 12:33

        Обычно входящие SMS заграницей бесплатны.
        Так что на телефоне ставим безусловную переадресацию куда-либо (возможно на автоответчик, говорящий «звоните мне, пожалуйста, в телеграмм или вотсапп»), SIM'ку оставляем в телефоне, отключая на ней передачу данных и вуаля — входящие SMS приходят без проблем.


        1. cellmon Автор
          23.08.2019 13:32

          Так тоже можно.
          А Если труба на 2сим то вообще огонь
          А если в iPhone местную симку.....


        1. dss_kalika
          23.08.2019 15:55

          Проблема в том, что включение мобильника в сеть за границей, автоматически включает роуминг-опции и списывает деньги за день (как минимум). Ну или не доставляет СМС. (только недавно проверил в отпуске)…


          1. vp7
            23.08.2019 17:38

            Либо это какая-то ошибка, либо операторы обнаглели.
            Задайте вопрос оператору — «что за нафиг??».

            Помню, что операторы анонсиловали «для удобства пользователей» активацию ежесуточных «подписок» за 200-500 рублей в сутки, но они должна активизироваться в момент начала использования.
            Если на уровне оператора отключить передачу данных, то проблем быть не должно.


            1. Ahen
              25.08.2019 21:40

              Сейчас в роуминге, мегафон, каждый день шлёт мне смс о том что на счету нет средств для списания ежедневной платы за роуминг. Входящие смс приходят, все нормально.
              Текст смс:
              На Вашем счете недостаточно средств для списания ежедневной платы 269 руб. за связь за границей. Пополните счет, чтобы продолжать общаться.


              1. cellmon Автор
                25.08.2019 21:51

                Emotion не пробовали испытать?


  1. ibrin
    23.08.2019 06:26

    А это не то же самое, что вставить gsm модем в сервер организации и получать-рассылать sms через самописную прокладку?


    1. cellmon Автор
      23.08.2019 07:57

      Куда их получать? В телеграм!