Метод sendMessage

Метод для отправки текстовых сообщений в чаты Telegram с поддержкой форматирования, клавиатур и дополнительных параметров.

Описание

Используйте этот метод для отправки текстовых сообщений. В случае успеха возвращается отправленное 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, упрощая создание пошаговых диалогов с ботом.
Комментарии