Страницы

четверг, 17 января 2013 г.

Google Script. MailApp, ContactsApp, CalendarApp.

Продолжаем знакомиться с Google Script. Создадим форму обратной связи для сайта, используя стандартный инструмент Google Docs - формы. Кроме того наша форма будет не только собирать информацию в таблицу, но и своевременно оповещать нас о поступлении информации на E-mail, посредством SMS, создавать новое событие в Календаре, а также вносить контактные данные в Контакты.

Заходим на Google Drive, создаем таблицу.
Для контраста с предыдущей статьей, посвященной SpreadsheetApp, будем обращаться к единственному листу таблицы по имени, для чего назовем его MyForm.
Заполняем заголовки столбцов: Name - Email - Text.
Создаем форму: Инструменты - Создать форму. Остается слегка подрихтовать внешний вид формы (на Ваш вкус):

После создания формы в таблице появился еще один столбец - Отметка времени, в котором будет фиксироваться дата занесения данных.
Кроме того в меню появился пункт Форма для доступа к настройкам нашей формы.

Заходим в Календарь Google.
Открываем страницу настроек (в правом верхнем углу - "Настройки"),
открываем "Настройка для мобильных устройств" и вводим номер мобильного телефона, на который мы планируем получать уведомления.

Создаем новый календарь. Я назвал его Feedback.
В контекстном меню созданного календаря выбираем "Напоминания и оповещения".
На открывшейся странице настроек выбираем "Добавить напоминание" - SMS - 1 мин. и отмечаем чекбокс SMS в строке "Новые мероприятия".

Далее пишем функцию отправки оповещения, назовем ее sendMail:
function sendMail() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('MyForm');
  var values = sheet.getDataRange().getValues();

  // проверяем наличие хотя бы одной записи
  if (values.length < 2)
    return;

  var lastValueIndex = values.length - 1;
  
  var myEmail = 'mymail@gmail.com'; // Ваш e-mail
  var subject = 'Feedback';

  // отправляем письмо 
  MailApp.sendEmail(myEmail, subject, values[lastValueIndex][3],{name: values[lastValueIndex][1], replyTo: values[lastValueIndex][2]});

  // получаем группу контактов
  var group = ContactsApp.getContactGroup(subject);
  // если группы не существует - создаем
  if (!group)
    group = ContactsApp.createContactGroup(subject); 

  // если контакта не существует - создаем
  if (!ContactsApp.getContact(values[lastValueIndex][2])) {
    var contact = ContactsApp.createContact(values[lastValueIndex][1], '*', values[lastValueIndex][2]);
    contact.addToGroup(group); // добавляем в группу
  }

  // получаем календарь
  var calendar = CalendarApp.getCalendarsByName(subject)[0]; 
  // проверяем наличие календаря
  if (!calendar)   
    return;

  var currentDate = new Date();
  // добавим к текущей дате пару минут
  var eventDate =  new Date(currentDate.getTime() + 120000);

  // содаем событие в календаре 
  calendar.createEvent(subject, eventDate, eventDate, {description:  values[lastValueIndex][3]});   
}
Затем создаем триггер выполнения функции sendMail: Окно редактора скриптов - Ресурсы - Триггеры текущего скрипта - Добавить Триггер:
Для выполнения скрипта требуется авторизация:
Предоставляем доступ:
Теперь форму можно встроить в веб-страницу:
Однако для теста нам достаточно перейти к активной форме: Форма - Перейти к активной форме:

После отправки формы мы получаем следующее:
- в таблице:
- в Gmail:
- в контактах:
- в календаре:

- плюс напоминание посредством SMS с темой Feedback.

That's all folks :).