Описание
Используйте этот метод для отправки текстовых сообщений. В случае успеха возвращается отправленное Message.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| business_connection_id | String | Опционально | Уникальный идентификатор бизнес-подключения, от имени которого будет отправлено сообщение |
| chat_id | Integer или String | Да | Уникальный идентификатор целевого чата или имя пользователя целевого канала (в формате @channelusername) |
| message_thread_id | Integer | Опционально | Уникальный идентификатор целевой ветки сообщений (темы) форума; только для супергрупп-форумов |
| direct_messages_topic_id | Integer | Опционально | Идентификатор темы прямых сообщений, в которую будет отправлено сообщение; требуется, если сообщение отправляется в чат прямых сообщений |
| text | String | Да | Текст отправляемого сообщения, 1-4096 символов после обработки сущностей |
| parse_mode | String | Опционально | Режим обработки сущностей в тексте сообщения. Подробнее см. параметры форматирования. |
| entities | Массив MessageEntity | Опционально | Список специальных сущностей в тексте сообщения в формате JSON, который можно указать вместо parse_mode |
| link_preview_options | LinkPreviewOptions | Опционально | Параметры генерации предпросмотра ссылок для сообщения |
| disable_notification | Boolean | Опционально | Отправляет сообщение беззвучно. Пользователи получат уведомление без звука. |
| protect_content | Boolean | Опционально | Защищает содержимое отправленного сообщения от пересылки и сохранения |
| allow_paid_broadcast | Boolean | Опционально | Передайте True, чтобы разрешить до 1000 сообщений в секунду, игнорируя ограничения рассылки за плату 0.1 Telegram Stars за сообщение. Соответствующие Stars будут списаны с баланса бота |
| message_effect_id | String | Опционально | Уникальный идентификатор эффекта сообщения, который будет добавлен к сообщению; только для личных чатов |
| suggested_post_parameters | SuggestedPostParameters | Опционально | Объект в формате JSON, содержащий параметры предлагаемой публикации для отправки; только для чатов прямых сообщений. Если сообщение отправляется как ответ на другую предлагаемую публикацию, то эта публикация автоматически отклоняется. |
| reply_parameters | ReplyParameters | Опционально | Описание сообщения, на которое нужно ответить |
| reply_markup | InlineKeyboardMarkup или ReplyKeyboardMarkup или ReplyKeyboardRemove или ForceReply | Опционально | Дополнительные параметры интерфейса. Объект в формате JSON для встроенной клавиатуры, пользовательской клавиатуры ответа, инструкций по удалению клавиатуры ответа или принудительному ответу от пользователя |
Примеры
php
<?php
$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/sendMessage";
$chatId = 123456789; // или '@channelusername'
$messageText = 'Привет! Это тестовое сообщение.';
// Подготовка данных
$postData = [
'chat_id' => $chatId,
'text' => $messageText,
'parse_mode' => 'HTML', // или 'MarkdownV2'
'disable_notification' => false,
'protect_content' => false,
'reply_markup' => json_encode([
'inline_keyboard' => [
[
['text' => 'Кнопка 1', 'callback_data' => 'btn1'],
['text' => 'Кнопка 2', 'url' => 'https://example.com']
]
]
])
];
// Отправка запроса через cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // только для тестов!
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch)) {
echo 'Ошибка cURL: ' . curl_error($ch);
} else {
$responseData = json_decode($response, true);
if ($responseData['ok']) {
echo 'Сообщение отправлено! ID: ' . $responseData['result']['message_id'];
} else {
echo 'Ошибка API: ' . $responseData['description'];
}
}
curl_close($ch);
// Альтернативный вариант с file_get_contents (требует allow_url_fopen)
/*
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($postData)
]
];
$context = stream_context_create($options);
$response = file_get_contents($apiUrl, false, $context);
$responseData = json_decode($response, true);
print_r($responseData);
*/
?>
python
import requests
def send_message(bot_token, chat_id, text, **kwargs):
"""
Отправляет текстовое сообщение в Telegram чат.
Параметры:
- bot_token: Токен вашего бота
- chat_id: ID чата или username канала
- text: Текст сообщения (1-4096 символов)
- **kwargs: Дополнительные параметры API
Возвращает:
- Ответ от Telegram API в формате JSON
"""
url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
# Обязательные параметры
payload = {
'chat_id': chat_id,
'text': text
}
# Добавляем опциональные параметры, если они переданы
optional_params = {
'business_connection_id': str,
'message_thread_id': int,
'direct_messages_topic_id': int,
'parse_mode': str,
'entities': list,
'link_preview_options': dict,
'disable_notification': bool,
'protect_content': bool,
'allow_paid_broadcast': bool,
'message_effect_id': str,
'suggested_post_parameters': dict,
'reply_parameters': dict,
'reply_markup': dict
}
for param, param_type in optional_params.items():
if param in kwargs:
# Проверяем тип параметра
if isinstance(kwargs[param], param_type):
payload[param] = kwargs[param]
else:
raise TypeError(f"Параметр '{param}' должен быть типа {param_type.__name__}")
try:
response = requests.post(url, json=payload)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"Ошибка при отправке сообщения: {e}")
return None
# Пример использования:
if __name__ == "__main__":
# Конфигурация
BOT_TOKEN = "ВАШ_ТОКЕН_БОТА"
CHAT_ID = "ВАШ_CHAT_ID_ИЛИ_@USERNAME"
# Пример 1: Простое текстовое сообщение
result = send_message(
bot_token=BOT_TOKEN,
chat_id=CHAT_ID,
text="Привет! Это тестовое сообщение."
)
# Пример 2: Сообщение с форматированием
result = send_message(
bot_token=BOT_TOKEN,
chat_id=CHAT_ID,
text="*Жирный текст* и _курсив_",
parse_mode="MarkdownV2",
disable_notification=True
)
# Пример 3: Сообщение с клавиатурой
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
keyboard = [
[InlineKeyboardButton("Кнопка 1", callback_data='1'),
InlineKeyboardButton("Кнопка 2", callback_data='2')],
[InlineKeyboardButton("Кнопка 3", callback_data='3')]
]
reply_markup = InlineKeyboardMarkup(keyboard)
result = send_message(
bot_token=BOT_TOKEN,
chat_id=CHAT_ID,
text="Выберите опцию:",
reply_markup=reply_markup.to_dict()
)
# Пример 4: Ответ на сообщение
result = send_message(
bot_token=BOT_TOKEN,
chat_id=CHAT_ID,
text="Это ответ на ваше сообщение",
reply_parameters={
'message_id': 123, # ID сообщения, на которое отвечаем
'chat_id': CHAT_ID
}
)
История изменений
- API 5.0. Обновлен метод sendMessage: Добавлена возможность ручного указания текстовых сущностей и поле allow_sending_without_reply
- API 5.6. Обновлен метод sendMessage: Добавлено поле protect_content
- API 6.3. Обновлен метод sendMessage: Добавлен параметр message_thread_id
- API 7.0. Обновлен метод sendMessage: Заменены параметры reply_to_message_id и allow_sending_without_reply на reply_parameters
- API 7.4. Обновлен метод sendMessage: Добавлен параметр message_effect_id
- API 7.11. Обновлен метод sendMessage: Добавлен параметр allow_paid_broadcast
- API 9.2. Обновлен метод sendMessage: Добавлен параметр direct_messages_topic_id
- API 9.3. Обновлен метод sendMessage: Поддержан параметр message_thread_id в личных чатах с темами для отправки сообщения в конкретную тему.
Дополнительно
- Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
- MessageEntity - Объект MessageEntity представляет специальную форматированную сущность в тексте сообщения, такую как упоминания, хэштеги, ссылки или стилизованный текст.
- LinkPreviewOptions - Объект для настройки параметров предварительного просмотра ссылок в сообщениях Telegram.
- SuggestedPostParameters - Объект содержит параметры публикации, предлагаемой ботом, включая цену и дату отправки.
- ReplyParameters - Объект, описывающий параметры для ответа на сообщение, включая идентификатор сообщения, чат, цитирование и дополнительные настройки.
- InlineKeyboardMarkup - Объект для создания встроенной клавиатуры, которая отображается непосредственно в сообщении.
- ReplyKeyboardMarkup - Объект, представляющий пользовательскую клавиатуру с вариантами ответа для ботов Telegram.
- ReplyKeyboardRemove - Объект для удаления пользовательской клавиатуры и возврата к стандартной буквенной клавиатуре в клиентах Telegram.
- ForceReply - Объект ForceReply принудительно отображает интерфейс ответа в клиентах Telegram, упрощая создание пошаговых диалогов с ботом.