
Google Apps Script
23
Вклад в тег
/**
* Конфигурация.
*/
const CONFIG = {};
// Рабочие листы
CONFIG.sheets = [
`Журнал заказов`
];
CONFIG.cols = {};
// Порядок столбцов
CONFIG.cols[`Заказ`] = 1;
CONFIG.cols[`Email`] = 2;
CONFIG.cols[`Статус`] = 3;
/**
* Отправляет письмо при смене статуса.
*
* @param {Object} event
*/
function onEditTrigger(event = {}) {
try {
if (!event.source)
event.source = SpreadsheetApp
.getActiveSpreadsheet();
if (!event.range)
event.range = SpreadsheetApp
.getActiveRange();
// Открыть текущий лист
const sheet = event.source
.getActiveSheet();
// Обходим листы не из списка
if (!CONFIG.sheets.includes(sheet.getName()))
return;
// Номер активной строки
const row = event.range
.getRow();
// Обходим закрепленные строки
if (row <= sheet.getFrozenRows())
return;
// Номер активного столбца
const col = event.range
.getColumn();
// Обхотим столбцы (не статус)
if (col !== CONFIG.cols[`Статус`])
return;
// Получаем данные строки
const values = sheet
.getRange(`${row}:${row}`)
.getValues()[0];
const recipient = values[CONFIG.cols[`Email`] - 1];
const status = values[CONFIG.cols[`Статус`] - 1];
const subject = `Заголовок письма`;
const body = `Здравствуйте, статус вашего заказа изменен на "${status}"`;
// Отправляем письмо
const response = MailApp
.sendEmail(recipient, subject, body);
if (!response)
throw new TypeError(`Не удалось отправить письмо!`);
console.log(`Письмо успешно отправлено!`, recipient, subject, body);
}
catch (error) {
console.error(error.stack);
throw new Error(error.toString());
}
};
'https://api.telegram.org/bot' + token + '/'
) не содержит функцию для запуска.'https://api.telegram.org/bot' + token + '/getUpdates'
'https://api.telegram.org/bot' + token + '/getMe'
'https://api.telegram.org/bot' + token + '/sendMessage'
data
- второй параметр для функции fetch(url, data)
класса UrlFetchApp
должен быть объектом.post
.{
"method": `POST`,
"contentType": `application/json`,
"muteHttpExceptions": true,
"payload": JSON.stringify(data)
}
payload
указываем если вы хотите что-то передать телеграму (зависит от выбранной функции в url запроса).fetch(url, data)
вернул результат response
, из него нужно вытащить данные методом response .getContentText()
. И аш потом уже парсить через JSON.parse
./**
* Простой метод проверки токена авторизации вашего бота. Не требует параметров. Возвращает основную информацию о боте в виде объекта User.
*
* @return {Object.User}
*/
function getMe() {
const response = UrlFetchApp
.fetch(
`https://api.telegram.org/bot${TOKEN}/getMe`,
{
"method": `POST`,
"contentType": `application/json`,
"muteHttpExceptions": true
}
);
let result = response
.getContentText();
result = JSON
.parse(result);
if (!result.ok)
throw new Error(result.description);
return result;
}
/**
* Используйте этот метод для отправки текстовых сообщений. В случае успеха отправленное сообщение возвращается.
*
* @param {String|Number} chatId Уникальный идентификатор целевого чата или имя пользователя целевого канала (в формате @channelusername)
* @param {String} text Текст отправляемого сообщения, 1-4096 знаков после синтаксического анализа сущностей.
* @param {Object} options
*
* @return {Object.Message}
*/
function sendMessage(chatId, text, options) {
if (!arguments.length)
throw new TypeError(`Параметры () не соответствуют сигнатуре метода TelegramBot.sendMessage.`);
const data = {};
if (!([`string`, `number`].includes(typeof chatId) && String(chatId).trim().length))
throw new TypeError(`Параметры (${typeof chatId}) не соответствуют сигнатуре метода TelegramBot.sendMessage.`);
data.chat_id = String(chatId).trim();
if (!([`string`, `number`].includes(typeof text) && String(text).trim().length))
throw new TypeError(`Параметры (${typeof chatId}, ${typeof text}) не соответствуют сигнатуре метода TelegramBot.sendMessage.`);
data.text = String(text).trim();
if (options) {
if (typeof options !== `object`)
throw new TypeError(`Параметры (${typeof chatId}, ${typeof text}, ${typeof options}) не соответствуют сигнатуре метода TelegramBot.sendMessage.`);
if ((item => typeof item === `string` && item.trim().length)(options.parse_mode))
data.parse_mode = options.parse_mode;
if (typeof options.entities === `object`)
data.entities = options.entities;
if (typeof options.disable_web_page_preview === `boolean`)
data.disable_web_page_preview = options.disable_web_page_preview;
if (typeof options.disable_notification === `boolean`)
data.disable_notification = options.disable_notification;
if ((item => typeof item === `number` && Number.isInteger(item) && item > 0)(options.reply_to_message_id))
data.reply_to_message_id = options.reply_to_message_id;
if (typeof options.allow_sending_without_reply === `boolean`)
data.allow_sending_without_reply = options.allow_sending_without_reply;
if (typeof options.reply_markup === `object`)
data.reply_markup = options.reply_markup;
}
const response = UrlFetchApp
.fetch(
`https://api.telegram.org/bot${TOKEN}/sendMessage`,
{
"method": `POST`,
"contentType": `application/json`,
"muteHttpExceptions": true,
"payload": JSON.stringify(data)
}
);
let result = response
.getContentText();
result = JSON
.parse(result);
if (!result.ok)
throw new Error(result.description);
return result;
}