You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bot API获取Telegram商家账号的商店礼品目录?

获取Telegram商家商店可购礼品目录的解决方案

问题背景

你使用python-telegram-bot开发关联商家账号的Telegram机器人,需要同步Telegram商家界面的可购礼品目录,但当前Bot API提供的getBusinessAccountGifts等方法仅能获取商家已收到的礼品,无法获取商店在售的礼品列表。

核心结论

目前Telegram Bot API没有直接获取商家商店可购礼品目录的接口,要实现这个需求,必须借助MTProto API的payments.getStarsGiftOptions方法,再与python-telegram-bot配合使用。

具体实现步骤

  1. MTProto API方法说明
    payments.getStarsGiftOptions方法会返回商家商店内所有可购买的礼品选项,包含你需要的gift_id、礼品名称、星星成本等核心字段,返回的对象类型为StarsGiftOption。

  2. 集成MTProto客户端
    python-telegram-bot基于Bot API,不支持MTProto调用,因此需要单独引入MTProto客户端库(推荐Pyrogram或Telethon),用商家账号登录后调用接口:

    • 先在Telegram官方开发者平台获取商家账号的api_id和api_hash
    • 以Pyrogram为例,安装依赖:pip install pyrogram tgcrypto
  3. 代码示例(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())
    
  4. 与python-telegram-bot配合

    • 定期运行MTProto客户端拉取礼品数据,同步到你的PostgreSQL数据库gifts表,让机器人直接从数据库读取最新目录
    • 也可以在项目中同时启动Bot API机器人和MTProto客户端,通过本地缓存或内存变量实现数据共享

注意事项

  • MTProto客户端需要使用商家账号登录,与Bot API的机器人Token相互独立,确保商家账号已完成Telegram商家配置
  • 调用MTProto接口时需遵守Telegram的API频率限制,避免频繁请求导致账号受限

内容的提问来源于stack exchange,提问作者user31047982

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:57:22