Google Apps Script: Как отправить текстовое сообщение?

Что такое Google Apps Script и его возможности

Google Apps Script (GAS) — это облачная платформа для разработки на JavaScript, позволяющая автоматизировать задачи, расширять функциональность и интегрировать различные сервисы Google Workspace (Sheets, Docs, Forms, Gmail и др.) и сторонние API. Она предоставляет удобную среду для создания скриптов, выполняющихся на серверах Google, без необходимости управления инфраструктурой.

Возможности GAS обширны: от автоматизации рутинных операций в таблицах до создания веб-приложений и интеграции с внешними сервисами через API. Это мощный инструмент для разработчиков, стремящихся повысить эффективность рабочих процессов.

Почему Google Apps Script подходит для отправки SMS

Интеграция GAS с внешними API через сервис UrlFetchApp делает его идеальным кандидатом для автоматизации отправки SMS. Вы можете:

Триггерить отправку SMS на основе событий в Google Workspace (например, заполнение формы, изменение ячейки в таблице).

Планировать массовые рассылки с помощью встроенных временных триггеров.

Персонализировать сообщения, используя данные из Google Sheets или других источников.

Интегрировать логику отправки SMS в более сложные рабочие процессы, управляемые GAS.

Это позволяет создавать гибкие и мощные решения для SMS-коммуникаций без необходимости развертывания и поддержки отдельного сервера.

Обзор различных сервисов для отправки SMS (Twilio, Nexmo и др.)

Для отправки SMS через API существует множество провайдеров. Наиболее популярные и надежные:

Twilio: Лидер рынка с обширной документацией, гибкими API и хорошей репутацией. Предоставляет широкий спектр коммуникационных API (SMS, голос, видео).

Vonage (ранее Nexmo): Сильный конкурент Twilio, также предлагающий разнообразные API для коммуникаций, включая SMS.

Другие сервисы: Существуют и другие провайдеры (например, MessageBird, Sinch), каждый со своими тарифами, покрытием и набором функций. Выбор зависит от конкретных требований проекта, географии и бюджета.

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

Настройка сервиса Twilio для отправки SMS

Регистрация и получение API ключей Twilio

Создайте аккаунт на официальном сайте Twilio.

Подтвердите свой номер телефона.

После входа в консоль Twilio вы найдете ваши Account SID и Auth Token на главной панели (Dashboard). Эти учетные данные критически важны для аутентификации ваших API-запросов.

Приобретите номер телефона Twilio. Перейдите в раздел "Phone Numbers" -> "Manage" -> "Buy a number". Выберите номер с поддержкой SMS в нужной стране.

Важно: Храните ваш Auth Token в секрете. В Google Apps Script рекомендуется использовать PropertiesService для безопасного хранения учетных данных.

Установка библиотеки Twilio в Google Apps Script

Хотя существуют сторонние библиотеки GAS для Twilio, наиболее гибкий и современный подход — использовать встроенный сервис UrlFetchApp для прямых вызовов Twilio REST API. Это избавляет от необходимости поддерживать сторонние библиотеки и дает полный контроль над запросами.

Вам не нужно устанавливать внешние библиотеки в классическом понимании. Вся работа будет заключаться в формировании и отправке HTTP POST-запросов к эндпоинту Twilio API.

Пополнение баланса Twilio для отправки сообщений

Для отправки SMS с реального номера (не триального) необходимо пополнить баланс вашего Twilio аккаунта. Перейдите в раздел "Billing" в консоли Twilio и добавьте способ оплаты. Стоимость SMS зависит от страны получателя и типа номера.

На триальном аккаунте можно отправлять сообщения только на подтвержденные номера телефонов, и к сообщению будет добавляться префикс Twilio.

Код Google Apps Script для отправки SMS через Twilio

Описание основных параметров скрипта (Account SID, Auth Token, номер Twilio)

Для взаимодействия с Twilio API потребуются следующие параметры:

accountSid: Уникальный идентификатор вашего аккаунта Twilio.

authToken: Секретный ключ для аутентификации.

twilioNumber: Номер телефона, приобретенный в Twilio, с которого будут отправляться SMS.

recipientNumber: Номер телефона получателя в формате E.164 (например, +14155552671).

messageBody: Текст отправляемого сообщения.

Пример кода для отправки простого текстового сообщения

