Shiba Bank

Как отправить сообщение через Telegram API с помощью curl

Как отправить сообщение в Телеграм через API одним запросом curl: метод sendMessage, chat_id, text, parse_mode, кнопки, как узнать chat_id и что значат ошибки 400, 403 и 429.

Обновлено 02.10.2026 · 4 мин чтения

Сообщение через Telegram API отправляет метод sendMessage Bot API: нужны токен бота, chat_id получателя и text. Из командной строки это один запрос: curl "https://api.telegram.org/bot<ТОКЕН>/sendMessage" --data-urlencode "chat_id=123456789" --data-urlencode "text=Привет". В ответ придёт JSON с "ok": true и отправленным сообщением в поле result. Токен выдаёт @BotFather — как его получить и сберечь.

В примерах ниже вместо <ТОКЕН> стоит заглушка. Подставьте свой токен, но никому его не показывайте. Примеры написаны для оболочек bash и zsh.

Что нужно для sendMessage

Адрес запроса: https://api.telegram.org/bot<ТОКЕН>/sendMessage. Параметры метода:

  • chat_id — обязательный. Идентификатор чата или имя канала в формате @channelusername.
  • text — обязательный. Текст сообщения, от 1 до 4096 символов после разбора разметки.
  • parse_mode — необязательный. Режим разметки: HTML, MarkdownV2 или Markdown.
  • reply_markup — необязательный. Кнопки под сообщением или своя клавиатура.
  • reply_parameters — ответ на конкретное сообщение.
  • disable_notification — отправить без звука.
  • link_preview_options — управление превью ссылок.

Метод принимает и GET, и POST. Для текста с пробелами и русскими буквами удобнее --data-urlencode: curl сам закодирует значение.

Как узнать chat_id

Как правило, бот не может начать переписку первым: человек должен сначала написать ему или добавить его в группу. Поэтому порядок такой.

  1. Откройте своего бота в Telegram и отправьте ему любое сообщение, например /start.
  2. Запросите обновления: curl "https://api.telegram.org/bot<ТОКЕН>/getUpdates".
  3. В ответе найдите message, в нём chat и поле id — это нужный chat_id. Для канала вместо числа можно указать его @имя.

getUpdates работает, только если у бота не задан webhook — подробно в статье getUpdates и webhook. Идентификатор чата — целое число, оно может не помещаться в 32 бита, поэтому в программах храните его в 64-битном типе.

Примеры запросов

Простое сообщение: curl -s "https://api.telegram.org/bot<ТОКЕН>/sendMessage" --data-urlencode "chat_id=123456789" --data-urlencode "text=Заказ готов"

С разметкой HTML: curl -s "https://api.telegram.org/bot<ТОКЕН>/sendMessage" --data-urlencode "chat_id=123456789" --data-urlencode "parse_mode=HTML" --data-urlencode "text=<b>Заказ</b> готов"

В режиме HTML символы <, > и & в обычном тексте нужно заменять на &lt;, &gt; и &amp;. В режиме MarkdownV2 служебные символы экранируют обратной косой чертой.

Сообщение с кнопкой-ссылкой через JSON: curl -s -X POST "https://api.telegram.org/bot<ТОКЕН>/sendMessage" -H "Content-Type: application/json" -d '{"chat_id": 123456789, "text": "Открыть сайт", "reply_markup": {"inline_keyboard": [ [{"text": "Перейти", "url": "https://example.com"}] ]}}'

JSON-тело поддерживается для всех методов, кроме загрузки файлов. У кнопки под сообщением есть text и либо url, либо callback_data (от 1 до 64 байт): по нажатию на вторую бот получает событие.

Ошибки

Ответ с ошибкой содержит "ok": false, error_code и description. Чаще всего встречаются такие:

  • 401 Unauthorized. Обычно это значит, что токен неверный или заменён. Проверьте его методом getMe — как это сделать.
  • 400 Bad Request: chat not found. Такого чата нет или бот его не знает: пользователь ещё ничего не писал боту, либо в chat_id опечатка.
  • 403 Forbidden: bot was blocked by the user. Человек заблокировал бота и сообщения ему не доставить.
  • 400 про разметку. Telegram не смог разобрать текст: в HTML не закрыт тег или не экранированы <, >, &.
  • 429 Too Many Requests. Слишком частые запросы. В ответе есть поле retry_after — через сколько секунд повторить.

Лимиты из документации Telegram: в один чат не стоит отправлять больше одного сообщения в секунду, в группу бот может отправить не больше 20 сообщений в минуту, а массовая рассылка ограничена примерно 30 сообщениями в секунду.

Совет

Не вписывайте токен прямо в скрипты, которые попадают в репозиторий: храните его в переменной окружения или в файле настроек вне репозитория.

Что дальше

Чтобы бот отвечал на сообщения, а не только отправлял их, подключите приём событий: getUpdates и webhook. Если вам нужно отправлять пользователям звёзды или Premium из своей программы, у бота Shiba Bank есть API — смотрите документацию.

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

Как отправить сообщение в Telegram через API?

Выполните запрос к методу sendMessage с токеном бота, chat_id и text: curl "https://api.telegram.org/bot<ТОКЕН>/sendMessage" --data-urlencode "chat_id=<ID>" --data-urlencode "text=Привет".

Как узнать chat_id для sendMessage?

Напишите боту любое сообщение и вызовите getUpdates: нужное число лежит в message.chat.id. Для публичного канала можно использовать @имя канала.

Что значит ошибка chat not found в Telegram?

Бот не знает такой чат: либо в chat_id ошибка, либо человек ещё не писал боту. Бот не может начать диалог первым.

Что значит bot was blocked by the user?

Ошибка 403: пользователь заблокировал бота, поэтому написать ему нельзя.

Можно ли отправить сообщение от имени своего аккаунта, а не бота?

Через токен — нет: запросы с токеном бота выполняет сам бот, и сообщения уходят от его имени.

Как отправить сообщение в канал через бота?

Добавьте бота в канал администратором, а в chat_id укажите @имя_канала публичного канала.

Открыть бота
QR-код ссылки в Telegram

Откройте в Telegram

Наведите камеру телефона на код

Открыть в Telegram Desktop

Откроется окно Shiba Bank в Telegram.Откроется чат с ботом @barboskich_stars_bot.Telegram предложит выбрать группу и выдать боту права администратора.