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