星级订阅
机器人和频道可以创建订阅,定期向用户收取一定数量的Telegram 星星,以换取内容和服务。
频道订阅
starsSubscriptionPricing#05416d58 period:int amount:long = StarsSubscriptionPricing;chatInvite#5c9d3702 flags:# channel:flags.0?true broadcast:flags.1?true public:flags.2?true megagroup:flags.3?true request_needed:flags.6?true verified:flags.7?true scam:flags.8?true fake:flags.9?true can_refulfill_subscription:flags.11?true title:string about:flags.5?string photo:Photo participants_count:int participants:flags.4?Vector<User> color:int subscription_pricing:flags.10?StarsSubscriptionPricing subscription_form_id:flags.12?long bot_verification:flags.13?BotVerification = ChatInvite;inputInvoiceChatInviteSubscription#34e793f1 hash:string = InputInvoice;starsSubscription#2e6eab1a flags:# canceled:flags.0?true can_refulfill:flags.1?true missing_balance:flags.2?true bot_canceled:flags.7?true id:string peer:Peer until_date:int pricing:StarsSubscriptionPricing chat_invite_hash:flags.3?string title:flags.4?string photo:flags.5?WebDocument invoice_slug:flags.6?string = StarsSubscription;---functions---messages.exportChatInvite#a455de90 flags:# legacy_revoke_permanent:flags.2?true request_needed:flags.3?true peer:InputPeer expire_date:flags.0?int usage_limit:flags.1?int title:flags.4?string subscription_pricing:flags.5?StarsSubscriptionPricing = ExportedChatInvite;messages.checkChatInvite#3eadb1bb hash:string = ChatInvite;messages.importChatInvite#6c50051c hash:string = Updates; payments.fulfillStarsSubscription#cc5bebb3 peer:InputPeer subscription_id:string = Bool;messages.getChatInviteImporters#df04dd4e flags:# requested:flags.0?true subscription_expired:flags.3?true peer:InputPeer link:flags.1?string q:flags.2?string offset_date:int offset_user:InputUser limit:int = messages.ChatInviteImporters;
频道管理员可以创建特殊的邀请链接,允许用户通过每月支付 Telegram Stars 来加入频道。
使用付费邀请链接订阅频道,即可将 Telegram 星星转入该频道的余额。
要创建此类链接,请调用messages.exportChatInvite,并传入starsSubscriptionPricing构造函数subscription_pricing,传入要出售访问权限的私有频道,以及peer用户每秒amount需要支付的 Telegram Stars 数量period,以获得并维持对该频道的访问权限。
目前唯一允许的订阅周期为10 个月30*24*60*60,即用户将amount每月自动扣除 Stars,允许的最大数量在配置键 »amount中指定。stars_subscription_amount_max
使用messages.checkChatInvite获取邀请链接信息的用户将获得一个设置了and标志的chatInvite构造函数。subscription_pricingsubscription_form_id
要支付订阅费用,请按照通常的支付流程» ,但有以下变化:由于订阅已在chatInvitesubscription_form_id返回的表单中预先生成,因此必须跳过支付流程»的前两个步骤(用于生成支付表单的步骤),直接从步骤 3»中的payments.sendStarsForm调用开始,将包含邀请链接组件的inputInvoiceChatInviteSubscription传递给chatInvite。invoicehashform_idsubscription_form_id
付款成功完成后,用户将自动添加到频道中,无需调用messages.importChatInvite加入私有频道。
当前订阅期的结束日期将包含在频道subscription_until_date和starsSubscription中。until_date
订阅将在指定时间自动续订,从用户的星星余额中subscription_until_date扣除星星,并将订阅时间向前推进几秒。amountsubscription_until_dateperiod
如果用户决定在未取消订阅的情况下离开频道(或在当前已取消的订阅期结束前离开),后续对messages.checkChatInvite 的调用将返回一个设置了标志的chatInvitecan_refulfill_subscription,表明他们可以使用payments.fulfillStarsSubscription(将inputPeerSelf传递给`fulfillStarsSubscription`,peer并将starsSubscription传递给`fulfillStarsSubscription`;或者,也可以直接使用messages.importChatInvite)重新加入频道,而无需重复付款;`fulfillStarsSubscription`也会被返回,但不会返回 `fulfillStarsSubscription`。idsubscription_idsubscription_pricingsubscription_form_id
管理员还可以使用messages.getChatInviteImporters,并将subscription_expired标志设置为仅获取所有订阅已过期的用户。
频道管理员还可以在channelParticipant中查看任何用户的当前订阅周期结束日期。subscription_until_date
点击此处»了解更多关于订阅用户如何处理有效订阅的信息。
机器人订阅
invoice#049ee584 flags:# test:flags.0?true name_requested:flags.1?true phone_requested:flags.2?true email_requested:flags.3?true shipping_address_requested:flags.4?true flexible:flags.5?true phone_to_provider:flags.6?true email_to_provider:flags.7?true recurring:flags.9?true currency:string prices:Vector<LabeledPrice> max_tip_amount:flags.8?long suggested_tip_amounts:flags.8?Vector<long> terms_url:flags.10?string subscription_period:flags.11?int = Invoice;starsSubscription#2e6eab1a flags:# canceled:flags.0?true can_refulfill:flags.1?true missing_balance:flags.2?true bot_canceled:flags.7?true id:string peer:Peer until_date:int pricing:StarsSubscriptionPricing chat_invite_hash:flags.3?string title:flags.4?string photo:flags.5?WebDocument invoice_slug:flags.6?string = StarsSubscription;---functions---messages.sendMedia#ac55d9c1 flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true noforwards:flags.14?true update_stickersets_order:flags.15?true invert_media:flags.16?true allow_paid_floodskip:flags.19?true peer:InputPeer reply_to:flags.0?InputReplyTo media:InputMedia message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector<MessageEntity> schedule_date:flags.10?int send_as:flags.13?InputPeer quick_reply_shortcut:flags.17?InputQuickReplyShortcut effect:flags.18?long allow_paid_stars:flags.21?long suggested_post:flags.22?SuggestedPost = Updates;payments.botCancelStarsSubscription#6dfa0622 flags:# restore:flags.0?true user_id:InputUser charge_id:string = Bool;
要创建(并订阅)机器人订阅,请先按照发票链接流程 »进行操作,并指定:
- 订阅价格(以 Telegram Stars 为单位,货币代码为XTR)不得高于配置键中指定的值stars_subscription_amount_max»
- 发票subscription_period标志中的订阅周期(以秒为单位):目前唯一允许的订阅周期为,即用户每月将自动扣除指定数量的星星。30*24*60*60
注意:订阅发票不能使用messages.sendMedia发送,只能使用payments.exportInvoice导出为发票深度链接。
一个机器人可以同时拥有任意数量的有效订阅,包括同一用户同时拥有多个有效订阅。
要订阅机器人服务,只需按照此处所述支付发票即可»。
订阅将每秒自动续订,从用户的星星余额中subscription_period扣除星星,并将订阅的到期日期向前推迟几秒钟。amountperiod
可以通过使用payments.botCancelStarsSubscription 函数并传递以下参数,由机器人取消订阅:
-
restore如果未设置,则会禁用订阅的自动续订,并阻止用户在当前订阅期结束后重新激活订阅:机器人取消的订阅会设置 `starsSubscription`bot_canceled标志。机器人
可以通过设置此标志来部分撤销此操作:这将允许用户重新激活订阅。 - user_id请在此处输入要取消或恢复订阅的用户的 ID。
- charge_id:provider_charge_id将messageActionPaymentSentMe服务发送给机器人的首次订阅付款消息传递到这里。
请参阅此处 »以订阅者身份处理有效订阅的更多信息:与机器人订阅关联的starsSubscriptioninvoice_slug构造函数将设置该标志。
订阅管理
starsSubscriptionPricing#05416d58 period:int amount:long = StarsSubscriptionPricing;starsSubscription#2e6eab1a flags:# canceled:flags.0?true can_refulfill:flags.1?true missing_balance:flags.2?true bot_canceled:flags.7?true id:string peer:Peer until_date:int pricing:StarsSubscriptionPricing chat_invite_hash:flags.3?string title:flags.4?string photo:flags.5?WebDocument invoice_slug:flags.6?string = StarsSubscription;payments.starsStatus#6c9ce8ed flags:# balance:StarsAmount subscriptions:flags.1?Vector<StarsSubscription> subscriptions_next_offset:flags.2?string subscriptions_missing_balance:flags.4?long history:flags.3?Vector<StarsTransaction> next_offset:flags.0?string chats:Vector<Chat> users:Vector<User> = payments.StarsStatus;---functions---payments.getStarsSubscriptions#032512c5 flags:# missing_balance:flags.0?true peer:InputPeer offset:string = payments.StarsStatus; payments.changeStarsSubscription#c7770878 flags:# peer:InputPeer subscription_id:string canceled:flags.0?Bool = Bool; payments.getStarsTransactions#69da4557 flags:# inbound:flags.0?true outbound:flags.1?true ascending:flags.2?true ton:flags.4?true subscription_id:flags.3?string peer:InputPeer offset:string limit:int = payments.StarsStatus;
要获取所有活跃和已取消订阅的列表,请调用payments.getStarsSubscriptions,并将inputPeerSelf传递给它peer:这将返回一个starsSubscription构造函数的向量,其中包含有关每个订阅的信息。
要取消有效订阅,请调用payments.changeStarsSubscription,并将inputPeerSelf传递给peer`$($($($($($($($($($($($($($)...idsubscription_idcanceledcanceled
当一个或多个有效订阅即将到期,且当前 Telegram Star 余额不足以自动续订至少一个订阅时,“STARS_SUBSCRIPTION_LOW_BALANCE”建议将被激活:当用户点击此建议时,客户端应通过调用`payments.getStarsSubscriptions`并传入 `inputPeerSelf` 参数,设置`stars_SUBSCRIPTION_LOW_BALANCE`peer标志来获取并显示即将到期的订阅列表:用户可以通过向当前 Telegram Star 余额充值至少`payments.starsStatus`missing_balance来续订返回的订阅。subscriptions_missing_balance
payments.getStarsTransactions可以通过填充标志来获取特定订阅的所有交易subscription_id。