Pull to refresh

Оповещение о новых письмах в Gmail по SMS средствами Google Calendar + Google Apps Script

Reading time4 min
Views114K
Увы, но этот способ перестанет работать с 27-го июня 2015, т.к. Google отключает функцию sms-оповещений для календаря.
support.google.com/calendar/answer/45351?hl=ru

Важно! SMS-оповещения будут отключены 27 июня
С 27 июня 2015 года вы больше не будете получать SMS-оповещения от Google Календаря. Функция SMS-оповещений была внедрена ещё до широкого распространения смартфонов. Однако современные мобильные устройства позволяют получать оповещения в более удобном формате и даже в офлайн-режиме.
Для просмотра оповещений вы можете использовать приложение календаря, которое было установлено на смартфоне по умолчанию, либо скачать Google Календарь для Android или iPhone. Подробнее об оповещениях…
Примечание. Это изменение не коснется пользователей Google Apps for Work, Education и Government.




Хочу поделиться с Харбра-обществом полезным, с моей точки зрения, лайвхаком: уведомления по SMS о новой почте в ящике Gmail. Реализуется это небольшим скриптом, который живет и работает в Google Drive (бывшие Google Docs).

Принцип работы следующий: скрипт по таймеру проверяет папку «Входящие» в почтовом ящике и если обнаруживает новые письма, то создает в google calendar событие с именем, как тема письма, и включает для него SMS уведомление. В результате вам приходит SMS сообщение следующего содержания:

Напоминание: Тема письма @ дата и время

Подробности реализации, как всегда, под «катом».

Итак, что нужно для начала: у вас должен быть привязан телефонный номер к Google Calendar, как это сделать написано вот тут — Регистрация мобильного телефона:
support.google.com/calendar/bin/answer.py?hl=ru&hlrm=en&answer=45351

Следующие несколько шагов необходимо выполнить, что бы скрипт мог корректно обрабатывать новую почту.

Шаг 1: Создайте новый ярлык в Gmail с именем, например, SMSnotify (или любым другим, по вашему усмотрению). Как это сделать написано вот тут – Использование ярлыков:
support.google.com/mail/bin/answer.py?hl=ru&hlrm=ru&answer=118708#0

Шаг 2: Создайте фильтр, который будет применять ярлык SMSnotify ко всем входящим ( To: <ваше-имя> @ gmail.com). Как это сделать, написано вот тут – Использование фильтров:
support.google.com/mail/bin/answer.py?hl=ru&hlrm=ru&answer=6579#0
Таким образом, все новые письма будут отмечаться этим ярлыком.

Шаг 3: Войдите в Google Drive (или Docs, если еще не переключились) и создайте новую электронную таблицу (Spreadsheet). Откройте созданную таблицу и в верхнем меню выберите Tools > Script Editor.


Шаг 4: В связи с тем, что при установке уведомлений прямо из кода, часто возможны ошибки вида

Calendar: Mismatch: etags

(детальнее тут: code.google.com/p/google-apps-script-issues/issues/detail?id=264)

Нужно создать доп. календарь и настроить SMS уведомления: установить по-умолчанию для всех новых встреч вот так:

Настройки->Календари->Уведомления->По умолчанию->SMS->%% мин

В этом примере имя календаря будет "email"

Приятно удивился, узнав, что теперь из интерфейса гуглодиска можно создавать скрипты как отдельные приложения, не встроенные в таблицу. Так что "Шаг 3" теперь можно свести к следующему:


Откроется новая страница с гугловской “скрипт-IDE”, вот тут и начинается самое интересное.

Полный текст кода находится под спойлером

Кликните эту надпись чтобы показать/скрыть код
function my_notification() 
{
  var calendar = CalendarApp.getOwnedCalendarsByName('email')[0]; //открываем календарь с именем "email"
  
  var threads = GmailApp.getUserLabelByName('SMSnotify').getThreads();  //переменная, в которой хранится коллекция цепочек с ярлыком SMSnotify
  var now = new Date();

  if(threads == 0) return; // прекращение выполнения, если новых цепочек нет
  
  for(i in threads) // создаем события
  {
    calendar.createEvent(threads[i].getFirstMessageSubject(),
        new Date(now.getTime()+60000),
        new Date(now.getTime()+60000));
  }
    
  GmailApp.getUserLabelByName('SMSnotify').removeFromThreads(threads); //снимаем метки "SMSnotify" с цепочек
}


После того, как вы ввели код, нужно создать триггер по которому и будет запускаться скрипт. Для этого кликаем на меню "Ресурсы", а в нем на "Триггеры текущего скрипта".



Нам нужен time-driven триггер с частотой повторения, например, один час.



В процессе изменения условий срабатывания триггера или сохранения изменений в самом скрипте, будет появляться окошко авторизации. Смело авторизуем :)


После всех манипуляций, в качестве теста, пробуем запустить скрипт на выполнение.



Иногда вам могут приходить сообщения о неудачном выполнении скрипта (даже если код правильный и до этого все работало). Эти сообщения можно отключить (хотя я оставил): нужно кликнуть на «notifications» («уведомления») в окне редактора триггеров и появится вот такое окошко



Спасибо, что дочитали до конца, надеюсь, ничего не забыл. Буду очень рад, если кому-то это пригодится.
Любые замечания, дополнения, критика приветствуются! Совсем недавно открыл для себя этот замечательный API и только начал с ним знакомиться.

Ссылки по теме:
Документация по стандартным службам (только англ) — developers.google.com/apps-script/defaultservices
Различные руководства (только англ) — developers.google.com/apps-script/articles

Благодарности: Спасибо пользователям Yan169 и OlegT за проявленный интерес и советы!
Tags:
Hubs:
Total votes 102: ↑98 and ↓4+94
Comments72

Articles