Как отправлять SMS из Google Таблиц с использованием Google Apps Script: 2 способа

от автора

Всем привет! У платформы МТС 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: стильные рюкзаки, лонгсливы и мощные беспроводные зарядки. Победители прошлых розыгрышей и правила.


ссылка на оригинал статьи https://habr.com/ru/articles/872664/