Вы знали, что google календарь может отправлять СМС напоминания? Скорее всего да. Я сам этим пользуюсь постоянно. А знали ли вы, что с помощью таких напоминаний можно сделать себе СМС оповещения? А вот можно. Эдакий персональный бесплатный СМС гейт. Я об этом когда-то давно читал, но тогда мне это нужно не было. Недавно понадобилось отправлять СМС оповещения от железки аля умный дом и я вспомнил об этом способе. Вспомнил, нашел готовый django модуль, реализующий его, и подключил к своему сайту. Работает! На все у меня ушло где-то пол часа. Но обо всем по порядку.
Рассказал недавно мой хороший знакомый, что мол раздобыл он себе железяку, к которой можно наподключать разных датчиков. Железяка будет эти датчики опрашивать и сообщать о проблемах в доме (на даче). Например, в помещение проникли воры, или подвал затопило, или бумага в туалете заканчивается (а почему нет? такой датчик может спасти от пренеприятнейшего инцидента).
Вот только есть одна беда: железяка древняя и не умеет ходить по 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 приложение для этого сделаю. Кто знает.
Может вы что-то еще подскажете? Было бы интересно послушать, что можно еще сделать с такой штукой. Ограничение у него только одно: получателя СМС нужно предварительно регистрировать в системе.
Автор: akava