Метод sendVideo

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

Описание

Используйте этот метод для отправки видеофайлов, клиенты Telegram поддерживают видео в формате MPEG4 (другие форматы могут быть отправлены как Document). При успешной отправке возвращается отправленное Message. В настоящее время боты могут отправлять видеофайлы размером до 50 МБ, этот лимит может быть изменён в будущем.

Параметр Тип Обязательный Описание
business_connection_id String Опционально Уникальный идентификатор бизнес-подключения, от имени которого будет отправлено сообщение
chat_id Integer или String Да Уникальный идентификатор целевого чата или имя пользователя целевого канала (в формате @channelusername)
message_thread_id Integer Опционально Уникальный идентификатор целевой ветки сообщений (темы) форума; только для супергрупп-форумов
direct_messages_topic_id Integer Опционально Идентификатор темы прямых сообщений, в которую будет отправлено сообщение; требуется, если сообщение отправляется в чат прямых сообщений
video InputFile или String Да Видео для отправки. Передайте file_id в виде строки, чтобы отправить видео, существующее на серверах Telegram (рекомендуется), передайте HTTP-URL в виде строки, чтобы Telegram получил видео из интернета, или загрузите новое видео, используя multipart/form-data. Подробнее об отправке файлов »
duration Integer Опционально Длительность отправляемого видео в секундах
width Integer Опционально Ширина видео
height Integer Опционально Высота видео
thumbnail InputFile или String Опционально Миниатюра отправляемого файла; может быть проигнорирована, если генерация миниатюр для файла поддерживается на стороне сервера. Миниатюра должна быть в формате JPEG и размером менее 200 КБ. Ширина и высота миниатюры не должны превышать 320. Игнорируется, если файл не загружается с использованием multipart/form-data. Миниатюры нельзя использовать повторно, их можно загружать только как новые файлы, поэтому вы можете передать «attach://», если миниатюра была загружена с использованием multipart/form-data под именем . Подробнее об отправке файлов »
cover InputFile или String Опционально Обложка для видео в сообщении. Передайте file_id, чтобы отправить файл, существующий на серверах Telegram (рекомендуется), передайте HTTP-URL, чтобы Telegram получил файл из интернета, или передайте «attach://», чтобы загрузить новый файл, используя multipart/form-data под именем . Подробнее об отправке файлов »
start_timestamp Integer Опционально Начальная временная метка для видео в сообщении
caption String Опционально Подпись к видео (также может использоваться при повторной отправке видео по file_id), 0-1024 символа после обработки сущностей
parse_mode String Опционально Режим обработки сущностей в подписи к видео. Подробнее см. параметры форматирования.
caption_entities Массив MessageEntity Опционально Список специальных сущностей в подписи в формате JSON, который можно указать вместо parse_mode
show_caption_above_media Boolean Опционально Передайте True, если подпись должна отображаться над медиафайлом сообщения
has_spoiler Boolean Опционально Передайте True, если видео нужно скрыть анимацией спойлера
supports_streaming Boolean Опционально Передайте True, если загруженное видео подходит для потоковой передачи
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

// Пример использования метода sendVideo Telegram Bot API

// Токен вашего бота
$botToken = 'ВАШ_ТОКЕН_БОТА';

// ID чата (можно получить через @userinfobot или другие способы)
$chatId = 123456789; // или '@channelusername'

// Способ 1: Отправка видео по file_id (рекомендуется)
$videoFileId = 'BAACAgIAAxkBAAIB...'; // file_id существующего видео на серверах Telegram

$data1 = [
    'chat_id' => $chatId,
    'video' => $videoFileId,
    'caption' => 'Это видео отправлено по file_id',
    'parse_mode' => 'HTML',
    'duration' => 60,
    'width' => 640,
    'height' => 360,
    'supports_streaming' => true,
    'has_spoiler' => false,
    'disable_notification' => false,
    'protect_content' => false,
    'reply_markup' => json_encode([
        'inline_keyboard' => [
            [
                ['text' => 'Кнопка 1', 'callback_data' => 'btn1'],
                ['text' => 'Кнопка 2', 'url' => 'https://example.com']
            ]
        ]
    ])
];

// Способ 2: Отправка видео по URL
$videoUrl = 'https://example.com/video.mp4';

$data2 = [
    'chat_id' => $chatId,
    'video' => $videoUrl,
    'caption' => 'Видео загружено по URL',
    'parse_mode' => 'Markdown',
    'duration' => 45
];