/**
 * Отправляет SMS-сообщение через Twilio API.
 *
 * @param {string} recipientNumber Номер получателя в формате E.164 (e.g., '+14155552671').
 * @param {string} messageBody Текст сообщения.
 * @param {string} [accountSid] Ваш Twilio Account SID. По умолчанию берется из PropertiesService.
 * @param {string} [authToken] Ваш Twilio Auth Token. По умолчанию берется из PropertiesService.
 * @param {string} [twilioNumber] Ваш номер Twilio. По умолчанию берется из PropertiesService.
 * @return {void}
 */
function sendSmsViaTwilio(recipientNumber, messageBody, accountSid, authToken, twilioNumber) {
  // Получение учетных данных из PropertiesService (более безопасный способ)
  const scriptProperties = PropertiesService.getScriptProperties();
  const sid = accountSid || scriptProperties.getProperty('TWILIO_ACCOUNT_SID');
  const token = authToken || scriptProperties.getProperty('TWILIO_AUTH_TOKEN');
  const twilioPhone = twilioNumber || scriptProperties.getProperty('TWILIO_PHONE_NUMBER');

  if (!sid || !token || !twilioPhone) {
    Logger.log('Ошибка: Учетные данные Twilio не найдены в Script Properties. Установите TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_PHONE_NUMBER.');
    return;
  }

  // Формирование URL эндпоинта Twilio API
  const apiUrl = `https://api.twilio.com/2010-04-01/Accounts/${sid}/Messages.json`;

  // Данные для POST-запроса
  const payload = {
    'To': recipientNumber,
    'From': twilioPhone,
    'Body': messageBody
  };

  // Опции для UrlFetchApp
  const options = {
    'method': 'post',
    'headers': {
      'Authorization': 'Basic ' + Utilities.base64Encode(`${sid}:${token}`)
    },
    'payload': payload,
    'muteHttpExceptions': true // Позволяет обрабатывать ошибки вручную
  };

  try {
    // Выполнение запроса к Twilio API
    const response = UrlFetchApp.fetch(apiUrl, options);
    const responseCode = response.getResponseCode();
    const responseBody = response.getContentText();

    if (responseCode >= 200 && responseCode < 300) {
      const messageData = JSON.parse(responseBody);
      Logger.log(`Сообщение успешно отправлено. SID: ${messageData.sid}, Статус: ${messageData.status}`);
    } else {
      Logger.log(`Ошибка отправки SMS. Код: ${responseCode}, Ответ: ${responseBody}`);
      // Дополнительная обработка ошибок (например, уведомление администратору)
    }
  } catch (error) {
    Logger.log(`Критическая ошибка при вызове API Twilio: ${error}`);
  }
}

/**
 * Пример вызова функции отправки SMS.
 */
function testSendSms() {
  // Перед запуском убедитесь, что установили свойства скрипта:
  // PropertiesService.getScriptProperties().setProperties({
  //   'TWILIO_ACCOUNT_SID': 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  //   'TWILIO_AUTH_TOKEN': 'your_auth_token',
  //   'TWILIO_PHONE_NUMBER': '+15017122661'
  // });

  const recipient = '+14155552671'; // Замените на реальный номер для теста
  const message = 'Привет из Google Apps Script и Twilio!';
  sendSmsViaTwilio(recipient, message);
}
Реклама

Обработка ошибок и логирование отправленных сообщений

В приведенном выше коде используется блок try...catch для перехвата общих ошибок при вызове UrlFetchApp. Параметр muteHttpExceptions: true позволяет получить ответ от сервера Twilio, даже если он содержит код ошибки (например, 4xx или 5xx), и проанализировать его.

Логирование: Используйте Logger.log() для записи информации о статусе отправки, идентификаторе сообщения (SID) или тексте ошибки. Для более продвинутого логирования можно записывать данные в Google Sheet.

Обработка кодов ответа: Анализируйте responseCode и responseBody для понимания причины сбоя (недостаточно средств, неверный номер, проблемы у оператора и т.д.).

Повторные попытки: Для критически важных сообщений можно реализовать логику повторных отправок с экспоненциальной задержкой.

Дополнительные возможности и расширения

Отправка SMS по расписанию (с использованием триггеров Google Apps Script)

GAS позволяет создавать временные триггеры для автоматического запуска функций.

В редакторе скриптов перейдите в раздел "Триггеры" (значок будильника).

