Telegram-бот для приёма заявок с сайта: как создать и подключить
Обновлено 19 октября 2026 г. · 9 мин чтения
Telegram-бот для заявок — самый быстрый способ узнать о новом обращении: сообщение приходит на телефон через секунды после отправки формы. Но под словами «бот для приёма заявок» прячутся две разные задачи, и от выбора зависит объём работы. Разберём оба сценария, а затем пошагово настроим бота, который присылает заявки с сайта в личный чат или группу, — с примерами запросов и типичными ошибками.
Два сценария: бот-уведомление и бот-форма
Первый сценарий — бот как канал уведомлений. Клиент заполняет обычную форму на сайте, сервер принимает данные и отправляет их в Telegram от имени вашего бота. Бот ничего не спрашивает у клиента, он только пишет вам. Это самый частый запрос, когда говорят «заявки с сайта в телеграм».
Второй сценарий — чат-бот для приёма заявок, то есть бот как сама форма. Клиент открывает бота, тот по шагам спрашивает имя, телефон и суть вопроса, а в конце передаёт собранную заявку менеджеру. Такой бот нужен, если трафик уже живёт в Telegram: реклама в каналах, ссылка в профиле, рассылка.
- Бот-уведомление: настраивается за 15 минут, достаточно одного HTTP-запроса со стороны сайта, постоянно работающий сервер для бота не нужен.
- Бот-форма: нужен обработчик входящих сообщений (webhook или long polling), хранение шага диалога для каждого пользователя, проверка телефона и сценарий на случай, если клиент бросил диалог на середине.
- Бот-форму можно собрать в конструкторе чат-ботов, но тогда заявки живут в этом конструкторе, а не рядом с заявками с сайта.
Дальше речь пойдёт в основном о первом сценарии — он покрывает большинство задач. Принимать входящие сообщения от клиентов бот-форме помогает webhook: как его настроить, разобрано в отдельной статье «Telegram webhook: как настроить setWebhook для бота».
Шаг 1. Создайте бота через @BotFather
- Откройте в Telegram официальный бот @BotFather (с синей галочкой) и отправьте команду /newbot.
- Укажите отображаемое имя бота — например, «Заявки с сайта».
- Придумайте username: латиница, цифры и подчёркивание, в конце обязательно bot — например, example_leads_bot.
- 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 -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» — заявка не дойдёт. Поэтому любые значения из формы перед вставкой экранируйте: & меняется на &, < — на <, > — на >.
const esc = (value) =>
String(value ?? '')
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
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 с повторной отправкой при сбое.