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

Як зробити власного Telegram-бота для форми сайту на Cloudflare Worker або обійтися без бота. Робочий код, як дізнатися chat ID і чого не робити з токеном.

Author: Formgong
Published: 2026-10-03
Language: uk
Canonical: https://formgong.com/uk/blog/telegram-bot-for-contact-form/

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

## Три способи отримувати заявки в 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.

```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);
  },
};
```

**Команди для деплою та секретів**

```bash
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 це так:

- Отримайте безкоштовний ключ форми на [formgong.com](/uk/#top) і підтвердьте пошту.

- Спрямуйте форму на Formgong: `action="https://formgong.com/submit"` і ключ у прихованому полі. Дизайн форми не змінюється.

- У налаштуваннях форми відкрийте Telegram і натисніть «Підключити». Відкриється бот Formgong, натисніть Start. Для групи додайте бота й надішліть код `/connect` з налаштувань.

Кожна заявка також зберігається в інбоксі та приходить на пошту, а спам відсіюється ще до чату. Telegram входить у безкоштовний тариф із 300 заявками на місяць; деталі — на сторінці [тарифів](/uk/#pricing). Покрокова інструкція: [як отримувати заявки з форми сайту в Telegram](/uk/blog/website-form-to-telegram/). Сервіси з Telegram порівнюємо в [порівнянні сервісів форм](/uk/compare/).

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

### Чи можна залишати токен 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](https://core.telegram.org/bots/api#sendmessage)
- [Telegram Bot FAQ: limits](https://core.telegram.org/bots/faq#my-bot-is-hitting-limits-how-do-i-avoid-this)
- [Telegram: BotFather](https://core.telegram.org/bots/features#botfather)
- [Cloudflare Workers pricing](https://developers.cloudflare.com/workers/platform/pricing/)
- [Cloudflare Workers secrets](https://developers.cloudflare.com/workers/configuration/secrets/)
- [Документація Formgong](https://formgong.com/uk/docs/)

[Отримати ключ](https://formgong.com/uk/#top)