// Способ 3: Загрузка нового видео через multipart/form-data (используя CURL)
function sendVideoWithUpload($chatId, $videoPath, $caption = '', $thumbnailPath = null) {
    global $botToken;
    
    $url = "https://api.telegram.org/bot{$botToken}/sendVideo";
    
    $postFields = [
        'chat_id' => $chatId,
        'caption' => $caption,
        'parse_mode' => 'HTML',
        'duration' => 120,
        'supports_streaming' => true,
        'disable_notification' => false
    ];
    
    // Добавляем видео файл
    $postFields['video'] = new CURLFile(realpath($videoPath));
    
    // Добавляем thumbnail если указан
    if ($thumbnailPath && file_exists($thumbnailPath)) {
        $postFields['thumbnail'] = new CURLFile(realpath($thumbnailPath));
    }
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: multipart/form-data'
    ]);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
    if (curl_errno($ch)) {
        $error = curl_error($ch);
        curl_close($ch);
        throw new Exception("CURL Error: {$error}");
    }
    
    curl_close($ch);
    
    return json_decode($response, true);
}

// Способ 4: Отправка с reply_parameters (ответ на сообщение)
$data4 = [
    'chat_id' => $chatId,
    'video' => $videoFileId,
    'caption' => 'Ответ на ваше сообщение',
    'reply_parameters' => json_encode([
        'message_id' => 123, // ID сообщения, на которое отвечаем
        'chat_id' => $chatId,
        'allow_sending_without_reply' => true
    ]),
    'parse_mode' => 'HTML'
];

// Способ 5: Отправка с дополнительными параметрами для форумов
$data5 = [
    'chat_id' => $chatId,
    'message_thread_id' => 456, // ID темы в форуме
    'video' => $videoFileId,
    'caption' => 'Видео в теме форума',
    'caption_entities' => json_encode([
        [
            'type' => 'bold',
            'offset' => 0,
            'length' => 6
        ]
    ]),
    'show_caption_above_media' => true,
    'has_spoiler' => true
];

// Функция для отправки запроса
function sendTelegramRequest($method, $data = []) {
    global $botToken;
    
    $url = "https://api.telegram.org/bot{$botToken}/{$method}";
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    
    $response = curl_exec($ch);
    
    if (curl_errno($ch)) {
        error_log('CURL Error: ' . curl_error($ch));
    }
    
    curl_close($ch);
    
    return json_decode($response, true);
}

// Пример отправки (способ 1)
try {
    $result = sendTelegramRequest('sendVideo', $data1);
    
    if ($result['ok']) {
        echo "Видео успешно отправлено! Message ID: " . $result['result']['message_id'];
    } else {
        echo "Ошибка: " . $result['description'];
    }
} catch (Exception $e) {
    echo "Ошибка: " . $e->getMessage();
}

// Пример отправки с загрузкой файла
try {
    $videoPath = '/path/to/your/video.mp4';
    $thumbnailPath = '/path/to/thumbnail.jpg';
    
    if (file_exists($videoPath)) {
        $result = sendVideoWithUpload($chatId, $videoPath, 'Новое загруженное видео', $thumbnailPath);
        
        if ($result['ok']) {
            echo "Видео загружено и отправлено!";
            // Сохраняем file_id для будущего использования
            $newFileId = $result['result']['video']['file_id'];
            echo "File ID: {$newFileId}";
        } else {
            echo "Ошибка: " . $result['description'];
        }
    } else {
        echo "Файл видео не найден!";
    }
} catch (Exception $e) {
    echo "Ошибка загрузки: " . $e->getMessage();
}

?>

python

import requests
from typing import Union, Optional, Dict, Any

