Всем привет! У платформы МТС Exolve есть сообщество, которое часто делится полезными гайдами от прокачки серверов до создания своих приложений. Наиболее интересные и подробные продолжаем размещать в нашем хабе.

Google Таблицы — мощный инструмент для работы с данными. Их потенциал значительно расширяется с помощью Apps Script. 

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

Способ 1 — разовые уведомления

Подходит, если вы используете таблицу для автоматического сбора и хранения, например, лидов. Чтобы не пропустить новую заявку, вместо полноценной интеграции с CRM можно настроить быстрое уведомление по SMS себе или менеджеру.

Скрипт извлекает номер телефона и текст сообщения из таблицы, после чего отправляет сообщение через HTTP-запрос по SMS API платформы МТС Exolve.

Шаг 1. Создание и настройка Google Sheets

  1. Создайте новый документ.

  2. Введите текст сообщения в ячейке A1.

  3. В ячейке B1 введите номер телефона получателя.

Шаг 2. Написание скрипта для отправки SMS

Откройте редактор скриптов Apps Script, выбрав Extensions -> Apps Script. Вставьте следующий код:

function sendSMSFromCell() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var messageCell = sheet.getRange('A1');  // Ячейка для сообщения
  var destinationCell = sheet.getRange('B1');  // Ячейка для номера получателя
  var smsContent = messageCell.getValue();
  var phoneNumber = destinationCell.getValue();
  
  // Убедитесь, что номер телефона и текст сообщения передаются как строки
  sendSMS('NOMER_OTPRAVITELYA_EXOLVE', String(phoneNumber), smsContent); // Номер отправителя, номер получателя, текст сообщения
}

function sendSMS(number, destination, text) {
  var apiUrl = 'https://api.exolve.ru/messaging/v1/SendSMS';
  
  var payload = {
    'number': number,       // Номер отправителя
    'destination': destination, // Номер получателя
    'text': text           // Текст сообщения
  };
  
  Logger.log('Payload: ' + JSON.stringify(payload));
  
  var options = {
    'method': 'post',
    'contentType': 'application/json',
    'headers': {
      'Authorization': 'Bearer VASH_TOKEN'
    },
    'payload': JSON.stringify(payload),
    'muteHttpExceptions': true  // Чтобы увидеть полный ответ при ошибке
  };
  
  try {
    var response = UrlFetchApp.fetch(apiUrl, options);
    Logger.log('Response code: ' + response.getResponseCode());
    Logger.log('Response body: ' + response.getContentText());
  } catch (error) {
    Logger.log('Error: ' + error.toString());
  }
}

function testSendSMS() {
  sendSMSFromCell();
}

Объяснение кода

Функция sendSMSFromCell() получает активный лист. Считывает значения из ячеек A1 и B1 для сообщения и номера телефона получателя соответственно. Вызывает функцию sendSMS(), передавая ей номер отправителя, номер получателя и текст сообщения.

Функция sendSMS() формирует URL для API. Создает объект payload с номером отправителя, номером получателя и текстом сообщения. Использует UrlFetchApp.fetch для отправки POST-запроса на API, передавая данные в формате JSON.

Функция testSendSMS() тестирует отправку сообщения, вызывая функцию sendSMSFromCell().

Шаг 3. Запуск функции

Нажмите «Run» и при появлении запроса предоставьте скрипту необходимые разрешения на доступ к внешним ресурсам и выполнению HTTP-запросов. После этого скрипт отправит SMS.

Шаг 4. Настройка триггера

Чтобы автоматически отправлять SMS при изменении данных, настройте триггер. В редакторе скриптов выберите «Триггеры» и добавьте новый триггер для функции sendSMSFromCell(). Установите тип триггера «При изменении» (onChange).

Теперь ваш скрипт будет автоматически отправлять SMS при изменении любых данных в таблице.

Способ 2 — массовая отправка SMS

Скрипт извлекает номера телефонов с сообщениями из таблицы и отправляет их на сервер массовой рассылки одним запросом. Создайте в таблице два столбца с номерами телефоном и текстовыми сообщения, которые будут отправляться. Заполните эти данные тестовыми значениями. Теперь откройте редактор Apps Script и вставьте следующий код:

function sendSmsFromGoogleSheet() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues(); // Считываем все данные из таблицы
  const apiKey = 'EXOLVE_API_KEY'; // Замените на ваш API-ключ Exolve
  const apiUrl = 'https://api.exolve.ru/messaging/v1/SendSMS'; // URL для отправки SMS

  for (let i = 1; i < data.length; i++) { // Пропускаем заголовок таблицы (первая строка)
    const phoneNumber = String(data[i][0]); // Колонка A: номер телефона
    const message = data[i][1];    // Колонка B: текст сообщения

    if (phoneNumber && message) { // Проверяем, что номер и сообщение не пустые
      try {
        const payload = {
          "number": "RENTED_PHONE_NUMBER_FROM_EXOLVE",
          "destination": phoneNumber,
          "text": message
        };

        const options = {
          method: 'post',
          contentType: 'application/json',
          payload: JSON.stringify(payload),
          headers: {
            'Authorization': 'Bearer ' + apiKey
          }
        };

        const response = UrlFetchApp.fetch(apiUrl, options); // Отправляем запрос на сервер
        const responseCode = response.getResponseCode(); // Получаем HTTP-код ответа

        if (responseCode === 200) {
          const responseData = JSON.parse(response.getContentText());
          const messageId = responseData.message_id; // Идентификатор отправленного сообщения
          sheet.getRange(i + 1, 3).setValue('Отправлено, ID: ' + messageId); // Записываем статус в колонку C
        } else {
          sheet.getRange(i + 1, 3).setValue('Ошибка: ' + responseCode); // Записываем код ошибки
        }
      } catch (error) {
        Logger.log('Ошибка при отправке SMS для строки ' + (i + 1) + ': ' + error);
        sheet.getRange(i + 1, 3).setValue('Ошибка: ' + error.message); // Записываем сообщение об ошибке
      }
    } else {
      sheet.getRange(i + 1, 3).setValue('Нет данных'); // Если данные отсутствуют, записываем "Нет данных"
    }
  }
}

