Telegram-боти, що роблять справжню роботу

Більшість ботів — іграшки. Корисні мають спільну форму: чіткий тригер, ідемпотентну дію та нудний деплой. Ось каркас, до якого я звертаюсь.

Бот виправдовує себе, коли прибирає повторюваний ручний крок, а не коли відповідає дотепним повідомленням. Усі корисні боти, які я робив, мають ту саму невелику форму.

Вебхук, а не опитування

Long-polling годиться для прототипу, але вебхук дешевший і дозволяє боту жити на тому самому краю мережі, що й усе інше. Telegram надсилає POST на кожне оновлення; ви валідуєте його й дієте:

export async function onUpdate(update: Update) {
  const message = update.message;
  if (!message?.text) return;

  if (message.text.startsWith("/deploy")) {
    await enqueueDeploy(message.chat.id);
    await reply(message.chat.id, "Деплой у черзі ✅");
  }
}

Робити кожну дію ідемпотентною

Telegram повторює вебхук, який вважає невдалим, тож те саме оновлення може надійти двічі. Прив’яжіть кожен побічний ефект до ID оновлення — і його можна безпечно обробити повторно: без подвійних деплоїв і дублів повідомлень.

Тримати секрети поза кодом

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

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

← Усі дописи