Метод forwardMessages

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

Описание

Используйте этот метод для пересылки нескольких сообщений любого типа. Если некоторые из указанных сообщений не могут быть найдены или пересланы, они пропускаются. Служебные сообщения и сообщения с защищённым содержимым не могут быть пересланы. Группировка альбомов сохраняется для пересланных сообщений. При успешном выполнении возвращается массив MessageId отправленных сообщений.

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

Примеры

php

<?php

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

// Параметры для forwardMessages
$params = [
    'chat_id' => 123456789, // ID целевого чата
    'from_chat_id' => -1001234567890, // ID чата-источника (канал/супергруппа)
    'message_ids' => [1, 2, 3, 4], // Массив ID сообщений для пересылки
    'disable_notification' => false, // Отправлять с уведомлением
    'protect_content' => true, // Защитить содержимое от пересылки
    // 'message_thread_id' => 123, // Для тем форума (опционально)
    // 'direct_messages_topic_id' => 456, // Для тем личных сообщений (опционально)
];

// Отправка запроса
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl . 'forwardMessages');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

// Обработка ответа
$result = json_decode($response, true);
if ($result['ok']) {
    foreach ($result['result'] as $messageId) {
        echo "Сообщение переслано с ID: " . $messageId['message_id'] . "\n";
    }
} else {
    echo "Ошибка: " . $result['description'] . "\n";
}

// Альтернативный вариант с использованием file_get_contents
/*
$context = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => 'Content-Type: application/json',
        'content' => json_encode($params)
    ]
]);

$response = file_get_contents($apiUrl . 'forwardMessages', false, $context);
$result = json_decode($response, true);
*/
?>

python

import asyncio
from typing import List
from telegram import Bot
from telegram.constants import ParseMode

async def forward_messages_example():
    # Инициализация бота с вашим токеном
    bot = Bot(token="YOUR_BOT_TOKEN")
    
    # Параметры для пересылки сообщений
    chat_id = -1001234567890  # ID целевого чата/канала
    from_chat_id = -1009876543210  # ID чата, откуда пересылаем
    message_ids = [123, 124, 125]  # ID сообщений для пересылки (в строго возрастающем порядке)
    
    try:
        # Вызов метода forwardMessages
        result = await bot.forward_messages(
            chat_id=chat_id,
            from_chat_id=from_chat_id,
            message_ids=message_ids,
            disable_notification=True,  # Опционально: без звука
            protect_content=False,  # Опционально: защита контента
            # message_thread_id=456,  # Опционально: для топиков форума
            # direct_messages_topic_id=789,  # Опционально: для тем личных сообщений
        )
        
        # Результат - список объектов MessageId
        print(f"Успешно переслано {len(result)} сообщений")
        for msg_id in result:
            print(f"ID пересланного сообщения: {msg_id.message_id}")
            
    except Exception as e:
        print(f"Ошибка при пересылке сообщений: {e}")

# Запуск асинхронной функции
if __name__ == "__main__":
    asyncio.run(forward_messages_example())

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

  • API 7.0. Добавлен метод forwardMessages
  • API 9.2. Обновлен метод forwardMessages: Добавлен параметр direct_messages_topic_id
  • API 9.3. Обновлен метод forwardMessages: Поддержан параметр message_thread_id в личных чатах с темами для отправки сообщения в конкретную тему.

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

  • MessageId - Объект, содержащий уникальный идентификатор сообщения в Telegram, который может быть равен 0 для запланированных сообщений.
Комментарии