def send_video(
    bot_token: str,
    chat_id: Union[int, str],
    video: Union[str, bytes],
    business_connection_id: Optional[str] = None,
    message_thread_id: Optional[int] = None,
    direct_messages_topic_id: Optional[int] = None,
    duration: Optional[int] = None,
    width: Optional[int] = None,
    height: Optional[int] = None,
    thumbnail: Optional[Union[str, bytes]] = None,
    cover: Optional[Union[str, bytes]] = None,
    start_timestamp: Optional[int] = None,
    caption: Optional[str] = None,
    parse_mode: Optional[str] = None,
    caption_entities: Optional[list] = None,
    show_caption_above_media: Optional[bool] = None,
    has_spoiler: Optional[bool] = None,
    supports_streaming: Optional[bool] = None,
    disable_notification: Optional[bool] = None,
    protect_content: Optional[bool] = None,
    allow_paid_broadcast: Optional[bool] = None,
    message_effect_id: Optional[str] = None,
    suggested_post_parameters: Optional[Dict[str, Any]] = None,
    reply_parameters: Optional[Dict[str, Any]] = None,
    reply_markup: Optional[Union[Dict[str, Any], str]] = None
) -> Dict[str, Any]:
    """
    Отправка видео через Telegram Bot API.
    
    Параметры:
    - video: может быть file_id (str), URL (str) или bytes (бинарные данные файла)
    """
    
    url = f"https://api.telegram.org/bot{bot_token}/sendVideo"
    
    # Определяем, отправляем ли мы файл или используем file_id/URL
    is_file_upload = isinstance(video, bytes)
    is_thumbnail_upload = isinstance(thumbnail, bytes)
    is_cover_upload = isinstance(cover, bytes)
    
    if is_file_upload:
        # Отправка через multipart/form-data
        files = {'video': ('video.mp4', video, 'video/mp4')}
        
        if is_thumbnail_upload:
            files['thumbnail'] = ('thumbnail.jpg', thumbnail, 'image/jpeg')
        
        if is_cover_upload:
            files['cover'] = ('cover.jpg', cover, 'image/jpeg')
        
        data = {
            'chat_id': chat_id,
            'duration': duration,
            'width': width,
            'height': height,
            'caption': caption,
            'parse_mode': parse_mode,
            'show_caption_above_media': show_caption_above_media,
            'has_spoiler': has_spoiler,
            'supports_streaming': supports_streaming,
            'disable_notification': disable_notification,
            'protect_content': protect_content,
            'allow_paid_broadcast': allow_paid_broadcast,
            'message_effect_id': message_effect_id,
            'start_timestamp': start_timestamp
        }
        
        # Добавляем опциональные параметры, если они переданы
        if business_connection_id:
            data['business_connection_id'] = business_connection_id
        if message_thread_id:
            data['message_thread_id'] = message_thread_id
        if direct_messages_topic_id:
            data['direct_messages_topic_id'] = direct_messages_topic_id
        if caption_entities:
            data['caption_entities'] = str(caption_entities)
        if suggested_post_parameters:
            data['suggested_post_parameters'] = str(suggested_post_parameters)
        if reply_parameters:
            data['reply_parameters'] = str(reply_parameters)
        if reply_markup:
            data['reply_markup'] = str(reply_markup) if isinstance(reply_markup, dict) else reply_markup
        
        # Для thumbnail и cover, если это строки (file_id или URL)
        if thumbnail and not is_thumbnail_upload:
            data['thumbnail'] = thumbnail
        if cover and not is_cover_upload:
            data['cover'] = cover
        
        response = requests.post(url, data=data, files=files)
    
    else:
        # Отправка через JSON (file_id или URL)
        params = {
            'chat_id': chat_id,
            'video': video,
            'duration': duration,
            'width': width,
            'height': height,
            'thumbnail': thumbnail,
            'cover': cover,
            'start_timestamp': start_timestamp,
            'caption': caption,
            'parse_mode': parse_mode,
            'caption_entities': caption_entities,
            'show_caption_above_media': show_caption_above_media,
            'has_spoiler': has_spoiler,
            'supports_streaming': supports_streaming,
            'disable_notification': disable_notification,
            'protect_content': protect_content,
            'allow_paid_broadcast': allow_paid_broadcast,
            'message_effect_id': message_effect_id,
            'suggested_post_parameters': suggested_post_parameters,
            'reply_parameters': reply_parameters,
            'reply_markup': reply_markup,
            'business_connection_id': business_connection_id,
            'message_thread_id': message_thread_id,
            'direct_messages_topic_id': direct_messages_topic_id
        }
        
        # Удаляем None значения
        params = {k: v for k, v in params.items() if v is not None}
        
        response = requests.post(url, json=params)
    
    return response.json()

# Пример использования 1: Отправка по file_id
def example_send_by_file_id():
    bot_token = "YOUR_BOT_TOKEN"
    chat_id = 123456789
    file_id = "BAACAgIAAxkBAAIB..."  # Пример file_id
    
    result = send_video(
        bot_token=bot_token,
        chat_id=chat_id,
        video=file_id,
        caption="Вот интересное видео!",
        parse_mode="HTML",
        supports_streaming=True,
        has_spoiler=False
    )
    
    print(result)

