⚡ Архитектура и идеи: Автоматизация почты через Cloudflare Workers

В Cloudflare Email Routing есть возможность направить входящие письма не только на обычный почтовый ящик, но и на Cloudflare Worker (опция «Send to a Worker»).

Это превращает каждое входящее письмо в бессерверное событие (Serverless Event), открывая возможности для глубокой автоматизации без необходимости поднимать и оплачивать выделенный почтовый сервер.


🎯 Ключевые сценарии использования

Входящее письмо (@fortemate.com)
               │
               ▼
┌───────────────────────────────┐
│   Cloudflare Email Worker     │
└───────┬──────────────┬────────┘
        │              │
        ▼              ▼
┌──────────────┐ ┌──────────────┐
│  Telegram /  │ │  Workers AI  │
│  Discord Бот │ │ (Суммаризация│
│   (Алерты)   │ │  и анализ)   │
└──────────────┘ └──────────────┘
        │              │
        ▼              ▼
┌──────────────┐ ┌──────────────┐
│ GitHub Issue │ │ Cloudflare   │
│  (Баг-трекер)│ │ R2 / D1      │
│              │ │  (Архив)     │
└──────────────┘ └──────────────┘

1. Мгновенные алерты в Telegram / Discord

  • Проблема: Личный ящик засоряется системными уведомлениями, либо важные письма (например, от партнеров или срочные багрепорты) теряются в потоке.
  • Решение: Worker парсит отправителя, тему и текст письма, красиво форматирует Markdown-сообщение и отправляет в приватный Telegram-канал команды за доли секунды.
  • Применение: Адреса support@fortemate.com, alert@fortemate.com.

2. Встроенный ИИ-анализ через Cloudflare Workers AI

  • Проблема: Длинные входящие письма или обращения на незнакомых языках требуют времени на разбор.
  • Решение: Worker прямо на лету передает текст письма в открытую LLM (например, @cf/meta/llama-3-8b-instruct), получает краткую выжимку (TL;DR), определяет тональность и категорию (баг, сотрудничество, спам), и прикрепляет этот отчет к пересылаемому сообщению.

3. Автоматическое создание GitHub Issues (Helpdesk без сервитута)

  • Проблема: Пользователь пишет на feedback@fortemate.com с сообщением о баге, приходится вручную копировать его в репозиторий.
  • Решение: Worker вызывает GitHub REST API и автоматически создает Issue в соответствующем репозитории с тегом from-email.

4. Долгосрочный архив в Cloudflare R2 / D1

  • Проблема: Почтовые сервисы имеют лимиты на размер вложений и требуют оплаты за хранилище.
  • Решение: Worker сохраняет копию raw MIME-письма или прикрепленные файлы в дешевое хранилище Cloudflare R2, а метаданные (кто, когда, тема) записывает в реляционную базу Cloudflare D1.

💻 Пример реализации (TypeScript)

1. Исходный код воркера (src/index.ts)

import { EmailMessage } from 'cloudflare:email';
 
interface Env {
  TG_BOT_TOKEN: string;
  TG_CHAT_ID: string;
  FORWARD_TO: string;
  AI?: any;
}
 
export default {
  async email(message: ForwardableEmailMessage, env: Env, ctx: ExecutionContext): Promise<void> {
    const from = message.from;
    const to = message.to;
    const subject = message.headers.get('subject') || '(Без темы)';
    
    // 1. Извлекаем текстовое содержимое
    const rawContent = await new Response(message.raw).text();
    const preview = rawContent.slice(0, 500); // превью первых строк
 
    // 2. Отправляем форматированное уведомление в Telegram
    const text = `📬 *Новое письмо на ${to}*\n*От:* \`${from}\`\n*Тема:* ${subject}\n\n_${preview}..._`;
    
    ctx.waitUntil(
      fetch(`https://api.telegram.org/bot${env.TG_BOT_TOKEN}/sendMessage`, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          chat_id: env.TG_CHAT_ID,
          text: text,
          parse_mode: 'Markdown'
        })
      })
    );
 
    // 3. Пересылаем оригинальное письмо в почтовый ящик
    await message.forward(env.FORWARD_TO);
  }
};

2. Конфигурация wrangler.toml

name = "fortemate-email-worker"
main = "src/index.ts"
compatibility_date = "2026-08-16"
 
[vars]
FORWARD_TO = "jegors.cemisovs@outlook.lv"
 
# Секреты (задаются через: npx wrangler secret put TG_BOT_TOKEN)
# TG_BOT_TOKEN
# TG_CHAT_ID

🚀 План внедрения (когда наступит необходимость)

  1. Этап 0 (текущий): Обычная пересылка через UI Cloudflare Email Routing на личный адрес — для захвата аккаунтов и базового старта бренда.
  2. Этап 1 (публичный запуск сайта): Подключение адреса support@fortemate.com через Worker с алертами в Telegram, чтобы не пропустить обратную связь первых игроков.
  3. Этап 2 (масштабирование): Подключение Workers AI для авто-классификации и детекции баг-репортов.

🔗 Связанное