如何通过Bot API获取Telegram商家账号的商店礼品目录?
获取Telegram商家商店可购礼品目录的解决方案
问题背景
你使用python-telegram-bot开发关联商家账号的Telegram机器人,需要同步Telegram商家界面的可购礼品目录,但当前Bot API提供的getBusinessAccountGifts等方法仅能获取商家已收到的礼品,无法获取商店在售的礼品列表。
核心结论
目前Telegram Bot API没有直接获取商家商店可购礼品目录的接口,要实现这个需求,必须借助MTProto API的payments.getStarsGiftOptions方法,再与python-telegram-bot配合使用。
具体实现步骤
MTProto API方法说明
payments.getStarsGiftOptions方法会返回商家商店内所有可购买的礼品选项,包含你需要的gift_id、礼品名称、星星成本等核心字段,返回的对象类型为StarsGiftOption。集成MTProto客户端
python-telegram-bot基于Bot API,不支持MTProto调用,因此需要单独引入MTProto客户端库(推荐Pyrogram或Telethon),用商家账号登录后调用接口:- 先在Telegram官方开发者平台获取商家账号的
api_id和api_hash - 以Pyrogram为例,安装依赖:
pip install pyrogram tgcrypto
- 先在Telegram官方开发者平台获取商家账号的
代码示例(Pyrogram)
from pyrogram import Client from pyrogram.raw.functions import payments # 商家账号的API信息 api_id = 你的API_ID api_hash = "你的API_HASH" phone_number = "商家账号手机号" async def get_store_gifts(): async with Client("business_account_session", api_id, api_hash, phone_number=phone_number) as app: # 调用MTProto方法获取礼品目录 gift_options = await app.invoke(payments.GetStarsGiftOptions()) # 解析并提取所需字段 for option in gift_options.options: print(f"Gift ID: {option.gift.id}") print(f"礼品名称: {option.gift.title}") print(f"星星成本: {option.stars}") print("---") if __name__ == "__main__": import asyncio asyncio.run(get_store_gifts())与python-telegram-bot配合
- 定期运行MTProto客户端拉取礼品数据,同步到你的PostgreSQL数据库
gifts表,让机器人直接从数据库读取最新目录 - 也可以在项目中同时启动Bot API机器人和MTProto客户端,通过本地缓存或内存变量实现数据共享
- 定期运行MTProto客户端拉取礼品数据,同步到你的PostgreSQL数据库
注意事项
- MTProto客户端需要使用商家账号登录,与Bot API的机器人Token相互独立,确保商家账号已完成Telegram商家配置
- 调用MTProto接口时需遵守Telegram的API频率限制,避免频繁请求导致账号受限
内容的提问来源于stack exchange,提问作者user31047982
相关产品推荐
相关产品推荐

