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