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