Метод forwardMessage

Метод для пересылки сообщений между чатами с возможностью настройки параметров доставки и защиты содержимого.

Описание

Используйте этот метод для пересылки сообщений любого типа. Служебные сообщения и сообщения с защищённым содержимым не могут быть пересланы. В случае успеха возвращается отправленное Message.

Параметр Тип Обязательный Описание
chat_id Integer или String Да Уникальный идентификатор целевого чата или имя пользователя целевого канала (в формате @channelusername)
message_thread_id Integer Необязательный Уникальный идентификатор целевой ветки сообщений (темы) форума; только для супергрупп-форумов
direct_messages_topic_id Integer Необязательный Идентификатор темы личных сообщений, в которую будет переслано сообщение; требуется, если сообщение пересылается в чат личных сообщений
from_chat_id Integer или String Да Уникальный идентификатор чата, из которого было отправлено исходное сообщение (или имя пользователя канала в формате @channelusername)
video_start_timestamp Integer Необязательный Новая начальная временная метка для пересланного видео в сообщении
disable_notification Boolean Необязательный Отправляет сообщение беззвучно. Пользователи получат уведомление без звука.
protect_content Boolean Необязательный Защищает содержимое пересланного сообщения от пересылки и сохранения
suggested_post_parameters SuggestedPostParameters Необязательный Объект в формате JSON, содержащий параметры предлагаемой публикации для отправки; только для чатов личных сообщений
message_id Integer Да Идентификатор сообщения в чате, указанном в from_chat_id

Примеры

php

<?php

$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/";

// Параметры для пересылки сообщения
$params = [
    'chat_id' => 123456789, // ID целевого чата
    'from_chat_id' => -1001234567890, // ID чата, откуда пересылаем
    'message_id' => 123, // ID сообщения для пересылки
    'disable_notification' => false, // Отправлять ли без звука
    'protect_content' => true, // Защитить содержимое
];

// Опциональные параметры (раскомментировать при необходимости)
// $params['message_thread_id'] = 456; // Для тем форума
// $params['direct_messages_topic_id'] = 789; // Для тем личных сообщений
// $params['video_start_timestamp'] = 10; // Начало видео с 10-й секунды
// $params['suggested_post_parameters'] = json_encode(['some_param' => 'value']);

// Отправка запроса
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => $apiUrl . 'forwardMessage',
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $params,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

// Обработка ответа
if ($httpCode === 200) {
    $data = json_decode($response, true);
    if ($data['ok']) {
        echo "Сообщение переслано! ID нового сообщения: " . $data['result']['message_id'];
    } else {
        echo "Ошибка API: " . $data['description'];
    }
} else {
    echo "HTTP ошибка: " . $httpCode;
}

// Альтернативный вариант с использованием file_get_contents (требует allow_url_fopen)
/*
$url = $apiUrl . 'forwardMessage?' . http_build_query($params);
$response = file_get_contents($url);
$data = json_decode($response, true);
if ($data['ok']) {
    echo "Успешно!";
}
*/

// Пример с использованием готовой библиотеки (например, TelegramBotPHP)
/*
$telegram = new \TelegramBot\Api\BotApi($botToken);
try {
    $message = $telegram->forwardMessage(
        $params['chat_id'],
        $params['from_chat_id'],
        $params['message_id']
    );
    echo "Переслано сообщение ID: " . $message->getMessageId();
} catch (\TelegramBot\Api\Exception $e) {
    echo $e->getMessage();
}
*/
?>

python

import requests

def forward_message(bot_token, chat_id, from_chat_id, message_id, **kwargs):
    """
    Пересылает сообщение в указанный чат.
    
    Параметры:
    - bot_token: токен вашего бота
    - chat_id: ID целевого чата или username канала
    - from_chat_id: ID чата, откуда пересылается сообщение
    - message_id: ID сообщения для пересылки
    - **kwargs: дополнительные параметры (необязательные)
        - message_thread_id: ID темы в форуме
        - direct_messages_topic_id: ID темы в личных сообщениях
        - video_start_timestamp: новая временная метка для видео
        - disable_notification: отключить уведомление
        - protect_content: защитить содержимое
        - suggested_post_parameters: параметры предлагаемого поста
    
    Возвращает:
    - Объект Message в случае успеха
    - None в случае ошибки
    """
    
    url = f"https://api.telegram.org/bot{bot_token}/forwardMessage"
    
    data = {
        'chat_id': chat_id,
        'from_chat_id': from_chat_id,
        'message_id': message_id
    }
    
    # Добавляем необязательные параметры, если они переданы
    optional_params = [
        'message_thread_id',
        'direct_messages_topic_id',
        'video_start_timestamp',
        'disable_notification',
        'protect_content',
        'suggested_post_parameters'
    ]
    
    for param in optional_params:
        if param in kwargs:
            data[param] = kwargs[param]
    
    try:
        response = requests.post(url, json=data)
        response.raise_for_status()
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"Ошибка при пересылке сообщения: {e}")
        return None

# Пример использования:
if __name__ == "__main__":
    # Замените на реальные значения
    BOT_TOKEN = "YOUR_BOT_TOKEN"
    TARGET_CHAT_ID = -1001234567890  # или "@channelusername"
    SOURCE_CHAT_ID = -1009876543210  # или "@sourcechannel"
    MESSAGE_ID = 12345
    
    # Базовый пример
    result = forward_message(
        bot_token=BOT_TOKEN,
        chat_id=TARGET_CHAT_ID,
        from_chat_id=SOURCE_CHAT_ID,
        message_id=MESSAGE_ID
    )
    
    # Пример с дополнительными параметрами
    result_with_options = forward_message(
        bot_token=BOT_TOKEN,
        chat_id=TARGET_CHAT_ID,
        from_chat_id=SOURCE_CHAT_ID,
        message_id=MESSAGE_ID,
        disable_notification=True,
        protect_content=True,
        message_thread_id=456  # для форумов
    )
    
    if result and result.get('ok'):
        print(f"Сообщение успешно переслано! ID: {result['result']['message_id']}")

История изменений

  • API 5.6. Обновлен метод forwardMessage: Добавлено поле protect_content
  • API 6.3. Обновлен метод forwardMessage: Добавлен параметр message_thread_id
  • API 8.3. Обновлен метод forwardMessage: Добавлен параметр video_start_timestamp для изменения временной метки начала пересылаемых видео
  • API 9.2. Обновлен метод forwardMessage: Добавлен параметр direct_messages_topic_id
  • API 9.3. Обновлен метод forwardMessage: Поддержан параметр message_thread_id в личных чатах с темами для отправки сообщения в конкретную тему. Добавлен параметр message_effect_id.

Дополнительно

  • Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
  • SuggestedPostParameters - Объект содержит параметры публикации, предлагаемой ботом, включая цену и дату отправки.
Комментарии