Практична інструкція

Telegram-бот для форми сайту: писати свій чи ні?

AI-білдери часто радять «створити свого бота». Ось код, який працює, чого йому бракує і коли бот узагалі не потрібен.

Коротка відповідь. Надсилати заявки з форми в Telegram можна через власного бота: створіть його в @BotFather, дізнайтеся chat ID і пересилайте форму з невеликої серверної функції, яка викликає sendMessage. Токен бота має залишатися на сервері. Якщо не хочете підтримувати цей код, сервіс форм із вбудованою доставкою в Telegram зробить те саме без бота.

Formgong·

Telegram-бот для форми сайту: писати свій чи ні?
Telegram-бот для форми сайту: писати свій чи ні?

Три способи отримувати заявки в Telegram

Якщо спитати Bolt, Lovable чи ChatGPT, як надсилати форму в Telegram, найчастіше почуєте: «напишіть свого бота». Це робочий варіант. Але не єдиний:

  • Власний бот і маленька серверна функція. Безкоштовно на більшості хостингів і повністю під вашим контролем. Вам треба написати й підтримувати близько 25 рядків коду.
  • Сервіс автоматизації: Zapier, Make або n8n. Вебхук приймає форму, наступний крок надсилає її в Telegram. Без коду, але це ще один акаунт і свої тарифи.
  • Сервіс форм із вбудованим Telegram. Ви змінюєте action форми й підключаєте чат. Без бота й без серверного коду. Так працює Formgong, а також Formspree з плагіном Telegram.

Нижче зберемо перший варіант повністю. Потім розберемо, чого цей код не вміє, щоб ви обирали свідомо.

1. Створіть бота й дізнайтеся chat ID

  1. Відкрийте @BotFather у Telegram і надішліть /newbot. Вкажіть назву та username, що закінчується на bot.
  2. BotFather надішле токен на кшталт 123456789:AAH…. Бережіть його, як пароль.
  3. Відкрийте свого бота й натисніть Start. Поки ви цього не зробите, бот не зможе вам писати.
  4. Відкрийте в браузері https://api.telegram.org/bot<TOKEN>/getUpdates. Знайдіть "chat":{"id":…}. Це число і є chat ID.

Для робочої групи додайте бота в групу й надішліть там /start@your_bot. ID груп від’ємні, наприклад -1001234567890. Мінус залишайте.

2. Пересилайте форму через Cloudflare Worker

Формі потрібен сервер, який зберігає токен і звертається до Bot API. Найпростіший варіант — Cloudflare Worker. Безкоштовний тариф Workers включає 100 000 запитів на день (перевірено 03.10.2026). Той самий код підходить і для Supabase Edge Function чи Netlify Function.

Worker читає форму, відкидає ботів, які заповнили приховане поле-пастку, обрізає задовгі значення й надсилає звичайний текст. Звичайний текст не ламається на іменах з апострофами чи символами <. Повідомлення в Telegram вміщує до 4096 символів, тому текст заявки обрізаємо до 3000.

JavaScript
// src/index.js: приймає форму й надсилає її в Telegram
export default {
  async fetch(request, env) {
    if (request.method !== "POST") return new Response("POST only", { status: 405 });
    const form = await request.formData();
    // Honeypot: people never see this field, bots fill it in.
    if (form.get("botcheck")) return Response.redirect(env.THANK_YOU_URL, 303);
    const name = String(form.get("name") ?? "").slice(0, 200);
    const email = String(form.get("email") ?? "").slice(0, 200);
    const message = String(form.get("message") ?? "").slice(0, 3000);
    if (!email || !message) return new Response("Потрібні email і повідомлення", { status: 400 });
    const text = `Нова заявка\nІм'я: ${name}\nEmail: ${email}\n\n${message}`;
    const sent = await fetch(`https://api.telegram.org/bot${env.TELEGRAM_BOT_TOKEN}/sendMessage`, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ chat_id: env.TELEGRAM_CHAT_ID, text }),
    });
    if (!sent.ok) return new Response("Не вдалося доставити повідомлення", { status: 502 });
    return Response.redirect(env.THANK_YOU_URL, 303);
  },
};
Команди для деплою та секретів
Terminal
npm create cloudflare@latest contact-to-telegram
cd contact-to-telegram
# paste the Worker code into src/index.js, then:
npx wrangler secret put TELEGRAM_BOT_TOKEN
npx wrangler secret put TELEGRAM_CHAT_ID
# add to wrangler.jsonc: "vars": { "THANK_YOU_URL": "https://example.com/dyakuyemo" }
npx wrangler deploy
HTML-форма, яка надсилає дані у Worker
HTML
<form action="https://contact-to-telegram.YOUR-SUBDOMAIN.workers.dev" method="POST">
  <label>Ім’я <input name="name" autocomplete="name"></label>
  <label>Email <input type="email" name="email" required autocomplete="email"></label>
  <label>Повідомлення <textarea name="message" required></textarea></label>
  <input type="text" name="botcheck" tabindex="-1" autocomplete="off" hidden>
  <button type="submit">Надіслати</button>