Объяснение кода

Обработка данных начинается со второй строки таблицы (индекс один в массиве data), поскольку первая строка предполагается заголовком. Каждая строка таблицы должна содержать:

  • Колонка A: Номер телефона в формате 79999999999.

  • Колонка B: Текст сообщения.

  • Колонка C: Результат отправки.

Перед отправкой проверяется, что номер телефона и текст сообщения не пустые. Если данные отсутствуют, результат записывается в колонку C как “Нет данных”.

При создании объекта payload:

  • Для каждого сообщения формируется объект с данными для API:

  • number: Укажите номер отправителя, арендованный у МТС Exolve, вручную в формате 79999999999.

После каждого запроса на отправку SMS записывается результат:

  • Если сервер возвращает код ответа 200, запрос считается успешным — извлекается идентификатор сообщения (message_id), и он записывается в колонку C.

  • Если код ответа не 200 или исключение, ошибка записывается в колонку C.

Что еще

Google Таблицы и интеграция с SMS API МТС Exolve — это простой инструмент для автоматизации некоторых коммуникаций. Помимо базовой функциональности, можно внедрить дополнительные улучшения для удобства, безопасности и расширения возможностей.

Создание пользовательского меню

Добавьте пользовательское меню в Google Таблицы, чтобы запускать отправку SMS прямо из интерфейса. Это упростит использование для тех, кто не знаком с редактором Apps Script.

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('SMS')
    .addItem('Отправить SMS', 'sendSmsFromGoogleSheet')
    .addToUi();
}

Теперь при открытии таблицы появится меню «SMS» с пунктом «Отправить SMS».

Безопасность API-ключа

Вместо хранения API-ключа в открытом виде в коде, используйте Google Apps Script Properties:

  • Перейдите в меню «Project Properties → Script Properties» и добавьте ключ с именем, например, EXOLVE_API_KEY.

  • В коде замените строку:

const apiKey = PropertiesService.getScriptProperties().getProperty('EXOLVE_API_KEY');

Собственное приложение Google Sheets

Google Apps Script позволяет превратить скрипт в веб-приложение, которое можно вызывать извне через HTTP-запросы. Это открывает возможность интеграции Google Таблиц с другими системами, такими как CRM, веб-сайты и мобильные приложения, улучшая их функциональность.

Создайте функцию doPost, которая будет принимать HTTP-запросы. Внутри этой функции обработайте данные запроса (например, номер телефона и текст сообщения) и вызовите отправку SMS.

function doPost(e) {
  try {
    // Парсим данные из тела запроса
    const payload = JSON.parse(e.postData.contents);
    const phoneNumber = String(payload.destination); // Номер получателя
    const message = payload.text; // Текст сообщения

    if (!phoneNumber || !message) {
      return ContentService.createTextOutput(JSON.stringify({ status: 'error', message: 'Invalid data' }))
                           .setMimeType(ContentService.MimeType.JSON);
    }

    // Отправляем SMS через функцию отправки
    const sendStatus = sendSms(phoneNumber, message); // Функция отправки SMS
    
    return ContentService.createTextOutput(JSON.stringify({ status: 'success', message_id: sendStatus }))
                         .setMimeType(ContentService.MimeType.JSON);
  } catch (error) {
    // Возвращаем ошибку, если что-то пошло не так
    return ContentService.createTextOutput(JSON.stringify({ status: 'error', message: error.message }))
                         .setMimeType(ContentService.MimeType.JSON);
  }
}

Для деплоя приложения как веб-приложения в редакторе Apps Script выберите Deploy → New deployment и установите тип деплоя Web app. Укажите Execute as: Owner, чтобы приложение могло работать с вашими данными, и Who has access: Anyone (anyone with the link), чтобы обеспечить доступ извне. После деплоя вы получите уникальный URL, который будет использоваться для вызова приложения.

Каждый новый деплой создает уникальный URL. Если приложение связано с внешними системами, обновите в них адрес для корректной работы.

Заключение

Интеграция Google Таблиц с SMS API делает отправку сообщений удобной и гибкой. Можно автоматизировать процессы с помощью триггеров и упростить работу через пользовательские меню. Создание веб-приложения дает возможность запускать отправку SMS из других систем, расширяя возможности. Это решение подходит как для индивидуальных уведомлений, так и для массовых рассылок, помогая настроить быстрый и надёжный обмен сообщениями.

Спасибо за внимание! И заходите в сообщество на форуме Exolve.


Подписывайтесь на наш Хаб, следите за новыми гайдами и получайте приз

Каждый понедельник мы случайным образом выбираем победителей среди новых подписчиков нашего Хабр-канала и дарим крутые призы от МТС Exolve: стильные рюкзаки, лонгсливы и мощные беспроводные зарядки. Победители прошлых розыгрышей и правила.

Комментарии (0)