Google Calendar, как бесплатный СМС гейт
Вы знали, что google календарь может отправлять СМС напоминания? Скорее всего да. Я сам этим пользуюсь постоянно. А знали ли вы, что с помощью таких напоминаний можно сделать себе СМС оповещения? А вот можно. Эдакий персональный бесплатный СМС гейт. Я об этом когда-то давно читал, но тогда мне это нужно не было. Недавно понадобилось отправлять СМС оповещения от железки аля умный дом и я вспомнил об этом способе. Вспомнил, нашел готовый django модуль, реализующий его, и подключил к своему сайту. Работает! На все у меня ушло где-то пол часа. Но обо всем по порядку.
Хабрбзер IVIlych, указал на более простой способ, без танцев с календарем. Оказалось что сайт sms.ru уже несколько лет предоставляет Бесплатные СМС для программистов.
Регистрация проходит на номер мобильного телефона, никаких смс отправлять для этого не нужно. На номер придет только проверочный код.
После регистрации можно отправлять до 60смс в день на свой номер, указанный при регистрации. Уже почти месяц как перевел все свои сервисы с гугла на данный сервис. Радует отсутствие минутной задержки перед отправкой и возможность получения статуса сообщения.
Отправить можно разными способами, на сайте, в разделе «Программистам» есть множество готовых примеров:
- HTTP
- curl для командной строки (UTF-8)
- php (с включенным модулем curl)
- php (без curl)
- php (усиленная авторизация)
- PERL (усиленная авторизация)
- Python
Самый простой способ это открыть страницу:
sms.ru/sms/send?api_id=xxxx-xxxx-xxxxx-xxxx-xxxx&to=номер_телефона&text=hello+world
, где — xxxx-xxxx-xxxxx-xxxx-xxxx это id доступный после регистрации.Так же есть возможность пересылки email на смс. В разделе «Почта sms.ru» можно настроить свой почтовый ящик
name@sms.ru
письма на который будут пересылаться на телефон в виде смс. При включенной опции «обрезать до 1смс» все сообщения на свой номер будут бесплатны.Замечание о sms.ru взято из поста хабрюзера Wida: Отправка бесплатного sms сообщения в linux.
Рассказал недавно мой хороший знакомый, что мол раздобыл он себе железяку, к которой можно наподключать разных датчиков. Железяка будет эти датчики опрашивать и сообщать о проблемах в доме (на даче). Например, в помещение проникли воры, или подвал затопило, или бумага в туалете заканчивается (а почему нет? такой датчик может спасти от пренеприятнейшего инцидента).
Вот только есть одна беда: железяка древняя и не умеет ходить по https, а все СМС гейты (что он видел) имеют только https API. Я, не долго думая, сделал http прокси у себя на сайте. Все работает, прокси на гугль ходит как молодой, меняет https на http все довольны. А вот и нет, оказалось, что с провайдерами не так все просто. То дорого, то только корпоративным клиентам, то API они дают не всем… В общем, не срослось у моего друга с гейтами. Я научил его админить прокси и благополучно забыл об этом.
Несколько дней эта штука крутилась у меня в подсознании (судя по всему) и вот как раз вчера вылезла оттуда со словами “Гугль календарь может отправлять СМС и у него есть API. Помнишь мы давно об этом читали?”. Я полез в гугль, нашел джанго модуль, добавил его к сайту, протестил отправку (работает!), допилил трохи и осчастливил товарища. Пусть пользуется, мне не жалко :)
Как подключить
Хватит лирики. Практика.
Создать событие с напоминанием можно через гугл API. Это обычный пост запрос с OAuth2.0 авторизацией и JSON параметрами в BODY. Прямо по ссылке можно попробовать создать себе в календаре напоминание. Есть клиенты для многих платформ.
Но у нас ведь Django. В котором есть модуль django-calendar-sms. Который легко устанавливается и настраивается:
-
pip install django-calendar-sms
-
Добавляем приложение
calendar_sms
вINSTALLED_APPS
в файле настроек (обычно settings.py) -
Синхронизируем базу
./manage.py syncdb
-
После чего идем в админку Django, настраиваем данные гугль аккаунта и календаря.
Все, можно прямо из django консоли (./manage.py shell
) отправить себе SMS:
>>> from calendar_sms.sms import sendSMS
>>> print sendSMS('Hello, World!')
Вот код моей django view, которая отправляет СМС (код view на GitHub) :
def send(request):
secret = request.GET.get('secret')
text = request.GET.get('text')
if not secret or secret != SMS_SECRET or not text:
raise Http404
try:
r = sms.sendSMS(text) or "Sent" # sendSMS returns None on success
except Exception as e:
r = e.message
return HttpResponse(r)
Что дальше?
Я планирую этот код менять, так как меня не устраивает, что с одного django сайта можно слать СМС только всем пользователям сразу. Я хочу, чтобы СМСки уходили отдельно мне и отдельно моему товарищу.
Еще я хочу подключить к этому гейту мою жену, чтобы было проще слать SMS сообщения в роуминге из командировок. Может даже android приложение для этого сделаю. Кто знает.
Может вы что-то еще подскажете? Было бы интересно послушать, что можно еще сделать с такой штукой. Ограничение у него только одно: получателя СМС нужно предварительно регистрировать в системе.