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