Нажмите "Добавить триггер".

Выберите функцию для запуска (например, функцию, которая читает данные из таблицы и вызывает sendSmsViaTwilio для каждой строки).

Выберите тип триггера "На основе времени".

Настройте периодичность (ежедневно, еженедельно, каждый час и т.д.).

Это идеально подходит для отправки регулярных отчетов, напоминаний или маркетинговых кампаний.

Персонализация сообщений (использование данных из Google Sheets)

Мощь GAS заключается в легкой интеграции с Google Sheets. Вы можете хранить списки контактов, имена, детали заказов или маркетинговые сегменты в таблице и использовать эти данные для персонализации SMS.

/**
 * Отправляет персонализированные SMS клиентам из Google Sheet.
 */
function sendPersonalizedSmsFromSheet() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('Клиенты'); // Укажите имя вашего листа
  // Предполагаем столбцы: A - Имя, B - Телефон, C - Статус отправки
  const dataRange = sheet.getDataRange();
  const values = dataRange.getValues();

  // Пропускаем заголовок
  for (let i = 1; i < values.length; i++) {
    const row = values[i];
    const name = row[0];
    const phone = row[1];
    const statusCell = sheet.getRange(i + 1, 3);
    const currentStatus = statusCell.getValue();

    // Отправляем, только если еще не отправлено
    if (phone && name && currentStatus !== 'Отправлено') {
      const message = `Здравствуйте, ${name}! Специальное предложение для вас.`;
      // Вызов функции отправки SMS
      try {
        sendSmsViaTwilio(phone, message);
        statusCell.setValue('Отправлено'); // Отмечаем успешную отправку
        Logger.log(`Отправлено SMS для ${name} (${phone})`);
      } catch (e) {
        statusCell.setValue('Ошибка');
        Logger.log(`Ошибка отправки SMS для ${name} (${phone}): ${e}`);
      }
      // Добавляем небольшую паузу, чтобы не превышать лимиты API
      Utilities.sleep(500); // Пауза 0.5 секунды
    }
  }
}

Отправка SMS-уведомлений при определенных событиях (например, при изменении данных в таблице)

Можно настроить триггер, срабатывающий при редактировании таблицы (onEdit) или изменении данных (onChange). Это позволяет, например, отправлять SMS-уведомление менеджеру при появлении нового заказа или изменении статуса задачи в Google Sheets.

Создайте функцию, которая будет вызываться триггером, анализировать объект события (e) для определения измененных данных и, при необходимости, вызывать sendSmsViaTwilio.

Заключение

Преимущества использования Google Apps Script для отправки SMS

Автоматизация: Легко автоматизировать отправку на основе данных и событий Google Workspace.

Интеграция: Бесшовная интеграция с Google Sheets, Forms, Calendar и др.

Гибкость: Полный контроль над логикой отправки через UrlFetchApp и API провайдера.

Бессерверность: Нет необходимости управлять собственной инфраструктурой.

Стоимость: GAS бесплатен (в рамках квот), оплачивается только трафик SMS у провайдера.

Ограничения и рекомендации по использованию сервиса

Квоты GAS: Google Apps Script имеет суточные лимиты на время выполнения, количество вызовов UrlFetchApp и другие операции. Учитывайте это при планировании массовых рассылок.

Безопасность: Надежно храните API ключи Twilio с помощью PropertiesService. Не вставляйте их напрямую в код.

Законодательство: Соблюдайте законы о связи и требования к получению согласия на отправку SMS в вашей юрисдикции.

Обработка ошибок: Реализуйте надежную обработку ошибок и мониторинг для отслеживания статуса доставки.

Лимиты API: Учитывайте ограничения скорости отправки (rate limits), установленные SMS-провайдером (например, Twilio).

Дальнейшие шаги и ресурсы для изучения Google Apps Script

Официальная документация Google Apps Script: Основной источник информации.

Документация Twilio REST API: Изучите все возможности API для SMS и других сервисов.

Справочник UrlFetchApp: Понимание всех параметров и возможностей сервиса.

Справочник PropertiesService: Изучение методов безопасного хранения данных.

Сообщества разработчиков: Форумы и группы, посвященные Google Apps Script и Twilio.

Использование Google Apps Script в связке с API-провайдерами SMS, такими как Twilio, открывает широкие возможности для автоматизации бизнес-коммуникаций.


Добавить комментарий