Три способи отримувати заявки в Telegram
Якщо спитати Bolt, Lovable чи ChatGPT, як надсилати форму в Telegram, найчастіше почуєте: «напишіть свого бота». Це робочий варіант. Але не єдиний:
- Власний бот і маленька серверна функція. Безкоштовно на більшості хостингів і повністю під вашим контролем. Вам треба написати й підтримувати близько 25 рядків коду.
- Сервіс автоматизації: Zapier, Make або n8n. Вебхук приймає форму, наступний крок надсилає її в Telegram. Без коду, але це ще один акаунт і свої тарифи.
- Сервіс форм із вбудованим Telegram. Ви змінюєте
actionформи й підключаєте чат. Без бота й без серверного коду. Так працює Formgong, а також Formspree з плагіном Telegram.
Нижче зберемо перший варіант повністю. Потім розберемо, чого цей код не вміє, щоб ви обирали свідомо.
1. Створіть бота й дізнайтеся chat ID
- Відкрийте @BotFather у Telegram і надішліть
/newbot. Вкажіть назву та username, що закінчується наbot. - BotFather надішле токен на кшталт
123456789:AAH…. Бережіть його, як пароль. - Відкрийте свого бота й натисніть Start. Поки ви цього не зробите, бот не зможе вам писати.
- Відкрийте в браузері
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.
// 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);
},
};Команди для деплою та секретів
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 deployHTML-форма, яка надсилає дані у Worker
<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 це так:
- Отримайте безкоштовний ключ форми на formgong.com і підтвердьте пошту.
- Спрямуйте форму на Formgong:
action="https://formgong.com/submit"і ключ у прихованому полі. Дизайн форми не змінюється. - У налаштуваннях форми відкрийте 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)