Telegram-бот для приёма заявок с сайта: как создать и подключить

Обновлено 19 октября 2026 г. · 9 мин чтения

Telegram-бот для заявок — самый быстрый способ узнать о новом обращении: сообщение приходит на телефон через секунды после отправки формы. Но под словами «бот для приёма заявок» прячутся две разные задачи, и от выбора зависит объём работы. Разберём оба сценария, а затем пошагово настроим бота, который присылает заявки с сайта в личный чат или группу, — с примерами запросов и типичными ошибками.

Два сценария: бот-уведомление и бот-форма

Первый сценарий — бот как канал уведомлений. Клиент заполняет обычную форму на сайте, сервер принимает данные и отправляет их в Telegram от имени вашего бота. Бот ничего не спрашивает у клиента, он только пишет вам. Это самый частый запрос, когда говорят «заявки с сайта в телеграм».

Второй сценарий — чат-бот для приёма заявок, то есть бот как сама форма. Клиент открывает бота, тот по шагам спрашивает имя, телефон и суть вопроса, а в конце передаёт собранную заявку менеджеру. Такой бот нужен, если трафик уже живёт в Telegram: реклама в каналах, ссылка в профиле, рассылка.

  • Бот-уведомление: настраивается за 15 минут, достаточно одного HTTP-запроса со стороны сайта, постоянно работающий сервер для бота не нужен.
  • Бот-форма: нужен обработчик входящих сообщений (webhook или long polling), хранение шага диалога для каждого пользователя, проверка телефона и сценарий на случай, если клиент бросил диалог на середине.
  • Бот-форму можно собрать в конструкторе чат-ботов, но тогда заявки живут в этом конструкторе, а не рядом с заявками с сайта.

Дальше речь пойдёт в основном о первом сценарии — он покрывает большинство задач. Принимать входящие сообщения от клиентов бот-форме помогает webhook: как его настроить, разобрано в отдельной статье «Telegram webhook: как настроить setWebhook для бота».

Шаг 1. Создайте бота через @BotFather

  1. Откройте в Telegram официальный бот @BotFather (с синей галочкой) и отправьте команду /newbot.
  2. Укажите отображаемое имя бота — например, «Заявки с сайта».
  3. Придумайте username: латиница, цифры и подчёркивание, в конце обязательно bot — например, example_leads_bot.
  4. BotFather пришлёт токен вида 1234567890:AAH…: это ключ ко всем действиям от имени бота.

Токен — это пароль. Кто знает токен, тот может писать от имени бота, читать адресованные ему сообщения и менять его webhook. Не публикуйте токен в репозитории, скриншотах и коде страницы. Если он утёк, перевыпустите его в @BotFather командой /revoke — старый перестанет работать.

Для группы с заявками полезно сразу задать описание и аватар бота (/setdescription, /setuserpic): сотрудникам будет понятно, откуда приходят сообщения.

Шаг 2. Узнайте chat_id: личный чат, группа или канал

Чтобы отправить сообщение, боту нужен идентификатор чата — chat_id. Способ его получить зависит от того, куда должны приходить заявки.

  • Личный чат. Найдите бота по username и нажмите «Запустить» (/start). Это обязательно: бот не может первым написать пользователю, который его не запускал, — Telegram вернёт ошибку 403 «bot can’t initiate conversation with a user». chat_id личного чата — положительное число, совпадающее с ID пользователя.
  • Группа. Добавьте бота в группу и отправьте в ней команду с упоминанием бота, например /start@example_leads_bot. У обычных групп chat_id отрицательный, у супергрупп он начинается с -100.
  • Канал. Добавьте бота администратором с правом публикации. У канала chat_id тоже начинается с -100, а для публичного канала можно указать @username канала.

Сам chat_id удобно посмотреть через метод getUpdates: откройте в браузере адрес ниже, подставив токен, и найдите в ответе объект chat.

Получение последних событий бота
https://api.telegram.org/bot<TOKEN>/getUpdates

{"ok":true,"result":[{"update_id":815230001,
  "message":{"message_id":12,
    "chat":{"id":-1001234567890,"title":"Заявки","type":"supergroup"},
    "text":"/start@example_leads_bot"}}]}

Если getUpdates возвращает пустой список, на то обычно две причины. Первая — у бота уже установлен webhook: пока он активен, getUpdates не работает. Вторая — privacy mode в группе.

Privacy mode включён у всех ботов по умолчанию. В группе такой бот видит только команды, адресованные ему, ответы на свои сообщения и служебные сообщения, а обычную переписку участников — нет. Поэтому для получения chat_id отправляйте именно команду с упоминанием бота. Отключать privacy mode через /setprivacy для бота-уведомлений не нужно: он влияет только на то, какие сообщения бот получает, а отправлять сообщения в группу бот может и с включённым режимом. Если всё же отключили, бота придётся удалить из группы и добавить заново, чтобы изменение вступило в силу.

Когда обычную группу преобразуют в супергруппу (например, при включении истории для новых участников или публичной ссылки), chat_id меняется. Отправка по старому ID начнёт возвращать ошибку с полем migrate_to_chat_id — в нём новый идентификатор. Именно поэтому уведомления «вдруг» перестают приходить в группу, где ничего не меняли.

Шаг 3. Отправьте заявку методом sendMessage

