Метод getBusinessAccountGifts

Метод возвращает список подарков, полученных и принадлежащих бизнес-аккаунту, с возможностью фильтрации и сортировки.

Описание

Возвращает подарки, полученные и принадлежащие управляемому бизнес-аккаунту. Требует права бизнес-бота can_view_gifts_and_stars. При успехе возвращает OwnedGifts.

Параметр Тип Обязательный Описание
business_connection_id String Да Уникальный идентификатор бизнес-подключения
exclude_unsaved Boolean Опционально Передайте True, чтобы исключить подарки, не сохранённые на странице профиля аккаунта
exclude_saved Boolean Опционально Передайте True, чтобы исключить подарки, сохранённые на странице профиля аккаунта
exclude_unlimited Boolean Опционально Передайте True, чтобы исключить подарки, которые можно приобрести неограниченное количество раз
exclude_limited Boolean Опционально Передайте True, чтобы исключить подарки, которые можно приобрести ограниченное количество раз
exclude_unique Boolean Опционально Передайте True, чтобы исключить уникальные подарки
sort_by_price Boolean Опционально Передайте True, чтобы отсортировать результаты по цене подарка вместо даты отправки; сортировка применяется до пагинации
offset String Опционально Смещение первой записи для возврата, полученное из предыдущего запроса; используйте пустую строку для получения первой порции результатов
limit Integer Опционально Максимальное количество возвращаемых подарков: 1-100, по умолчанию 100

Примеры

php

<?php

// Конфигурация
$botToken = 'YOUR_BOT_TOKEN';
$businessConnectionId = 'YOUR_BUSINESS_CONNECTION_ID';

// Параметры запроса (можно настроить по необходимости)
$params = [
    'business_connection_id' => $businessConnectionId,
    'exclude_unsaved' => false,    // Не исключать неподписанные подарки
    'exclude_saved' => false,      // Не исключать подписанные подарки
    'exclude_unlimited' => false,  // Не исключать безлимитные подарки
    'exclude_limited' => false,    // Не исключать лимитированные подарки
    'exclude_unique' => false,     // Не исключать уникальные подарки
    'sort_by_price' => false,      // Сортировать по дате отправки (по умолчанию)
    'offset' => '',                // Начать с первой страницы
    'limit' => 50                  // Получить 50 подарков
];

// Функция для отправки запроса к Telegram Bot API
function sendTelegramRequest($method, $params = []) {
    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, json_encode($params));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json'
    ]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
    if (curl_errno($ch)) {
        throw new Exception('CURL error: ' . curl_error($ch));
    }
    
    curl_close($ch);
    
    $decodedResponse = json_decode($response, true);
    
    if (!$decodedResponse || !isset($decodedResponse['ok'])) {
        throw new Exception('Invalid API response');
    }
    
    if (!$decodedResponse['ok']) {
        $errorCode = $decodedResponse['error_code'] ?? 'Unknown';
        $description = $decodedResponse['description'] ?? 'No description';
        throw new Exception("API error {$errorCode}: {$description}");
    }
    
    return $decodedResponse['result'];
}

try {
    // Получаем подарки бизнес-аккаунта
    $gifts = sendTelegramRequest('getBusinessAccountGifts', $params);
    
    // Обработка результата
    echo "Получено подарков: " . count($gifts['gifts'] ?? []) . "\n";
    echo "Следующий offset: " . ($gifts['next_offset'] ?? 'нет') . "\n\n";
    
    // Вывод информации о подарках
    if (!empty($gifts['gifts'])) {
        foreach ($gifts['gifts'] as $index => $gift) {
            echo "Подарок #" . ($index + 1) . ":\n";
            echo "  ID: " . ($gift['id'] ?? 'N/A') . "\n";
            echo "  Название: " . ($gift['title'] ?? 'N/A') . "\n";
            echo "  Цена: " . ($gift['price'] ?? 'N/A') . " звезд\n";
            echo "  Статус: " . ($gift['is_saved'] ? 'Сохранен' : 'Не сохранен') . "\n";
            echo "  Тип: " . ($gift['type'] ?? 'N/A') . "\n";
            echo "---\n";
        }
    } else {
        echo "Подарки не найдены.\n";
    }
    
} catch (Exception $e) {
    echo "Ошибка: " . $e->getMessage() . "\n";
}