</form>

Ніколи не додавайте токен бота у фронтенд

Частина згенерованого коду звертається до api.telegram.org прямо зі сторінки. У прев’ю це працює. Але будь-хто може відкрити код сторінки, скопіювати токен і керувати вашим ботом: писати від його імені, читати оновлення чи змінити вебхук.

Тримайте токен у серверному секреті, як у командах вище. Якщо токен уже потрапив у фронтенд, надішліть BotFather команду /revoke і збережіть новий токен як секрет. Це стосується й проєктів у Bolt та Lovable: попросіть білдер перенести виклик у бекенд-функцію, а токен — у її секрети.

Чого не вміє саморобний бот

Worker вище — робочий мінімум. Перш ніж довіряти йому справжні заявки, врахуйте обмеження:

  • Немає копії заявки. Якщо Telegram недоступний або chat ID неправильний, відвідувач побачить помилку, а заявка більше ніде не збережеться. Якщо заявки важливі, додайте базу або лист.
  • Слабкий захист від спаму. Honeypot зупиняє лише простих ботів. Коли прийде спам, додайте Cloudflare Turnstile або ліміти запитів.
  • Один чат і жодних статусів. Кілька чатів, кнопки «оброблено» чи нагадування про заявки без відповіді — це ще код.
  • Ліміти. Telegram просить надсилати не більше одного повідомлення на секунду в один чат і 20 повідомлень на хвилину в групу. Контактна форма рідко до цього доходить.
  • Підтримка. Заміна токена, сповіщення про помилки й оновлення тепер на вас.

Без бота: підключіть Telegram до самої форми

Якщо вам просто потрібна кожна заявка в чаті, сервіс форм позбавить вас і бота, і Worker. З Formgong це так:

  1. Отримайте безкоштовний ключ форми на formgong.com і підтвердьте пошту.
  2. Спрямуйте форму на Formgong: action="https://formgong.com/submit" і ключ у прихованому полі. Дизайн форми не змінюється.
  3. У налаштуваннях форми відкрийте Telegram і натисніть «Підключити». Відкриється бот Formgong, натисніть Start. Для групи додайте бота й надішліть код /connect з налаштувань.

Кожна заявка також зберігається в інбоксі та приходить на пошту, а спам відсіюється ще до чату. Telegram входить у безкоштовний тариф із 300 заявками на місяць; деталі — на сторінці тарифів. Покрокова інструкція: як отримувати заявки з форми сайту в Telegram. Сервіси з Telegram порівнюємо в порівнянні сервісів форм.

Питання та відповіді

Чи можна залишати токен Telegram-бота в коді сайту?

Ні. Будь-хто, хто відкриє код сторінки, зможе скопіювати токен і керувати ботом. Зберігайте його в серверному секреті й викликайте Bot API із серверної функції. Якщо токен витік, відкличте його в BotFather.

Як дізнатися chat ID у Telegram?

Натисніть Start у чаті з ботом, потім відкрийте в браузері адресу getUpdates зі своїм токеном. Потрібне значення — id у полі chat. Для групи надішліть у ній /start@your_bot; ID груп від’ємні.

Чи може бот надсилати заявки в групу?

Так. Додайте бота в групу, візьміть ID групи з getUpdates і вкажіть його як chat_id. Telegram дозволяє боту близько 20 повідомлень на хвилину в одній групі.

Чи безкоштовний Cloudflare Worker для контактної форми?

Для більшості сайтів так. Безкоштовний тариф Workers включає 100 000 запитів на день, станом на 3 жовтня 2026 року. Одна заявка — це один запит.

Чи потрібен власний бот, щоб отримувати заявки в Telegram?

Ні. Сервіси форм, як-от Formgong, підключають чат до форми через свого бота. Ви лише змінюєте action форми й натискаєте «Підключити» в налаштуваннях.

Джерела та документація

Офіційні джерела для цієї інструкції: Telegram Bot API: sendMessage, Telegram Bot FAQ: limits, Telegram: BotFather, Cloudflare Workers pricing, Cloudflare Workers secrets. Документація Formgong, де зберігаються дані.

Завантажити текст статті (Markdown)
← До блогу