# Пример использования 2: Отправка файла с диска
def example_send_from_file():
    bot_token = "YOUR_BOT_TOKEN"
    chat_id = 123456789
    
    # Чтение видео файла
    with open("video.mp4", "rb") as video_file:
        video_data = video_file.read()
    
    # Чтение thumbnail (опционально)
    with open("thumbnail.jpg", "rb") as thumb_file:
        thumbnail_data = thumb_file.read()
    
    result = send_video(
        bot_token=bot_token,
        chat_id=chat_id,
        video=video_data,
        thumbnail=thumbnail_data,
        caption="Новое видео!",
        duration=120,  # 2 минуты
        width=1920,
        height=1080,
        supports_streaming=True,
        disable_notification=True
    )
    
    print(result)

# Пример использования 3: Отправка с клавиатурой
def example_send_with_keyboard():
    bot_token = "YOUR_BOT_TOKEN"
    chat_id = 123456789
    file_id = "BAACAgIAAxkBAAIB..."
    
    # Создаем inline клавиатуру
    reply_markup = {
        "inline_keyboard": [
            [
                {"text": "👍 Нравится", "callback_data": "like_video"},
                {"text": "👎 Не нравится", "callback_data": "dislike_video"}
            ],
            [
                {"text": "📺 Канал", "url": "https://t.me/example_channel"}
            ]
        ]
    }
    
    result = send_video(
        bot_token=bot_token,
        chat_id=chat_id,
        video=file_id,
        caption="Посмотрите это видео и оцените!",
        reply_markup=reply_markup,
        protect_content=True
    )
    
    print(result)

# Пример использования 4: Отправка в топик форума
def example_send_to_forum_topic():
    bot_token = "YOUR_BOT_TOKEN"
    chat_id = -1001234567890  # ID супергруппы
    file_id = "BAACAgIAAxkBAAIB..."
    
    result = send_video(
        bot_token=bot_token,
        chat_id=chat_id,
        video=file_id,
        message_thread_id=123,  # ID топика в форуме
        caption="Видео по теме обсуждения",
        parse_mode="MarkdownV2",
        show_caption_above_media=True
    )
    
    print(result)

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

  • API 3.6. Обновлен метод sendVideo: Добавлен параметр supports_streaming
  • API 5.0. Обновлен метод sendVideo: Добавлена возможность ручного указания текстовых сущностей и поле allow_sending_without_reply
  • API 5.6. Обновлен метод sendVideo: Добавлено поле protect_content
  • API 6.3. Обновлен метод sendVideo: Добавлен параметр message_thread_id
  • API 6.4. Обновлен метод sendVideo: Добавлен параметр has_spoiler
  • API 6.6. Обновлен метод sendVideo: Переименован параметр thumb в thumbnail
  • API 7.0. Обновлен метод sendVideo: Заменены параметры reply_to_message_id и allow_sending_without_reply на reply_parameters
  • API 7.4. Обновлен метод sendVideo: Добавлен параметр message_effect_id
  • API 7.11. Обновлен метод sendVideo: Добавлен параметр allow_paid_broadcast
  • API 8.3. Обновлен метод sendVideo: Добавлены параметры cover и start_timestamp для указания обложки и временной метки начала видео
  • API 9.2. Обновлен метод sendVideo: Добавлен параметр direct_messages_topic_id
  • API 9.3. Обновлен метод sendVideo: Поддержан параметр message_thread_id в личных чатах с темами для отправки сообщения в конкретную тему.

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

  • Document - Объект, представляющий общий файл (не фото, голосовое или аудио) с метаданными для загрузки и идентификации.
  • Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
  • InputFile - Объект, представляющий содержимое файла для загрузки через multipart/form-data.
  • MessageEntity - Объект MessageEntity представляет специальную форматированную сущность в тексте сообщения, такую как упоминания, хэштеги, ссылки или стилизованный текст.
  • SuggestedPostParameters - Объект содержит параметры публикации, предлагаемой ботом, включая цену и дату отправки.
  • ReplyParameters - Объект, описывающий параметры для ответа на сообщение, включая идентификатор сообщения, чат, цитирование и дополнительные настройки.
  • InlineKeyboardMarkup - Объект для создания встроенной клавиатуры, которая отображается непосредственно в сообщении.
  • ReplyKeyboardMarkup - Объект, представляющий пользовательскую клавиатуру с вариантами ответа для ботов Telegram.
  • ReplyKeyboardRemove - Объект для удаления пользовательской клавиатуры и возврата к стандартной буквенной клавиатуре в клиентах Telegram.
  • ForceReply - Объект ForceReply принудительно отображает интерфейс ответа в клиентах Telegram, упрощая создание пошаговых диалогов с ботом.
Комментарии