Уведомление — это один POST-запрос к Bot API. Его должен выполнять сервер сайта после того, как он принял и сохранил заявку.

cURL: отправка заявки в группу
curl -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": -1001234567890,
    "parse_mode": "HTML",
    "text": "<b>Новая заявка</b>\nСайт: example.ru\nИмя: Иван\nТелефон: +7 999 000-00-00"
  }'

Параметр parse_mode: "HTML" позволяет выделять текст тегами <b>, <i>, <a href="…"> и <code>. Подвох в том, что данные из формы заполняет посетитель. Если он напишет в сообщении «цена < 5000», Telegram не сможет разобрать разметку и вернёт ошибку 400 «can’t parse entities» — заявка не дойдёт. Поэтому любые значения из формы перед вставкой экранируйте: & меняется на &amp;, < — на &lt;, > — на &gt;.

Экранирование значений для parse_mode HTML (JavaScript)
const esc = (value) =>
  String(value ?? '')
    .replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')

const text = '<b>Новая заявка</b>\n'
  + 'Имя: ' + esc(form.name) + '\n'
  + 'Телефон: ' + esc(form.phone) + '\n'
  + 'Сообщение: ' + esc(form.message)
  • Длина одного сообщения — до 4096 символов. Длинный текст заявки обрежьте и оставьте полную версию там, где заявка хранится.
  • Лимиты частоты задокументированы приблизительно: примерно одно сообщение в секунду в один чат, около 30 сообщений в секунду суммарно в разные чаты и порядка 20 сообщений в минуту в одну группу.
  • При превышении лимита Telegram отвечает ошибкой 429 Too Many Requests и указывает в поле retry_after, через сколько секунд можно повторить запрос.

Для обычного потока заявок лимиты не мешают. Упереться в них можно при массовой спам-атаке на форму или при рассылке одного события во много чатов — на этот случай отправку нужно ставить в очередь.

Надёжность и безопасность: где теряются заявки

Простой скрипт «форма → sendMessage» работает, пока всё работает. Проблемы начинаются в редких, но неизбежных ситуациях.

  • Telegram или сеть хостинга временно недоступны. Если заявка нигде не сохранилась, она потеряна. Правильный порядок: сначала записать заявку в базу, затем отправлять уведомление.
  • Нет повторной отправки. Временные ошибки (таймаут, 5xx, 429) нужно повторять с растущей паузой, а постоянные (400 из-за разметки, 403 «бот удалён из группы») — записывать в журнал и сообщать о них, а не повторять бесконечно.
  • Синхронный запрос тормозит форму. Если Telegram отвечает медленно, посетитель ждёт вместе с ним. Отправку лучше выполнять в фоне после ответа посетителю.
  • Никто не узнаёт о сбое. Бота удалили из группы — и уведомления молча перестали приходить. Нужен журнал доставки или хотя бы оповещение об ошибках.

Никогда не отправляйте заявки в Telegram прямо из JavaScript на странице. Токен в клиентском коде виден любому посетителю через «Просмотр кода»: с ним можно засыпать вашу группу спамом, прочитать адресованные боту сообщения или перенастроить бота. Схема всегда одна: форма → ваш сервер или сервис сбора заявок → Telegram.

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

Как это устроено в Site-Inbox

Site-Inbox берёт на себя всё, что описано выше, и при этом работает с вашим собственным ботом. Вы создаёте бота через @BotFather, а затем в разделе «Коннекторы» указываете его токен и Chat ID личного чата, группы или канала.

  • Заявка сначала сохраняется в панели и только потом уходит в Telegram — даже если уведомление не дошло, обращение не потеряется.
  • Кроме заявок, бот может присылать регистрации, комментарии и оплаты; типы уведомлений выбираются в настройках.
  • Уведомления ставятся в очередь и при сбое Telegram отправляются повторно с увеличивающейся паузой.
  • Журнал доставки показывает, какое сообщение ушло, а какое нет и почему.
  • Комментарии приходят с кнопками «Одобрить» и «Отклонить» — модерировать можно прямо из Telegram.

Подключить можно сайты на WordPress, Tilda и других конструкторах, а также HTML-формы и собственные приложения. Заявки со всех сайтов собираются в одной панели, а в сообщении видно сайт, форму, контакты и UTM-метки.

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

Почему бот не присылает заявки в личные сообщения?

Скорее всего, вы не запускали бота: бот не может первым написать пользователю. Найдите его по username, нажмите «Запустить» и проверьте, что указан ваш chat_id, а не ID другого пользователя.

Нужно ли отключать privacy mode, чтобы бот писал в группу?

Нет. Privacy mode ограничивает только сообщения, которые бот получает. Отправлять уведомления в группу бот может с включённым режимом.

Почему уведомления в группу внезапно перестали приходить?

Частые причины — бота удалили из группы или группу преобразовали в супергруппу, и у неё сменился chat_id. Новый ID указан в поле migrate_to_chat_id ответа с ошибкой.

Можно ли получать заявки с нескольких сайтов в один чат?

Да. Удобнее всего, когда в сообщении указан сайт и форма. В Site-Inbox это делается автоматически, а сами заявки со всех сайтов собираются в общей панели.

Подключите своего бота к Site-Inbox — заявки с сайтов будут сохраняться в панели и приходить в Telegram с повторной отправкой при сбое.

Читайте также