Шаг 1. Бот и токен

Открой в Telegram @BotFather, отправь /newbot и следуй подсказкам. Он выдаст токен — длинную строку вида 123456:ABC.... Это пароль от бота.

Шаг 2. Свой chat_id

Напиши своему боту любое сообщение, затем открой в браузере https://api.telegram.org/bot<ТОКЕН>/getUpdates. В ответе найди chat → id: это число и есть твой chat_id.

Шаг 3. Серверная функция

На Vercel создай файл api/lead.js. Он принимает форму и пересылает её в Telegram:

export default async function handler(req, res) {
  if (req.method !== 'POST') return res.status(405).end();
  const { name, contact, task } = req.body || {};
  const text = `Новая заявка\nИмя: ${name}\nКонтакт: ${contact}\nЗадача: ${task}`;
  const r = await fetch(
    `https://api.telegram.org/bot${process.env.BOT_TOKEN}/sendMessage`,
    { method: 'POST', headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ chat_id: process.env.CHAT_ID, text }) }
  );
  res.status(r.ok ? 200 : 502).json({ ok: r.ok });
}

Шаг 4. Переменные окружения

В проекте на Vercel открой Settings → Environment Variables и добавь BOT_TOKEN и CHAT_ID. После этого перезапусти деплой.

Шаг 5. Форма на странице

Форма отправляет данные запросом POST на /api/lead. После ответа 200 покажи «Спасибо, свяжусь с вами».

Если токен случайно попал на GitHub или в код страницы, сразу отзови его в @BotFather командой /revoke и выпусти новый. Добавь на форму простую защиту от спама, например скрытое поле-ловушку.

Частые вопросы

Можно ли без серверной функции?

Технически можно вызвать API прямо со страницы, но тогда токен виден всем посетителям. Не делай так.

А если не хочется форму?

Достаточно кнопки-ссылки на твой Telegram: так сделано на странице «Контакты» этого сайта.