Как отправлять SMS из Google Таблиц с использованием Google Apps Script: 2 способа
Всем привет! У платформы МТС Exolve есть сообщество, которое часто делится полезными гайдами от прокачки серверов до создания своих приложений. Наиболее интересные и подробные продолжаем размещать в нашем хабе.
Google Таблицы — мощный инструмент для работы с данными. Их потенциал значительно расширяется с помощью Apps Script.
В этом и этом гайдах пользователи рассмотрели два способа отправки SMS прямо из таблиц: индивидуальные разовые уведомления и массовые рассылки. Мы чуть дополнили гайд.
Способ 1 — разовые уведомления
Подходит, если вы используете таблицу для автоматического сбора и хранения, например, лидов. Чтобы не пропустить новую заявку, вместо полноценной интеграции с CRM можно настроить быстрое уведомление по SMS себе или менеджеру.
Скрипт извлекает номер телефона и текст сообщения из таблицы, после чего отправляет сообщение через HTTP-запрос по SMS API платформы МТС Exolve.
Шаг 1. Создание и настройка Google Sheets
Создайте новый документ.
Введите текст сообщения в ячейке A1.
В ячейке 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: стильные рюкзаки, лонгсливы и мощные беспроводные зарядки. Победители прошлых розыгрышей и правила.