Заявки с сайта в Telegram: пошаговая настройка за 15 минут (с кодом) | Студия Креатива

Заявки с сайта в Telegram: пошаговая настройка за 15 минут

Заявка, которая лежит в почте полдня, часто уже не заявка: человек выбрал другого исполнителя. Когда она за секунду приходит в Telegram, на неё отвечают быстрее. Ниже полный путь от создания бота до работающей формы, с кодом, который можно взять за основу. По такой схеме работает форма на нашем сайте.

Что понадобится

Шаг 1. Создайте бота

  1. Откройте в Telegram @BotFather (официальный бот Telegram) и отправьте команду /newbot.
  2. Задайте имя бота и его username (он должен заканчиваться на bot).
  3. BotFather пришлёт токен — длинную строку вида 123456:ABC-DEF….
Токен работает как пароль: любой, кто его знает, управляет ботом. Не публикуйте его и не вставляйте в код страницы, который видит браузер. Он должен лежать только на сервере.

Шаг 2. Узнайте chat_id

Бот должен знать, кому писать. Для этого нужен идентификатор вашего чата.

  1. Откройте своего бота и нажмите Start, затем отправьте ему любое сообщение. Бот не может написать первым, пока вы ему не написали.
  2. Откройте в браузере адрес https://api.telegram.org/botВАШ_ТОКЕН/getUpdates.
  3. В ответе найдите кусок "chat":{"id":123456789. Это число и есть chat_id.

Если хотите получать заявки в рабочую группу, добавьте бота в группу, напишите там любое сообщение и повторите шаг с getUpdates: идентификатор группы будет отрицательным числом.

Шаг 3. Серверный скрипт

Форма отправляет данные не в Telegram напрямую, а на ваш сервер. Скрипт принимает их и пересылает боту. Так токен остаётся закрытым. Сохраните файл как send.php в корне сайта и впишите свои токен и chat_id.

<?php
// send.php: положите рядом с сайтом. Токен и chat_id храните только здесь.
const TOKEN = 'ВАШ_ТОКЕН_БОТА';
const CHAT  = 'ВАШ_CHAT_ID';

header('Content-Type: application/json; charset=utf-8');

$in = json_decode(file_get_contents('php://input'), true);
if (!is_array($in)) { http_response_code(400); echo '{"ok":false}'; exit; }

// Ловушка для ботов: людям это поле не видно, роботы его заполняют
if (!empty($in['website'])) { echo '{"ok":true}'; exit; }

$clean = fn($k) => mb_substr(trim((string)($in[$k] ?? '')), 0, 500) ?: '—';
$text = "🔔 Новая заявка\n👤 " . $clean('name') . "\n📱 " . $clean('contact');

$ch = curl_init('https://api.telegram.org/bot' . TOKEN . '/sendMessage');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => ['chat_id' => CHAT, 'text' => $text],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 10,
]);
$res = json_decode((string)curl_exec($ch), true);
curl_close($ch);

echo json_encode(['ok' => !empty($res['ok'])]);

Шаг 4. Подключите форму

Форма отправляет данные скрипту и показывает «Спасибо» только после ответа сервера. Скрытое поле website нужно для защиты от спама: человек его не видит и не заполняет, а простые боты заполняют.

<form id="lead">
  <input name="name" placeholder="Имя" required>
  <input name="contact" placeholder="Телефон или Telegram" required>
  <input name="website" style="display:none" tabindex="-1" autocomplete="off">
  <button>Отправить</button>
</form>

<script>
document.getElementById('lead').addEventListener('submit', async function (e) {
  e.preventDefault();
  var form = e.target;
  var data = Object.fromEntries(new FormData(form));
  try {
    var r = await fetch('/send.php', {
      method: 'POST',
      headers: {'Content-Type': 'application/json'},
      body: JSON.stringify(data)
    });
    var j = await r.json();
    if (!j.ok) throw new Error('send failed');
    form.innerHTML = 'Спасибо! Мы свяжемся с вами.';
    if (typeof ym === 'function') ym(ВАШ_СЧЁТЧИК, 'reachGoal', 'lead_form_sent');
  } catch (err) {
    alert('Не удалось отправить. Напишите нам в Telegram.');
  }
});
</script>

Шаг 5. Проверьте и добавьте цель в Метрике

  1. Отправьте тестовую заявку с сайта. Сообщение должно прийти в Telegram за пару секунд.
  2. В Яндекс Метрике создайте цель типа «JavaScript-событие» с идентификатором lead_form_sent. Строка ym(…, 'reachGoal', …) из формы выше будет её засчитывать, и вы увидите, с каких источников приходят именно заявки, а не просто визиты.

Если сообщения не приходят

Что ещё можно подключить

Тот же приём работает для уведомлений: оплата пришла, заказ завис на этапе дольше суток, на склад поступил товар. Заявки обычно самый быстрый старт: эффект видно в первый же день.

Если не хочется разбираться самому, настроим под ваш сайт и ваши процессы: назовём срок и стоимость до начала работы и честно скажем, если автоматизация не окупится.

Обсудить автоматизацию

Код выше — рабочая основа, а не готовое решение для любого сайта. Перед запуском на сайте с персональными данными клиентов проверьте, что это соответствует вашей политике обработки данных.