// Пример с пагинацией
function getAllBusinessGifts($businessConnectionId, $botToken) {
    $allGifts = [];
    $offset = '';
    
    do {
        $params = [
            'business_connection_id' => $businessConnectionId,
            'offset' => $offset,
            'limit' => 100
        ];
        
        $response = sendTelegramRequest('getBusinessAccountGifts', $params);
        
        if (!empty($response['gifts'])) {
            $allGifts = array_merge($allGifts, $response['gifts']);
        }
        
        $offset = $response['next_offset'] ?? '';
        
    } while (!empty($offset));
    
    return $allGifts;
}

// Пример фильтрации только сохраненных подарков
function getSavedBusinessGifts($businessConnectionId, $botToken) {
    $params = [
        'business_connection_id' => $businessConnectionId,
        'exclude_unsaved' => true,  // Исключаем неподписанные
        'limit' => 100
    ];
    
    return sendTelegramRequest('getBusinessAccountGifts', $params);
}

?>

python

import asyncio
from typing import Optional
from telegram import Bot
from telegram._utils.types import JSONDict

async def get_business_account_gifts_example():
    # Инициализация бота с токеном
    bot = Bot(token="YOUR_BOT_TOKEN")
    
    # ID бизнес-подключения (должен быть получен из бизнес-сообщений)
    business_connection_id = "your_business_connection_id"
    
    try:
        # Пример 1: Получение всех подарков
        gifts = await bot.get_business_account_gifts(
            business_connection_id=business_connection_id
        )
        
        # Пример 2: Получение только сохраненных подарков с сортировкой по цене
        saved_gifts = await bot.get_business_account_gifts(
            business_connection_id=business_connection_id,
            exclude_unsaved=True,  # исключаем несохраненные
            sort_by_price=True,    # сортируем по цене
            limit=50               # ограничиваем количество
        )
        
        # Пример 3: Получение уникальных подарков с пагинацией
        unique_gifts = await bot.get_business_account_gifts(
            business_connection_id=business_connection_id,
            exclude_unsaved=True,
            exclude_saved=True,
            exclude_unlimited=True,
            exclude_limited=True,
            offset="",  # начинаем с начала
            limit=20
        )
        
        # Пример 4: Получение ограниченных подарков (не уникальных)
        limited_gifts = await bot.get_business_account_gifts(
            business_connection_id=business_connection_id,
            exclude_unique=True,    # исключаем уникальные
            exclude_unlimited=True, # исключаем неограниченные
            sort_by_price=False     # сортировка по дате отправки
        )
        
        # Обработка результата
        if gifts:
            print(f"Всего подарков: {len(gifts.gifts)}")
            for gift in gifts.gifts:
                print(f"ID подарка: {gift.id}")
                print(f"Название: {gift.title}")
                print(f"Цена: {gift.price}")
                print(f"Статус: {'Сохранен' if gift.saved else 'Не сохранен'}")
                print("-" * 30)
            
            # Получение следующей страницы (если есть)
            if gifts.next_offset:
                next_page = await bot.get_business_account_gifts(
                    business_connection_id=business_connection_id,
                    offset=gifts.next_offset
                )
        
        return gifts
        
    except Exception as e:
        print(f"Ошибка при получении подарков: {e}")
        return None

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

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

  • API 9.0. Добавлен метод getBusinessAccountGifts
  • API 9.3. Обновлен метод getBusinessAccountGifts: Параметр exclude_limited заменен на exclude_limited_upgradable и exclude_limited_non_upgradable. Добавлен параметр exclude_from_blockchain.

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

  • OwnedGifts - Объект содержит список подарков, принадлежащих пользователю или чату, с информацией об их количестве и возможностью постраничной загрузки.
Комментарии