Как мы рассылали SMS со старой Nokia и телефона на Android

    image

    Примерно год назад мы запустили свой маленький проект с оповещениями о поломках Московского метро.

    Самой главной проблемой в нем оказалась рассылка смс. Мы не ожидали, что проект понравится и у нас будет 1500+ регистраций. В самом лучшем случае мы расчитывали человек на 300. Этим мы были приятно удивлены.

    Проблема с смс в первую очередь была из-за цены. Одна рассылка получалась примерно 3000 рублей. С учетом того, что цена 1 смс 1,5 рубля. Были времена, когда неполадки в движением поездов были каждые 3 дня, т.е. 10 поломок в месяц. 3000*10 = 30 000 рублей. Дороговато для проекта, который не финансируется.

    Тут мы начали изобретать велосипед. А именно, искать тарифы с действительно безлимитными смс. В итоге мы его нашли. Стоило что-то около 600 рублей в месяц. Дальше нужно было решить вопрос с отправкой смс. И тут пришло время древней nokia 6610i, которая пылилась в шкафу как память о былой эпохе. Но ее пришлось чуть доработать, а именно подключить по uart к ноуту, чтобы отправлять задания.

    imageСхема

    Пара диодов тут нужна чтобы сбросить напряжение с 5V до ~3.4V. Падение на диодах суммарно получается 1.6V при тока 1А. Такой ток нокия потребляет только при активной работе с сетью, а большую часть времени падение на них будет около 1.5V.
    Большой и толстый конденсатор нужен чтобы сглаживать потребление телефона в тот момент когда работает передатчик, и он много жрет.
    А резисторы — заменяют терморезистор и пин идентификации батарейки (BSI), по которому nokia понимает что к ней подключен аккумулятор.
    У нас подходящих номиналов резисторов не нашлось, поэтому собрали из того что было.

    image

    Для отправки использовалась программа gnokii, из названия которой вполне очевидно, что писалась она как раз для таких целей.

    Конфиг от нашей 6610i:

    [global] port = /dev/ttyUSB0
    connection = dlr3p
    model = 6510
    


    Команда для отправки
    echo 'text' | gnokii --sendsms number
    


    Чтобы рассылать можно можно было не только от root, нужно выставить соответствующие права на /dev/ttyUSB0

    Тут понравилось, что нам могли отвечать, и нам отвечали. Но и проблемы тут не закончились, а именно скорость: такая рассылка занимала 4 часа. Поэтому таким образом мы рассылали информацию, которая актуальна длительный период, например, про закрытие части линии на ремонт. 1 симки нам хватало примерно на 3 тысячи сообщений, т.е. на пару рассылок. Дальше нас блокировали. Мы звонили в ТП и спрашивали причины блокировки, на что нам отвечали — рассылка. Один раз нам хватило одной симки на 5 рассылок, таймауты делали побольше и меняли текст. И нам всегда везло на красивые номера — мелочь, но приятно.

    А поскольку в обычном случае у нас актуальность информации составляет минут 40, рассылка в идеале должна быть за пару минут. Поэтому мы решили сделать рассылку на телефоне с Android. Главным преимуществом этого решения была скорость, правда тоже далеко не идеально. 1 смс отправлялась за 1.5 секунды, что в результате выходило примерно в 37 минут. Дальше можно было параллелить при помощи подключения еще телефона и добиться нужной скорости. Но тут нас задушил оператор, который блочил нас или посредь первой рассылки или в начале второй.

    Логика приложения заключилась в периодическом получении задания с сервера. Примерно раз в несколько минут приложение обращалось на сервер за командой в формате json, которая состояла из массива телефонных номеров и текстов смс.

    У нас был поток для забора команды с таймаутом, поток для рассылки смс, BrodasReceiver для запуска после загрузки. Но проект потерялся, ввиду давности, поэтому полного кода не будет. Текст смс мы урезали до максимума 1 смс — 70 символов (это для кириллицы), это делала серверная часть, но на всякий случай отправка смс была ровно на 70 символов:

    SmsManager smsManager = SmsManager.getDefault();
    smsManager.sendTextMessage("NUM", null, "TXT", null, null);
    


    не забывая про права на отправку смс в манифест

    <uses-permission android:name="android.permission.SEND_SMS" />
    


    Для автозапуска после включения не забываем про права:

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    


    Прописать в манифест:

    <receiver android:name=".Boot"
                android:enabled="true"
                android:exported="false" >
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                </intent-filter>
    </receiver>
    


    Код Boot:

    public class Boot extends BroadcastReceiver 
    {
    
    	@Override
    		public void onReceive(Context context, Intent intent)
    		{
    		 тут запуск потока
    		}
    }
    



    Автозапуск на случай разрядившейся батарейки ну и других аналогичных ситуаций, вдруг после включения забуду запустить приложение. А на этом телефоне всеравно живет только это приложение, поэтому некоторое расточительство по отношению к батарейке нам не страшно.

    Ну и в Activity добавляем запуск потока.

    Так же разрешаем приложению доступ в интернет:

    <uses-permission android:name=«android.permission.INTERNET»/>

    И еще важный момент, чтобы наше приложение работало даже с выключенным дисплеем нужно вызвывать PowerManager. Иначе система будет усыплять приложение по своему желанию, для экономии заряда, и запросы будут выполняться нерегулярно.

    Для этого добавляем пермишн:

    <uses-permission android:name="android.permission.WAKE_LOCK" />                
    


    Дабавляем код в Activity:
    
    PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP|
    	       	PowerManager.FULL_WAKE_LOCK| PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "");
    


    И в поток
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
    wl.acquire();
    
    Обращение к серверу, обработка полученного json 
    
    wl.release();
    


    Такой способ тоже не проработал долго, поскольку постоянно менять симки было не очень удобно и рационально — ценник стремительно рос и это потеряло смысл.

    Дальше мы пробовали рассылать через Whatsapp, но тут номера умирали каждые 10 сообщений, а то и быстрее. А регистрация 1 номера стоила 7 рублей. Мы опять начали выходить на те-же цифры, с которых начали.

    А не так давно мы сделали бота для телеграм — https://telegram.me/msk_metro, тут все так же как и с PushBullet, который мы подключили по просьбам после первого поста на хабре. Только тут мы можем удалять случайно прошедшие модерацию сообщения, а в PushBullet — нет.
    Support the author
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 83

      –2
      Почему бы не использовать сервис по рассылке?
        +3
        Потому что одна смс 1,5 рубля, о чём было написано.
          0
          и сколько по цене обойдется в месяц рассылка ~20,000 смс? Точно намного больше 1000 руб.
          +1
          есть модули GSM которые, стоят дёшево, те же RX TX, и AT команды,
          sim800l например https://www.youtube.com/watch?v=Hm41vcG_hkA
          старые телефоны это хорошо, но нужна и повторяемость
          модулей же можно взять 10 штук и распаралелить
            +2
            Проблема не в телефонах. Операторы банят за рассылку, приодится менять симки. Симки так же стоят денег + тариф. Возвращаемся примерно к тем же цифрам от которых отталкивались
              0
              А за что они банят? Вы не можете донести до оператора то, что пользователи сами подписываются на эту рассылку, и юридически это уже не спам?
                0
                Быстрая отправка походего текса считают как рассылку и более ничего иного услышать от них неудалось. Не спам, но рассылка же
                  0
                  А разве имеют право? Не нарушают ли ваше право на переписку?
                    0
                    Вот тут я не вкурсе, к сожалению
                      +2
                      Какие знакомые проблемы. В своём небольшом проекте тоже используем СМС и рассылаем с Android-аппарата (Xperia Ray старая была под рукой). К счастью, нужно в основном рассылать коды подтверждения регистрации и какие-то личные уведомления пользователям. Когда понадобилась массовая рассылка, то после примерно 1000-но СМС оператор заблокировал отправку СМС. Я написал в поддержку, объяснил им, что я не нарушаю никакой закон: все мои клиенты давали согласие на получение такого рода СМС. У меня уточнили паспортные данные (на кого зарегистрирована симка) и включили отправку. Дали пояснения, что она была заблокирована в автоматическом режиме.
                      P.S. Оператор — Yota. Там удобно, что безлимитные СМС. И поддержка отвечает быстро.
                      0
                      ТП говорила что блокирует служба безопастности пчелайна. Скорее всего там что-нибудь автоматическое стоит. Характерно, что когда мы меняли текст и рассылали 10 похожих вариантов одного и того-же сообщения, жило несколько дольше.
                    +4
                    Денег хотят, что непонятного?
                      0
                      Когда симки покупаются на физлицо?
                        0
                        симки с рынка, потому на кого они записаны нам было не известно
                          0
                          Это был не вопрос вам, а ответ Revertis. Естественно, симки, которые записаны на физлицо, не предполагают использование их для массовых рассылок, потому что оператор такой услугой торгует отдельно, продавая ее тем, кто занимается коммерческой деятельностью.
                            0
                            Симки эти, насколько я помню из разговора с ТП, были на юрлицо.
                  +1
                  Мы тоже, в своё время, столкнулись с проблемой каштомного рассылателя СМС, для которого использовали легендарный Huawei E1550. Всё таки канал связи выделяемый для одного абонента не подходит для массовой рассылки.

                  Для production конечно лучше использовать непосредственно интернет-шлюз СМС от какого-нибудь оператора или же один из многочисленных сервисов по массовой рассылке смс, которые предлагают гибкие тарифы, причём прогрессивные, чем больше СМС отправляете, тем дешевле каждое.
                    –3
                    Помню раньше были сервисы для бесплатной отправки СМС. Причем даже на официальных сайтах МТС и Билайна.
                    Если они еще остались, то проблем с отправкой бесплатной смс вообще не вижу.
                      0
                      Их очень сильно обрезали — чутьли не флешевая капча, подтверждение по смс на номер с таким же оператом с которого отправляешь. Совсем не вариант
                        0
                        Там был приличный временной интервал между сообщениями и ограничение на число сообщений.
                          0
                          В ЛК МТС можно заблокировать рассылку с сайта. У меня давно функция включена.
                          Может поискать какого-нибудь виртуального оператора?
                            0
                            Десять лет назад почти во всех регионах у операторов были email-шлюзы, позволяющие отправлять смски через отправку простого письма электронной почтой либо легковесные формы на сайтах без каптч для тех же целей. Даже приложение под j2me соответствующее писал (SMS Send), упрощающее этот процесс для обычных юзеров на их мобилках. Последнее живое подтверждение работоспособности приложения, найденное в сети, датируется 2012-м годом. А по факту с 2008-го года начались отключения шлюзов. Думаю, сейчас проще всё пушами юзерам отправлять и не вспоминать вообще об смс.
                            +2
                            Обычный GSM USB модем прекрасно рассылает СМС.
                              0
                              Модема не было, зато были нокии. А если нет разницы… :)
                                0
                                Модемы на авито чуть ли не по 100рублей, а время, потраченное на подключение нокии по юарту да пайку ей источника питания тоже стоит денег.
                                  0
                                  Количество модемов увеличивают цену 1 смс, поскольку тарифы по 6000₽ + регулярная смена симок из-за бана. Распараллеливание не решает проблему
                                    0
                                    Опечатка. 600, а не 6000
                                    –4
                                    Почему все последнее время считают деньги? Почему не сделать это все Just for fun или же из любопытства ради?
                                      +5
                                      Оно так и было изначально just for fun — нас было человек 20 на смс рассылке. А потом появились люди, которые тоже хотят получать наши уведомления. Вот и упирается весь fun в стоимость
                                0
                                А Viber или Skype не планируется?
                                  0
                                  У Viber закрытое API, поэтому с ним не получается. Вот как спам там рассылают мы еще не осознали. Со скайпом все гораздо проще, но вопрос есть ли у skype что-то наподобии канала и не банят ли за рассылки. Мне к примеру, никогда не приходил спам с неавторизов
                                    0
                                    У скайпа есть групповые чаты. Я не уверен, что это то, что нужно, но, возможно, стоит посмотреть на них.
                                      0
                                      Там может писать каждый и это уже не совсем тот формат, что нужно. Может быть информативнее, но из-за количества сообщений от участников что-то увидеть вовремя будет сложно
                                        0
                                        Telegram! Нужен бот для telegram!
                                          0
                                          Кто-то не прочитал то место статьи где у всех остальных обычно реклама ;)
                                          https://telegram.me/msk_metro
                                          +1
                                          У групчатов скайпа есть опция, так что всё ок.
                                          USERS_ARE_LISTENERS — Users with a USER role will be unable to post messages.

                                          Полный мануал:
                                          support.skype.com/en/faq/FA10042/what-are-chat-commands-and-roles
                                          0

                                          В групповом чате скайпа лимит на 100 собеседников. По крайней мере был раньше. Хотя… вряд ли в этом направлении что-то сменилось.

                                          +1
                                          Собственно, вполне официально
                                            0
                                            Не советую делать ботов для Skype. Мой бот «опубликовали» (т.е., перейдя по ссылке, им теперь может пользоваться неограниченное количество пользователей, у неопубликованных — только 50), а вот разместить в directory отказались, никакой причины не назвали, правил у них никаких нет, ответы от них ждешь по несколько недель.
                                              0
                                              Я никаких ботов создавать не собираюсь — всего лишь дал ссылку на официальное упоминание такой возможности.
                                          0
                                          Мне кажется немного людей пользуются Skype в метро, во всяком случае это моя догадка.
                                            0
                                            Всетаки кажется skype скорее рабочий мессенджер, чем для личных уведомлений
                                              0
                                              Телеграм самое то. Скайп неудобен, тем более в смартфоне (энерго и ресурсопотребление знаете ли), у вайбера закрытый код (рассылка, скорее всего, через саму службу).
                                              Подписался на канал) Спасибо за труд!
                                          +1
                                          Возможно, стоит пообщаться с оператором по поводу предоставления smpp, например? Не знаю, возможно ли это, но стоит предоставить оператору подтверждение того, что абоненты, которым отправляется sms, дали согласие на их получение. И есть же Push
                                            0
                                            Если вам интересно делать рассылку на большое количество пользователей в короткое время, то обратите внимание на SMPP протокол не требующий ни симок ни телефона.
                                            Jasmin SMS Gateway например, позволяет отослать 1000 смс за 10 сек.
                                            SMPP предлагает любой агрегатор и все операторы, цена смс начинается от 0,45р и падает в зависимости от обьемов.
                                              0
                                              А какой % потерь сообщений?
                                                0
                                                Сервисы обычно отдают ответ на все операции, который можно обработать и узнать % потерь.
                                                0
                                                Спасибо, посмотрим.
                                                +1
                                                Извините за рекламу, но вот ребята сделали уже давно. Отправляешь со своего телефона/телефонов по своим тарифам/пакетам смс. Расширяемость до бесконечности имхо. Можно купить на втором андроиде телефон менее, чем за тысячу и всё.
                                                И велосипед не нужен ;)
                                                  0
                                                  Получится те-же грабли что и у нас при рассылке с андроида, ведь работа с оператором на тех-же условиях
                                                    0
                                                    несколько дешевых телефонов и симок. Сервис перенаправит на «свободные».
                                                    а так да. банят операторы.
                                                    0

                                                    Ох, спасибо за полезный сервис, очень вовремя.
                                                    У вас есть опыт использования этого сервиса в боевом режиме?

                                                    0
                                                    С Метрополитеном не пробовали договориться? Возможно им и самим был бы интересен такой проект. Как вариант поиска инвестора :)
                                                      0
                                                      Не пробовали, они на своей волне
                                                      +1
                                                      А почему просто не запилить приложения для Android,IOS,WinPhone?
                                                        0
                                                        Сдается мне, что бота для телеграм поддерживать дешевле. По надежности доставки сообщения получается то же самое. Хотя нормальные СМС надежнее.
                                                          0
                                                          Приложение поставит меньше людей, чем оставят телефон / подпишутся на бота / etc. Впрочем с приложением открываются гораздо более интересные возможности
                                                          +1
                                                          Интересный проект, но почему не написать простенькое приложение для Android и использовать для рассылки GCM у них на сколько я помню нет ограничения на количество сообщений?
                                                            +1
                                                            И при этом можно гибко настраивать категории получаемых сообщений (аварии, события, новые станции)
                                                              0
                                                              Попробуем реализовать
                                                                +1

                                                                В качестве прототипа можно использовать это приложение https://play.google.com/store/apps/details?id=eu.apksoft.android.smsgateway
                                                                В комментах пишут что у него есть проблема с длинными сообщениями, но в плане интерфейса и настроек можно взять за образец.

                                                              0
                                                              Жму вам руку — задумывал похожий проект — пришел к тому же к чему пришли и вы. И телефон и телеграм все было ) Спасибо за статью было полезно почитать!
                                                                0
                                                                А что у вас был за проект, если не секрет?
                                                                  0

                                                                  Не только вы :)


                                                                  Вот от меня: http://htrd.su/wiki/proekty/sms_notification_system_sns/start


                                                                  Правда ссылки убились, не следил. Но где-то локально должно сохраниться. Там трудился Siemens ME45 ;-) с питанием подвешенным на датакабель.

                                                                  +1
                                                                  Давно подписан на рассылки проекта, и хочу поблагодарить авторов (Irenica & dcoder_mm) за их труд! Так как метро — мой основной способ телепортации, всегда очень полезно знать, что происходит в его подземных недрах.
                                                                  Очень надеюсь на то, что идея будет развиваться и дальше, а может и найдёт себе инвесторов!
                                                                    0
                                                                    Спасибо! Сначала прочитал не «авторов», а «актеров» и немного удивился)
                                                                    +1
                                                                    Идея отличная! По-хорошему это Яндекс.Метро с пушами и отрисовкой проблем сразу на карте. Также можно сделать учет этих проблем при построении маршрута.
                                                                      0
                                                                      Хорошая идея + можно сделать рекламный баннер и возможность отключить рекламу за 15 рублей. Это позволит получать небольшой доход на рассылку через смс шлюзы.
                                                                        0
                                                                        Да, как -то прицепится к я.метро было бы совсем прекрасно. В принципе у меня в мыслях уже давно есть локализация поломки + отрисовка на карте, но яндекс бы сразу дал много-много аудитории
                                                                        0
                                                                        На картинке вначале статьи во втором сообщении парсер сбился: "… москва движение неисправность поезд поломка".
                                                                          0
                                                                          Это первые версии информера, тогда удаляли с хештегов символ #. Так что не ошибка
                                                                          0
                                                                          У Департамента транспорта Москвы как раз пару дней назад свой бот в Telegram появился — https://telegram.me/DtRoad.
                                                                          О проблемах в метро сегодня сообщали, например.

                                                                          Интересно сравнить насколько ваш сервис более оперативен/полон :).
                                                                            +1
                                                                            Вообще говоря, есть очень бюджетный вариант, это push уведомления напрямую на браузеры телефонов-ваших подписчиков (Chrome, Safari). Да и тот же бот телеграм так же снимает нагрузку на SMS-рассылку.
                                                                              0
                                                                              Телеграм — вещь отличная, но в нашей задаче, увы, неприменима: из 30+ родителей в классе дай бог 1-2 тётки знают что это…

                                                                              Пользуясь случаем хочу спросить — можно ли как-то поймать подтверждение доставки (статус доставлено в смартфоне) — это что — технологическое смс или что-то иное? «Чтобы особо вредная тётка не смогла отбрехаться — мол не получала ничего от вас!»

                                                                              По поводу блокировки — я купил у оператора пакет в 1000 смс, какое ему дело куда и с какой скоростью я отправляю СМС?
                                                                                0
                                                                                какое ему дело куда и с какой скоростью я отправляю СМС?

                                                                                1) денег хотят. В коммерческих целях почти все становится дороже: интернет, аренда, и т.д.
                                                                                2) человек меньше нагружает ресурсы, чем бот.
                                                                                  0
                                                                                  Когда нас блокировали и звонили в тп никто не предлагал за деньги разлочить или разрешить рассылку
                                                                                    0
                                                                                    А почему они должны были физикам это предлагать? https://partners.ssl.mts.ru/sms/
                                                                                      0
                                                                                      вот то же у tele2 http://ru.tele2.ru/cooperation/online-partners/ у Билайна не нашел, у остальных лень смотреть.
                                                                                        0
                                                                                        Спасибо за ссылки, посмотрю. Ну а почему физики не могут рассылать смс? Нужно обязательно быть юриком?
                                                                                          0
                                                                                          Я не специалист в этом вопросе. Но уверен, что тут просто юридические препоны.

                                                                                          Фактически как фищическое лицо вы заключаете договор на абонентское обслуживание. СМС-рассылки туда не включены. Это уже партнёрская программа и другие деньги, а когда вопрос касается больших денег, то у юридических лиц ответственность больше.
                                                                                    0
                                                                                    что-то было в апи про получение статуса смс
                                                                                      0
                                                                                      Один из web-провайдеров обманывал со статусом (возвращал доставлено а СМС не приходила). После этого веры нет никому.
                                                                                      Потому и спрашиваю — как в телефоне/3G-модеме «поймать» статус доставки СМС.
                                                                                        0
                                                                                        Как вариант детализация от оператора симки. Обманывает ли оператор не знаю. Про web-провайдера были такие же ситуации и не однократно
                                                                                        А про API имела ввиду android. Например, так http://stackoverflow.com/questions/4639778/how-to-monitor-each-of-sent-sms-status
                                                                                        Не проверяла код

                                                                                  Only users with full accounts can post comments. Log in, please.