@K-VKO

Отправить email из Google таблиц по условию?

Есть вот такая гугл таблица, которую мы ведем в нашем магазине:
617910e490b5a062317276.jpeg

Можно ли сделать как-то чтобы при изменении статуса заказа - отправлялось письмо клиенту с изменениями? Например - Здравствуйте, статус вашего заказа изменен на "Отправлен"

Кто даст рабочий код - свяжусь и отблагодарю
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 3
@haveacess
Did you try to use google?

Triggers. OnEdit(e)
For to do something if conditions was passed
--
Sending email
Only working for you google account, of course.

Atetion 1: Triggers can be did very very slow you application. Please, be careful when you do it. Or using triggers on shedule.
Atetion 2: Don`t forget about Credentials in Google App Script (just run you script in editor and then follow the instructions)
Ответ написан
Комментировать
ProgrammerForever
@ProgrammerForever Куратор тега Google Sheets
Учитель, автоэлектрик, программист, музыкант
Нужно использовать onEdit и MailApp
Демонстрационная таблица
Ответ написан
Комментировать
stomaks
@stomaks
Expert Google Apps Script (stomaks.me)
Вот рабочий код:
/**
 * Конфигурация.
 */
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());
  }
};


Чтобы это сработало нужно:
1. Открыть редактор скриптов в таблице и вставить туда код выше.
617ff57ce528c038052771.png

2. Создать новый триггер
617ff5559eed5232989193.png

---
Максим Стоянов (stomaks), pазработчик Google Apps Script.
g-apps-script.com
stomaks.me
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы