Ранок із 50+ листами — це не “організована комунікація”, а міні-лотерея. Більшість повідомлень — шум: розсилки, автоматичні підтвердження, квитанції, другорядні апдейти. Але десь між ними може лежати лист від важливого клієнта, скарга, яка горить просто зараз, або рахунок, який не можна проґавити. І якщо щоранку на це йде година-півтори ручного сортування, то проблема вже не в Gmail, а в тому, що пошта досі працює без нормального шару автоматизації.

Автопілот для Gmail
Автопілот для Gmail

Стандартні правила Gmail корисні, поки світ простий: якщо в темі є слово X — повісь ярлик Y. Але реальні листи так не працюють. Один клієнт пише “маємо питання по оплаті”, інший — “не пройшла оплата”, третій — “please check invoice”, і за змістом це одна категорія. Саме тому тут краще працює не набір фільтрів, а розумне маркування: скрипт читає текст, ШІ визначає сенс, а далі лист автоматично отримує правильний ярлик і, якщо потрібно, окремий сигнал у Telegram.

У чому ідея “розумного маркування”

Замість того щоб шукати одне ключове слово, ми даємо моделі вузьке завдання: класифікувати лист у кілька прикладних категорій. Наприклад:

  • Важливо
  • Рахунок
  • Питання
  • Спам

Після цього Apps Script:

  • дивиться останні ланцюжки у Inbox;
  • бере текст листа;
  • відправляє його в OpenAI;
  • отримує одну категорію;
  • наклеює відповідний Gmail label;
  • за потреби архівує ланцюжок;
  • якщо категорія критична — шле пуш у Telegram.

Тобто ви не читаєте весь потік підряд. Ви спочатку бачите те, що справді важливе. А якщо вам потрібен уже наступний рівень — не лише сортування, а й підготовка відповідей — логічним продовженням буде сценарій з LLM-агентами в Google Workspace для автоматичних чернеток листів.

Створили: ярлики в Gmail і сценарій, який працює сам

Починати варто не з коду, а з логіки. Заздалегідь створіть у Gmail кілька ярликів, з якими буде працювати скрипт:

  • AI_Важливо
  • AI_Рахунок
  • AI_Питання
  • AI_Спам

Це дрібниця, але саме вона робить систему читабельною. Інакше навіть хороший класифікатор просто створює вам ще один шар хаосу.

Далі в Apps Script потрібно зробити time-driven trigger, щоб функція запускалась автоматично, наприклад щогодини. У цьому й сила підходу: рішення безсерверне, не потребує окремого VPS і працює, поки ви спите. Якщо ж потрібні багатоканальні повідомлення, цей сценарій добре стикується з інтеграцією Google Sheets з Telegram та Slack, тільки тут джерелом сигналу буде вже не таблиця, а пошта.

Сценарій, який працює сам
Сценарій, який працює сам

Написали: код для аналізу останніх листів

Нижче — базовий варіант на Apps Script. Він бере останні ланцюжки з Inbox, відправляє текст у класифікатор і чіпляє потрібний ярлик.

function classifyEmails() {
  const threads = GmailApp.getInboxThreads(0, 5);
  const openAiKey = PropertiesService.getScriptProperties().getProperty('OPENAI_API_KEY');

  threads.forEach(thread => {
    const firstMessage = thread.getMessages()[0];
    const text = firstMessage.getPlainBody().substring(0, 1000);

    const category = getAiCategory(text, openAiKey);

    const label = GmailApp.getUserLabelByName('AI_' + category);
    if (label) {
      thread.addLabel(label);

      if (category !== 'Важливо') {
        thread.moveToArchive();
      }

      if (category === 'Важливо') {
        sendTelegramAlert(thread, text);
      }
    }
  });
}

function getAiCategory(text, key) {
  const url = 'https://api.openai.com/v1/responses';

  const payload = {
    model: 'gpt-4o-mini',
    input: [
      {
        role: 'system',
        content: 'Ти класифікуєш email лише в одну категорію: Важливо, Рахунок, Питання або Спам. Поверни тільки одне слово без пояснень.'
      },
      {
        role: 'user',
        content: text
      }
    ],
    text: {
      format: {
        type: 'json_schema',
        name: 'email_category',
        strict: true,
        schema: {
          type: 'object',
          properties: {
            category: { type: 'string' }
          },
          required: ['category'],
          additionalProperties: false
        }
      }
    }
  };

  const response = UrlFetchApp.fetch(url, {
    method: 'post',
    contentType: 'application/json',
    headers: {
      Authorization: 'Bearer ' + key
    },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  });

  const json = JSON.parse(response.getContentText());
  const parsed = JSON.parse(json.output_text);

  return parsed.category;
}

function sendTelegramAlert(thread, text) {
  const token = PropertiesService.getScriptProperties().getProperty('TELEGRAM_BOT_TOKEN');
  const chatId = PropertiesService.getScriptProperties().getProperty('TELEGRAM_CHAT_ID');

  const message = '⚠️ Важливий лист\
' +
    'Тема: ' + thread.getFirstMessageSubject() + '\
\
' +
    text.substring(0, 300);

  UrlFetchApp.fetch('https://api.telegram.org/bot' + token + '/sendMessage', {
    method: 'post',
    payload: {
      chat_id: chatId,
      text: message
    }
  });
}

Будьте обачні, використовуючи код.

Як прописати класифікатор, щоб ШІ не фантазував

Як створити класифікатор для ШІ
Як створити класифікатор для ШІ

Найслабше місце таких сценаріїв — не API і не GmailApp, а розмитий prompt. Якщо ви попросите модель “визначити важливість листа”, вона поверне щось красиве, але не дуже придатне для автоматизації. Вам не потрібна думка. Вам потрібен контрольований вихід.

Тому хороше системне повідомлення має:

  • обмежити список категорій;
  • заборонити пояснення;
  • сказати, що повертати треба одне коротке значення;
  • бажано задати критерії для кожної категорії.

Наприклад так:

Ти класифікатор вхідної пошти для малого бізнесу.
Доступні категорії:
- Важливо: скарга, VIP-клієнт, термінова проблема, ризик втрати грошей
- Рахунок: invoice, bill, оплата, реквізити, квитанція
- Питання: запит, уточнення, звичайний контакт
- Спам: розсилки, масові пропозиції, очевидний шум

Поверни тільки JSON:
{"category":"Важливо"}

У таких дрібних речах і ховається різниця між “прикольним демо” і робочим інструментом.

Реальний кейс автора

Цей сценарій у мене народився не з теорії, а з банальної втоми від вхідної пошти по кількох робочих напрямках. Коли паралельно йдуть звернення з сайтів, технічні листи, документи, рахунки, апдейти по інтеграціях і фонові розсилки, ранковий перегляд Inbox дуже швидко перетворюється на механічне сортування, а не на нормальну роботу.

Проблема була не в тому, що листів “занадто багато”, а в тому, що справді важливі звернення губилися серед другорядних. У ручному режимі на первинний перегляд легко йшло близько 40–50 хвилин у дні з активним потоком. Після переходу на схему з AI-ярликами й окремим Telegram-алертом для пріоритетних листів я перестав читати весь Inbox підряд. Практичний ефект був простий: критичні звернення підсвічуються одразу, а ранкове сортування стискається приблизно до 10–15 хвилин замість майже години.

Для мене це і є головний маркер хорошої автоматизації: не “вау, у нас ШІ”, а дуже приземлений результат — менше рутинного перегляду, швидша реакція на важливе і менше шансів пропустити те, що реально болить бізнесу.

Де тут головна вигода для бізнесу

Автоматизація сортування електронної пошти
Автоматизація сортування електронної пошти

Така схема не замінює людину. Вона прибирає тупу частину процесу: первинний перегляд, сортування, перемикання уваги між важливим і шумом. Менеджер або власник більше не працює як ручний фільтр. Він працює вже з попередньо відсортованим потоком.

На практиці це дає:

  • менше втрат на пропущених листах;
  • швидшу реакцію на критичні запити;
  • менше когнітивної втоми;
  • прозоріше управління inbox без сторонніх SaaS-посередників.

І це якраз той тип безсерверної автоматизації, який часто дає відчутний результат швидше за “великий AI-проєкт”.

Коли Apps Script уже достатньо, а коли пора далі

Якщо у вас один inbox, кілька зрозумілих категорій, невеликий обсяг листів і задача “пріоритезувати та підсвітити важливе”, Apps Script закриває її дуже добре. Але якщо вам потрібні складні маршрути, історія рішень, кілька поштових скриньок, окремий шар логування, дедуплікація, SLA-логіка або зв’язка з іншими внутрішніми сервісами, тоді краще дивитися в бік мікросервісів на Node.js для Google Workspace.

І саме тут проходить здорова межа: спочатку ви знімаєте рутину малим інструментом, а вже потім вирішуєте, чи справді потрібна повноцінна архітектура.

Що варто протестувати перед запуском “у сон”

Перед тим як довірити сценарію реальний inbox, перевірте три речі:

  • чи не плутає модель “рахунок” і “питання”;
  • чи не архівуєте ви занадто рано те, що людина ще має побачити;
  • чи нормально працює Telegram-алерт саме для категорії Важливо.

Найкращий стартовий режим — спочатку лише маркування без агресивного архівування. Коли побачите, що класифікатор поводиться стабільно, тоді вже можна додавати жорсткіші дії.

Тоді пошта перестає бути ранковим покаранням і починає працювати як система, яка підсвічує важливе раніше, ніж ви встигли втонути в шумі.